Created
March 14, 2022 12:57
-
-
Save deccer/0e8b904001caf78166ac874c7e868dd7 to your computer and use it in GitHub Desktop.
Arch Linux - Base Install Script - UEFI LUKS LVM EXT4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -e | |
set -o pipefail | |
set -o errtrace | |
set -o nounset | |
set -o errexit | |
KEYMAP='us' | |
LANG='en_US' | |
TIMEZONE='Europe/Berlin' | |
FONT=Lat2-Terminus16 | |
BLOCKDEVICEDISK=/dev/sda | |
BLOCKDEVICEBOOT=/dev/sda1 | |
BLOCKDEVICECRYPT=/dev/sda2 | |
CRYPTDEVICE=archcrypt | |
VOLUMEGROUP=vg | |
LOGICALROOT=root | |
LOGICALROOTSIZE=8G | |
LOGICALSWAP=swap | |
LOGICALSWAPSIZE=2G | |
LOGICALHOME=home | |
MNT=/mnt | |
HOSTNAME=archbox | |
DEFAULTUSER=deccer | |
( | |
echo o | |
echo Y | |
echo n | |
echo 1 | |
echo | |
echo +256M | |
echo ef00 | |
echo n | |
echo 2 | |
echo | |
echo | |
echo 8e00 | |
echo w | |
echo Y | |
) | sudo gdisk $BLOCKDEVICEDISK > /dev/null | |
mkfs.fat -F 32 $BLOCKDEVICEBOOT | |
cryptsetup -v -y -c aes-xts-plain64 -s 512 luksFormat $BLOCKDEVICECRYPT | |
cryptsetup luksOpen /dev/sda2 $CRYPTDEVICE | |
pvcreate /dev/mapper/$CRYPTDEVICE -f | |
vgcreate $VOLUMEGROUP /dev/mapper/$CRYPTDEVICE -f | |
lvcreate -L$LOGICALSWAPSIZE $VOLUMEGROUP -n $LOGICALSWAP | |
lvcreate -L$LOGICALROOTSIZE $VOLUMEGROUP -n $LOGICALROOT | |
lvcreate -l 100%FREE $VOLUMEGROUP -n $LOGICALHOME -q -y | |
mkfs.ext4 /dev/mapper/$VOLUMEGROUP-$LOGICALROOT | |
mkfs.ext4 /dev/mapper/$VOLUMEGROUP-$LOGICALHOME | |
mkswap /dev/mapper/$VOLUMEGROUP-$LOGICALSWAP | |
swapon /dev/mapper/$VOLUMEGROUP-$LOGICALSWAP | |
mount /dev/mapper/$VOLUMEGROUP-$LOGICALROOT $MNT | |
mkdir -p $MNT/{boot,home} | |
mount $BLOCKDEVICEBOOT $MNT/boot | |
mount /dev/mapper/$VOLUMEGROUP-$LOGICALHOME $MNT/home | |
pacstrap $MNT base base-devel | |
genfstab -U $MNT >> /mnt/etc/fstab | |
arch-chroot $MNT ln -sf /usr/share/zoneinfo/$TIMEZONE /etc/localtime | |
arch-chroot $MNT hwclock --systohc | |
echo $LANG.UTF-8 UTF-8 > $MNT/etc/locale.gen | |
arch-chroot $MNT locale-gen | |
echo LANG=$LANG.UTF-8 >> $MNT/etc/locale.conf | |
echo KEYMAP=$KEYMAP > $MNT/etc/vconsole.conf | |
echo FONT=$FONT >> $MNT/etc/vconsole.conf | |
echo $HOSTNAME >> $MNT/etc/hostname | |
echo 127.0.0.1 $HOSTNAME.localdomain $HOSTNAME >> $MNT/etc/hosts | |
arch-chroot $MNT useradd -m -G wheel -s /bin/bash $DEFAULTUSER | |
echo 'root ALL=(ALL) ALL' > $MNT/etc/sudoers | |
echo '%wheel ALL=(ALL) ALL' >> $MNT/etc/sudoers | |
MKINITCPIOCONF=$MNT/etc/mkinitcpio.conf | |
echo 'MODULES=()' > $MKINITCPIOCONF | |
echo 'BINARIES=()' >> $MKINITCPIOCONF | |
echo 'FILES=()' >> $MKINITCPIOCONF | |
echo 'HOOKS=(base udev autodetect modconf block keymap keyboard encrypt lvm2 filesystems fsck)' >> $MKINITCPIOCONF | |
echo 'COMPRESSION=lzma' >> $MKINITCPIOCONF | |
arch-chroot $MNT mkinitcpio -p linux | |
LOADERCONF=$MNT/boot/loader/loader.conf | |
arch-chroot $MNT bootctl --path=/boot install | |
echo 'default arch' > $LOADERCONF | |
echo 'timeout 3' >> $LOADERCONF | |
echo 'editor 0' >> $LOADERCONF | |
BOOTENTRY=$MNT/boot/loader/entries/arch.conf | |
echo 'title Arch Linux' > $BOOTENTRY | |
echo 'linux /vmlinuz-linux' >> $BOOTENTRY | |
echo 'initrd /initramfs-linux.img' >> $BOOTENTRY | |
echo "options cryptdevice=UUID=$(blkid -s UUID -o value $BLOCKDEVICECRYPT):$CRYPTDEVICE root=/dev/mapper/$VOLUMEGROUP-$LOGICALROOT rw" >> $BOOTENTRY | |
arch-chroot $MNT systemctl enable dhcpcd.service | |
echo 'Installation almost complete. Setting passwords' | |
echo 'Choose a root password:' | |
arch-chroot $MNT passwd | |
echo Choose a password for $DEFAULTUSER: | |
arch-chroot $MNT passwd $DEFAULTUSER | |
umount -R $MNT | |
clear | |
echo 'Installation finished, please reboot now.' |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment