artix

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

install.sh (4723B)


      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.btrfs /dev/mapper/cryptlvm
     18       mount -o compress=zstd /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 elogind-dinit linux ;;
     31     2) basestrap /mnt base dinit elogind-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 elogind-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   rootdrive="$diskdrive${partitions##* }"
     76   bootdrive="$diskdrive${partitions%% *}"
     77   while true; do
     78     clear
     79     printf "Your CPU Vendor detected as %s, is that right? Y/N: " "$cpuvendor"
     80     read -r answer
     81     case "$answer" in
     82       y|Y)
     83         break ;;
     84       n|N)
     85         echo "Something wrong. Exiting..."
     86         exit 1 ;;
     87       *)
     88         echo "Invalid response. Please enter 'y' or 'n'." && sleep 3 ;;
     89     esac
     90   done
     91   while true; do
     92     clear
     93     printf "Do you want to use encryption (LUKS)? Y/N: "
     94     read -r answer
     95     case "$answer" in
     96       y|Y)
     97         encryption=1
     98         break ;;
     99       n|N)
    100         encryption=0
    101         exit 1 ;;
    102       *)
    103         echo "Invalid response. Please enter 'y' or 'n'." && sleep 3 ;;
    104     esac
    105   done
    106   if [ "$encryption" = 1 ]; then
    107     printf "Enter the passphrase for encrypted volumes: "
    108     cryptpass=$(getpass)
    109   fi
    110 }
    111 
    112 clear
    113 getuserdata
    114 diskpart
    115 
    116 # pacman -Sy --noconfirm pacman-contrib
    117 clear
    118 # printf "Getting fastest mirrors..."
    119 # cp /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.backup
    120 # rankmirrors -n 5 /etc/pacman.d/mirrorlist.backup > /etc/pacman.d/mirrorlist
    121 
    122 case $kerneltype in
    123   1 | 2) binkernel ;;
    124   3) customkernel ;;
    125   *) printf "Invalid kernel type" && exit 1 ;;
    126 esac
    127 
    128 case $cpuvendor in
    129   GenuineIntel)
    130     basestrap /mnt intel-ucode
    131     if [ "$kerneltype" = 3 ]; then
    132       pacman -S iucode-tool --noconfirm
    133       CPUFAM=$(printf '%02x\n' "$(lscpu | grep -E '^CPU family:' | awk '{print $3}')")
    134       MODEL=$(printf '%02x\n' "$(lscpu | grep -E '^Model:' | awk '{print $2}')")
    135       STEPPING=$(printf '%02x\n' "$(lscpu | grep -E '^Stepping:' | awk '{print $2}')")
    136       MICROCODE_PATH="intel-ucode/$CPUFAM-$MODEL-$STEPPING"
    137       THREAD_NUM=$(nproc)
    138       sed -i "s#CONFIG_EXTRA_FIRMWARE=.*#CONFIG_EXTRA_FIRMWARE=\"$MICROCODE_PATH\"#g" /mnt/usr/src/.config
    139       sed -i "s#CONFIG_NR_CPUS=.*#CONFIG_NR_CPUS=$THREAD_NUM#g" /mnt/usr/src/.config
    140     fi
    141     ;;
    142   AuthenticAMD)
    143     basestrap /mnt amd-ucode ;;
    144   *)
    145     printf "Unsupported CPU Vendor. Possibly there is error in detection script.\n" && exit 1 ;;
    146 esac
    147 
    148 UUID_ROOT=$(blkid -s UUID -o value /dev/"$rootdrive")
    149 UUID_BOOT=$(blkid -s UUID -o value /dev/"$bootdrive")
    150 
    151 echo "UUID=$UUID_BOOT /boot vfat defaults,noatime 0 2" > /mnt/etc/fstab
    152 
    153 if [ "$encryption" = 1 ]; then
    154   echo "UUID=$UUID_ROOT / btrfs defaults,noatime,compress=zstd 0 1" >> /mnt/etc/fstab
    155 else
    156   echo "UUID=$UUID_ROOT / ext4 defaults,noatime 0 1" >> /mnt/etc/fstab
    157 fi
    158 
    159 export diskdrive
    160 export rootdrive
    161 export bootdrive
    162 export hostname
    163 export username
    164 export rootpass
    165 export userpass
    166 export kerneltype
    167 export partitions
    168 export encryption
    169 export cryptpass
    170 
    171 cp post_chroot.sh /mnt
    172 cp -f /etc/pacman.d/mirrorlist /mnt/etc/pacman.d/mirrorlist
    173 artix-chroot /mnt ./post_chroot.sh
    174 
    175 # cleaning up
    176 if [ "$kerneltype" != 3 ]; then
    177   rm /mnt/boot/*.img
    178   rm /mnt/boot/vmlinuz-linux
    179 fi
    180 
    181 umount -R /mnt
    182 
    183 echo "Linux is successfully installed!"