Skip to content

Releases: archlinux/archinstall

v2.2.0.RC1

23 May 10:50
v2.2.0.RC1
84ee318
Compare
Choose a tag to compare
v2.2.0.RC1 Pre-release
Pre-release

Known Issues:

  • Partitioning still has issues with some layouts, manually creating partitions and selecting "use /mnt as is" or wiping the desired drive before running archinstall is two workarounds for now (Remember to backup your data). Work is already underway to correct this, but will not make it in time for this release.

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.
  • 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) 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 raises a RequirementError when the binary can not be found.
  • (Breaking Change) SysCommand() Has been re-worked a lot, the following logic has been split into a new class called SysCommandWorker()
    • It no longer has the ability to emulate a command, this might be brought back later if the need for it is great.
    • .raw_cmd no longer exists, it's just cmd
    • .callback and .start_callback has been merged into .callbacks which now is a dictionary with two keys currently: on_start and on_end (currently not in use, but that's the future)
    • .peak_output is a boolean to control if we should trail the command output *(we don't strip \n, but we do stay on ...
Read more

v2.1.4

25 Apr 20:22
v2.1.4
ea9d34e
Compare
Choose a tag to compare

Patch release v2.1.4

Known issues:

  • Installing to a USB device is still a bit iffy at times and some partition layouts might still confuse the installer and these will be fixed in v2.2.0 due to it requiring some re-work of the partition logic - which is to big of a change for this version.
  • MBR and GRUB support will be coming in v2.2.0 (next release)

For more issues, see the issues tab. And thank you for your patience and constructive feedback, it's very much appreciated!

Experimental features:

  • "Use /mnt as is" #124 has been added as a new option in the formatting process. This function is tested, but internet is filled with people who use exotic partitioning layouts and such. So this feature is bound to break at some points. Feedback is very welcome especially around this new feature. lsblk output has been added to the logs, so submitting that log should be sufficient for us to replicate certain layouts and file formats.

This release contains the following:

  • (breaking change) Installer() has been re-worked quite a bit to accomodate #124. This meant that partition and boot_partition are no longer used, instead, a single installation directory is given which adds more degrees of freedom for the installer - as it no longer "cares" what partitions are being used. As long as it can run pacstrap in said directory, the installer will try to figure out what packages to source additionally to deal with the file system's in play. It also no longer sets a hostname by default, instead .set_hostname() should be called on the installation. (see the minimal example for information on how the new workflow should look like).
  • argon2id is being used by default instead of argon2i after some discussions here on GitHub, with a future plan of making this configurable through --PBKDF=<implementation name>.
  • #124 has been implemented and allows for more complex partition layouts. See note above surrounding this feature.
  • Added more verification to time zone selection
  • Added a warning for one experimental feature
  • The install log now contains lsblk output to better help diagnose potential partitioning issues.
  • Added information regarding unattended installations in the readme
  • IP addresses are now verified when entering them
  • Time zone input will now loop instead of default to UTC when a invalid time zone is given (leaving blank will however default to UTC still as mentioned below)
  • generic_select have been improved quite a bit. It now supports allow_empty_input=False which will loop over the choices until a valid is given as well as a sort=True which sorts the listing. Lastly options_output=False have been added to hide any output of the list, enabling the programmer to print their own list prior to selecting the options (options still has to be given to generic_select, but these can be different from the output printed, enabling for more programatically understandable options returned from generic_select while allowing for presenting user friendly options)
  • "Keep partitions" now forces the user to select at least / and /boot
  • A .editorconfig to help contributors use and follow some guidelines when contributing
  • Added a mission statement to the project
  • Simplified and consolidated the build process.
  • minimal.py and the script your own installation examples have been updated properly.
  • The test instructions and build ISO instructions have been added and modified.
  • The entry-point for the module have moved in to init.py
  • Partial support for hardware raids have been added (still very much an experimental feature)
  • Partition() now has a .uuid property for easy access to the PARTUUID of lsblk
  • BlockDevice() now has a .uuid property for easy access to the UUID of lsblk for the device.
  • Partition().real_device now always returns the parent device, not only when it's encrypted. This means that /dev/mapper/luksloop will return /dev/sda2 for instance, and /dev/sda2 will return /dev/sda. For a more consistent behavior.
  • Relaxed the Partition().safe_to_format() a bit to allow for formatting "odd" boot partitions that doesn't make sense.
  • Partition().mount() will now create the destination by default.
  • archinstall has a new function called .get_partitions_in_use(mountpoint) which can look up a folder/mountpoint and analyze which block devices are mounted there (recursively). This helps the Installer() to understand which partitions is mounted and what packages to source.
  • archinstall.sys_command() now take environment_vars as a new argument, which can be used to pipe in specific environment variables. It also properly disposes of any open filehandles once done executing.
  • Some general code clean up such as this
  • Installer() no longer installs nano by default as a base package. That is now an optional package in profiles instead.
  • Installer().partitions have been added to facilitate easy access to the current partitions in play during this installation.
  • Installer().enable_service() now takes an arbitrary number of services instead of just one
  • Installer().drop_to_shell() has been added to the API for easy access into the new installation.
  • Installer().detect_encryption() has been added to the API to crudely but conveniently detect if there's encryption in play at the given pacstrap location.
  • Installer().minimal_installation() now patches mkinitcpio instead of blindly writing a string. This is prep-work for the future, where there will be API hooks such as on_mkinitcpio that will pipe these variables to external functions for patching.
  • archinstall.list_keyboard_languages() should no longer be limited to QWERTY layouts. This should enable layouts like be-latin1 to be discoverable which was mentioned in #149.
  • Some NVMe sleeps have been added to combat the issues during formatting/encryption/unlocking where commands release us before the kernel is done updating.
  • list_mirrors() now support offline mode is detected. This is useful when building your own ISO's that is targeted at offline environments. An example usage of this is archoffline that utilize this as a test.
  • profiles/ now has the ability to masquerade as [top_level_profile](v2.1.3...v2.1.4-RC...
Read more

v2.1.4-RC2

22 Apr 20:29
v2.1.4-RC2
b963ed2
Compare
Choose a tag to compare
v2.1.4-RC2 Pre-release
Pre-release

Patch release v2.1.4 (Release Candidate)

Attached below is an unofficial Arch Linux ISO that ships this specific release candidate.
Since this is an unsupported ISO, please help the support out by not asking questions about it anywhere but here or in the archinstall channels.

Known issues: Installing to a USB device is still a bit iffy at times.

Experimental features:

  • "Use /mnt as is" #124 has been added as a new option in the formatting process. This function is tested, but internet is filled with people who use exotic partitioning layouts and such. So this feature is bound to break at some points. Feedback is very welcome especially around this new feature. lsblk output has been added to the logs, so submitting that log should be sufficient for us to replicate certain layouts and file formats.

This release contains the following:

  • (breaking change) Installer() has been re-worked quite a bit to accomodate #124. This meant that partition and boot_partition are no longer used, instead, a single installation directory is given which adds more degrees of freedom for the installer - as it no longer "cares" what partitions are being used. As long as it can run pacstrap in said directory, the installer will try to figure out what packages to source additionally to deal with the file system's in play. It also no longer sets a hostname by default, instead .set_hostname() should be called on the installation. (see the minimal example for information on how the new workflow should look like).
  • argon2id is being used by default instead of argon2i after some discussions here on GitHub, with a future plan of making this configurable through --PBKDF=<implementation name>.
  • #124 has been implemented and allows for more complex partition layouts. See note above surrounding this feature.
  • The install log now contains lsblk output to better help diagnose potential partitioning issues.
  • Added information regarding unattended installations in the readme
  • IP addresses are now verified when entering them
  • Time zone input will now loop instead of default to UTC when a invalid time zone is given (leaving blank will however default to UTC still as mentioned below)
  • generic_select have been improved quite a bit. It now supports allow_empty_input=False which will loop over the choices until a valid is given as well as a sort=True which sorts the listing. Lastly options_output=False have been added to hide any output of the list, enabling the programmer to print their own list prior to selecting the options (options still has to be given to generic_select, but these can be different from the output printed, enabling for more programatically understandable options returned from generic_select while allowing for presenting user friendly options)
  • "Keep partitions" now forces the user to select at least / and /boot
  • A .editorconfig to help contributors use and follow some guidelines when contributing
  • Added a mission statement to the project
  • Simplified and consolidated the build process.
  • minimal.py and the script your own installation examples have been updated properly.
  • The test instructions and build ISO instructions have been added and modified.
  • The entry-point for the module have moved in to init.py
  • Partial support for hardware raids have been added (still very much an experimental feature)
  • Partition() now has a .uuid property for easy access to the PARTUUID of lsblk
  • BlockDevice() now has a .uuid property for easy access to the UUID of lsblk for the device.
  • Partition().real_device now always returns the parent device, not only when it's encrypted. This means that /dev/mapper/luksloop will return /dev/sda2 for instance, and /dev/sda2 will return /dev/sda. For a more consistent behavior.
  • Relaxed the Partition().safe_to_format() a bit to allow for formatting "odd" boot partitions that doesn't make sense.
  • Partition().mount() will now create the destination by default.
  • archinstall has a new function called .get_partitions_in_use(mountpoint) which can look up a folder/mountpoint and analyze which block devices are mounted there (recursively). This helps the Installer() to understand which partitions is mounted and what packages to source.
  • archinstall.sys_command() now take environment_vars as a new argument, which can be used to pipe in specific environment variables. It also properly disposes of any open filehandles once done executing.
  • Some general code clean up such as this
  • Installer() no longer installs nano by default as a base package. That is now an optional package in profiles instead.
  • Installer().partitions have been added to facilitate easy access to the current partitions in play during this installation.
  • Installer().enable_service() now takes an arbitrary number of services instead of just one
  • Installer().drop_to_shell() has been added to the API for easy access into the new installation.
  • Installer().detect_encryption() has been added to the API to crudely but conveniently detect if there's encryption in play at the given pacstrap location.
  • Installer().minimal_installation() now patches mkinitcpio instead of blindly writing a string. This is prep-work for the future, where there will be API hooks such as on_mkinitcpio that will pipe these variables to external functions for patching.
  • archinstall.list_keyboard_languages() should no longer be limited to QWERTY layouts. This should enable layouts like be-latin1 to be discoverable which was mentioned in #149.
  • Some NVMe sleeps have been added to combat the issues during formatting/encryption/unlocking where commands release us before the kernel is done updating.
  • list_mirrors() now support offline mode is detected. This is useful when building your own ISO's that is targeted at offline environments. An example usage of this is archoffline that utilize this as a test.
  • profiles/ now has the ability to masquerade as top_level_profile enabling it to show up in profile listing. And subsequently hide themselves from the top level menu in guided. This helps a ...
Read more

v2.1.4-RC1

15 Apr 15:27
v2.1.4-RC1
6eab029
Compare
Choose a tag to compare
v2.1.4-RC1 Pre-release
Pre-release

Patch release v2.1.4 (Release Candidate)

Attached below is an unofficial Arch Linux ISO that ships this specific release candidate.
Since this is an unsupported ISO, please help the support out by not asking questions about it anywhere but here or in the archinstall channels.

Known issues:

  • entering keyboard layouts directly by name in the first prompt is partially broken. Entering us for instance is broken, but entering by number works or after a search you can enter us. It just needs that first search to populate the list properly internally by name.

This release contains the following:

  • (breaking change) Installer() has been re-worked quite a bit to accomodate #124. This meant that partition and boot_partition are no longer used, instead, a single installation directory is given which adds more degrees of freedom for the installer - as it no longer "cares" what partitions are being used. As long as it can run pacstrap in said directory, the installer will try to figure out what packages to source additionally to deal with the file system's in play. It also no longer sets a hostname by default, instead .set_hostname() should be called on the installation. (see the minimal example for information on how the new workflow should look like).
  • A .editorconfig to help contributors use and follow some guidelines when contributing
  • Added a mission statement to the project
  • Simplified and consolidated the build process.
  • minimal.py and the script your own installation examples have been updated properly.
  • The test instructions and build ISO instructions have been added and modified.
  • The entry-point for the module have moved in to init.py
  • Partial support for hardware raids have been added (still very much an experimental feature)
  • Partition() now has a .uuid property for easy access to the PARTUUID of lsblk
  • BlockDevice() now has a .uuid property for easy access to the UUID of lsblk for the device.
  • Partition().real_device now always returns the parent device, not only when it's encrypted. This means that /dev/mapper/luksloop will return /dev/sda2 for instance, and /dev/sda2 will return /dev/sda. For a more consistent behavior.
  • Relaxed the Partition().safe_to_format() a bit to allow for formatting "odd" boot partitions that doesn't make sense.
  • Partition().mount() will now create the destination by default.
  • archinstall has a new function called .get_partitions_in_use(mountpoint) which can look up a folder/mountpoint and analyze which block devices are mounted there (recursively). This helps the Installer() to understand which partitions is mounted and what packages to source.
  • archinstall.sys_command() now take environment_vars as a new argument, which can be used to pipe in specific environment variables. It also properly disposes of any open filehandles once done executing.
  • Some general code clean up such as this
  • Installer() no longer installs nano by default as a base package. That is now an optional package in profiles instead.
  • Installer().partitions have been added to facilitate easy access to the current partitions in play during this installation.
  • Installer().enable_service() now takes an arbitrary number of services instead of just one
  • Installer().drop_to_shell() has been added to the API for easy access into the new installation.
  • Installer().detect_encryption() has been added to the API to crudely but conveniently detect if there's encryption in play at the given pacstrap location.
  • Installer().minimal_installation() now patches mkinitcpio instead of blindly writing a string. This is prep-work for the future, where there will be API hooks such as on_mkinitcpio that will pipe these variables to external functions for patching.
  • archinstall.list_keyboard_languages() should no longer be limited to QWERTY layouts. This should enable layouts like be-latin1 to be discoverable which was mentioned in #149.
  • Some NVMe sleeps have been added to combat the issues during formatting/encryption/unlocking where commands release us before the kernel is done updating.
  • list_mirrors() now support offline mode is detected. This is useful when building your own ISO's that is targeted at offline environments. An example usage of this is archoffline that utilize this as a test.
  • profiles/ now has the ability to masquerade as top_level_profile enabling it to show up in profile listing. And subsequently hide themselves from the top level menu in guided. This helps a lot with maintaining a clean list of profiles at the first presentation. All desktop profiles have now been moved under the desktop option.
  • Profiles().packages is a new property in the API to access potential package definitions. (experimental feature and will not take full effect until v2.2.0)
  • service_state() has been patched and now properly returns a string representing the state, without any ANSI escape codes.
  • Usernames are now properly verified before continuing in the guided installer.
  • The formatting countdown has been moved into archinstall.lib.user_interactions (and exposed as archinstall.do_countdown())
  • Most function logs no longer outputs a black background.
  • Timezones will now [default to UTC](v2.1.3...v2.1.4-RC1#diff-991834f9...
Read more

v2.1.3

29 Mar 16:31
v2.1.3
bb5caf7
Compare
Choose a tag to compare

This is a minor release and addresses some smaller bugs that were creeping around.

  • A inconsistency was detected when trying to format a disk/partition that previously had encryption enabled and going to a setup where encryption was not used. This was identified by @Didr and the issue was that the Partition().encrypted flag was carried over from the internal cache (created initially when building the cache to present to the user during initialization).
    • The .encrypted flag is now more accurately set by correctly identifying file system as reported by the kernel rather than our own internal cache after .format is called. It also checks the parent device if there is one to not falsely check on unlocked encrypted devices.
  • #116 has partially been corrected, in that the log will fall back to ./ if archinstall couldn't put the log in /var/log/archinstall
  • sys_command now has a better working workdir flag to put logs and execute from.
  • Removed vfat as a root-partition option
  • Fixed an issue where completely empty drives would cause a glitch due to .has_content()'s mount command would crash due to "wrong fs type".

No new features were added.

v2.1.2

21 Mar 22:12
v2.1.2
e0611c2
Compare
Choose a tag to compare

New features

  • BlockDevice() now has four new functions as well as "improved" cache (still some improvements to be done):
    • BlockDevice().partition_table_type which returns GPT or MBR depending on which is used
    • .has_partitions() which returns the number of partitions
    • .has_mount_point(path), returns True if any of the block device partitions have been mounted to the given path
    • .flush_cache() which clears the internal partition cache and forces a refresh of the current partitions (mainly useful for internal use when formatting etc)
  • BlockDevice() are now iterable and will iterate over the partitions (for partition in BlockDevice("/dev/sda"):).
  • BlockDevice() will now auto fill information about itself if no information is given during initialization.
  • Throughout the guided.py installation, arguments are now supported from the command-line in to the script via --argument=value. This helps testing and enables scripts to utilize archinstall example installations (minimal and others will get an overhaul soon too).
  • Partition() has a lot of new additions, mainly safety features and a bit of re-work to support more complex partition layouts
    • .target_mountpoint which sets the desired mount point once the partition is formatted and complete
    • .allow_formatting (Bool) dictates if the archinstall formatter is allowed to touch the partition or not. By default all partitions are set to False which ensures that for instance Windows partitions is left untouched. This protection can be overridden by BlockDevice().keep_partitions = False which tells archinstall that it's ok to wipe all partitions no matter what individual partitions dictates.
    • Partition() now auto-mounts if mountpoint is given, which is not to say the same as target_mountpoint which is post-formatting.
    • Partition() will now correctly identify itself as encrypted by checking its file system during initialization, which will trigger additional user input / library actions depending on certain conditions.
    • Partition() is now sortable among other partitions (and strings), based on the full path name of itself.
    • .detect_inner_filesystem() a helper function that will attempt to detect any inner file systems automatically by decrypting the partition using any supplied password.
    • .has_content() will mount the partition to a temporary location and check if there's any content inside that temporary mount location. Useful to check if /boot has content for instance.
    • .safe_to_format() will return a bool depending on some criteria. If .allow_formatting is False for instance, then .safe_to_format() will also return False.
    • .encrypt(*args, **kwargs) is a helper/wrapper around setting up and calling luks2().encrypt(*args, **kwargs).
    • .format() has some new safety checks/features implemented to avoid accidental formatting.
    • .unmount() (.umount is an alias) will attempt to unmount the partition.
    • .filesystem_supported() is a new helper function that will format the partitions selected file system against /dev/null to determine if the format is supported, or if the selected file format isn't supported by archinstall.
  • Filesystem() has been re-worked quite a bit to incorporate some new partition flexability. It now supports existing partition schemes by simply honoring what flags are set in Partition(). But some new features, logic and flags are:
    • Will now check self.blockdevice.keep_partitions, and if False will initiate a new disk label wiping any existing partitions.
    • .find_partition(mountpoint) will iterate the partitions for the selected drive and find any partition with the given mount point and return that partition.
    • .use_entire_disk() have been re-worked completely to accommodate a new way of formatting. This function instead of actually formatting, will simply create a file system definition, and mark the partitions as ready to be formatted and set the protective flags accordingly. And if encryption is specified, will mark the correct partitions as encrypted triggering further actions later on in the library calls.
  • disk.py also has get_mount_info(path) to get information based on a mount-point
  • disk.py also has get_filesystem_type(path) which will return a single string representing the file system on that path
  • archinstall.exceptions.SysCallError now has a property that can be fetched during a try/catch, which is err.exit_code which might be useful to debug/set actions depending on a syscall that exits as non-zero.
  • JSON_Encoder now properly creates a copy of dictionaries rather than replacing keys in the existing dictionary (the old behavior would overwrite keys and values, causing confusion with the benefit of being more memory conservative)
  • luks2() now has some additional parameters, key_file and auto_unmount. The key-file is just to avoid hard-coded locations for key-file lookups. And auto_unmount will automatically close the encrypted partition once the __exit__ function is called.
    • .mapdev is also a new property which holds the location of the luks mapper device created during cryptsetup open.
    • If the partition is being used when we try to call .encrypt(), luks2() will now attempt to close the device as well as unmount the location where it's mounted and then re-run the .encrypt() call.
    • Any partition within the encryption will inherit safety-flags once the partition is unlocked. This means if the encrypted partition /dev/sda2 is selected for formatting, then so will /dev/sda2 -> /dev/mapper/luksdev as an example.
    • .format() is a helper function that will attempt to run cryptsetup -q -v luksErase on the encrypted partition.
  • log() will now default to LOG_LEVELS.Info if nothing else is specified.
  • Profile() will now remember the initilization-namespace given, and .load_instructions() can overwrite the namespace during loading of instructions to circumvent potential if __name__ == "filename" logics. But once Profile().install() is called, the original namespace is restored in favor or triggering those if __name__ == "filename" again.
  • Profile() also has a new helper function called .has_prep_function(), which will return True if thereis a def _prep_function() defined in the profile - but if __name__ == 'moduleName' also has to be defined for this helper function to return True. This to avoid "stray code" to be executed when we try to call profile._prep_function() in isolation.
  • Application() now also resets the namespace prior to executing .install().
  • lib/user_interactions.py have gotten quite a few new helper functions:
    • get_terminal_height() and get_terminal_width() which returns what it sounds like, the size of the current terminal in terms of character columns and character lines.
    • get_longest_option() which returns the longest length of any given option within a list.
    • get_password() which is a helper function to get a password with verification from the user #106
    • print_large_list() which enables columinzation of largers sets of options courtesy of @ninchester and fixes #81.
    • ask_for_superuser_account() which asks for a single super-user account and has a force=True option to enable sticky-asking.
    • ask_for_additional_users() now asks to create additional users and have the ability to ask and determinate and distinguish between normal users and superusers.
    • ask_for_a_timezone() can ask and verify selected time zones.
    • ask_to_configure_network() Now contains questions and options surrounding network configuration. This supports the option to copy existing configurations as well as configuring a specific interface for DHCP or static IP configuration.
    • ask_for_disk_layout() will ask if the user wants to abort, keep an existing partition layout of wipe the entire drive
    • ask_for_main_filesystem_format() will ask which file system to use for the root partition /, asking from a hard coded set of file systems.
  • examples/guided.py has been re-written more or less entirely. Most of the logic is the same and in the same order. The key differences being that the example now has the steps in functions and they are in order of execution. It also supports arguments via archinstall.arguments which translates python guided.py --argument=value into archinstall.arguments['argument']. It also has a completely re-written partitioning logic to support more flexible partitions.
  • The profile awesome has been slimmed down further.

Bugs and fixes

  • set_timezone now properly removes any existing timezone that might be default in the installation #64.
  • set_locale() no longer adds encoding in the locale string, since that's another parameter to set_locale()
  • Although not as clean as I would want it, this first generation fix enables encrypted partitions using file formats other than btrfs by setting up mkinitcpio.conf "properly". In the future, I wish to not overwrite the config as it might interfere with future default Arch Linux changes. But for now this should work.
  • add_bootloader no longer defaults to a configuration file called arch.conf, which worked great in older versions of archinstall where flexability wasn't really that important. But since we now support multiple partiton layouts and...
Read more

v2.1.2-rc3

20 Mar 21:22
v2.1.2-rc3
f3b93c1
Compare
Choose a tag to compare
v2.1.2-rc3 Pre-release
Pre-release

v2.1.2-rc2

14 Mar 16:28
v2.1.2-rc2
54200bf
Compare
Choose a tag to compare
v2.1.2-rc2 Pre-release
Pre-release

v2.1.2-rc1

09 Mar 22:50
v2.1.2-rc1
e2aeb3a
Compare
Choose a tag to compare
v2.1.2-rc1 Pre-release
Pre-release

v2.1.1

27 Jan 18:52
v2.1.1
b2edfa4
Compare
Choose a tag to compare

New features

  • Now supports configuring wifi by copying the current ISO/live-medium iwd configuration if one was set up before the installer was started #82
  • man pages can now be built using cd docs/ && make man. This has two additional dependencies:
    • python-sphinx
    • python-spinx_rtd_theme
  • systemd-networkd, systemd-resolved and iwd are now dynamically installed depending on which network configuration the user chooses to install (or opt out from). #82 (Thanks to @grazzolini for correcting some of my logic and making this one work perfectly)
  • KDE now has a Wayland profile called kde-wayland. (Thank you @AdvaithM for this development)
  • Archinstall now supports the filesystem XFS (Added by @AdvaithM)
  • Archinstall now supports the filesystem F2FS (Added by @reid) #90
  • Logging is now done in /var/log/archinstall/install.log and will be mirrored between the ISO and the install medium upon archinstall.Installer().__exit__. #56
  • New function to detect if UEFI or BIOS is booted via archinstall.hasUEFI() #44 #96
  • New function to detect if WiFi exists on a hardware level via archinstall.hasWifi() #44 #82 #96
  • New function to detect if a certain graphics card exists on a hardware level via archinstall.hasNvidiaGraphics(), archinstall.hasAmdGraphics(), archinstall.hasIntelGraphics() #44 #96

Bugs and fixes

  • Fixed docs (mainly links f48e5d5 and layout for manpages) #78
  • Fixed KDE which relied on xorg-xinit instead of sddm #83 (Shoutout to @AdvaithM for this one)
  • Some spelling issues 627deb7 (Shoutout to @J-James for that one, I know it's minor but worth it)
  • Corrected the file format labling of archinstall.Partition() for ext4 partitions. #88 (Spotted by u/parkerlreed on reddit starting out as a light joke, turns into bug)
  • terminus-font-otb changed upstream to just terminus-font in awesome-profile. 73191b9
  • The awesome-profile has been slimmed a bit further to remove unnecessary packages. 9a94a63
  • Logging in general have been looked over, some more details have been added as well as output fixed #94
  • PKGBUILD's have moved location in #97
  • Fixed proper raise RequirementError in guided installer when required steps were skipped #86

Honorable mentions:

  • (pre-release feature) archinstall.wirelessScan(interface) will initiate a wireless scan using iwctl
  • (pre-release feature) archinstall.getWirelessNetworks(interface) will retrieve available wifi networks in the area using iwctl
    Both these two functions will later be converted into dbus messages/events mentioned in #82