Skip to content

Releases: archlinux/archinstall

v2.4.0.RC2

29 Mar 08:41
v2.4.0.rc2
7f0ccbe
Compare
Choose a tag to compare
v2.4.0.RC2 Pre-release
Pre-release

ℹ️ 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:
    if (result := archinstall.SysCommand("ls --breaking-arguments")).exit_code != 0
    Should now be:
    try:
        result = archinstall.SysCommand("ls --breaking-arguments")
    except SysCallError as error:
        if error.exit_code != 0:
    This avoids the risk of calls silently passing errors.
  • 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 affects archinstall.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 via pip or pacman (this is to prioritize testing)
  • archinstall.generic_multi_select and archinstall.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 to archinstall.all_blockdevices (an alias still exists, but is deprecated)
  • archinstall.all_disks archinstall.all_blockdevices no longer relies on lsblk for information, instead a combination of /sys/class/block/* and blkid 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 a NetworkConfiguration 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 that nic in the user_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):
    screenshot
    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 and se 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 into find_package() instead.
  • archinstall.Installer().minimal_installation now has two new flags, testing=False and multilib=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() and archinstall.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 through archinstall.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 of archinstall.Partition() and archinstall.BlockDevice() now uses blkid instead of lsblk, which should improve reliability and stability when used together with partprobe.
  • Improvements to the BTRFS handling has been made, namely allowing for more complex layouts. Among those things are also the option for compression and nodatacow.
  • 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 uses lsblk 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 partition
  • archinstall.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 that vfat and fat32 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 escapes VT100 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 default
  • archinstall.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 default en_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 override en_US)
  • archinstall.list_installed_locales() has been added to list the available locales
  • archinstall.list_timezones() has been added to show available time-zones using timedatectl as the source of truth
  • archinstall.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 to archlinux-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...
Read more

v2.3.3

28 Mar 07:09
v2.3.3
176db6c
Compare
Choose a tag to compare

Bug Fixes

  • Fixes #1031 which was introduced in v2.3.2 to combat #998
  • --help not showing --disk-layouts and partially incorrect handling of the argument has been fixed.

v2.3.3-RC1

17 Mar 08:44
v2.3.3-RC1
a4943d1
Compare
Choose a tag to compare
v2.3.3-RC1 Pre-release
Pre-release

Bug Fixes

  • Fixes #1031 which was introduced in v2.3.2 to combat #998

v2.3.2

28 Feb 13:24
Compare
Choose a tag to compare

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

26 Jan 22:43
v2.3.1
aa3b79c
Compare
Choose a tag to compare

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 to MIN_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 do archinstall --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 to 40 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 with archinstall.Installer().pacstrap() in the variable archinstall.Installer().installed_packages.
  • archinstall.Installer().add_user() now calls a new plugin hook called plugin.on_user_created(self, user). This is used by the Application profile pipewire to enable user services pipewire-pulse.service and pipewire-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 calls self.mkinitcpio('-P') upon exit, so that any changes done during installation by packages, profiles or plugins now get generated as a last step, right after genfstab.
  • 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 after shutdown 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 for blkid as blkid behaves more as we expect in junction with partprobe. It seams lsblk 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 to blkid 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 & #838
  • archinstall.Filesystem().partuuid_to_index() now has an incremental time delay for each time it does not find the requested PARTUUID. And it also uses blkid for the actual PARTUUID 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, but add_partition() did not have an exception handling either so. That is addressed now. This should also fix #885
  • archinstall.get_mount_info() will now properly set a BlockDevice() for each Partition() 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 in Filesystem()) got a five second sleep put to it to avoid issues where partprobe() 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 because lsblk can't reliably return the data and returns a high exit code instead.
  • archinstall.Partition().uuid now uses self._safe_uuid instead which uses blkid for the same reasons as above. Also has an incremental timeout for each retry if it cannot return the PARTUUID.
  • 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 like fat32 -> vfat and ntfs -> ntfs3. This addresses #834
  • archinstall.Partition().mount() now handles btrfs subvolumes seamlessly by setting subvol=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 sets storage['installation_session'] to itself upon every initation.
  • A internal sed call has changed from s/x/y/ to s%x%y% to avoid issues with subvolume paths containing /
  • The postgresql Application profile now uses run_as instead of runas (spelling error caused the profile to break)
  • The xorg profile now properly sets amdgpu before the radeon modules when generating a new initramfs.

v2.3.1-RC1

31 Dec 15:37
v2.3.1-rc1
Compare
Choose a tag to compare
v2.3.1-RC1 Pre-release
Pre-release

Breaking changes:

There should be no breaking changes in this patch release.

New features

  • Added a mkinitcpio -P at the end of Installer(), 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 to 40GB 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 so amdgpu is loaded before radeon (none were previous loaded)

v2.3.0

24 Nov 21:32
v2.3.0
c4ba14e
Compare
Choose a tag to compare

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 (using with 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 the Filesystem header as well as the Installer 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 parameter Partition(size=X) has hence been removed
  • Partition().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 argument allow_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 nomenclature vfat for the filesystem argument, instead fat32 is used. This to better reflect the mount call later where fat32 is specified and better reflects man 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, use archinstall.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 for Nvidia, and instead of using sub-menu's under the Nvidia category there is now two top level choices of either Nvidia (open-source) and Nvidia (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 into user_disk_layouts.json
    (It's still supported for as long as possible to define these in user_configuration.json for backwards compatibility reasons)
  • User credentials have moved from user_configuration.json into user_credentials.json
    (It's still supported for as long as possible to define these in user_configuration.json for backwards compatibility reasons)
  • Keywords in the JSON configuration has changed in the guided installer:
    • keyboard-language has been re-named to keyboard-layout
    • harddrive has been re-named to harddrives (and changed structure)
    • disk_layouts have been added and replaces harddrives partially
    • users 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 call archinstall.load_plugin() or finally via pip install yourplugin assuming that the plugin registers itself via Pythons builtin entry-point system as archinstall.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 is archinstall.pacstrap() which calls on_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 into archinstall/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 the secrets library and string.printable as a haystack.
  • archinstall.json_dumps(*args, **kwargs) performs a safe json.dumps() call using the archinstall.JSON serializer
  • archinstall.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, even SysCommand()) 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 from parted() calls and lsblk multiple times "for no reason".
  • archinstall.SysCommand() has support for retrieving slices using SysCommand("ls")[:10] for instance, where the output generated by the internal SysCommandWorker() 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...
Read more

v2.3.0.RC2

18 Nov 21:48
v2.3.0.RC2
5ec690d
Compare
Choose a tag to compare
v2.3.0.RC2 Pre-release
Pre-release

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

07 Nov 12:03
v2.3.0.RC1
565464c
Compare
Choose a tag to compare
v2.3.0.RC1 Pre-release
Pre-release

Highlighted features:

  • BTRFS subvolumes (limited functionality on this first release)
  • Re-worked partitioning
  • systemd-timesyncd instead of ntpd

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

28 May 06:56
v2.2.0
595bd65
Compare
Choose a tag to compare

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 (via pacstrap 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 kernels
  • archinstall.Installer() now supports modifying kernel parameters and other mkinitcpio related stuff
  • archinstall.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 to archinstall.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 to Installer().MODULES or .HOOKS have been made.
  • archinstall.Installer().minimal_installation() now intalls Intel and AMD ucode 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 and localectl 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 to localectl 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 to man 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
  • --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 and dmenu
  • (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 the profiles/<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 whenever archinstall.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 has gfx_driver_packages which is now archinstall.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, normal logging.<level> can be used. Next version will remove these old level definitions permanently.
  • archinstall.Partition().mount() now supports passing down mount options when called via options=<string with mount flags>
  • archinstall.Filesystem(mode=<archinstall.GPT|archinstall.MBR>) now supports MBR, allowing for older hardware to be used. This is still some what experimental, and archinstall.Filesystem().use_entire_disk() will honor GPT if UEFI is detected but fall back on MBR if EFI vars isn't present. Use manual formatting if you want to override and use MBR 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...
Read more