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