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