Archinstall

Latest version: v2.8.0

Safety actively analyzes 638430 Python packages for vulnerabilities to keep your Python projects secure.

Scan your dependencies

Page 4 of 12

2.4.3rc1

:information_source: The changes are [between](https://github.com/archlinux/archinstall/compare/7fc65fad0c7c2f6d4095d9ccf7b7463e6401fd21...493cccc18fa8c77c362b6abee2c3dc89d331c792#diff-95bca0a9f480975acdcea33b49e05dc5914459a8c8edaff3254a398692d59ac4R58) [v2.4.2](7fc65fad0c7c2f6d4095d9ccf7b7463e6401fd21) and e154a6809d85b067f384390bc236a10c5e5445ac

Breaking changes
* `Partition().uuid` now properly reports the UUID as reported by `lsblk -o+UUID` and not `PARTUUID`. A new `Partition().part_uuid` has been introduced where the `PARTUUID` is needed. This was required in order to get the FIDO2 support to work.

New features:
* FIDO2 support (https://github.com/archlinux/archinstall/pull/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 encoding `pathlib.Path` objects.
* `--config`, `--disk-layout` and `--creds` now all support remote loading thanks to the changes in `json_stream_to_structure`. A slight bug caused only `--config` to support this method of operation.
* `archinstall.get_fido2_devices()` returns a `dict[/dev/path] = {"manufacturer" : ..., "product" : ...}` of all available FIDO2 devices
* `archinstall.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, and `Esc` properly backs out without modifying changes - Thanks to svartkanin
* `Locale language` and `Locale 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, and `NetworkManager` 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, and `is_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 -->
* `archinstall.udevadm_info(path)` has been added to return `udevadm info /path` information in a `dict` like fashion

Bug fixes / Tweaks
* Fixed a severe issue (https://github.com/archlinux/archinstall/issues/1197) where `Mark as encrypted` option in the guided partitioning tool would mark all partitions for encryption. This due to a function called `select_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 the `lsblk` 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 specified `working_directory`, and both would change back immediately. This has been corrected so only the parent changes back immediately after forking.
* `SysCommand` now supports `working_directory` parameter, and passes it to `SysCommandWorker` 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.

2.4.2

Bug fixes
* https://github.com/archlinux/archinstall/issues/1093 - Issue with disabling swap
* https://github.com/archlinux/archinstall/issues/1096 - Issue with printing log output when using certain setups of encryption

2.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:
python
if (result := archinstall.SysCommand("ls --breaking-arguments")).exit_code != 0

Should now be:
python
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](https://github.com/archlinux/archinstall/compare/f6d133804b7fdfab5a00d95a1985c3e220935ac1..master#diff-c9aaaf680d2c34a39973759a911376f8dcec3c86da6a7b6d5d80cb78a0bfaea3) 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](https://docs.python.org/3/library/dataclasses.html) to make it easier to detect upstream changes during normal operation. If [pydantic](https://pydantic-docs.helpmanual.io/) 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](https://github.com/archlinux/archinstall/compare/f6d133804b7fdfab5a00d95a1985c3e220935ac1..master#diff-79640b2e97d003480ce80b9cfce8ef09c2dc0338e1024d02cd5e314e57aec946) 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](https://github.com/archlinux/archinstall/compare/8d15683752c0559c04680da6944a779ab4369f9d..master#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43) has been split into multiple files as it outgrew it's simple purpose. It now lives in [archinstall/lib/user_interaction/__init__.py](https://github.com/archlinux/archinstall/compare/8d15683752c0559c04680da6944a779ab4369f9d..master#diff-99167479cdac68c1e3e51b525276358c4bcfc47a47ff733c7dc2e8bbf5e59ce3) 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](https://github.com/IngoMeyer441/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](https://user-images.githubusercontent.com/861439/160357312-5bc564da-0a69-4e5a-9a55-f81dc02bc023.png)
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](https://github.com/archlinux/archinstall/blob/f6d133804b7fdfab5a00d95a1985c3e220935ac1/archinstall/locales/README.md)
* 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 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. If that fails, it reverts and attempts without `--removable`.
* `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 can share common `--conf` but have different `--disk_layouts` for instance.
* `profiles/applications/pipewire.py` has been added as a application profile to properly configure pipewire
* Python based `qtile` has been added as a new Windows Manager (WM)
* `archinstall.group_search()` have been added to return information about a package group
* `archinstall.get_subvolumes_from_findmnt()` takes a `findmt` JSON struct and yields `BtrfsSubvolume` dataclasses for each result found.
* `archinstall.get_subvolume_info()` takes a path, and returns a `dict` containing all the information about the subvolume
* [archinstall/lib/disk/dmcryptdev.py](https://github.com/archlinux/archinstall/compare/f6d133804b7fdfab5a00d95a1985c3e220935ac1..master#diff-9c7a56657c464a44a53daf8699a5d6d431ec52de06c98913f205915c6f31610e) data class has been added to separate logic between block devices, loopdevices and `dmcrypt` devices specifically.
* `DMCryptDev().MapperDev` can be used to access the mapper device associated. `dm-0 -> /dev/mapper/luksloop` for instance.
* `DMCryptDev().mountpoint` can be used to see where the cryptdev is mounted
* `DMCryptDev().filesystem` returns the mapperdev's filesystem
* [archinstall/lib/disk/mapperdev.py](https://github.com/archlinux/archinstall/compare/f6d133804b7fdfab5a00d95a1985c3e220935ac1..master#diff-3806df57c5448d45c5baa85d5a714a16bf7448e2fdf9194e3395ca22c6c98b0b) data class has been added just like dmcryptdev to separate logic between devices further.
* `MapperDev().subvolumes` is one of the few/many helper functions which returns subvolumes on the specified `/dev/mapper/<dev>` device.
* `archinstall.blkid()` has been added to help with calling, parsing and returning data from `blkid`. Returns a `dict` with the information.
* `archinstall.get_loop_info()` returns `losetup` information in a `dict` structure
* `archinstall.enrich_blockdevice_information` can enrich `blkid` and other structures with information from `/sys/class/block/*`
* `archinstall.uevent()` is a parser for `/sys/class/block/{dev_name}/uevent` information
* `archinstall.get_blockdevice_uevent()` retrieves information for a given `/sys/class/block/{dev_name}/uevent` dev name.
* `archinstall.get_parent_of_partition()` returns a string path to the parent of a partition
* `archinstall.find_mountpoint()` returns a `dict` containing information returned from `findmnt` without additional parsing
* `archinstall.get_all_targets()` cleans up `findmnt` and returns only the mount point based on looking at targets
* `archinstall.Partition().mountpoint` has been added to make it easier to access where a partition is mounted.
* `archinstall.Partition().subvolumes` has been added and iterates all subvolumes under the specific partition
* `archinstall.TranslationError` is a new exception that might pop up
* `archinstall.Installer().add_bootloader()` now called separate functions for the three different supported boot loader. The code does the same more or less, just separated into functions for easier maintenance.
* `archinstall.Installer().add_systemd_bootloader()`
* `archinstall.Installer().add_grub_bootloader()`
* `archinstall.Installer().add_efistub_bootloader()`
* `archinstall.Installer().enable_sudo` now places configurations in `/etc/sudoers.d/*` instead of modifying `/etc/sudoers`.
* `archinstall.log()` now supports a few more new colors:
![screenshot](https://user-images.githubusercontent.com/861439/160356911-876c0fd8-a8e3-4359-99c2-d656474086e6.png)
* `archinstall.run_pacman()` has been added to deal with calling `pacman`.
In the future, this call will try to re-run failed pacman executions, but for now it simply adds some error handling for one attempt.

Plugin changes

* `on_user_created` has been added to perform post-creation actions on user profiles

Profile changes

* [profiles/bspwm.py](https://github.com/archlinux/archinstall/blob/621adc9580dc3c0b0c6bf71f5d7512b48a48f291/profiles/bspwm.py) has been added
* [profiles/sway.py](https://github.com/archlinux/archinstall/blob/621adc9580dc3c0b0c6bf71f5d7512b48a48f291/profiles/sway.py) now uses `foot` instead of `alacritty` as the default terminal

Minor changes and bug fixes

* `archinstall.define_arguments()` has been added to separate the logic of setting up `ArgumentParser` arguments.
* Fixed all arguments so that they support both `--x="something"` and `--x "something"`.
* Typing has been added throughout archinstall
* Added a lot of tweaks and bug fixes to how we handle partitions, which should eliminate a bunch of issues surrounding sorting of partitions as well as working with them through the `partition["device_instance"]`.
* `archinstall.Filesystem().partprobe` now only calls partprobe on the target filesystem, not system wide.
* `archinstall.Boot()` now properly exits cleanly when the temporary boot shuts down. Previously it only took into account the `shutdown now` call exit code, which could sometimes exit badly even tho the machine spun down properly. Now it checks both `shutdown now` and the containers process for an exit code.
* Guided has been updated to use the new menu system, as well as code made simpler by leaning on `archinstall` library calls for many things
* `only_hdd.py` has been added as an example, of how to only manage partitions and not installing.
* `kwrite` replaced `kate` in the KDE profile
* `sway` now checks if nvidia is being used, in which case it warns that it's not supported.
* `network-manager-applet` has been removed from `xfce4`
* The `xorg` profile now properly sets `amdgpu` modules in the mkinitcpio hooks
* The build-system has been changed/updated to not use flit for everything
* archinstall is now a [reproducible](https://reproducible.archlinux.org/api/v0/builds/241537/log) build
* Fixed some URL's in the README to work better across documentation platforms
* NTP is now only run if menu option `True` is selected, and right before installation. It also checks for the NTP sync status before continuing with the installation.
* Grub has gotten the `--debug` flag in order to find out where some edge cases are, it also has `peak_output=True` set. It might flood the terminal a bit, but it will help us weed out edge cases in a broader user pool.
* Fixed an issue 1083 that was caused by USB drives being partprobe:d incorrectly and causing a hard error.
* Speed improvement on disk operations by reducing the sleep timeout between certain disk calls
* Passwords can now contain `"` which before would have errored out. This was due to nested strings in syscalls collapsing.

2.4.0.rc2

:information_source: **Changes up until: 7f0ccbe87ed64dc25a2948579b332e1a7b6b0403**

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:
python
if (result := archinstall.SysCommand("ls --breaking-arguments")).exit_code != 0

Should now be:
python
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](https://github.com/archlinux/archinstall/compare/f6d133804b7fdfab5a00d95a1985c3e220935ac1..master#diff-c9aaaf680d2c34a39973759a911376f8dcec3c86da6a7b6d5d80cb78a0bfaea3) 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](https://docs.python.org/3/library/dataclasses.html) to make it easier to detect upstream changes during normal operation. If [pydantic](https://pydantic-docs.helpmanual.io/) 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](https://github.com/archlinux/archinstall/compare/f6d133804b7fdfab5a00d95a1985c3e220935ac1..master#diff-79640b2e97d003480ce80b9cfce8ef09c2dc0338e1024d02cd5e314e57aec946) 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](https://github.com/archlinux/archinstall/compare/8d15683752c0559c04680da6944a779ab4369f9d..master#diff-991834f970d8b0af702afcd0581ed8edc8fd87c0aec535af2d375e04b0518a43) has been split into multiple files as it outgrew it's simple purpose. It now lives in [archinstall/lib/user_interaction/__init__.py](https://github.com/archlinux/archinstall/compare/8d15683752c0559c04680da6944a779ab4369f9d..master#diff-99167479cdac68c1e3e51b525276358c4bcfc47a47ff733c7dc2e8bbf5e59ce3) 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](https://github.com/IngoMeyer441/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](https://user-images.githubusercontent.com/861439/160357312-5bc564da-0a69-4e5a-9a55-f81dc02bc023.png)
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](https://github.com/archlinux/archinstall/blob/f6d133804b7fdfab5a00d95a1985c3e220935ac1/archinstall/locales/README.md)
* 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 can share common `--conf` but have different `--disk_layouts` for instance.
* `profiles/applications/pipewire.py` has been added as a application profile to properly configure pipewire
* Python based `qtile` has been added as a new Windows Manager (WM)
* `archinstall.group_search()` have been added to return information about a package group
* `archinstall.get_subvolumes_from_findmnt()` takes a `findmt` JSON struct and yields `BtrfsSubvolume` dataclasses for each result found.
* `archinstall.get_subvolume_info()` takes a path, and returns a `dict` containing all the information about the subvolume
* [archinstall/lib/disk/dmcryptdev.py](https://github.com/archlinux/archinstall/compare/f6d133804b7fdfab5a00d95a1985c3e220935ac1..master#diff-9c7a56657c464a44a53daf8699a5d6d431ec52de06c98913f205915c6f31610e) data class has been added to separate logic between block devices, loopdevices and `dmcrypt` devices specifically.
* `DMCryptDev().MapperDev` can be used to access the mapper device associated. `dm-0 -> /dev/mapper/luksloop` for instance.
* `DMCryptDev().mountpoint` can be used to see where the cryptdev is mounted
* `DMCryptDev().filesystem` returns the mapperdev's filesystem
* [archinstall/lib/disk/mapperdev.py](https://github.com/archlinux/archinstall/compare/f6d133804b7fdfab5a00d95a1985c3e220935ac1..master#diff-3806df57c5448d45c5baa85d5a714a16bf7448e2fdf9194e3395ca22c6c98b0b) data class has been added just like dmcryptdev to separate logic between devices further.
* `MapperDev().subvolumes` is one of the few/many helper functions which returns subvolumes on the specified `/dev/mapper/<dev>` device.
* `archinstall.blkid()` has been added to help with calling, parsing and returning data from `blkid`. Returns a `dict` with the information.
* `archinstall.get_loop_info()` returns `losetup` information in a `dict` structure
* `archinstall.enrich_blockdevice_information` can enrich `blkid` and other structures with information from `/sys/class/block/*`
* `archinstall.uevent()` is a parser for `/sys/class/block/{dev_name}/uevent` information
* `archinstall.get_blockdevice_uevent()` retrieves information for a given `/sys/class/block/{dev_name}/uevent` dev name.
* `archinstall.get_parent_of_partition()` returns a string path to the parent of a partition
* `archinstall.find_mountpoint()` returns a `dict` containing information returned from `findmnt` without additional parsing
* `archinstall.get_all_targets()` cleans up `findmnt` and returns only the mount point based on looking at targets
* `archinstall.Partition().mountpoint` has been added to make it easier to access where a partition is mounted.
* `archinstall.Partition().subvolumes` has been added and iterates all subvolumes under the specific partition
* `archinstall.TranslationError` is a new exception that might pop up
* `archinstall.Installer().add_bootloader()` now called separate functions for the three different supported boot loader. The code does the same more or less, just separated into functions for easier maintenance.
* `archinstall.Installer().add_systemd_bootloader()`
* `archinstall.Installer().add_grub_bootloader()`
* `archinstall.Installer().add_efistub_bootloader()`
* `archinstall.Installer().enable_sudo` now places configurations in `/etc/sudoers.d/*` instead of modifying `/etc/sudoers`.
* `archinstall.log()` now supports a few more new colors:
![screenshot](https://user-images.githubusercontent.com/861439/160356911-876c0fd8-a8e3-4359-99c2-d656474086e6.png)
* `archinstall.run_pacman()` has been added to deal with calling `pacman`.
In the future, this call will try to re-run failed pacman executions, but for now it simply adds some error handling for one attempt.

Plugin changes

* `on_user_created` has been added to perform post-creation actions on user profiles

Profile changes

* [profiles/sway.py](https://github.com/archlinux/archinstall/compare/f6d133804b7fdfab5a00d95a1985c3e220935ac1..master#diff-d3ba6343a4fb4822a252d9a13c6e858135e510a883a1f011064c74402fbacee7) now uses `foot` instead of `alacritty` as the default terminal

Minor changes and bug fixes

* `archinstall.define_arguments()` has been added to separate the logic of setting up `ArgumentParser` arguments.
* Fixed all arguments so that they support both `--x="something"` and `--x "something"`.
* Typing has been added throughout archinstall
* Added a lot of tweaks and bug fixes to how we handle partitions, which should eliminate a bunch of issues surrounding sorting of partitions as well as working with them through the `partition["device_instance"]`.
* `archinstall.Filesystem().partprobe` now only calls partprobe on the target filesystem, not system wide.
* `archinstall.Boot()` now properly exits cleanly when the temporary boot shuts down. Previously it only took into account the `shutdown now` call exit code, which could sometimes exit badly even tho the machine spun down properly. Now it checks both `shutdown now` and the containers process for an exit code.
* Guided has been updated to use the new menu system, as well as code made simpler by leaning on `archinstall` library calls for many things
* `only_hdd.py` has been added as an example, of how to only manage partitions and not installing.
* `kwrite` replaced `kate` in the KDE profile
* `sway` now checks if nvidia is being used, in which case it warns that it's not supported.
* `network-manager-applet` has been removed from `xfce4`
* The `xorg` profile now properly sets `amdgpu` modules in the mkinitcpio hooks
* The build-system has been changed/updated to not use flit for everything
* archinstall is now a [reproducible](https://reproducible.archlinux.org/api/v0/builds/241537/log) build
* Fixed some URL's in the README to work better across documentation platforms

2.3.3

Not secure
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.

2.3.3rc1

Bug Fixes

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

Page 4 of 12

© 2024 Safety CLI Cybersecurity Inc. All Rights Reserved.