Skip to content

Instantly share code, notes, and snippets.

@deccer
Last active March 14, 2022 12:55
Show Gist options
  • Save deccer/f8d07eaf4ea8e004fea11a964b2236b5 to your computer and use it in GitHub Desktop.
Save deccer/f8d07eaf4ea8e004fea11a964b2236b5 to your computer and use it in GitHub Desktop.
Arch Linux - Base Install Script - UEFI 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
BLOCKDEVICELVM=/dev/sda2
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
pvcreate $BLOCKDEVICELVM -f
vgcreate $VOLUMEGROUP $BLOCKDEVICELVM -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 lvm2 filesystems keyboard 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 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