diff options
author | pico.dev <pico.dev@gmail.com> | 2020-03-03 22:38:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-03 22:38:12 +0100 |
commit | 620f5898658d52310e46e553e39d0e98722e0457 (patch) | |
tree | 950950754e38e5c60fe48382347ac77bac399c2e | |
parent | 6ecf320800b48f9afd3df5374bd6e1a32c1fd0ff (diff) | |
parent | 3d3a34cac6f24d9c20884b6f9f42593f00b44c62 (diff) |
Merge pull request #70 from picodotdev/sid
New features and updates
-rw-r--r-- | README.md | 6 | ||||
-rw-r--r-- | alis-recovery.sh | 18 | ||||
-rw-r--r-- | alis.conf | 7 | ||||
-rw-r--r-- | alis.sh | 188 |
4 files changed, 147 insertions, 72 deletions
@@ -22,12 +22,12 @@ 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 (no swap), xfs -* Optional file swap +* File system formats ext4, btrfs (with subvols), xfs +* Optional file swap (not supported in btrfs) * WPA WIFI network installation * Periodic TRIM for SSD storage * VirtualBox guest utils -* Intel processors microcode +* Intel and AMD processors microcode * Users creation and add to sudoers * Common and custom packages installation * AUR utility installation (aurman, yay) diff --git a/alis-recovery.sh b/alis-recovery.sh index a67cbe5..0f8421e 100644 --- a/alis-recovery.sh +++ b/alis-recovery.sh @@ -63,7 +63,7 @@ PARTUUID_ROOT="" DEVICE_SATA="" DEVICE_NVME="" DEVICE_MMC="" -CPU_INTEL="" +CPU_VENDOR="" VIRTUALBOX="" CMDLINE_LINUX_ROOT="" CMDLINE_LINUX="" @@ -310,14 +310,22 @@ function partition() { DEVICE_ROOT="/dev/mapper/$DEVICE_ROOT_MAPPER" fi - PARTITION_OPTIONS="" + PARTITION_OPTIONS="defaults" if [ "$DEVICE_TRIM" == "true" ]; then - PARTITION_OPTIONS="defaults,noatime" + PARTITION_OPTIONS="$PARTITION_OPTIONS,noatime" fi - mount -o "$PARTITION_OPTIONS" $DEVICE_ROOT /mnt - mount -o "$PARTITION_OPTIONS" $PARTITION_BOOT /mnt/boot + 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 + mount -o "subvol=home,$PARTITION_OPTIONS,compress=lzo" "$DEVICE_ROOT" /mnt/home + mount -o "subvol=var,$PARTITION_OPTIONS,compress=lzo" "$DEVICE_ROOT" /mnt/var + mount -o "subvol=snapshots,$PARTITION_OPTIONS,compress=lzo" "$DEVICE_ROOT" /mnt/snapshots + else + mount -o "$PARTITION_OPTIONS" $DEVICE_ROOT /mnt + mount -o "$PARTITION_OPTIONS" $PARTITION_BOOT /mnt/boot + fi } function recovery() { @@ -10,11 +10,11 @@ LOG="false" # partition DEVICE="/dev/sda !/dev/nvme0n1 !/dev/mmcblk0" # sata nvme mmc (single) DEVICE_TRIM="true" # If DEVICE supports TRIM -LVM="true" # True if use LVM for partitioning +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) -SWAP_SIZE="!2GiB !4GiB !8GiB" # (single, not supported in btrfs) +SWAP_SIZE="!2GiB !4GiB !8GiB" # (single) # network_install WIFI_INTERFACE="" @@ -47,6 +47,9 @@ USER_PASSWORD_RETYPE="archlinux" ADDITIONAL_USER_NAMES="" # list separated by space ADDITIONAL_USER_PASSWORDS="" # list separated by space +# mkinitcpio +HOOKS="base !udev !usr !resume !systemd !btrfs keyboard autodetect modconf block !net !dmraid !mdadm !mdadm_udev !keymap !consolefont !sd-vconsole !encrypt !lvm2 !sd-encrypt !sd-lvm2 fsck filesystems" + # bootloader BOOTLOADER="grub !refind !systemd" # (single) @@ -50,6 +50,7 @@ LVM_DEVICE="" LVM_VOLUME_PHISICAL="lvm" LVM_VOLUME_GROUP="vg" LVM_VOLUME_LOGICAL="root" +SWAPFILE="" BOOT_DIRECTORY="" ESP_DIRECTORY="" #PARTITION_BOOT_NUMBER=0 @@ -60,7 +61,7 @@ PARTUUID_ROOT="" DEVICE_SATA="" DEVICE_NVME="" DEVICE_MMC="" -CPU_INTEL="" +CPU_VENDOR="" VIRTUALBOX="" CMDLINE_LINUX_ROOT="" CMDLINE_LINUX="" @@ -127,6 +128,7 @@ function check_variables() { check_variables_equals "ROOT_PASSWORD" "ROOT_PASSWORD_RETYPE" "$ROOT_PASSWORD" "$ROOT_PASSWORD_RETYPE" check_variables_equals "USER_PASSWORD" "USER_PASSWORD_RETYPE" "$USER_PASSWORD" "$USER_PASSWORD_RETYPE" check_variables_size "ADDITIONAL_USER_PASSWORDS" "${#ADDITIONAL_USER_NAMES_ARRAY[@]}" "${#ADDITIONAL_USER_PASSWORDS_ARRAY[@]}" + check_variables_value "HOOKS" "$HOOKS" check_variables_list "BOOTLOADER" "$BOOTLOADER" "grub refind systemd" check_variables_list "AUR" "$AUR" "aurman yay" "false" check_variables_list "DESKTOP_ENVIRONMENT" "$DESKTOP_ENVIRONMENT" "gnome kde xfce mate cinnamon lxde" "false" @@ -251,7 +253,9 @@ function facts() { fi if [ -n "$(lscpu | grep GenuineIntel)" ]; then - CPU_INTEL="true" + CPU_VENDOR="intel" + elif [ -n "$(lscpu | grep AuthenticAMD)" ]; then + CPU_VENDOR="amd" fi if [ -n "$(lspci | grep -i virtualbox)" ]; then @@ -328,9 +332,11 @@ 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" @@ -392,6 +398,7 @@ function partition() { fi fi + # luks and lvm if [ -n "$PARTITION_ROOT_ENCRYPTION_PASSWORD" ]; then LVM_DEVICE="/dev/mapper/$LVM_VOLUME_PHISICAL" else @@ -412,6 +419,7 @@ function partition() { DEVICE_ROOT="/dev/mapper/$LVM_VOLUME_GROUP-$LVM_VOLUME_LOGICAL" fi + # format if [ "$BIOS_TYPE" == "uefi" ]; then wipefs -a $PARTITION_BOOT wipefs -a $DEVICE_ROOT @@ -428,23 +436,46 @@ function partition() { mkfs."$FILE_SYSTEM_TYPE" -L root $DEVICE_ROOT fi - PARTITION_OPTIONS="" + PARTITION_OPTIONS="defaults" if [ "$DEVICE_TRIM" == "true" ]; then - PARTITION_OPTIONS="defaults,noatime" + PARTITION_OPTIONS="$PARTITION_OPTIONS,noatime" fi - mount -o "$PARTITION_OPTIONS" "$DEVICE_ROOT" /mnt + # mount + if [ "$FILE_SYSTEM_TYPE" == "btrfs" ]; then + mount -o "$PARTITION_OPTIONS" "$DEVICE_ROOT" /mnt + btrfs subvolume create /mnt/root + btrfs subvolume create /mnt/home + btrfs subvolume create /mnt/var + btrfs subvolume create /mnt/snapshots + umount /mnt + + mount -o "subvol=root,$PARTITION_OPTIONS,compress=lzo" "$DEVICE_ROOT" /mnt - mkdir /mnt/boot - mount -o "$PARTITION_OPTIONS" "$PARTITION_BOOT" /mnt/boot + mkdir /mnt/{boot,home,var,snapshots} + mount -o "$PARTITION_OPTIONS" "$PARTITION_BOOT" /mnt/boot + mount -o "subvol=home,$PARTITION_OPTIONS,compress=lzo" "$DEVICE_ROOT" /mnt/home + mount -o "subvol=var,$PARTITION_OPTIONS,compress=lzo" "$DEVICE_ROOT" /mnt/var + mount -o "subvol=snapshots,$PARTITION_OPTIONS,compress=lzo" "$DEVICE_ROOT" /mnt/snapshots + else + mount -o "$PARTITION_OPTIONS" "$DEVICE_ROOT" /mnt + + mkdir /mnt/{boot} + mount -o "$PARTITION_OPTIONS" "$PARTITION_BOOT" /mnt/boot + fi + # swap + # btrfs: https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F + # btrfs: https://wiki.archlinux.org/index.php/Btrfs#Disabling_CoW + # btrfs: https://jlk.fjfi.cvut.cz/arch/manpages/man/btrfs.5#MOUNT_OPTIONS if [ -n "$SWAP_SIZE" -a "$FILE_SYSTEM_TYPE" != "btrfs" ]; then - fallocate -l $SWAP_SIZE /mnt/swap - chmod 600 /mnt/swap - mkswap /mnt/swap + fallocate -l $SWAP_SIZE "/mnt/swapfile" + chmod 600 "/mnt/swapfile" + mkswap "/mnt/swapfile" fi + # set variables BOOT_DIRECTORY=/boot ESP_DIRECTORY=/boot UUID_BOOT=$(blkid -s UUID -o value $PARTITION_BOOT) @@ -468,15 +499,6 @@ function install() { sed -i 's/#TotalDownload/TotalDownload/' /mnt/etc/pacman.conf } -function kernels() { - print_step "kernels()" - - pacman_install "linux-headers" - if [ -n "$KERNELS" ]; then - pacman_install "$KERNELS" - fi -} - function configuration() { print_step "configuration()" @@ -484,7 +506,7 @@ function configuration() { if [ -n "$SWAP_SIZE" -a "$FILE_SYSTEM_TYPE" != "btrfs" ]; then echo "# swap" >> /mnt/etc/fstab - echo "/swap none swap defaults 0 0" >> /mnt/etc/fstab + echo "/swapfile none swap defaults 0 0" >> /mnt/etc/fstab echo "" >> /mnt/etc/fstab fi @@ -508,25 +530,8 @@ function configuration() { printf "$ROOT_PASSWORD\n$ROOT_PASSWORD" | arch-chroot /mnt passwd } -function network() { - print_step "network()" - - pacman_install "networkmanager" - arch-chroot /mnt systemctl enable NetworkManager.service -} - -function virtualbox() { - print_step "virtualbox()" - - if [ -z "$KERNELS" ]; then - pacman_install "virtualbox-guest-utils virtualbox-guest-modules-arch" - else - pacman_install "virtualbox-guest-utils virtualbox-guest-dkms" - fi -} - -function mkinitcpio() { - print_step "mkinitcpio()" +function mkinitcpio_configuration() { + print_step "mkinitcpio_configuration()" if [ "$KMS" == "true" ]; then MODULES="" @@ -547,37 +552,86 @@ function mkinitcpio() { MODULES="nouveau" ;; esac - arch-chroot /mnt sed -i "s/MODULES=()/MODULES=($MODULES)/" /etc/mkinitcpio.conf + arch-chroot /mnt sed -i "s/^MODULES=()/MODULES=($MODULES)/" /etc/mkinitcpio.conf fi if [ "$LVM" == "true" ]; then pacman_install "lvm2" fi + if [ "$FILE_SYSTEM_TYPE" == "btrfs" ]; then + pacman_install "btrfs-progs" + fi - if [ "$LVM" == "true" -a -n "$PARTITION_ROOT_ENCRYPTION_PASSWORD" ]; then - arch-chroot /mnt sed -i 's/ block / block keyboard keymap /' /etc/mkinitcpio.conf - arch-chroot /mnt sed -i 's/ filesystems keyboard / encrypt lvm2 filesystems /' /etc/mkinitcpio.conf - elif [ "$LVM" == "true" ]; then - arch-chroot /mnt sed -i 's/ filesystems / lvm2 filesystems /' /etc/mkinitcpio.conf - elif [ -n "$PARTITION_ROOT_ENCRYPTION_PASSWORD" ]; then - arch-chroot /mnt sed -i 's/ block / block keyboard keymap /' /etc/mkinitcpio.conf - arch-chroot /mnt sed -i 's/ filesystems keyboard / encrypt filesystems /' /etc/mkinitcpio.conf + if ["$BOOTLOADER" == "systemd"]; then + HOOKS=$(echo $HOOKS | sed 's/!systemd/systemd/') + if [ "$LVM" == "true" ]; then + HOOKS=$(echo $HOOKS | sed 's/!sd-lvm2/sd-lvm2/') + fi + if [ -n "$PARTITION_ROOT_ENCRYPTION_PASSWORD" ]; then + HOOKS=$(echo $HOOKS | sed 's/!sd-encrypt/sd-encrypt/') + fi + else + HOOKS=$(echo $HOOKS | sed 's/!udev/udev/') + HOOKS=$(echo $HOOKS | sed 's/!usr/usr/') + if [ "$LVM" == "true" ]; then + HOOKS=$(echo $HOOKS | sed 's/!lvm2/lvm2/') + fi + if [ -n "$PARTITION_ROOT_ENCRYPTION_PASSWORD" ]; then + HOOKS=$(echo $HOOKS | sed 's/!encrypt/encrypt/') + fi fi + HOOKS=$(sanitize_variable "$HOOKS") + arch-chroot /mnt sed -i "s/^HOOKS=(.*)$/HOOKS=($HOOKS)/" /etc/mkinitcpio.conf if [ "$KERNELS_COMPRESSION" != "" ]; then - arch-chroot /mnt sed -i "s/#COMPRESSION=\"$KERNELS_COMPRESSION\"/COMPRESSION=\"$KERNELS_COMPRESSION\"/" /etc/mkinitcpio.conf + arch-chroot /mnt sed -i 's/^#COMPRESSION="'"$KERNELS_COMPRESSION"'"/COMPRESSION="'"$KERNELS_COMPRESSION"'"/' /etc/mkinitcpio.conf fi +} + +function kernels() { + print_step "kernels()" + + pacman_install "linux-headers" + if [ -n "$KERNELS" ]; then + pacman_install "$KERNELS" + fi +} + +function mkinitcpio() { + print_step "mkinitcpio()" arch-chroot /mnt mkinitcpio -P } +function network() { + print_step "network()" + + pacman_install "networkmanager" + arch-chroot /mnt systemctl enable NetworkManager.service +} + +function virtualbox() { + print_step "virtualbox()" + + if [ -z "$KERNELS" ]; then + pacman_install "virtualbox-guest-utils virtualbox-guest-modules-arch" + else + pacman_install "virtualbox-guest-utils virtualbox-guest-dkms" + fi +} + function bootloader() { print_step "bootloader()" BOOTLOADER_ALLOW_DISCARDS="" - if [ "$CPU_INTEL" == "true" -a "$VIRTUALBOX" != "true" ]; then - pacman_install "intel-ucode" + if [ "$VIRTUALBOX" != "true" ]; then + if [ "$CPU_VENDOR" == "intel" ]; then + pacman_install "intel-ucode" + fi + if [ "$CPU_VENDOR" == "amd" ]; then + pacman_install "amd-ucode" + fi fi if [ "$LVM" == "true" ]; then CMDLINE_LINUX_ROOT="root=$DEVICE_ROOT" @@ -590,6 +644,9 @@ function bootloader() { fi CMDLINE_LINUX="cryptdevice=PARTUUID=$PARTUUID_ROOT:$LVM_VOLUME_PHISICAL$BOOTLOADER_ALLOW_DISCARDS" fi + if [ "$FILE_SYSTEM_TYPE" == "btrfs" ]; then + CMDLINE_LINUX="$CMDLINE_LINUX rootflags=subvol=root" + fi if [ "$KMS" == "true" ]; then case "$DISPLAY_DRIVER" in "nvidia" | "nvidia-390xx" | "nvidia-390xx-lts" ) @@ -616,7 +673,7 @@ function grub() { arch-chroot /mnt sed -i 's/GRUB_DEFAULT=0/GRUB_DEFAULT=saved/' /etc/default/grub arch-chroot /mnt sed -i 's/#GRUB_SAVEDEFAULT="true"/GRUB_SAVEDEFAULT="true"/' /etc/default/grub arch-chroot /mnt sed -i -E 's/GRUB_CMDLINE_LINUX_DEFAULT="(.*) quiet"/GRUB_CMDLINE_LINUX_DEFAULT="\1"/' /etc/default/grub - arch-chroot /mnt sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="'$CMDLINE_LINUX'"/' /etc/default/grub + arch-chroot /mnt sed -i 's/GRUB_CMDLINE_LINUX=""/GRUB_CMDLINE_LINUX="'"$CMDLINE_LINUX"'"/' /etc/default/grub echo "" >> /mnt/etc/default/grub echo "# alis" >> /mnt/etc/default/grub echo "GRUB_DISABLE_SUBMENU=y" >> /mnt/etc/default/grub @@ -649,8 +706,13 @@ function refind() { REFIND_MICROCODE="" - if [ "$CPU_INTEL" == "true" -a "$VIRTUALBOX" != "true" ]; then - REFIND_MICROCODE="initrd=/intel-ucode.img" + if [ "$VIRTUALBOX" != "true" ]; then + if [ "$CPU_VENDOR" == "intel" ]; then + REFIND_MICROCODE="initrd=/intel-ucode.img" + fi + if [ "$CPU_VENDOR" == "amd" ]; then + REFIND_MICROCODE="initrd=/amd-ucode.img" + fi fi echo "" >> "/mnt$ESP_DIRECTORY/EFI/refind/refind.conf" @@ -749,8 +811,13 @@ function systemd() { SYSTEMD_MICROCODE="" SYSTEMD_OPTIONS="" - if [ "$CPU_INTEL" == "true" -a "$VIRTUALBOX" != "true" ]; then - SYSTEMD_MICROCODE="/intel-ucode.img" + if [ "$VIRTUALBOX" != "true" ]; then + if [ "$CPU_VENDOR" == "intel" ]; then + SYSTEMD_MICROCODE="/intel-ucode.img" + fi + if [ "$CPU_VENDOR" == "amd" ]; then + SYSTEMD_MICROCODE="/amd-ucode.img" + fi fi if [ -n "$PARTITION_ROOT_ENCRYPTION_PASSWORD" ]; then @@ -988,10 +1055,6 @@ function desktop_environment_lxde() { function packages() { print_step "packages()" - if [ "$FILE_SYSTEM_TYPE" == "btrfs" ]; then - pacman_install "btrfs-progs" - fi - if [ -n "$PACKAGES_PACMAN" ]; then pacman_install "$PACKAGES_PACMAN" fi @@ -1124,14 +1187,15 @@ function main() { prepare partition install - kernels configuration + mkinitcpio_configuration + kernels + mkinitcpio network if [ "$VIRTUALBOX" == "true" ]; then virtualbox fi users - mkinitcpio bootloader if [ "$DESKTOP_ENVIRONMENT" != "" ]; then desktop_environment |