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!"