Releases: archlinux/archinstall
v2.4.0.RC2
ℹ️ Changes up until: 7f0ccbe
Breaking Changes
archinstall.SysCommand*
now properly raises exceptions when exit codes are bad. This used to go by unnoticed in some cases, which caused silent errors. The flip-side to this is that it may now be overly aggressive and cause breakage at certain points. In which case the call itself should be wrapped around a catch block. As an example:Should now be:if (result := archinstall.SysCommand("ls --breaking-arguments")).exit_code != 0
This avoids the risk of calls silently passing errors.try: result = archinstall.SysCommand("ls --breaking-arguments") except SysCallError as error: if error.exit_code != 0:
- archinstall/lib/models/network_configuration.py has been added to more strictly handle different data classes, instead of dictionaries. More models will be added and have been added, but will move under
models/
in a near future. archinstall.Filesystem().load_layout()
now looks for the keyword"wipe": True
and not"format": True
. This is to avoid confusion as to what the menu alternatives does, for instance "mark partition for wiping" as well as avoid mixing up the format options like"filesystem"
and other options during formatting.archinstall.find_package()
now returns a data class to make it easier to detect upstream changes during normal operation. If pydantic ever becomes a built-in, we'll use that instead. (This change affectsarchinstall.find_packages()
as well)archinstall.lib.packages.py
has been split and moved into/lib/packages/*.py
(exposed the same way, so should not cause any issues)python -m archinstall
now includes a loader to look for archinstall in./
for testing. This may or may not cause confusion or path issues that we haven't found yet. That also means that if you execute the modules with a folder called./archinstall
that will have priority over any installed library viapip
orpacman
(this is to prioritize testing)archinstall.generic_multi_select
andarchinstall.generic_select
now uses the new menu system. Return values should remain the same.- (Potentially breaking change)
ConfigurationOutput
has been added in archinstall/lib/configuration.py to deal with configuration aspects of archinstall. It's in charge of showing, storing and loading different configurations in one place. Previously this was done by guided, and then__init__.py
for a brief moment. archinstall.all_disks
have been renamed toarchinstall.all_blockdevices
(an alias still exists, but is deprecated)archinstall.all_disks
archinstall.all_blockdevices
no longer relies onlsblk
for information, instead a combination of/sys/class/block/*
andblkid
is used.archinstall.all_disks
archinstall.all_blockdevices
now returns dataclasses for the objects, rather than dictionary/string objects. This will be a significant change for anyone dealing with block devices manually before.archinstall.Installer().configure_nic
now takes aNetworkConfiguration
data class structure. This will only be an issue if you've manually created installation steps and configured network manually, this will have no effect on the guided installer.
Note thatnic
in theuser_configuration.json
has changed to reflect the above change.- archinstall/lib/user_interaction.py has been split into multiple files as it outgrew it's simple purpose. It now lives in archinstall/lib/user_interaction/init.py and it's subdirectory, imports should work the same, but might cause some breakage here and there. Breakage should be considered a bug and we've probably just missed one import somewhere to expose the different calls. Please do report these.
New Features
- A completely new menu system (still accessibility friendly) using simple-term-menu as the base (bundled with this source to avoid external dependencies. A big thank you to Ingo Meyer and his employer at the time):
A enormous thank you to @wllacer and @svartkanin who's put in more than 1200 lines of code to get this working nicely. - Localization/Translation options for all archinstall output (Currently
us
,es
andse
is available). To contribute please read the translation contribution README - Introduction of pytest test cases for a lot of the code
archinstall.package_search()
was added to streamline the package search into one place, and move the logic for parsing the results intofind_package()
instead.archinstall.Installer().minimal_installation
now has two new flags,testing=False
andmultilib=False
.archinstall.Installer()
now has a new function.enable_multilib_repository()
which enables multilib in the pacman conf.archinstall.Installer()
now has a new function.enable_testing_repositories()
which enables testing repos in the pacman conf.
- Created
archinstall.load_config()
andarchinstall.save_config()
functions for loading and saving configurations, instead of having it in guided. This should allow people to seamlessly load configurations and save it through the "archinstall" format. No need to create your own format and configurations unless you want to. Arguments are always initialized througharchinstall.storage['arguments']
but this should allow for processing configurations through--conf
independent of guided. archinstall.post_process_arguments()
has been added and will be execute after loading of configurations. This cleans up any arguments and converts it to proper archinstall structures.- The
.uuid
property ofarchinstall.Partition()
andarchinstall.BlockDevice()
now usesblkid
instead oflsblk
, which should improve reliability and stability when used together withpartprobe
. - Improvements to the BTRFS handling has been made, namely allowing for more complex layouts. Among those things are also the option for
compression
andnodatacow
. - Partitions now has a "bind name" definition to deal with BTRFS "virtual" namespace.
archinstall.split_bind_name()
can split partition representations into traditional/dev/x
and@/
. archinstall.Partition().end_sectors
has been added to give the sector at which the partition ends,.size
now useslsblk
to return the size.archinstall.Partition().device_path
now returns/dev/x
even if the partition has a logical namespace attached to it.archinstall.Partition().bind_name
has been added to get the logical namespace for a partitionarchinstall.Partition().partprobe
now only calls partprobe on the partition itself, rather than system wide.archinstall.Partition().format()
now homogenize the name of the filesystem to format so thatvfat
andfat32
are treated equally for instance.archinstall.Partition().mount()
now handles BTRFS virtual namespaces by checking the.bind_name
property and adds the corresponding mount options required.archinstall.SysCommand*
now escapesVT100
escape codes by default on the output when iterating over the result output.- Multiple partitions now store a
key-file
for each partition, but not for multiple subvolumes using the same luks volume. archinstall.Installer()
now keeps track of which packages have been installed.archinstall.minimal_installation()
now enables periorid trim by defaultarchinstall.add_bootloader()
now sets--removable
for GRUB on UEFI to try and eliminate some oddities where EFI wouldn't boot the GRUB setup.archinstall.SysCommand*
now allows to override system locales. By defaulten_US
locale will be set. But this could be useful for overriding locales and get output in another language. Keep in mind that output matching (if b'example' in SysCommand("ssh @x")
would need to be localized from 'example' to for instance 'exempel' in swedish if you overrideen_US
)archinstall.list_installed_locales()
has been added to list the available localesarchinstall.list_timezones()
has been added to show available time-zones usingtimedatectl
as the source of trutharchinstall.update_keyring()
has been added as a specific call to make it clear what we're doing in guided. Guided will now attempt update the keyring if it's out of date. This function is deprecated upon release and will be removed once stability toarchlinux-keyring
can be guaranteed. (Upstream is tracking this in a private issue https://gitlab.archlinux.org/archlinux/archlinux-keyring/-/issues/4)- Examples have been created for
--disk_layouts
,--creds
and--conf
. Since they are now split into separate files to comply with security concerns when sharing user configurations publicly. This makes supporting easier, and multiple machine setups easier as they c...
v2.3.3
v2.3.3-RC1
v2.3.2
Bug fixes:
- Fixed a critical issue where if manual partitioning was performed, and the harddrive(s) selected had multiple partitions - and a disk encryption password was given afterwards, all partitions would get encrypted regardless of usage (which would encrypt prior data on other partitions in play by the harddrive selection). Multi-disk setups where only one drive was selected was fine for instance, but selecting both to re-use
/boot
would cause issues. #998 - Fixed an issue where new partitions did not show up, because there was no GPT/MBR partition table on clean disks, this should fix #813
v2.3.1
Breaking Changes
There should be no breaking changes. But btrfs support is still in early shape so some layouts might still not be "supported".
But do note that some errors that went silently by before, now raises exceptions. Such as archinstall.Filesystem().partprobe()
.
Deprecated features
/home
will be changed for next release, and instead of being set toMIN_SIZE_TO_ALLOW_HOME_PART
it will be a user question that users can opt-in rather than us pushing it as a best practice. It was after reports that this was a desired behavior that we introduced it. But it's caused more trouble than it's worth. So anyone who wants a separate/home
in the future will be asked so. Or they can doarchinstall --dry-run
to generate a/var/log/archinstall/user_disk_layouts.json
and modify it to add a/home
volume.
For this version tho, we've increased the/
volumes to40 GiB
to make it a bit more spacious.
New features
- Default timeout in
systemd-boot
has changed from 5 to 15 seconds. - BTRFS subvolume default layout has changed to something that hopefully works with snapper/timeshift (not tested, but in theory should worK):
"@": "/", "@home": "/home", "@log": "/var/log", "@pkg": "/var/cache/pacman/pkg", "@.snapshots": "/.snapshots"
archinstall.Installer()
now keeps track of which packages have been installed witharchinstall.Installer().pacstrap()
in the variablearchinstall.Installer().installed_packages
.archinstall.Installer().add_user()
now calls a new plugin hook calledplugin.on_user_created(self, user)
. This is used by the Application profilepipewire
to enable user servicespipewire-pulse.service
andpipewire-media-session.service
for new users.- Application profile pipewire has been added.
- only_hd example was added, to be used in testing but also as an example of how to use archinstall to only perform disk operations.
@archinstall.plugin
decorator has been added to support code to define plugins in-runtime. (used by the pipewire application profile. It's a bit rudimentary at the moment, this will be changed in coming versions)mountpoint
will not be set, even for/
or/home
if using subvolumes. This is because subvolumes have precedence in this release as we've changed the default layout to support a@
entry.
Bug fixes
- btrfs subvolumes now get properly mounted recursively.
GRUB
got--removable
added as a parameter to support UEFI.- Users and Superuser questions should now properly be asked even if a root password was set. In the future, the menu system is re-worked (scheduled for
v2.4.0
), so this will work even better. But for now we only patched this behavior. archinstall.Installer()
now callsself.mkinitcpio('-P')
upon exit, so that any changes done during installation by packages, profiles or plugins now get generated as a last step, right aftergenfstab
.archinstall.Installer().mount_ordered_layout()
now deals with btrfs subvolumes in a more complex manner to support the new above default layout.archinstall.Boot()
now properly shuts down aftershutdown
was sent to the temporary boot of the installation session.save_user_configurations()
was added in the guided installer to properly save user configurations during--dry-run
. Only partial configurations was saved before.archinstall.Installer().add_bootloader()
now supports subvolumes properly.- Swapped
lsblk
forblkid
asblkid
behaves more as we expect in junction with partprobe. It seamslsblk
doesn't wait/understand/care about the kernel updating it's internal cache and will return "results" immediately. We haven't found a way around that, so we swapped toblkid
which appears to be able to detect and wait for kernel changes before returning results *(the delay here is <0.1 seconds, but enough to cause issues such as #813 and #885 - Improved uuid comparison by making sure they're compared fairly by using
.lower()
on both the real UUID and the asked for UUID for proper comparison. Which addresses #885 archinstall.manage_btrfs_subvolumes
was introduced as a means to fixing the somewhat rudimentary btrfs support. This allows us to more properly support crazy btrfs subvolumes. See some (not to be used in production) examples here: #637, #787 & #838archinstall.Filesystem().partuuid_to_index()
now has an incremental time delay for each time it does not find the requestedPARTUUID
. And it also usesblkid
for the actualPARTUUID
lookup.archinstall.Filesystem().partprobe()
now only calls partprobe on itself, not the entire collection of blockdevices. It also raises an exception if it could not (such as on loop devices some times).archinstall.Filesystem().add_partition()
now raises an exception if it could not add the partition instead of silently continuing. This was mainly caused by.partprobe()
silently passing by, butadd_partition()
did not have an exception handling either so. That is addressed now. This should also fix #885archinstall.get_mount_info()
will now properly set aBlockDevice()
for eachPartition()
object, which should correspond to the partition path. For instance/dev/sda1
will have a BD of/dev/sda
. And/dev/mapper/luksdev
will have/dev/sda
as well if it resides there.archinstall.partprobe()
(the overall generally exposed function, not the same inFilesystem()
) got a five second sleep put to it to avoid issues wherepartprobe()
would tell the kernel to update it's partition cache but immediately release and subsequent commands relying on the information wouldn't be able to find it.archinstall.Partition().size
no longer reports back a size for loop-devices, mainly becauselsblk
can't reliably return the data and returns a high exit code instead.archinstall.Partition().uuid
now usesself._safe_uuid
instead which usesblkid
for the same reasons as above. Also has an incremental timeout for each retry if it cannot return thePARTUUID
.archinstall.Partition().device_path
now supports btrfs subvolume partitions by splitting out the btrfs subvolume name before returning the device path.archinstall.Partition().bind_name
returns the btrfs subvolume bind name, for instance@home
archinstall.Partition().partprobe()
was introduced to call partprobe on the partition and only the partition. Also has a one second sleep on success to avoid subsequent calls to possibly have partial data for the same reasons as above.archinstall.Partition().format()
now unifies partition names likefat32 -> vfat
andntfs -> ntfs3
. This addresses #834archinstall.Partition().mount()
now handles btrfs subvolumes seamlessly by settingsubvol=X
as mount options./var/log/archinstall/cmd_output.txt
has been added to be able to grab cmd output after the fact.archinstall.Installer()
now setsstorage['installation_session']
to itself upon every initation.- A internal
sed
call has changed froms/x/y/
tos%x%y%
to avoid issues with subvolume paths containing/
- The
postgresql
Application profile now usesrun_as
instead ofrunas
(spelling error caused the profile to break) - The
xorg
profile now properly setsamdgpu
before theradeon
modules when generating a new initramfs.
v2.3.1-RC1
Breaking changes:
There should be no breaking changes in this patch release.
New features
- Added a
mkinitcpio -P
at the end ofInstaller()
, which should catch any late installation changes to kernel modules and binaries etc. - btrfs support has been improved, and more complex layouts should be supported. (See details in #787)
- A separate
/home
partition will now be created only if drives are above 60GB, and/
has been increased to40GB
to cope with desktop environments. A discussion has been started to remove/home
or hide it behind a user-question, as it creates more issues than it's worth trying to set up a separate/home
partition that fits everyone's needs and sizes. - Added a
/var/log/archinstall/cmd_output.txt
for complete command history output.
Bug fixes
- Fixed one remaining issue tied to PARTUUID.
- Fixed a bug that could cause sorting partitions to fail if they did not have a mountpoint
- Fixed a bug where "what do you want to do with the selected drives?" would come up despite no hard drives being selected.
- Fixed a bug where creating a user option would be skipped if a root password was set
- Fixed
amdgpu
kernel parameters, made it soamdgpu
is loaded beforeradeon
(none were previous loaded)
v2.3.0
This new release of archinstall addresses the many issues raised by the community.
We would like to thank every single one who submitted issues, gave feedback and most importantly suggested or contributed to solutions to all these issues.
This is by no means a perfect release, a lot of work remains ahead. But we believe this is a step in the right direction with both accessibility improvements as well as stability and some security enhancements for the guided template that we ship. Below is a list of all the changes since the previous version, and we will begin with the breaking changes to highlight those.
Breaking changes
Filesystem()
's context manager (usingwith Filesystem()
) no longer wipes the disk on entry, it no longer detects or handles differences in partition table vs expected partition table format (gpt vs mbr), instead those operations have moved to individual functions, see below in theFilesystem
header as well as theInstaller
header, where mount logic has moved to.- Going from
*
imports to targeted imports. This should not cause issues, but if there's any API call not available do let us know. BlockDevice().json()
now only returns the string representation of path to the blockdevice ("/dev/sda"
for instance)BlockDevice().__dump__()
has one additional dimension to the JSON dictionary, where it represent itself as"/dev/sda" : {"info": "value"}
rather than a flat structure.BlockDevice().device_or_backfile
now return the backfile when the device is a loopdevice,BlockDevice().device
still returns limited information of the type (raid, crypt and others).Partition().size
is now a read-only value and the parameterPartition(size=X)
has hence been removedPartition().allow_formatting
has been removed/deprecated, this is handled via direct function calls instead of automatically wiping a partition.Partition().safe_to_format()
has been deprecated and removed since no automatic formatting or changes are done. Any destructive changes has to be explicitly called, and there for that is the safeguard instead.Partition().format()
no longer has the argumentallow_formatting
as it's implicitly set whenever the function is called. This means that "testing" which file systems are supported is no longer supported, but instead we have a curated list of supported file systems that can be used.Partition().format()
no longer uses the nomenclaturevfat
for thefilesystem
argument, insteadfat32
is used. This to better reflect themount
call later wherefat32
is specified and better reflectsman parted
's expectations.archinstall.JSON
serializer now correctly removes any key in a dictionary that starts with!
, for instance"!password" : "moo"
will get filtered out. To serialize a structure without loosing values, usearchinstall.UNSAFE_JSON
which is unsafe to use unless you know what you're doing.- The
gfx_driver
argument in profiles etc no longer has supported forNvidia
, and instead of using sub-menu's under theNvidia
category there is now two top level choices of eitherNvidia (open-source)
andNvidia (proprietary)
. They both do the same as before, just on a top level of choices and as a single argument in JSON configurations/profiles. - The default installation mountpoint is no longer
/mnt
but instead/mnt/archinstall
- Disk layout and configuration has moved from
user_configuration.json
intouser_disk_layouts.json
(It's still supported for as long as possible to define these inuser_configuration.json
for backwards compatibility reasons) - User credentials have moved from
user_configuration.json
intouser_credentials.json
(It's still supported for as long as possible to define these inuser_configuration.json
for backwards compatibility reasons) - Keywords in the JSON configuration has changed in the guided installer:
keyboard-language
has been re-named tokeyboard-layout
harddrive
has been re-named toharddrives
(and changed structure)disk_layouts
have been added and replacesharddrives
partiallyusers
have changed to!users
superusers
have changed to!superusers
Highlighted new features
- GRUB and Disk Encryption now properly works.
- BTRFS subvolumes (very early beta feature, hence some limitations for initial tests. Supports only a nested structure and some issues are known with this approach)
- Archinstall now detects if
espeakup.service
is active on the installation ISO and copies the setup over to the installed medium automatically. - Now supports multiple encrypted volumes (slightly limited, it's either on or off, but multiple partitions will be encrypted). All encrypted partitions are protected by the passphrase as usual and stored in key-slot 0, bu every partition that is not the root partition will also have a computer generated passphrase stored on the root device under
/dev/cryptsetup-keys.d/
and that passphrase is stored in key-slot 1 on the partition. It's a unique passphrase per volume. - More reliable disk operations (partitioning, encryption and mounting)
- A rudimentary plugin-support, allowing users to create their own plugins. There are four ways of activating the plugin support, either via
--plugin=url|location
, via en entry in--config
as{"plugin": "url|location"}
or via the API callarchinstall.load_plugin()
or finally viapip install yourplugin
assuming that the plugin registers itself via Pythons builtin entry-point system asarchinstall.plugin
. These plugins are triggered/called at various points in the installation and more documentation on this specific will come and be continuously updated. One such step isarchinstall.pacstrap()
which callson_pacstrap(package_list)
in the plugin and the return value should be a curated list of packages, this enables for instance custom plugins to be written and deal with for instance AUR packages and deal with the custom operations needed and filter out those packages from the rest of the install process, leaving only official packages to be dealt with by the official installation process. (again, just an example). - swap has been added into the mix using zram and zram-generator.
- Manual partitioning has been re-worked (but released partially unfinished, the reason being it was impossible to release this version where this specific change was removed - as it's so intertwined with everything else that's been re-worked)
Detailed changelog
Parameters
- More static arguments have been added to the initialization making for a more traditional argument parsing of known arguments.
--creds
is a new argument that take the previous"users"
,"superusers"
and"root-password"
keys & values, this allows for separation of JSON machine configuration and user credentials which might want to be stored separately for security reasons.--disk_layouts
is a new argument that takes the previous structure of"harddrive"
which later was renamed"harddrives"
. The old JSON structure of"harddrives"
still remains in the--config
input as an indicator of which harddrives to use and find from--disk_layouts
.--dry-run
has been added, which will abort before any changes are made on hardware. This allows for generating a configuration file which can then be passed to either of--config
,--creds
and--disk_layouts
.--mount-point
has been added to enable choosing where the installed system gets mounted during installation/configuration.--plugin
has been added for loading external archinstall plugins via parameter.
Library changes
archinstall/lib/disk.py
has been split up intoarchinstall/lib/disk/*.py
since it grew out of hand. The exposure of API calls should remain the same as they're exposed via__init__.py
, but for contributors this change is worth noting when finding functions and files.- Going from
*
imports to targeted imports. This should not cause issues, but if there's any API call not available do let us know.
General changes
- A dummy
epoll()
has been added in order to be able to run certain tests on Windows, for instance "reach mirror"-tests etc without causing import issues. archinstall.generate_password(length)
has been added to generate a rudimentary password for disk encryption and other things. This using thesecrets
library andstring.printable
as a haystack.archinstall.json_dumps(*args, **kwargs)
performs a safejson.dumps()
call using thearchinstall.JSON
serializerarchinstall.UNSAFE_JSON()
has been added to serialize JSON structures without consideration of private information.archinstall.SysCommandWorker()
now outputs the stdout as-is, without any attempt to make it pretty.archinstall.SysCommandWorker()
(and in extension, evenSysCommand()
) now logs all commands executed under/var/log/archinstall/cmd_history.txt
for easier debugging and learning which commands we executed. Currently we don't filter anything, so there will be a lot of spam fromparted()
calls andlsblk
multiple times "for no reason".archinstall.SysCommand()
has support for retrieving slices usingSysCommand("ls")[:10]
for instance, where the output generated by the internalSysCommandWorker()
call will be simplified into retrieving the final output and only the first 10 bytes in this example.archinstall.cpuinfo()
has been created to return CPU information from/proc/cpuinfo
i...
v2.3.0.RC2
Highlighted features:
- BTRFS subvolumes (limited functionality on this first release, still in beta and very niche usecases)
- Re-worked partitioning
- systemd-timesyncd instead of ntpd
A more detailed inventory of changes will be put up on the release day, the list is a bit long
Known issues:
Encryption with GRUB still broken(Fixed in this RC2 release)Occasional .format() glitch during partitioning, see #689(Fixed in this RC2 release)- Multi-disk layouts are incomplete, please submit feedback here or on discord even if we know this is an issue
General discussions are welcome in #692
v2.3.0.RC1
Highlighted features:
- BTRFS subvolumes (limited functionality on this first release)
- Re-worked partitioning
systemd-timesyncd
instead ofntpd
Known issues:
- Encryption with GRUB still broken
- Occasional
.format()
glitch during partitioning, see #689 (please submit logs in that issue if this happens) - Multi-disk layouts are incomplete with BTRFS, please submit feedback here or on discord even if we know this is an issue
v2.2.0
Known Issues:
- Partitioning still has issues with certain layouts. Workaround: Manually creating partitions and selecting "use /mnt as is" or "Re-use partitions" (after a valid file system was created on the manually created partitions) will solve most issues. Wiping the desired drive before running archinstall is also a workaround for now but remember to backup your data! Work is already underway to correct this, but will not make it in time for this release, follow the progress here: #426
- Dual-Boot with Windows works, but there's an issue with Windows creating a very small
/boot
partition which causes issues, please track the progress here: #527 - #536: The output from
pacman
(viapacstrap
also) looks broken/corrupt/garbage - This is a cosmetic issue only, and installs work fine. Will be fixed!
Top New Features
- Archinstall now supports
GRUB
as a secondary boot loader. It's still experimental, so any issues would be appreciated if they got reported. - Moved the IRC channel from FreeNode to LiberaChat
archinstall.Installer()
(and subsequently the guided installer) now supports selecting kernelsarchinstall.Installer()
now supports modifying kernel parameters and othermkinitcpio
related stuffarchinstall.Installer().pacstrap()
now shows a "progress bar" of what's going on- Archinstall now features a multi-selection mode thanks to
archinstall.generic_multi_select()
- which will help users select multiple options. We've begun by allowing for selecting multiple kernels, but in the future more options that support multiple choices, such as multiple mirror selection will be introduced. - Archinstall supports loading configuration from a JSON file, if you wish to re-use a setup. We also ship a example JSON file, (warning: It does use
/dev/sda
in the example). The JSON structure that is shown on screen during installation and in/var/log/archinstall/install.log
is valid configuration and can be re-used. There's also an example with additional custom commands that we support in the--config
structure, which isn't produced by the guided installer log output. - The guided installer now allows you to optionally activate
NTP
if a time-zone was specified - A very rudimentary
runas
has been added toarchinstall.Installer().arch_chroot()
, beware that a any quotations might break this function call as it's experimental for now. There is also no error checks if the user you try to run exists or not, so make sure to create the user first. Future improvements will be made here. archinstall.Installer().mkinitcpio()
has been added, which can be called after modifications toInstaller().MODULES
or.HOOKS
have been made.archinstall.Installer().minimal_installation()
now intalls Intel and AMDucode
binaries by default.- Archinstall's guided installer now has a
--advanced
flag, which will allow you to unlock certain additional configuration questions, such as system language. (because how the/etc/locale.conf
andlocalectl list-locales
work, there's no way to get the full list of supports locales, so you will have to know which locale to write in order for this to work, hence the--advanced
flag requirement) - Keyboard map selection now translates in to
X11
-desktops as well. This thanks to #147 (comment) (We've moved tolocalectl
for setting locales, which vastly improves reliability but also locks us into systemd more than ever) - Archinstall will now identify as
ArchInstall
for most of it's web requests, such as getting the mirror-list and similar activities. archinstall.check_mirror_reachable()
has been added to detect if we have a reliable connection to the configured mirrors (locally or remote)archinstall.Boot(<Installer() instance>)
has been added, which can temporally boot up the new installation without having to re-boot from the ISO installation medium. A use case can be where you would need to communicate with systemd to set certain configuration parameters, or communicate via dbus to services etc. As an example, this is how it could be used:
with Boot(archinstall.Installer("/mnt")) as session:
session.SysCommand(["localectl", "set-keymap", '""'])
General Guided installation changes
- Archinstall's guided installer will only execute if run as root
--help
was added, which simply points toman archinstall
- Can now be run in EFI and BIOS mode.
- The
--advanced
flag was added, to unlock certain options that require more experienced users- Currently only
--sys-language
and--sys-encoding
is unlocked/hidden from the general view
- Currently only
--filesystem
flag now works properly to skip the file system question- It now asks for a default boot-loader if EFI was detected, in BIOS mode it defaults to GRUB
- Multiple kernel selection has been added (mentioned above as well)
NTP
option has been added after time-zone selection- Keyboard layout selection has been stabilized
--services
flag/option has been added--custom-commands
flag/option have been added--silent
flag has been added, which mutes the"Would you like to chroot into" question at the end as well as other user inputs. This requires a
--config` to be given in the place of asking the user for questions.
New Profiles
- server (lets you select multiple server-category application profiles)
- deepin
- enlightenment
- sway
Profile changes
- i3 has an updated package list, which now includes
lightdm-gtk-greeter
,lightdm
anddmenu
- (Breaking Change) Most desktop applications which has little to no additional configuration other than installing packages, have now had it's
profiles/application/<profile>.py
removed, and the contents have moved in to theprofiles/<profile>.py
instead. Since it was just one additional call for "no reason".
New Application Profiles
Keep in mind that these are only accessibly if you script your own installations or to some extent select the server profile above, they are outside of the scope of the guided installer in general
- Cockpit
- docker
- httpd (apache)
- lighttpd (v1.0)
- mariadb
- nginx
- postgresql
- sshd
- tomcat
General API Changes
- With the previous change, we also introduce loading configuration from a JSON file with
--config <config_path.json>
, this configuration equals the same structure you see before the installation begins, which means you can re-use a configuration and inject it with--config
. - (Breaking Change) The magic global variable
installation
has been removed effect of immediately, instead,archinstall.storage["installation_session"]
is created wheneverarchinstall.Installer()
is instantiated. This is to make it less mysterious and keeping it simple - as well as satisfy the linters which produced over 400 errors because of this alone. - (Breaking Change) Just like
installation
moved, so hasgfx_driver_packages
which is nowarchinstall.storage["gfx_driver_packages"]
- (Breaking Change) A lot of function names have been re-named in order to facilitate some stricter PEP-8 syntaxes, this in order to make linters happier and produce less errors.
archinstall.sys_command()
->archinstall.SysCommand()
(This function has also been re-worked from the ground up as well, but should be backwards compatible, any issues of incompatibility should be reported)JSON_Encoder
->JsonEncoder
hasUEFI
->has_uefi
hasWifi
->has_wifi
graphicsDevices
->graphics_devices
hasNvidiaGraphics
->has_nvidia_graphics
hasAmdGraphics
->has_amd_graphics
hasIntelGraphics
->has_intel_graphics
archinstall.Installer().copy_ISO_network_config
->archinstall.Installer().copy_iso_network_config
archinstall.getHwAddr
->archinstall.get_hw_addr
archinstall.enrichIfaceTypes
->archinstall.enrich_iface_types
archinstall.wirelessScan
->archinstall.wireless_scan
archinstall.GetWirelessNetworks
->archinstall.get_wireless_networks
archinstall.
->archinstall.
archinstall.
->archinstall.
- (Deprecated)
archinstall.LOG_LEVELS
have been deprecated, instead, normallogging.<level>
can be used. Next version will remove these old level definitions permanently. archinstall.Partition().mount()
now supports passing down mount options when called viaoptions=<string with mount flags>
archinstall.Filesystem(mode=<archinstall.GPT|archinstall.MBR>)
now supportsMBR
, allowing for older hardware to be used. This is still some what experimental, andarchinstall.Filesystem().use_entire_disk()
will honorGPT
if UEFI is detected but fall back onMBR
if EFI vars isn't present. Use manual formatting if you want to override and useMBR
on EFI compliant hardware.archinstall.disk_layouts()
have been added as a helper function to get an overview of the partition layout at any given moment. This function is called before and after an installation and added to the logs for easier support. If you wish to hide any disk information from the logs, make sure to remove this if you do not wish to expose your total disk setup. Only the disk SIZE and TYPE are added to the logs other than the identifiers themselves.locate_binary()
now rais...