133 lines
3.1 KiB
Plaintext
133 lines
3.1 KiB
Plaintext
|
#!/bin/bash
|
||
|
|
||
|
# This script is used to install and setup a sandbox.
|
||
|
|
||
|
PACKAGES=(
|
||
|
"base" "base-devel" "linux" "linux-firmware" "syslinux"
|
||
|
"vi" "vim" "nano" "micro" "neovim" "emacs"
|
||
|
"bash-completion" "btop" "gdu" "tmux" "neofetch"
|
||
|
"git" "openssh" "curl" "wget" "rsync" "unzip" "zip"
|
||
|
)
|
||
|
|
||
|
SWAP_SIZE=16G
|
||
|
|
||
|
# Enable time synchronization
|
||
|
timedatectl set-ntp true
|
||
|
|
||
|
# Wait for the clock to be synchronized
|
||
|
while :; do
|
||
|
timedatectl status | grep "synchronized: yes" && break
|
||
|
sleep 1
|
||
|
done
|
||
|
|
||
|
# Wait a few seconds for everything to be ready
|
||
|
sleep 20
|
||
|
|
||
|
# Switch the disk to MBR without confirmation
|
||
|
parted /dev/sda mklabel msdos --script
|
||
|
|
||
|
# Create the swap and root partitions
|
||
|
parted /dev/sda mkpart primary linux-swap 1MiB $SWAP_SIZE --script
|
||
|
parted /dev/sda mkpart primary ext4 $SWAP_SIZE 100% --script
|
||
|
|
||
|
# Format the partitions
|
||
|
mkswap /dev/sda1
|
||
|
mkfs.ext4 /dev/sda2 -F
|
||
|
|
||
|
# Mount the partitions
|
||
|
swapon /dev/sda1
|
||
|
mount /dev/sda2 /mnt
|
||
|
|
||
|
# Enable parallel downloads in pacman
|
||
|
sed -i "s/#ParallelDownloads = 5/ParallelDownloads = 16/" /etc/pacman.conf
|
||
|
|
||
|
# Update the keyring
|
||
|
pacman -Sy --noconfirm archlinux-keyring
|
||
|
|
||
|
# Install the base system
|
||
|
pacstrap -K /mnt "${PACKAGES[@]}"
|
||
|
|
||
|
# Generate the fstab file
|
||
|
genfstab -U /mnt >>/mnt/etc/fstab
|
||
|
|
||
|
# Chroot into the new system
|
||
|
arch-chroot /mnt /bin/bash <<EOF
|
||
|
# Disable history in the shell
|
||
|
set +o history
|
||
|
|
||
|
# Set the timezone
|
||
|
ln -sf /usr/share/zoneinfo/Europe/Paris /etc/localtime
|
||
|
|
||
|
# Set the hardware clock time standard
|
||
|
hwclock --systohc
|
||
|
|
||
|
# Generate the locales
|
||
|
sed -i "s/#en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/" /etc/locale.gen
|
||
|
sed -i "s/#fr_FR.UTF-8 UTF-8/fr_FR.UTF-8 UTF-8/" /etc/locale.gen
|
||
|
locale-gen
|
||
|
|
||
|
# Set the default locale
|
||
|
echo "LANG=en_US.UTF-8" > /etc/locale.conf
|
||
|
|
||
|
# Set the keyboard layout
|
||
|
echo "KEYMAP=fr-latin1" > /etc/vconsole.conf
|
||
|
|
||
|
# Set the hostname
|
||
|
echo "sandbox" > /etc/hostname
|
||
|
|
||
|
# Set the root password
|
||
|
echo "root:root" | chpasswd
|
||
|
|
||
|
# Install syslinux
|
||
|
syslinux-install_update -iam
|
||
|
|
||
|
# Configure the network for DHCP
|
||
|
echo "[Match]
|
||
|
Name=en*
|
||
|
|
||
|
[Network]
|
||
|
DHCP=yes
|
||
|
" > /etc/systemd/network/20-wired.network
|
||
|
|
||
|
# Enable automatic root login in the console
|
||
|
mkdir -p /etc/systemd/system/getty@tty1.service.d/
|
||
|
echo "[Service]
|
||
|
ExecStart=
|
||
|
ExecStart=-/usr/bin/agetty --autologin root --noclear %I \$TERM
|
||
|
" > /etc/systemd/system/getty@tty1.service.d/autologin.conf
|
||
|
|
||
|
# Create a service that runs fstrim -va on startup and shutdown
|
||
|
echo "[Unit]
|
||
|
Description=Discard unused blocks on the root filesystem
|
||
|
After=multi-user.target
|
||
|
|
||
|
[Service]
|
||
|
Type=oneshot
|
||
|
ExecStart=/usr/bin/fstrim -va
|
||
|
ExecStop=/usr/bin/fstrim -va
|
||
|
RemainAfterExit=yes
|
||
|
|
||
|
[Install]
|
||
|
WantedBy=multi-user.target
|
||
|
" > /etc/systemd/system/fstrim.service
|
||
|
|
||
|
# Create the syslinux configuration file, to instantly boot into the system
|
||
|
echo "DEFAULT arch
|
||
|
LABEL arch
|
||
|
LINUX ../vmlinuz-linux
|
||
|
INITRD ../initramfs-linux.img
|
||
|
APPEND root=/dev/sda2 rw resume=/dev/sda1
|
||
|
" > /boot/syslinux/syslinux.cfg
|
||
|
|
||
|
# Enable the services
|
||
|
systemctl enable systemd-networkd.service
|
||
|
systemctl enable systemd-resolved.service
|
||
|
systemctl enable systemd-timesyncd.service
|
||
|
systemctl enable fstrim.service
|
||
|
|
||
|
EOF
|
||
|
|
||
|
# Unmount the partitions
|
||
|
swapoff /dev/sda1
|
||
|
umount -R /mnt
|