Skip to content

Instantly share code, notes, and snippets.

@deccer
Created March 14, 2022 12:57
Show Gist options
  • Save deccer/0e8b904001caf78166ac874c7e868dd7 to your computer and use it in GitHub Desktop.
Save deccer/0e8b904001caf78166ac874c7e868dd7 to your computer and use it in GitHub Desktop.
Arch Linux - Base Install Script - UEFI LUKS LVM EXT4
#!/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