diff --git a/scripts/sandbox-install b/scripts/sandbox-install new file mode 100644 index 0000000..c8cd12f --- /dev/null +++ b/scripts/sandbox-install @@ -0,0 +1,132 @@ +#!/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 < /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