artix

posix artix installation script
git clone https://git.awy.one/artix.git
Log | Files | Refs | README | LICENSE

install.sh (3595B)


      1 #!/bin/sh
      2 set -e
      3 
      4 dinitctl start ntpd
      5 
      6 cpuvendor=$(grep -m 1 'vendor_id' /proc/cpuinfo | awk '{print $3}')
      7 
      8 diskpart()
      9 {
     10   mkfs.fat -F32 /dev/"$bootdrive"
     11   mkfs.ext4 -F /dev/"$rootdrive"
     12   mount /dev/"$rootdrive" /mnt
     13   mkdir /mnt/boot
     14   mkdir /mnt/home
     15 }
     16 
     17 binkernel()
     18 {
     19   mkdir /mnt/boot/efi
     20   mount /dev/"$bootdrive" /mnt/boot/efi
     21   pacman -Sy --confirm
     22   case $kerneltype in
     23     1) basestrap /mnt base dinit elogind-dinit linux linux-headers ;;
     24     2) basestrap /mnt base dinit elogind-dinit linux-zen linux-zen-headers ;;
     25     *) printf "Invalid kernel" && exit 1 ;;
     26   esac
     27 }
     28 
     29 customkernel()
     30 {
     31   mount /dev/"$bootdrive" /mnt/boot
     32   pacman -Sy --confirm
     33   basestrap /mnt base dinit elogind-dinit
     34   cp .config /mnt/usr/src
     35 }
     36 
     37 getpass()
     38 {
     39   stty -echo
     40   read -r choice
     41   stty echo
     42   echo "$choice"
     43 }
     44 
     45 getuserdata()
     46 {
     47   printf "Enter root password: "
     48   rootpass=$(getpass)
     49   echo
     50   printf "Enter username: "
     51   read -r username
     52   printf "Enter password for %s: " "$username"
     53   userpass=$(getpass)
     54   echo
     55   printf "Enter hostname: "
     56   read -r hostname
     57   printf "Choose Linux Kernel:\n1. Default kernel\n2. Zen kernel\n3. Custom kernel\nYour choose: "
     58   read -r kerneltype
     59   printf "Enter disk label (e.g. sda, nvme0n1p <- p is mandatory in nvme case): "
     60   read -r diskdrive
     61   printf "Enter space-separated partition numbers (e.g., 5 6 for 5 boot 6 root): "
     62   read -r partitions
     63   rootdrive="$diskdrive${partitions##* }"
     64   bootdrive="$diskdrive${partitions%% *}"
     65   while true; do
     66     clear
     67     printf "Your CPU Vendor detected as %s, is that right? Y/N: " "$cpuvendor"
     68     read -r answer
     69     case "$answer" in
     70       y|Y)
     71         break ;;
     72       n|N)
     73         echo "Something wrong. Exiting..."
     74         exit 1 ;;
     75       *)
     76         echo "Invalid response. Please enter 'y' or 'n'." && sleep 3 ;;
     77     esac
     78   done
     79 }
     80 
     81 clear
     82 getuserdata
     83 diskpart
     84 
     85 case $kerneltype in
     86   1 | 2) binkernel ;;
     87   3) customkernel ;;
     88   *) printf "Invalid kernel type" && exit 1 ;;
     89 esac
     90 
     91 case $cpuvendor in
     92   GenuineIntel)
     93     basestrap /mnt intel-ucode
     94     if [ "$kerneltype" = 3 ]; then
     95       pacman -S iucode-tool --noconfirm
     96       CPUFAM=$(printf '%02x\n' "$(lscpu | grep -E '^CPU family:' | awk '{print $3}')")
     97       MODEL=$(printf '%02x\n' "$(lscpu | grep -E '^Model:' | awk '{print $2}')")
     98       STEPPING=$(printf '%02x\n' "$(lscpu | grep -E '^Stepping:' | awk '{print $2}')")
     99       MICROCODE_PATH="intel-ucode/$CPUFAM-$MODEL-$STEPPING"
    100       THREAD_NUM=$(nproc)
    101       sed -i "s#CONFIG_EXTRA_FIRMWARE=.*#CONFIG_EXTRA_FIRMWARE=\"$MICROCODE_PATH\"#g" /mnt/usr/src/.config
    102       sed -i "s#CONFIG_NR_CPUS=.*#CONFIG_NR_CPUS=$THREAD_NUM#g" /mnt/usr/src/.config
    103     fi
    104     ;;
    105   AuthenticAMD)
    106     basestrap /mnt amd-ucode ;;
    107   *)
    108     printf "Unsupported CPU Vendor. Possibly there is error in detection script.\n" && exit 1 ;;
    109 esac
    110 
    111 UUID_ROOT=$(blkid -s UUID -o value /dev/"$rootdrive")
    112 UUID_BOOT=$(blkid -s UUID -o value /dev/"$bootdrive")
    113 
    114 if [ "$kerneltype" = 3 ]; then
    115   echo "UUID=$UUID_BOOT /boot vfat defaults,noatime 0 2" > /mnt/etc/fstab
    116 else
    117   echo "UUID=$UUID_BOOT /boot/efi vfat defaults,noatime 0 2" > /mnt/etc/fstab
    118 fi
    119 
    120 echo "UUID=$UUID_ROOT / ext4 defaults,noatime 0 1" >> /mnt/etc/fstab
    121 
    122 export diskdrive
    123 export rootdrive
    124 export bootdrive
    125 export hostname
    126 export username
    127 export rootpass
    128 export userpass
    129 export kerneltype
    130 export partitions
    131 
    132 cp post_chroot.sh /mnt
    133 artix-chroot /mnt ./post_chroot.sh
    134 
    135 if [ "$kerneltype" != 3 ]; then
    136   mv /mnt/boot/efi/EFI/grub /mnt/boot/efi/EFI/BOOT
    137   mv /mnt/boot/efi/EFI/BOOT/grubx64.efi /mnt/boot/efi/EFI/BOOT/BOOTX64.EFI
    138 fi
    139 
    140 umount -R /mnt
    141 
    142 echo "Linux is successfully installed!"