artix

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

install.sh (4701B)


      1 #!/bin/sh
      2 set -e
      3 
      4 cpuvendor=$(grep -m 1 'vendor_id' /proc/cpuinfo | awk '{print $3}')
      5 
      6 diskpart()
      7 {
      8   mkfs.fat -F32 /dev/"$bootdrive"
      9   case $encryption in
     10     0)
     11       mkfs.ext4 -F /dev/"$rootdrive"
     12       mount /dev/"$rootdrive" /mnt
     13       ;;
     14     1)
     15       printf "%s" "$cryptpass" | cryptsetup luksFormat /dev/"$rootdrive" -d -
     16       printf "%s" "$cryptpass" | cryptsetup open /dev/"$rootdrive" cryptlvm -d -
     17       mkfs.ext4 -F /dev/mapper/cryptlvm
     18       mount /dev/mapper/cryptlvm /mnt
     19       ;;
     20   esac
     21   mkdir /mnt/boot
     22   mkdir /mnt/home
     23 }
     24 
     25 binkernel()
     26 {
     27   mount /dev/"$bootdrive" /mnt/boot
     28   pacman -Sy --confirm
     29   case $kerneltype in
     30     1) basestrap /mnt base dinit seatd-dinit linux ;;
     31     2) basestrap /mnt base dinit seatd-dinit linux-zen ;;
     32     *) printf "Invalid kernel" && exit 1 ;;
     33   esac
     34   if [ "$encryption" = 1 ]; then
     35     basestrap /mnt cryptsetup lvm2 lvm2-dinit
     36   fi
     37   mkdir -p /mnt/usr/lib/systemd/boot/efi
     38   cp linuxx64.efi.stub /mnt/usr/lib/systemd/boot/efi
     39 }
     40 
     41 customkernel()
     42 {
     43   mount /dev/"$bootdrive" /mnt/boot
     44   pacman -Sy --confirm
     45   basestrap /mnt base dinit seatd-dinit
     46   cp .config /mnt/usr/src
     47 }
     48 
     49 getpass()
     50 {
     51   stty -echo
     52   read -r choice
     53   stty echo
     54   echo "$choice"
     55 }
     56 
     57 getuserdata()
     58 {
     59   printf "Enter root password: "
     60   rootpass=$(getpass)
     61   echo
     62   printf "Enter username: "
     63   read -r username
     64   printf "Enter password for %s: " "$username"
     65   userpass=$(getpass)
     66   echo
     67   printf "Enter hostname: "
     68   read -r hostname
     69   printf "Choose Linux Kernel:\n1. Default kernel\n2. Zen kernel\n3. Custom kernel\nYour choose: "
     70   read -r kerneltype
     71   printf "Enter disk label (e.g. sda, nvme0n1p <- p is mandatory in nvme case): "
     72   read -r diskdrive
     73   printf "Enter space-separated partition numbers (e.g., 5 6 for 5 boot 6 root): "
     74   read -r partitions
     75   case "$diskdrive" in
     76     nvme[0-9]*n[0-9]* | mmcblk[0-9]*)
     77       partprefix="p"
     78       ;;
     79     *)
     80       partprefix=""
     81       ;;
     82   esac
     83   rootdrive="$diskdrive$partprefix${partitions##* }"
     84   bootdrive="$diskdrive$partprefix${partitions%% *}"
     85   while true; do
     86     clear
     87     printf "Your CPU Vendor detected as %s, is that right? Y/N: " "$cpuvendor"
     88     read -r answer
     89     case "$answer" in
     90       y|Y)
     91         break ;;
     92       n|N)
     93         echo "Something wrong. Exiting..."
     94         exit 1 ;;
     95       *)
     96         echo "Invalid response. Please enter 'y' or 'n'." && sleep 3 ;;
     97     esac
     98   done
     99   while true; do
    100     clear
    101     printf "Do you want to use encryption (LUKS)? Y/N: "
    102     read -r answer
    103     case "$answer" in
    104       y|Y)
    105         encryption=1
    106         break ;;
    107       n|N)
    108         encryption=0
    109         exit 1 ;;
    110       *)
    111         echo "Invalid response. Please enter 'y' or 'n'." && sleep 3 ;;
    112     esac
    113   done
    114   if [ "$encryption" = 1 ]; then
    115     printf "Enter the passphrase for encrypted volumes: "
    116     cryptpass=$(getpass)
    117   fi
    118 }
    119 
    120 clear
    121 getuserdata
    122 diskpart
    123 
    124 # pacman -Sy --noconfirm pacman-contrib
    125 clear
    126 # printf "Getting fastest mirrors..."
    127 # cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
    128 # rankmirrors -n 5 /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist
    129 
    130 case $kerneltype in
    131   1 | 2) binkernel ;;
    132   3) customkernel ;;
    133   *) printf "Invalid kernel type" && exit 1 ;;
    134 esac
    135 
    136 case $cpuvendor in
    137   GenuineIntel)
    138     basestrap /mnt intel-ucode
    139     if [ "$kerneltype" = 3 ]; then
    140       pacman -S iucode-tool --noconfirm
    141       CPUFAM=$(printf '%02x\n' "$(lscpu | grep -E '^CPU family:' | awk '{print $3}')")
    142       MODEL=$(printf '%02x\n' "$(lscpu | grep -E '^Model:' | awk '{print $2}')")
    143       STEPPING=$(printf '%02x\n' "$(lscpu | grep -E '^Stepping:' | awk '{print $2}')")
    144       MICROCODE_PATH="intel-ucode/$CPUFAM-$MODEL-$STEPPING"
    145       THREAD_NUM=$(nproc)
    146       sed -i "s#CONFIG_EXTRA_FIRMWARE=.*#CONFIG_EXTRA_FIRMWARE=\"$MICROCODE_PATH\"#g" /mnt/usr/src/.config
    147       sed -i "s#CONFIG_NR_CPUS=.*#CONFIG_NR_CPUS=$THREAD_NUM#g" /mnt/usr/src/.config
    148     fi
    149     ;;
    150   AuthenticAMD)
    151     basestrap /mnt amd-ucode ;;
    152   *)
    153     printf "Unsupported CPU Vendor. Possibly there is error in detection script.\n" && exit 1 ;;
    154 esac
    155 
    156 UUID_ROOT=$(blkid -s UUID -o value /dev/"$rootdrive")
    157 UUID_BOOT=$(blkid -s UUID -o value /dev/"$bootdrive")
    158 
    159 echo "UUID=$UUID_BOOT /boot vfat defaults,noatime 0 2" > /mnt/etc/fstab
    160 echo "UUID=$UUID_ROOT / ext4 defaults,noatime 0 1" >> /mnt/etc/fstab
    161 
    162 export diskdrive
    163 export rootdrive
    164 export bootdrive
    165 export hostname
    166 export username
    167 export rootpass
    168 export userpass
    169 export kerneltype
    170 export partitions
    171 export encryption
    172 export cryptpass
    173 
    174 cp post_chroot.sh /mnt
    175 cp -f /etc/pacman.d/mirrorlist /mnt/etc/pacman.d/mirrorlist
    176 artix-chroot /mnt ./post_chroot.sh
    177 
    178 # cleaning up
    179 if [ "$kerneltype" != 3 ]; then
    180   rm /mnt/boot/*.img
    181 fi
    182 
    183 umount -R /mnt
    184 
    185 echo "Linux is successfully installed!"