Releases: archlinux/archinstall
v2.5.3
ℹ️ Disk selection & disk operations will be slow in this release, bare with us until next release when we optimize. The program is not hanging, it's just slow! We apologize, but it's in favor of fixing #1557!
Bug fixes:
- This fixes #1557 by allowing empty partition information for devices that appear as block devices, but doesn't behave like them in the sense of
lsblk
. - Updating
/etc/vconsole.conf
whenInstaller().mkinitcpio()
is called (otherwise mkinitcpio errors out) - Fixed waiting for
archlinux-keyring
being properly populated by additional services before installing #1389
Improvements
- Created dataclasses for
DiskEncryption
andFido2
withFido2Device
for individual devices - Improved disk encryption menu (including HSM)
- Introduced
get_blockdevice_info
to gather information about block devices - Improved partitioning reliability (this made the disk operations quite a bit slower for now, once it's stable again we'll tweak the performance)
- Created a
TableMenu
object to make it easier to select options out of a table - Added more translations,
Ukrainian
,Korean
,Chinese (PRC)
v2.5.3rc1
ℹ️ Disk selection & disk operations will be slow in this release, bare with us until next release when we optimize. The program is not hanging, it's just slow! We apologize, but it's in favor of fixing #1557!
Bug fixes:
- This fixes #1557 by allowing empty partition information for devices that appear as block devices, but doesn't behave like them in the sense of
lsblk
. - Updating
/etc/vconsole.conf
whenInstaller().mkinitcpio()
is called (otherwise mkinitcpio errors out)
Improvements
- Created dataclasses for
DiskEncryption
andFido2
withFido2Device
for individual devices - Improved disk encryption menu (including HSM)
- Introduced
get_blockdevice_info
to gather information about block devices - Improved partitioning reliability (this made the disk operations quite a bit slower for now, once it's stable again we'll tweak the performance)
- Created a
TableMenu
object to make it easier to select options out of a table - Added more translations,
Ukrainian
,Korean
,Chinese (PRC)
v2.5.2
Bug fixes
- Fixes issue where fast block devices (namely NVMe drives) had an issue resolving
PARTUUID
afterFilesystem.add_partition
(formatting) and not ensuring mount-points was set inPartition
objects cache afterPartition.mount()
was made. (#1495, a "short" write-up has been created for those interested in reading about the issue with a bit of insight what goes into fixing stuff like this) - Fixed
/etc/locale.gen
containing two entries foren_US.UTF-8 UTF-8
(#1200) - Fixed issue where Archiso showed up as selectable drive (#563 and #1299)
- Various spelling errors have been corrected
v2.5.1
ℹ️ This is more or less a pure patch release to plug up some bugs that have been pestering us. There will be additional output added to this version as well in order to further track down some dubious bugs that are hard to force/recreate even in controlled environments. This output would give us indication of where bugs such as #1192 happens and perhaps even why.
Minor changes
- Added
--version
to archinstall to act as a shortcut topacman -Q archinstall
. - Added
--offline
which should disable certain upstream checks (technically this has existed before, but is now a predefined parameter instead of an ambiguous one). - Added
--no-pkg-lookups
to disable package verifications both for offline purposes but also for speeding up installations - Improved btrfs subvolume definitions, both defining, parsing and processing #1297
- We're not setting better and more sane default file permissions on logs and configurations #1440
- Improved the
BlockDevice
handling by using@dataclass
models for certain aspects and also improved the menu representation of those objects #1289 MapperDev
now has a.mountpoints
that lists all possible mount locations for the mapper dev.SysCallError
exceptions now contain a reference to the worker generating the exception, it can be accessed througherror.worker
(useful when you need to catch the output of the command even on exceptions)- Improved Language selection process and information output #1348
- Added an option for parallel downloads (which is not visible by default, and the reasoning is mentioned in the comments #1397 (comment)) #1397
- Improved UI functionality (mainly background things for those adding/changing menu looks) #1331 + #1346 + #1376 + #1320
- Made password strength checks less intrusive #1308
- Improved a lot of translations and added some additional new languages!
gnome-software-packagekit-plugin
has been removed from thegnome
desktop profileplugin.on_genfstab
now breaks if the return value isTrue
- Improved the legends on menu actions #1436
Bug fixes
- Fixed BTRFS compression not being translated down into
/etc/fstab
properly. #1303 - Added a fix for certain PCIe devices showing up as block devices without
/dev/X
#1475 - Improved the importation of
--conf
variables, making sure missing keys don't interrupt default values. #1419 - Improved reliability of
Filesystem().add_partition()
slightly #1333 - Fixed an issue where
btrfs-progs
wouldn't get installed properly due to mountpoint detection gone wrong #1411 + #1412 - Fixed a key-lookup error when HSM was not used #1354
- Added
gib
to the list of valid partition sizes #1382 - Fixed an issue where
multilib-testing
would get activated when trying to activatemultilib
#1364 - Fixed a bug where
locale.gen
andlocale.conf
would get duplicate entries and/or invalid entries #1421 (further improvements to this is in the pipeline, follow #1423 for that progress) - Fixed a bug that prohibited us from using only mountpoint-based installations #1373
- Fixed a more graceful handling of network issues #1361
- Fixed an issue where gateway was not set properly when manually configuring connection #1312
- Fixed an issue where language option would break if loaded from a
--conf
file #1456
v2.5.1rc1
ℹ️ This is more or less a pure patch release to plug up some bugs that have been pestering us. There will be additional output added to this version as well in order to further track down some dubious bugs that are hard to force/recreate even in controlled environments. This output would give us indication of where bugs such as #1192 happens and perhaps even why.
Minor changes
- Added
--version
to archinstall to act as a shortcut topacman -Q archinstall
. - Added
--offline
which should disable certain upstream checks (technically this has existed before, but is now a predefined parameter instead of an ambiguous one). - Added
--no-pkg-lookups
to disable package verifications both for offline purposes but also for speeding up installations - Improved btrfs subvolume definitions, both defining, parsing and processing #1297
- We're not setting better and more sane default file permissions on logs and configurations #1440
- Improved the
BlockDevice
handling by using@dataclass
models for certain aspects and also improved the menu representation of those objects #1289 MapperDev
now has a.mountpoints
that lists all possible mount locations for the mapper dev.SysCallError
exceptions now contain a reference to the worker generating the exception, it can be accessed througherror.worker
(useful when you need to catch the output of the command even on exceptions)- Improved Language selection process and information output #1348
- Added an option for parallel downloads (which is not visible by default, and the reasoning is mentioned in the comments #1397 (comment)) #1397
- Improved UI functionality (mainly background things for those adding/changing menu looks) #1331 + #1346 + #1376 + #1320
- Made password strength checks less intrusive #1308
- Improved a lot of translations and added some additional new languages!
gnome-software-packagekit-plugin
has been removed from thegnome
desktop profile
Bug fixes
- Improved the importation of
--conf
variables, making sure missing keys don't interrupt default values. #1419 - Improved reliability of
Filesystem().add_partition()
slightly #1333 - Fixed an issue where
btrfs-progs
wouldn't get installed properly due to mountpoint detection gone wrong #1411 + #1412 - Fixed a key-lookup error when HSM was not used #1354
- Added
gib
to the list of valid partition sizes #1382 - Fixed an issue where
multilib-testing
would get activated when trying to activatemultilib
#1364 - Fixed a bug where
locale.gen
andlocale.conf
would get duplicate entries and/or invalid entries #1421 (further improvements to this is in the pipeline, follow #1423 for that progress) - Fixed a bug that prohibited us from using only mountpoint-based installations #1373
- Fixed a more graceful handling of network issues #1361
- Fixed an issue where gateway was not set properly when manually configuring connection #1312
v2.5.0
(We jumped to 2.5.0 instead of 2.4.3 because of the amount of breaking changes to the API calls)
Breaking changes
Partition().uuid
now properly reports the UUID as reported bylsblk -o+UUID
and notPARTUUID
. A newPartition().part_uuid
has been introduced where thePARTUUID
is needed. This was required in order to get the FIDO2 support to work.archinstall/lib/disk/btrfs.py
->archinstall/lib/disk/btrfs/.*
(functions should be exposed as previously, but some mistakes might exist)- Where applicable,
Partition()
is not always returned anymore when working with partitions, insteadBTRFSPartition
might get returned in its place if it contains a BTRFS filesystem. This is so that certain functionality tied strongly to BTRFS can be delt with accordingly and not get mixed with the Partition code.BTRFSPartition
extendsPartition
and will behave in the same way, just the type will be different and some features have moved to theBTRFSPartition
class.Partition.subvolumes
will get deprecated in the future but stays for now. mount_subvolume()
have been removed, instead a instance calledBtrfsSubvolume
has been added and can be accessed throughBTRFSSubvolume.subvolumes
which in turn has a.mount()
function..mountpoint
of different block device instances should now returnpathlib.Path
instead ofstr
.archinstall.get_filesystem_type()
no longer splits or expects paths with subvolume names in them.MapperDev.mountpoint
now returns apathlib.Path
instead of a stringPartition.mountpoint
now returns apathlib.Path
instead of a string- Partially fixed a bug in the menu system related to btrfs subvolumes
luks2.unlock
now returnsBTRFSPartition
if it detectsbtrfs
inside the unlocked device, otherwise returnsPartition
as usual.genfstab()
is no longer called automatically, insteadinstallation.genfstab()
has to be called in a appropriate time. This in order to fix the semi-urgent issue of #1276
This will get improved in the next version with the logic described here #1133 but got pushed forward due to time limitation.
Known issues
The following issues are known and can cause some issues, but have workarounds such as editing the file passed to --config
for instance and re-running archinstall with the flag
⚠️ If multiple partitions are encrypted, the password might bleed in to theinstall.log
#1062 and passwords are still stored on/tmp
#1111- Some guided partitioning issues related to btrfs subvolumes - #1278
- Missing translations in some places depending on language (and in general)
- On some hardware, swap (zram) doesn't work #1230
/etc/locale.gen
(and possibly/etc/locale.conf
) might get double entries set #1200
Deprecated API calls
archinstall.get_mount_info()
has been deprecated,archinstall.findmnt()
has been added instead, and subsequent parsing is done where needed.
Profile changes
awesome
has been slimmed down to the absolute bare minimum. No file browser, picture viewer or screenshot utility will be installed. #1247qtile
no longer getsdmenu
installed for menu handling, instead the built-in run menu will have to be used #1243
New features:
- FIDO2 (HSM) support for
systemd-boot
when unlocking disk encryption has been added #1196 with a master password as backup during enrollment (This is in very early beta and have only been tested with an older blue Yubikey. Nitrokey and modern Yubikey's are en route for testing. PIN entry and different devices have not been thoroughly tested.) - A new disk preview has been added to the main menu.
- A new disk layout preview has been added to the main menu, and general disk layout view improvements.
- A user preview has been added to the main menu.
archinstall.general.JSON
encoder now supports encodingpathlib.Path
objects.--config
,--disk-layout
and--creds
now all support remote loading thanks to the changes injson_stream_to_structure
. A slight bug caused only--config
to support this method of operation.Partition.format()
now supports aretry=True
call, that will attempt one retry of a format, in case there's a kernel delay while updating some internal cache, and simply sleeping and retrying will work.- Improved user management and creates a new user-structure in
--config
thanks to #1220:{ "!root-password": "<root password>", "!users": [ { "username": "<USERNAME>", "!password": "<PASSWORD>", "sudo": false }, { "username": "<SUDO_USERNAME>", "!password": "<PASSWORD>", "sudo": true } ] }
Installation.create_users()
have been added to deal with the new layout structure, individual users can still be created throughInstallation.create_user()
.archinstall.Deprecated
exception has been added, it can be logged and finally raised before completely removing a piece of code.archinstall.get_fido2_devices()
returns adict[/dev/path] = {"manufacturer" : ..., "product" : ...}
of all available FIDO2 devicesarchinstall.fido2_enroll(hsm_device, partition, password)
has been added to enroll FIDO2 devices as a unlocking mechanism to a partition. Password is required due to the workflow of archinstall who will enroll a master password first, this it to automate operations. Post configuration can remove this master password if needed.- Different menu types have been added, such as
MenuSelectionType.Selection
,MenuSelectionType.Esc
,MenuSelectionType.Ctrl_c
. This in order to handle the different return types of menu selections. Ctrl+C
now clears the current option, andEsc
properly backs out without modifying changes - Thanks to @svartkaninLocale language
andLocale encoding
has been brought to the main menu as it should be ready for general use now.network-manager-applet
will now be installed if a desktop profile was used, andNetworkManager
was chosen as the network manager of choice.systemd-networkd
will not for instance get this installed even under a desktop profile. Probably expected behavior but I felt like mentioning it anyway.Partition.uuid
now uses global timeout values before giving upProfile()
has gotten a.name
and a.is_desktop_profile
property,name
returns the basename of the profile path, andis_desktop_profile
returns a boolean whether the profile belongs to the desktop group.- General improvements to translations and more languages have been added.
- Polish - Thanks to @MedzikUser
- Portuguese - Thanks to @lucaspcamargo
- Russian - Thanks to @Alexmelman88
- Urdu - Thanks to @mfgbhatti
- Brazilian Portuguese - Thanks to @cain-dev
- Turkish - Thanks to @wiseweb-works & @AlperShal
- Italian - Thanks to @gdonisi
- Czech - Thanks to @tajnymag and @walken11
- Spanish - Thanks to @castillofrancodamian
archinstall.udevadm_info(path)
has been added to returnudevadm info /path
information in adict
like fashionarchinstall.log()
now supports the colodteal
(as well as an alias calledgrey
which translates togray
)archinstall.mount_ordered_layout()
now uses a queue system for mounts, where mount calls are frozen using lambda calls and then sorted. In the future there might be a plugin opportunity here, as well as the option to inject mounts into this process without needing to go through the layout process.
Bug fixes / Tweaks
- Fixed a severe issue (#1197) where
Mark as encrypted
option in the guided partitioning tool would mark all partitions for encryption. This due to a function calledselect_encrypted_partitions()
that was neglected and acted as a bit of a prototype function for future work, which would allow selecting which partitions to encrypt. This function is now developed as intended and an option to select one or more encrypted volumes will be presented - without additional partitions being encrypted. - Fixed a bug where
children
wouldn't always exist in thelsblk
report - We hid the Arch ISO (and similar devices) from the disk selection #1275
Menu.yes_no()
was causing a bug, that has been fixedDISK_RETRY_ATTEMPTS
has been lowered from 20 to 5 to improve overall experience in timing. This may result in some older hardware timing out - if so please do report it.BlockDevice
properties are for the most part cached properties, meaning the information will not update between calls.BlockDevice.get_partition
has been optimized- Added a warning when the selected disk is too low on space to suggest a automatic layout
SysCommandWorker
now longer breaks whencmd
is a string and it's trying to output to the cmd_log. It only worked with lists previously.SysCommand*
now properly changes directory only for the child process, previously both the parent and the forked process would change directory to the specifiedworking_directory
, and both would change back immediately. This has been corrected so only the parent changes back immediately after forking.SysCommand
now supportsworking_directory
parameter, and passes it toSysCommandWorker
as expected.archinstall.Boot()
which ...
v2.4.3rc1
ℹ️ The changes are between v2.4.2 and e154a68
Breaking changes
Partition().uuid
now properly reports the UUID as reported bylsblk -o+UUID
and notPARTUUID
. A newPartition().part_uuid
has been introduced where thePARTUUID
is needed. This was required in order to get the FIDO2 support to work.
New features:
- FIDO2 support (#1196) when unlocking disk encryption (very early beta, will most likely break with PIN required devices. Only tested with an older blue Yubikey that does not support PIN entry)
archinstall.general.JSON
encoder now supports encodingpathlib.Path
objects.--config
,--disk-layout
and--creds
now all support remote loading thanks to the changes injson_stream_to_structure
. A slight bug caused only--config
to support this method of operation.archinstall.get_fido2_devices()
returns adict[/dev/path] = {"manufacturer" : ..., "product" : ...}
of all available FIDO2 devicesarchinstall.fido2_enroll(hsm_device, partition, password)
has been added to enroll FIDO2 devices as a unlocking mechanism to a partition. Password is required due to the workflow of archinstall who will enroll a master password first, this it to automate operations. Post configuration can remove this master password if needed.- Different menu types have been added, such as
MenuSelectionType.Selection
,MenuSelectionType.Esc
,MenuSelectionType.Ctrl_c
. This in order to handle the different return types of menu selections. Ctrl+C
now clears the current option, andEsc
properly backs out without modifying changes - Thanks to @svartkaninLocale language
andLocale encoding
has been brought to the main menu as it should be ready for general use now.network-manager-applet
will now be installed if a desktop profile was used, andNetworkManager
was chosen as the network manager of choice.systemd-networkd
will not for instance get this installed even under a desktop profile. Probably expected behavior but I felt like mentioning it anyway.Profile()
has gotten a.name
and a.is_desktop_profile
property,name
returns the basename of the profile path, andis_desktop_profile
returns a boolean whether the profile belongs to the desktop group.- General improvements to translations and more languages have been added.
- Polish - Thanks to @MedzikUser
- Portuguese - Thanks to @lucaspcamargo
- Russian - Thanks to @Alexmelman88
- Urdu - Thanks to @mfgbhatti
archinstall.udevadm_info(path)
has been added to returnudevadm info /path
information in adict
like fashion
Bug fixes / Tweaks
- Fixed a severe issue (#1197) where
Mark as encrypted
option in the guided partitioning tool would mark all partitions for encryption. This due to a function calledselect_encrypted_partitions()
that was neglected and acted as a bit of a prototype function for future work, which would allow selecting which partitions to encrypt. This function is now developed as intended and an option to select one or more encrypted volumes will be presented - without additional partitions being encrypted. - Fixed a bug where
children
wouldn't always exist in thelsblk
report Menu.yes_no()
was causing a bug, that has been fixed- Added a warning when the selected disk is too low on space to suggest a automatic layout
SysCommand*
now properly changes directory only for the child process, previously both the parent and the forked process would change directory to the specifiedworking_directory
, and both would change back immediately. This has been corrected so only the parent changes back immediately after forking.SysCommand
now supportsworking_directory
parameter, and passes it toSysCommandWorker
as expected.json_stream_to_structure
now supports loading resources remotely.- The menu system now only takes into account the visible menu entries when structuring the layout. Previously hidden items would also account for the layout dimensions.
Save configuration -> All
now properly saves all configurations, including disk configurations. There is still a small discrepancy between the automated save of configuration during installation and this save option. It's a known issue and will be fixed in the next release.
v2.4.2
v2.4.1
(Had to skip v2.4.0 due to accidental upload to pypi.org via CI/CD, apologize!)
Accessibility notes
- Use "numpad *" to change tracking mode from default to tracking selection mode, that will make espeakup work as before. Future versions of archinstall will honor default tracking mode as well.
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 by switching mode using numpad *, to tracking selection mode) 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 - BTRFS compression has been added as an option when selecting btrfs as the main filesystem.
- Archinstall now supports multiple NIC configurations at the same time for manual configuration
- 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. If that fails, it reverts and attempts without--removable
.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 t...
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...