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