2024-02-20 20:27:42 +01:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
|
|
# This script is used to install and setup a sandbox.
|
|
|
|
|
|
|
|
PACKAGES=(
|
2024-04-29 17:28:02 +02:00
|
|
|
"linux-lts" "linux-firmware" "base" "base-devel" "syslinux" "vi" "emacs" "vim" "nano"
|
|
|
|
"micro" "neovim" "bash-completion" "btop" "gdu" "neofetch" "git" "curl" "wget" "rsync"
|
2024-04-29 17:31:49 +02:00
|
|
|
"unzip" "zip" "gdb" "jdk-openjdk" "openjdk-doc" "tcpdump" "openssh" "bind" "inetutils"
|
|
|
|
"nmap" "firefox" "firefox-i18n-fr" "libreoffice" "libreoffice-fr" "rpcbind" "nfs-utils"
|
|
|
|
"xfce4" "xfce4-goodies" "yakuake" "gimp" "xorg" "xf86-video-vesa" "xf86-video-dummy"
|
|
|
|
"ttf-dejavu" "ttf-liberation" "ttf-bitstream-vera" "acpid" "sdl12-compat" "sdl_ttf"
|
|
|
|
"sdl_gfx" "sdl_image" "sdl_mixer" "sdl_net" "sdl_sound" "sdl2_gfx" "sdl2_image"
|
|
|
|
"sdl2_mixer" "sdl2_net" "sdl2_ttf" "dosfstools" "ntfs-3g" "ntp" "subversion" "cvs" "git"
|
|
|
|
"breezy" "python" "wireshark-qt" "wireshark-cli" "evince" "dbus" "mlocate" "gvfs"
|
|
|
|
"strace" "net-tools" "postfix" "sudo" "gtksourceview3" "mplayer" "cronie" "optipng"
|
|
|
|
"lib32-glibc" "libvirt" "qt5" "xterm" "graphviz" "vlc" "pulseaudio" "pulseaudio-alsa"
|
|
|
|
"tmux" "sleuthkit" "tk" "tcl" "xterm" "junit" "lightdm" "samba" "bind" "krb5" "tree"
|
|
|
|
"time" "noto-fonts" "noto-fonts-cjk" "noto-fonts-emoji" "noto-fonts-extra" "numlockx"
|
2024-04-29 23:12:38 +02:00
|
|
|
"lightdm-gtk-greeter" "tigervnc" "xfce4-pulseaudio-plugin"
|
2024-02-20 20:27:42 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
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
|
2024-02-23 18:32:03 +01:00
|
|
|
ExecStart=
|
2024-02-20 20:27:42 +01:00
|
|
|
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
|
2024-04-29 17:28:02 +02:00
|
|
|
LINUX ../vmlinuz-linux-lts
|
|
|
|
INITRD ../initramfs-linux-lts.img
|
2024-02-20 20:27:42 +01:00
|
|
|
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
|