diff options
author | pico.dev <pico.dev@gmail.com> | 2020-03-09 02:18:02 +0100 |
---|---|---|
committer | pico.dev <pico.dev@gmail.com> | 2020-03-09 02:24:31 +0100 |
commit | 1a939a239245afbacc21adc3ef04d1fdedcd9721 (patch) | |
tree | 797c5936241777357bb376c57bc4c3e9db91c481 | |
parent | 5f518ab71303982b47c9d51bd8a8a8675193cdf3 (diff) |
* Support custom partition
* Set keyboard layout
* Support custom kernel parameters
* Support F2FS
Fixes #73
Fixes #75
Fixes #76
Fixex #77
-rw-r--r-- | README.md | 11 | ||||
-rw-r--r-- | alis-recovery.conf | 4 | ||||
-rw-r--r-- | alis-recovery.sh | 103 | ||||
-rw-r--r-- | alis.conf | 10 | ||||
-rw-r--r-- | alis.sh | 162 |
5 files changed, 184 insertions, 106 deletions
@@ -9,7 +9,7 @@ the [Arch Linux wiki](https://wiki.archlinux.org), the [Installation Guide](http Recomendations](https://wiki.archlinux.org/index.php/General_recommendations), later compare those commands with the commands of this script. -For new features, improvements and bugs fill an issue in GitHub or make a pull request. You can test it in a VirtualBox virtual machine (recommended) before run it in real hardware. If you test it in real hardware please send me an email to pico.dev@gmail.com with the machine description and tell me if something goes wrong or all works fine. [Pull request](https://github.com/picodotdev/alis/pulls) and [new feature request](https://github.com/picodotdev/alis/issues) are welcome! +For new features, improvements and bugs fill an issue in GitHub or make a pull request. You can test it in a VirtualBox virtual machine (strongly recommended) before run it in real hardware. If you test it in real hardware please send me an email to pico.dev@gmail.com with the machine description and tell me if something goes wrong or all works fine. [Pull request](https://github.com/picodotdev/alis/pulls) and [new feature request](https://github.com/picodotdev/alis/issues) are welcome! **Warning! This script deletes all partitions of the persistent storage** @@ -22,20 +22,21 @@ Currently these scripts are for me but maybe they are useful for you too. * LVM and no LVM * _root_ partition encrypted and no encrypted * LVM on LUKS when LVM and encrypted -* File system formats ext4, btrfs (with subvols), xfs +* Support automatic (wipe and use full disk), custom and manual partition +* File system formats ext4, btrfs (with subvols), f2fs, xfs * Optional file swap (not supported in btrfs) * WPA WIFI network installation * Periodic TRIM for SSD storage * VirtualBox guest utils * Intel and AMD processors microcode +* Additional kernels installation (linux-lts, linux-hardened, linux-zen) +* Kernel compression and custom parameters * Users creation and add to sudoers * Common and custom packages installation * AUR utility installation (aurman, yay) * Retry packages download on connection/mirror error * Desktop environments (GDM, KDE, XFCE, Mate, Cinnamon, LXDE), display managers (GDM, SDDM, Lightdm, lxdm) and no desktop environment -* Additional kernel installation (linux-lts, linux-hardened, linux-zen) -* Kernel compression -* Graphic controllers (intel, nvidia, amd) with optionally early KMS start +* Graphics controllers (intel, nvidia, amd) with optionally early KMS start * GRUB, rEFInd, systemd-boot bootloaders * Script for download installation and recovery scripts and configuration files * Packer support for testing in VirtualBox diff --git a/alis-recovery.conf b/alis-recovery.conf index 6fd32e7..5b3aab4 100644 --- a/alis-recovery.conf +++ b/alis-recovery.conf @@ -7,6 +7,10 @@ DEVICE_TRIM="true" LVM="true" PARTITION_ROOT_ENCRYPTION_PASSWORD="archlinux" # Warning: change it! PARTITION_ROOT_ENCRYPTION_PASSWORD_RETYPE="archlinux" +PARTITION_MODE="auto !custom !manual" +PARTITION_BIOS="/dev/sda1" +PARTITION_BOOT="/dev/sda1 !/dev/sda2 !/dev/nvme0n1p1 !/dev/mmcblk0p1" +PARTITON_ROOT="/dev/sda2 !/dev/sda3 !/dev/nvme0n1p2 !/dev/mmcblk0p2" # network_install WIFI_INTERFACE="" diff --git a/alis-recovery.sh b/alis-recovery.sh index 2c30118..d2b746f 100644 --- a/alis-recovery.sh +++ b/alis-recovery.sh @@ -97,6 +97,13 @@ function check_variables() { check_variables_value "DEVICE" "$DEVICE" check_variables_boolean "LVM" "$LVM" check_variables_equals "PARTITION_ROOT_ENCRYPTION_PASSWORD" "PARTITION_ROOT_ENCRYPTION_PASSWORD_RETYPE" "$PARTITION_ROOT_ENCRYPTION_PASSWORD" "$PARTITION_ROOT_ENCRYPTION_PASSWORD_RETYPE" + check_variables_list "PARTITION_MODE" "$PARTITION_MODE" "auto custom manual" "true" + check_variables_value "PARTITION_BIOS" "$PARTITION_BIOS" + check_variables_value "PARTITION_BOOT" "$PARTITION_BOOT" + check_variables_value "PARTITON_ROOT" "$PARTITON_ROOT" + if [ "$LVM" == "true" ]; then + check_variables_list "PARTITION_MODE" "$PARTITION_MODE" "auto" "true" + fi check_variables_value "PING_HOSTNAME" "$PING_HOSTNAME" } @@ -207,6 +214,7 @@ function facts() { function prepare() { prepare_partition + configure_network } function prepare_partition() { @@ -243,7 +251,7 @@ function configure_network() { sleep 10 fi - ping -c 5 $PING_HOSTNAME + ping -c 1 -i 2 -W 5 -w 30 $PING_HOSTNAME if [ $? -ne 0 ]; then echo "Network ping check failed. Cannot continue." exit @@ -251,55 +259,59 @@ function configure_network() { } function partition() { - if [ "$BIOS_TYPE" == "uefi" ]; then - if [ "$DEVICE_SATA" == "true" ]; then - PARTITION_BOOT="${DEVICE}1" - PARTITION_ROOT="${DEVICE}2" - #PARTITION_BOOT_NUMBER=1 - DEVICE_ROOT="${DEVICE}2" - fi - - if [ "$DEVICE_NVME" == "true" ]; then - PARTITION_BOOT="${DEVICE}p1" - PARTITION_ROOT="${DEVICE}p2" - #PARTITION_BOOT_NUMBER=1 - DEVICE_ROOT="${DEVICE}p2" - fi - - if [ "$DEVICE_MMC" == "true" ]; then - PARTITION_BOOT="${DEVICE}p1" - PARTITION_ROOT="${DEVICE}p2" - #PARTITION_BOOT_NUMBER=1 - DEVICE_ROOT="${DEVICE}p2" - fi - fi - - if [ "$BIOS_TYPE" == "bios" ]; then - if [ "$DEVICE_SATA" == "true" ]; then - PARTITION_BIOS="${DEVICE}1" - PARTITION_BOOT="${DEVICE}2" - PARTITION_ROOT="${DEVICE}3" - #PARTITION_BOOT_NUMBER=2 - DEVICE_ROOT="${DEVICE}3" - fi - - if [ "$DEVICE_NVME" == "true" ]; then - PARTITION_BIOS="${DEVICE}p1" - PARTITION_BOOT="${DEVICE}p2" - PARTITION_ROOT="${DEVICE}p3" - #PARTITION_BOOT_NUMBER=2 - DEVICE_ROOT="${DEVICE}p3" + # setup + if [ "$PARTITION_MODE" == "auto" ]; then + if [ "$BIOS_TYPE" == "uefi" ]; then + if [ "$DEVICE_SATA" == "true" ]; then + PARTITION_BOOT="${DEVICE}1" + PARTITION_ROOT="${DEVICE}2" + #PARTITION_BOOT_NUMBER=1 + DEVICE_ROOT="${DEVICE}2" + fi + + if [ "$DEVICE_NVME" == "true" ]; then + PARTITION_BOOT="${DEVICE}p1" + PARTITION_ROOT="${DEVICE}p2" + #PARTITION_BOOT_NUMBER=1 + DEVICE_ROOT="${DEVICE}p2" + fi + + if [ "$DEVICE_MMC" == "true" ]; then + PARTITION_BOOT="${DEVICE}p1" + PARTITION_ROOT="${DEVICE}p2" + #PARTITION_BOOT_NUMBER=1 + DEVICE_ROOT="${DEVICE}p2" + fi fi - if [ "$DEVICE_MMC" == "true" ]; then - PARTITION_BIOS="${DEVICE}p1" - PARTITION_BOOT="${DEVICE}p2" - PARTITION_ROOT="${DEVICE}p3" - #PARTITION_BOOT_NUMBER=2 - DEVICE_ROOT="${DEVICE}p3" + if [ "$BIOS_TYPE" == "bios" ]; then + if [ "$DEVICE_SATA" == "true" ]; then + PARTITION_BIOS="${DEVICE}1" + PARTITION_BOOT="${DEVICE}2" + PARTITION_ROOT="${DEVICE}3" + #PARTITION_BOOT_NUMBER=2 + DEVICE_ROOT="${DEVICE}3" + fi + + if [ "$DEVICE_NVME" == "true" ]; then + PARTITION_BIOS="${DEVICE}p1" + PARTITION_BOOT="${DEVICE}p2" + PARTITION_ROOT="${DEVICE}p3" + #PARTITION_BOOT_NUMBER=2 + DEVICE_ROOT="${DEVICE}p3" + fi + + if [ "$DEVICE_MMC" == "true" ]; then + PARTITION_BIOS="${DEVICE}p1" + PARTITION_BOOT="${DEVICE}p2" + PARTITION_ROOT="${DEVICE}p3" + #PARTITION_BOOT_NUMBER=2 + DEVICE_ROOT="${DEVICE}p3" + fi fi fi + # luks and lvm if [ -n "$PARTITION_ROOT_ENCRYPTION_PASSWORD" ]; then echo -n "$PARTITION_ROOT_ENCRYPTION_PASSWORD" | cryptsetup --key-file=- open $PARTITION_ROOT $LVM_VOLUME_PHISICAL sleep 5 @@ -316,6 +328,7 @@ function partition() { PARTITION_OPTIONS="$PARTITION_OPTIONS,noatime" fi + # mount if [ "$FILE_SYSTEM_TYPE" == "btrfs" ]; then mount -o "subvol=root,$PARTITION_OPTIONS,compress=lzo" "$DEVICE_ROOT" /mnt mount -o "$PARTITION_OPTIONS" "$PARTITION_BOOT" /mnt/boot @@ -13,7 +13,13 @@ DEVICE_TRIM="true" # If DEVICE supports TRIM LVM="true" # true if use LVM for partitioning PARTITION_ROOT_ENCRYPTION_PASSWORD="archlinux" # LUKS encryption key, if LVM will be user LVM on LUKS. Empty for not use LUKS/encryption. Warning: change it! PARTITION_ROOT_ENCRYPTION_PASSWORD_RETYPE="archlinux" -FILE_SYSTEM_TYPE="ext4 !btrfs !xfs" # (single) +PARTITION_MODE="auto !custom !manual" +PARTITON_CUSTOM_PARTED_UEFI="mklabel gpt mkpart primary fat32 1MiB 512MiB mkpart primary $FILE_SYSTEM_TYPE 512MiB 100% set 1 boot on" +PARTITON_CUSTOM_PARTED_BIOS="mklabel gpt mkpart primary fat32 1MiB 128MiB mkpart primary $FILE_SYSTEM_TYPE 128MiB 512MiB mkpart primary $FILE_SYSTEM_TYPE 512MiB 100% set 1 boot on" +PARTITION_BIOS="/dev/sda1" +PARTITION_BOOT="/dev/sda1 !/dev/sda2 !/dev/nvme0n1p1 !/dev/mmcblk0p1" +PARTITON_ROOT="/dev/sda2 !/dev/sda3 !/dev/nvme0n1p2 !/dev/mmcblk0p2" +FILE_SYSTEM_TYPE="ext4 !btrfs !f2fs !xfs" # (single) SWAP_SIZE="!2GiB !4GiB !8GiB" # (single) # network_install @@ -27,12 +33,14 @@ PING_HOSTNAME="mirrors.kernel.org" PACMAN_MIRROR="https://mirrors.kernel.org/archlinux/\$repo/os/\$arch" KERNELS="!linux-lts !linux-lts-headers !linux-hardened !linux-hardened-headers !linux-zen !linux-zen-headers" # Additional kernels and headers (multiple) KERNELS_COMPRESSION="!gzip !bzip2 !lzma !xz !lzop !lz4" +KERNELS_PARAMETERS="" # eg. iommu=soft # config TIMEZONE="/usr/share/zoneinfo/Europe/Madrid" LOCALES=("es_ES.UTF-8 UTF-8" "en_GB.UTF-8 UTF-8") LOCALE_CONF=("LANG=es_ES.UTF-8" "LANGUAGE=es_ES:es:en_GB:en") KEYMAP="KEYMAP=es" +KEYLAYOUT="es" FONT="" FONT_MAP="" HOSTNAME="archlinux" @@ -85,6 +85,10 @@ function configuration_install() { function sanitize_variables() { DEVICE=$(sanitize_variable "$DEVICE") + PARTITION_MODE=$(sanitize_variable "$PARTITION_MODE") + PARTITION_BIOS=$(sanitize_variable "$PARTITION_BIOS") + PARTITION_BOOT=$(sanitize_variable "$PARTITION_BOOT") + PARTITON_ROOT=$(sanitize_variable "$PARTITON_ROOT") FILE_SYSTEM_TYPE=$(sanitize_variable "$FILE_SYSTEM_TYPE") SWAP_SIZE=$(sanitize_variable "$SWAP_SIZE") KERNELS=$(sanitize_variable "$KERNELS") @@ -113,7 +117,16 @@ function check_variables() { check_variables_value "DEVICE" "$DEVICE" check_variables_boolean "LVM" "$LVM" check_variables_equals "PARTITION_ROOT_ENCRYPTION_PASSWORD" "PARTITION_ROOT_ENCRYPTION_PASSWORD_RETYPE" "$PARTITION_ROOT_ENCRYPTION_PASSWORD" "$PARTITION_ROOT_ENCRYPTION_PASSWORD_RETYPE" - check_variables_list "FILE_SYSTEM_TYPE" "$FILE_SYSTEM_TYPE" "ext4 btrfs xfs" + check_variables_list "PARTITION_MODE" "$PARTITION_MODE" "auto custom manual" "true" + check_variables_value "PARTITON_CUSTOM_PARTED_UEFI" "$PARTITON_CUSTOM_PARTED_UEFI" + check_variables_value "PARTITON_CUSTOM_PARTED_BIOS" "$PARTITON_CUSTOM_PARTED_BIOS" + check_variables_value "PARTITION_BIOS" "$PARTITION_BIOS" + check_variables_value "PARTITION_BOOT" "$PARTITION_BOOT" + check_variables_value "PARTITON_ROOT" "$PARTITON_ROOT" + if [ "$LVM" == "true" ]; then + check_variables_list "PARTITION_MODE" "$PARTITION_MODE" "auto" "true" + fi + check_variables_list "FILE_SYSTEM_TYPE" "$FILE_SYSTEM_TYPE" "ext4 btrfs f2fs xfs" check_variables_value "PING_HOSTNAME" "$PING_HOSTNAME" check_variables_value "PACMAN_MIRROR" "$PACMAN_MIRROR" check_variables_list "KERNELS" "$KERNELS" "linux-lts linux-lts-headers linux-hardened linux-hardened-headers linux-zen linux-zen-headers" "false" @@ -333,69 +346,90 @@ function configure_network() { function partition() { print_step "partition()" - # clean - sgdisk --zap-all $DEVICE - wipefs -a $DEVICE - - # partition - if [ "$BIOS_TYPE" == "uefi" ]; then - if [ "$DEVICE_SATA" == "true" ]; then - PARTITION_BOOT="${DEVICE}1" - PARTITION_ROOT="${DEVICE}2" - #PARTITION_BOOT_NUMBER=1 - DEVICE_ROOT="${DEVICE}2" + # setup + PARTITON_PARTED_UEFI="mklabel gpt mkpart primary fat32 1MiB 512MiB mkpart primary $FILE_SYSTEM_TYPE 512MiB 100% set 1 boot on" + PARTITON_PARTED_BIOS="mklabel gpt mkpart primary fat32 1MiB 128MiB mkpart primary $FILE_SYSTEM_TYPE 128MiB 512MiB mkpart primary $FILE_SYSTEM_TYPE 512MiB 100% set 1 boot on" + + if [ "$PARTITION_MODE" == "auto" ]; then + # clean + sgdisk --zap-all $DEVICE + wipefs -a $DEVICE + + if [ "$BIOS_TYPE" == "uefi" ]; then + if [ "$DEVICE_SATA" == "true" ]; then + PARTITION_BOOT="${DEVICE}1" + PARTITION_ROOT="${DEVICE}2" + #PARTITION_BOOT_NUMBER=1 + DEVICE_ROOT="${DEVICE}2" + fi + + if [ "$DEVICE_NVME" == "true" ]; then + PARTITION_BOOT="${DEVICE}p1" + PARTITION_ROOT="${DEVICE}p2" + #PARTITION_BOOT_NUMBER=1 + DEVICE_ROOT="${DEVICE}p2" + fi + + if [ "$DEVICE_MMC" == "true" ]; then + PARTITION_BOOT="${DEVICE}p1" + PARTITION_ROOT="${DEVICE}p2" + #PARTITION_BOOT_NUMBER=1 + DEVICE_ROOT="${DEVICE}p2" + fi fi - if [ "$DEVICE_NVME" == "true" ]; then - PARTITION_BOOT="${DEVICE}p1" - PARTITION_ROOT="${DEVICE}p2" - #PARTITION_BOOT_NUMBER=1 - DEVICE_ROOT="${DEVICE}p2" - fi - - if [ "$DEVICE_MMC" == "true" ]; then - PARTITION_BOOT="${DEVICE}p1" - PARTITION_ROOT="${DEVICE}p2" - #PARTITION_BOOT_NUMBER=1 - DEVICE_ROOT="${DEVICE}p2" + if [ "$BIOS_TYPE" == "bios" ]; then + if [ "$DEVICE_SATA" == "true" ]; then + PARTITION_BIOS="${DEVICE}1" + PARTITION_BOOT="${DEVICE}2" + PARTITION_ROOT="${DEVICE}3" + #PARTITION_BOOT_NUMBER=2 + DEVICE_ROOT="${DEVICE}3" + fi + + if [ "$DEVICE_NVME" == "true" ]; then + PARTITION_BIOS="${DEVICE}p1" + PARTITION_BOOT="${DEVICE}p2" + PARTITION_ROOT="${DEVICE}p3" + #PARTITION_BOOT_NUMBER=2 + DEVICE_ROOT="${DEVICE}p3" + fi + + if [ "$DEVICE_MMC" == "true" ]; then + PARTITION_BIOS="${DEVICE}p1" + PARTITION_BOOT="${DEVICE}p2" + PARTITION_ROOT="${DEVICE}p3" + #PARTITION_BOOT_NUMBER=2 + DEVICE_ROOT="${DEVICE}p3" + fi fi + fi - parted -s $DEVICE mklabel gpt mkpart primary fat32 1MiB 512MiB mkpart primary $FILE_SYSTEM_TYPE 512MiB 100% set 1 boot on - sgdisk -t=1:ef00 $DEVICE - if [ "$LVM" == "true" ]; then - sgdisk -t=2:8e00 $DEVICE - fi + if [ "$PARTITION_MODE" == "custom" ]; then + PARTITON_PARTED_UEFI=$PARTITON_CUSTOM_PARTED_UEFI + PARTITON_PARTED_BIOS=$PARTITON_CUSTOM_PARTED_BIOS fi - if [ "$BIOS_TYPE" == "bios" ]; then - if [ "$DEVICE_SATA" == "true" ]; then - PARTITION_BIOS="${DEVICE}1" - PARTITION_BOOT="${DEVICE}2" - PARTITION_ROOT="${DEVICE}3" - #PARTITION_BOOT_NUMBER=2 - DEVICE_ROOT="${DEVICE}3" - fi + # partition + if [ "$BIOS_TYPE" == "uefi" ]; then + parted -s $DEVICE $PARTITON_PARTED_UEFI - if [ "$DEVICE_NVME" == "true" ]; then - PARTITION_BIOS="${DEVICE}p1" - PARTITION_BOOT="${DEVICE}p2" - PARTITION_ROOT="${DEVICE}p3" - #PARTITION_BOOT_NUMBER=2 - DEVICE_ROOT="${DEVICE}p3" - fi - - if [ "$DEVICE_MMC" == "true" ]; then - PARTITION_BIOS="${DEVICE}p1" - PARTITION_BOOT="${DEVICE}p2" - PARTITION_ROOT="${DEVICE}p3" - #PARTITION_BOOT_NUMBER=2 - DEVICE_ROOT="${DEVICE}p3" + if [ "$PARTITION_MODE" == "auto" ]; then + sgdisk -t=1:ef00 $DEVICE + if [ "$LVM" == "true" ]; then + sgdisk -t=2:8e00 $DEVICE + fi fi + fi - parted -s $DEVICE mklabel gpt mkpart primary fat32 1MiB 128MiB mkpart primary $FILE_SYSTEM_TYPE 128MiB 512MiB mkpart primary $FILE_SYSTEM_TYPE 512MiB 100% set 1 boot on - sgdisk -t=1:ef02 $DEVICE - if [ "$LVM" == "true" ]; then - sgdisk -t=3:8e00 $DEVICE + if [ "$BIOS_TYPE" == "bios" ]; then + parted -s $DEVICE $PARTITON_PARTED_BIOS + + if [ "$PARTITION_MODE" == "auto" ]; then + sgdisk -t=1:ef02 $DEVICE + if [ "$LVM" == "true" ]; then + sgdisk -t=3:8e00 $DEVICE + fi fi fi @@ -528,6 +562,17 @@ function configuration() { echo -e "$KEYMAP\n$FONT\n$FONT_MAP" > /mnt/etc/vconsole.conf echo $HOSTNAME > /mnt/etc/hostname + cat <<EOT > /mnt/etc/X11/xorg.conf.d/00-keyboard.conf +# Written by systemd-localed(8), read by systemd-localed and Xorg. It's +# probably wise not to edit this file manually. Use localectl(1) to +# instruct systemd-localed to update it. +Section "InputClass" + Identifier "system-keyboard" + MatchIsKeyboard "on" + Option "XkbLayout" "$KEYLAYOUT" +EndSection +EOT + if [ -n "$SWAP_SIZE" ]; then echo "vm.swappiness=10" > /mnt/etc/sysctl.d/99-sysctl.conf fi @@ -566,6 +611,9 @@ function mkinitcpio_configuration() { if [ "$FILE_SYSTEM_TYPE" == "btrfs" ]; then pacman_install "btrfs-progs" fi + if [ "$FILE_SYSTEM_TYPE" == "f2fs" ]; then + pacman_install "f2fs-tools" + fi if ["$BOOTLOADER" == "systemd"]; then HOOKS=$(echo $HOOKS | sed 's/!systemd/systemd/') @@ -660,6 +708,10 @@ function bootloader() { esac fi + if [ -n "$KERNELS_PARAMETERS" ]; then + CMDLINE_LINUX="$CMDLINE_LINUX $KERNELS_PARAMETERS" + fi + case "$BOOTLOADER" in "grub" ) grub |