Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
path: root/archinstall/scripts/minimal.py
diff options
context:
space:
mode:
authorDaniel Girtler <blackrabbit256@gmail.com>2023-04-19 20:55:42 +1000
committerGitHub <noreply@github.com>2023-04-19 12:55:42 +0200
commit00b0ae7ba439a5a420095175b3bedd52c569db51 (patch)
treef02d081e361d5e65603f74dea3873dcc6606cf7c /archinstall/scripts/minimal.py
parent5253e57e9f26cf3e59cb2460544af13f56e485bb (diff)
PyParted and a large rewrite of the underlying partitioning (#1604)
* Invert mypy files * Add optional pre-commit hooks * New profile structure * Serialize profiles * Use profile instead of classmethod * Custom profile setup * Separator between back * Support profile import via url * Move profiles module * Refactor files * Remove symlink * Add user to docker group * Update schema description * Handle list services * mypy fixes * mypy fixes * Rename profilesv2 to profiles * flake8 * mypy again * Support selecting DM * Fix mypy * Cleanup * Update greeter setting * Update schema * Revert toml changes * Poc external dependencies * Dependency support * New encryption menu * flake8 * Mypy and flake8 * Unify lsblk command * Update bootloader configuration * Git hooks * Fix import * Pyparted * Remove custom font setting * flake8 * Remove default preview * Manual partitioning menu * Update structure * Disk configuration * Update filesystem * luks2 encryption * Everything works until installation * Btrfsutil * Btrfs handling * Update btrfs * Save encryption config * Fix pipewire issue * Update mypy version * Update all pre-commit * Update package versions * Revert audio/pipewire * Merge master PRs * Add master changes * Merge master changes * Small renaming * Pull master changes * Reset disk enc after disk config change * Generate locals * Update naming * Fix imports * Fix broken sync * Fix pre selection on table menu * Profile menu * Update profile * Fix post_install * Added python-pyparted to PKGBUILD, this requires [testing] to be enabled in order to run makepkg. Package still works via python -m build etc. * Swaped around some setuptools logic in pyproject Since we define `package-data` and `packages` there should be no need for: ``` [tool.setuptools.packages.find] where = ["archinstall", "archinstall.*"] ``` * Removed pyproject collisions. Duplicate definitions. * Made sure pyproject.toml includes languages * Add example and update README * Fix pyproject issues * Generate locale * Refactor imports * Simplify imports * Add profile description and package examples * Align code * Fix mypy * Simplify imports * Fix saving config * Fix wrong luks merge * Refactor installation * Fix cdrom device loading * Fix wrongly merged code * Fix imports and greeter * Don't terminate on partprobe error * Use specific path on partprobe from luks * Update archinstall/lib/disk/device_model.py Co-authored-by: codefiles <11915375+codefiles@users.noreply.github.com> * Update archinstall/lib/disk/device_model.py Co-authored-by: codefiles <11915375+codefiles@users.noreply.github.com> * Update github workflow to test archinstall installation * Update sway merge * Generate locales * Update workflow --------- Co-authored-by: Daniel Girtler <girtler.daniel@gmail.com> Co-authored-by: Anton Hvornum <anton@hvornum.se> Co-authored-by: Anton Hvornum <anton.feeds+github@gmail.com> Co-authored-by: codefiles <11915375+codefiles@users.noreply.github.com>
Diffstat (limited to 'archinstall/scripts/minimal.py')
-rw-r--r--archinstall/scripts/minimal.py104
1 files changed, 104 insertions, 0 deletions
diff --git a/archinstall/scripts/minimal.py b/archinstall/scripts/minimal.py
new file mode 100644
index 00000000..0cdbdcef
--- /dev/null
+++ b/archinstall/scripts/minimal.py
@@ -0,0 +1,104 @@
+from pathlib import Path
+from typing import TYPE_CHECKING, Any, List
+
+import archinstall
+from archinstall import ConfigurationOutput, Installer, ProfileConfiguration, profile_handler
+from archinstall.default_profiles.minimal import MinimalProfile
+from archinstall import disk
+from archinstall import models
+from archinstall.lib.user_interaction.disk_conf import select_devices, suggest_single_disk_layout
+
+if TYPE_CHECKING:
+ _: Any
+
+
+archinstall.log("Minimal only supports:")
+archinstall.log(" * Being installed to a single disk")
+
+if archinstall.arguments.get('help', None):
+ archinstall.log(" - Optional disk encryption via --!encryption-password=<password>")
+ archinstall.log(" - Optional filesystem type via --filesystem=<fs type>")
+ archinstall.log(" - Optional systemd network via --network")
+
+
+def perform_installation(mountpoint: Path):
+ disk_config: disk.DiskLayoutConfiguration = archinstall.arguments['disk_config']
+ disk_encryption: disk.DiskEncryption = archinstall.arguments.get('disk_encryption', None)
+
+ with Installer(
+ mountpoint,
+ disk_config,
+ disk_encryption=disk_encryption,
+ kernels=archinstall.arguments.get('kernels', ['linux'])
+ ) as installation:
+ # Strap in the base system, add a boot loader and configure
+ # some other minor details as specified by this profile and user.
+ if installation.minimal_installation():
+ installation.set_hostname('minimal-arch')
+ installation.add_bootloader(models.Bootloader.Systemd)
+
+ # Optionally enable networking:
+ if archinstall.arguments.get('network', None):
+ installation.copy_iso_network_config(enable_services=True)
+
+ installation.add_additional_packages(['nano', 'wget', 'git'])
+
+ profile_config = ProfileConfiguration(MinimalProfile())
+ profile_handler.install_profile_config(installation, profile_config)
+
+ user = models.User('devel', 'devel', False)
+ installation.create_users(user)
+
+ # Once this is done, we output some useful information to the user
+ # And the installation is complete.
+ archinstall.log("There are two new accounts in your installation after reboot:")
+ archinstall.log(" * root (password: airoot)")
+ archinstall.log(" * devel (password: devel)")
+
+
+def prompt_disk_layout():
+ fs_type = None
+ if filesystem := archinstall.arguments.get('filesystem', None):
+ fs_type = disk.FilesystemType(filesystem)
+
+ devices = select_devices()
+ modifications = suggest_single_disk_layout(devices[0], filesystem_type=fs_type)
+
+ archinstall.arguments['disk_config'] = disk.DiskLayoutConfiguration(
+ config_type=disk.DiskLayoutType.Default,
+ device_modifications=[modifications]
+ )
+
+
+def parse_disk_encryption():
+ if enc_password := archinstall.arguments.get('!encryption-password', None):
+ modification: List[disk.DeviceModification] = archinstall.arguments['disk_config']
+ partitions: List[disk.PartitionModification] = []
+
+ # encrypt all partitions except the /boot
+ for mod in modification:
+ partitions += list(filter(lambda x: x.mountpoint != Path('/boot'), mod.partitions))
+
+ archinstall.arguments['disk_encryption'] = disk.DiskEncryption(
+ encryption_type=disk.EncryptionType.Partition,
+ encryption_password=enc_password,
+ partitions=partitions
+ )
+
+
+prompt_disk_layout()
+parse_disk_encryption()
+
+config_output = ConfigurationOutput(archinstall.arguments)
+config_output.show()
+
+input(str(_('Press Enter to continue.')))
+
+fs_handler = disk.FilesystemHandler(
+ archinstall.arguments['disk_config'],
+ archinstall.arguments.get('disk_encryption', None)
+)
+
+fs_handler.perform_filesystem_operations()
+
+perform_installation(archinstall.storage.get('MOUNT_POINT', Path('/mnt')))