2021-03-26 18:03:50 +01:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
# Dependencies: wget tar gzip
|
|
|
|
# Root rights are required
|
|
|
|
|
|
|
|
if [ $EUID != 0 ]; then
|
|
|
|
echo "Root rights are required!"
|
2021-03-27 10:04:21 +01:00
|
|
|
|
2021-03-26 18:03:50 +01:00
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2021-05-27 22:16:50 +02:00
|
|
|
if ! command -v wget 1>/dev/null; then
|
|
|
|
echo "wget is required!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if ! command -v gzip 1>/dev/null; then
|
|
|
|
echo "gzip is required!"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
2021-03-26 18:03:50 +01:00
|
|
|
script_dir="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
|
|
|
|
|
|
|
|
mount_chroot () {
|
|
|
|
# First unmount just in case
|
|
|
|
umount -Rl "${bootstrap}"
|
2021-03-27 10:04:21 +01:00
|
|
|
|
2021-03-26 18:03:50 +01:00
|
|
|
mount --bind "${bootstrap}" "${bootstrap}"
|
2021-05-27 22:07:34 +02:00
|
|
|
mount -t proc /proc "${bootstrap}"/proc
|
2021-05-28 13:29:17 +02:00
|
|
|
mount --bind /sys "${bootstrap}"/sys
|
2021-05-28 12:14:00 +02:00
|
|
|
mount --make-rslave "${bootstrap}"/sys
|
2021-05-28 13:29:17 +02:00
|
|
|
mount --bind /dev "${bootstrap}"/dev
|
|
|
|
mount --bind /dev/pts "${bootstrap}"/dev/pts
|
|
|
|
mount --bind /dev/shm "${bootstrap}"/dev/shm
|
2021-05-28 12:14:00 +02:00
|
|
|
mount --make-rslave "${bootstrap}"/dev
|
2021-05-27 22:07:34 +02:00
|
|
|
|
|
|
|
rm -f "${bootstrap}"/etc/resolv.conf
|
|
|
|
cp /etc/resolv.conf "${bootstrap}"/etc/resolv.conf
|
2021-05-28 13:29:17 +02:00
|
|
|
|
|
|
|
mkdir -p "${bootstrap}"/run/shm
|
2021-03-26 18:03:50 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
unmount_chroot () {
|
2021-05-28 13:29:17 +02:00
|
|
|
umount -l "${bootstrap}"
|
|
|
|
umount "${bootstrap}"/proc
|
|
|
|
umount "${bootstrap}"/sys
|
|
|
|
umount "${bootstrap}"/dev/pts
|
|
|
|
umount "${bootstrap}"/dev/shm
|
|
|
|
umount "${bootstrap}"/dev
|
2021-03-26 18:03:50 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
run_in_chroot () {
|
|
|
|
chroot "${bootstrap}" /usr/bin/env LANG=en_US.UTF-8 TERM=xterm PATH="/bin:/sbin:/usr/bin:/usr/sbin" "$@"
|
|
|
|
}
|
|
|
|
|
|
|
|
generate_localegen () {
|
|
|
|
cat <<EOF > locale.gen
|
2021-03-27 10:04:21 +01:00
|
|
|
ar_EG.UTF-8 UTF-8
|
|
|
|
en_US.UTF-8 UTF-8
|
2021-05-27 15:19:07 +02:00
|
|
|
en_GB.UTF-8 UTF-8
|
|
|
|
en_CA.UTF-8 UTF-8
|
2021-03-27 10:04:21 +01:00
|
|
|
es_MX.UTF-8 UTF-8
|
2021-05-27 15:19:07 +02:00
|
|
|
zh_CN.UTF-8 UTF-8
|
2021-03-27 10:04:21 +01:00
|
|
|
fr_FR.UTF-8 UTF-8
|
2021-05-27 15:19:07 +02:00
|
|
|
ru_RU.UTF-8 UTF-8
|
|
|
|
ru_UA.UTF-8 UTF-8
|
|
|
|
es_ES.UTF-8 UTF-8
|
|
|
|
de_DE.UTF-8 UTF-8
|
|
|
|
pt_BR.UTF-8 UTF-8
|
2021-03-27 10:04:21 +01:00
|
|
|
it_IT.UTF-8 UTF-8
|
|
|
|
ja_JP.UTF-8 UTF-8
|
2021-05-27 15:19:07 +02:00
|
|
|
bg_BG.UTF-8 UTF-8
|
2021-03-27 10:04:21 +01:00
|
|
|
pl_PL.UTF-8 UTF-8
|
2021-05-27 15:19:07 +02:00
|
|
|
da_DK.UTF-8 UTF-8
|
|
|
|
ko_KR.UTF-8 UTF-8
|
2021-03-27 10:04:21 +01:00
|
|
|
tr_TR.UTF-8 UTF-8
|
2021-05-27 15:19:07 +02:00
|
|
|
hu_HU.UTF-8 UTF-8
|
|
|
|
cs_CZ.UTF-8 UTF-8
|
|
|
|
bn_IN UTF-8
|
2021-03-26 18:03:50 +01:00
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
|
|
|
generate_mirrorlist () {
|
|
|
|
cat <<EOF > mirrorlist
|
2021-09-11 11:51:51 +02:00
|
|
|
Server = https://mirror.osbeck.com/archlinux/\$repo/os/\$arch
|
2021-03-26 18:03:50 +01:00
|
|
|
Server = https://mirror.f4st.host/archlinux/\$repo/os/\$arch
|
2022-03-23 19:36:19 +01:00
|
|
|
Server = https://mirror.hackingand.coffee/arch/\$repo/os/\$arch
|
|
|
|
Server = https://archmirror.it/repos/\$repo/os/\$arch
|
2022-02-14 13:06:39 +01:00
|
|
|
Server = https://mirror.luzea.de/archlinux/\$repo/os/\$arch
|
2021-03-26 18:03:50 +01:00
|
|
|
EOF
|
|
|
|
}
|
|
|
|
|
|
|
|
cd "${script_dir}" || exit 1
|
|
|
|
|
|
|
|
bootstrap="${script_dir}"/root.x86_64
|
|
|
|
|
2021-06-17 14:55:38 +02:00
|
|
|
# Package groups
|
|
|
|
|
|
|
|
audio_pkgs="alsa-lib lib32-alsa-lib alsa-plugins lib32-alsa-plugins libpulse \
|
|
|
|
lib32-libpulse jack2 lib32-jack2 alsa-tools alsa-utils"
|
|
|
|
|
|
|
|
video_pkgs="mesa lib32-mesa vulkan-radeon lib32-vulkan-radeon \
|
|
|
|
vulkan-intel lib32-vulkan-intel nvidia-utils lib32-nvidia-utils \
|
|
|
|
vulkan-icd-loader lib32-vulkan-icd-loader vulkan-mesa-layers \
|
|
|
|
lib32-vulkan-mesa-layers libva-mesa-driver lib32-libva-mesa-driver \
|
|
|
|
libva-intel-driver lib32-libva-intel-driver intel-media-driver \
|
|
|
|
mesa-demos vulkan-tools nvidia-prime libva-utils"
|
|
|
|
|
2021-11-28 12:43:50 +01:00
|
|
|
wine_pkgs="wine-staging winetricks-git wine-nine wineasio \
|
2021-06-17 14:55:38 +02:00
|
|
|
giflib lib32-giflib libpng lib32-libpng libldap lib32-libldap \
|
|
|
|
gnutls lib32-gnutls mpg123 lib32-mpg123 openal lib32-openal \
|
|
|
|
v4l-utils lib32-v4l-utils libpulse lib32-libpulse alsa-plugins \
|
|
|
|
lib32-alsa-plugins alsa-lib lib32-alsa-lib libjpeg-turbo \
|
|
|
|
lib32-libjpeg-turbo libxcomposite lib32-libxcomposite libxinerama \
|
|
|
|
lib32-libxinerama libxslt lib32-libxslt libva lib32-libva gtk3 \
|
|
|
|
lib32-gtk3 vulkan-icd-loader lib32-vulkan-icd-loader sdl2 lib32-sdl2 \
|
|
|
|
vkd3d lib32-vkd3d libgphoto2 ffmpeg gst-plugins-good gst-plugins-bad \
|
|
|
|
gst-plugins-ugly gst-plugins-base lib32-gst-plugins-good lib32-gst-plugins-base"
|
|
|
|
|
2021-05-25 16:00:49 +02:00
|
|
|
# List of packages to install
|
|
|
|
# You can remove packages that you don't need
|
2021-05-28 13:15:56 +02:00
|
|
|
# Besides packages from the official Arch repos, you can list
|
|
|
|
# packages from the Chaotic-AUR repo here
|
2021-06-17 14:55:38 +02:00
|
|
|
packagelist="${audio_pkgs} ${video_pkgs} ${wine_pkgs} \
|
|
|
|
base-devel nano ttf-dejavu ttf-liberation lutris steam firefox \
|
|
|
|
mpv geany pcmanfm ppsspp dolphin-emu git wget htop qbittorrent \
|
2022-04-05 10:03:48 +02:00
|
|
|
speedcrunch gpicview file-roller xorg-xwayland steam-native-runtime \
|
2021-06-17 14:55:38 +02:00
|
|
|
meson mingw-w64-gcc gamemode lib32-gamemode cmake jre-openjdk \
|
|
|
|
playonlinux lxterminal steamtinkerlaunch mangohud lib32-mangohud \
|
2022-02-27 20:41:20 +01:00
|
|
|
wayland lib32-wayland qt5-wayland retroarch python-magic-ahupp \
|
2021-10-31 21:45:43 +01:00
|
|
|
xorg-server-xephyr openbox obs-studio gamehub minigalaxy legendary \
|
2022-02-27 20:43:15 +01:00
|
|
|
gamescope-git pcsx2 multimc5 youtube-dl bottles qt6-wayland"
|
2021-03-29 22:57:54 +02:00
|
|
|
|
2021-03-28 21:36:13 +02:00
|
|
|
current_release="$(wget -q "https://archlinux.org/download/" -O - | grep "Current Release" | tail -c -16 | head -c +10)"
|
2021-03-26 18:03:50 +01:00
|
|
|
|
|
|
|
echo "Downloading ${current_release} release"
|
2022-03-28 09:06:22 +02:00
|
|
|
wget -q --show-progress -O arch.tar.gz "https://mirror.f4st.host/archlinux/iso/${current_release}/archlinux-bootstrap-${current_release}-x86_64.tar.gz"
|
2021-03-26 18:03:50 +01:00
|
|
|
tar xf arch.tar.gz
|
|
|
|
rm arch.tar.gz
|
|
|
|
|
|
|
|
mount_chroot
|
|
|
|
|
|
|
|
generate_localegen
|
2021-05-12 23:58:34 +02:00
|
|
|
|
|
|
|
if command -v reflector 1>/dev/null; then
|
|
|
|
reflector --protocol https --score 5 --sort rate --save mirrorlist
|
|
|
|
else
|
|
|
|
generate_mirrorlist
|
|
|
|
fi
|
2021-03-26 18:03:50 +01:00
|
|
|
|
|
|
|
rm "${bootstrap}"/etc/locale.gen
|
|
|
|
cp locale.gen "${bootstrap}"/etc/locale.gen
|
|
|
|
rm locale.gen
|
|
|
|
|
|
|
|
rm "${bootstrap}"/etc/pacman.d/mirrorlist
|
|
|
|
cp mirrorlist "${bootstrap}"/etc/pacman.d/mirrorlist
|
|
|
|
rm mirrorlist
|
|
|
|
|
2021-03-28 23:11:59 +02:00
|
|
|
echo >> "${bootstrap}"/etc/pacman.conf
|
2021-03-26 18:03:50 +01:00
|
|
|
echo "[multilib]" >> "${bootstrap}"/etc/pacman.conf
|
|
|
|
echo "Include = /etc/pacman.d/mirrorlist" >> "${bootstrap}"/etc/pacman.conf
|
|
|
|
|
|
|
|
run_in_chroot pacman-key --init
|
2021-06-23 10:23:43 +02:00
|
|
|
echo "keyserver hkps://keyserver.ubuntu.com" >> "${bootstrap}"/etc/pacman.d/gnupg/gpg.conf
|
2021-03-26 18:03:50 +01:00
|
|
|
run_in_chroot pacman-key --populate archlinux
|
2021-05-28 13:15:56 +02:00
|
|
|
|
|
|
|
# Add Chaotic-AUR repo
|
2021-11-26 18:03:50 +01:00
|
|
|
run_in_chroot pacman-key --recv-key FBA220DFC880C036
|
|
|
|
run_in_chroot pacman-key --lsign-key FBA220DFC880C036
|
2022-02-24 10:54:25 +01:00
|
|
|
run_in_chroot pacman --noconfirm -U 'https://mirrors.fossho.st/garuda/repos/chaotic-aur/x86_64/chaotic-keyring-20220220-1-any.pkg.tar.zst'
|
2022-03-02 09:18:42 +01:00
|
|
|
run_in_chroot pacman --noconfirm -U 'https://mirrors.fossho.st/garuda/repos/chaotic-aur/x86_64/chaotic-mirrorlist-20220301-1-any.pkg.tar.zst'
|
2021-05-28 13:15:56 +02:00
|
|
|
|
|
|
|
echo >> "${bootstrap}"/etc/pacman.conf
|
|
|
|
echo "[chaotic-aur]" >> "${bootstrap}"/etc/pacman.conf
|
|
|
|
echo "Include = /etc/pacman.d/chaotic-mirrorlist" >> "${bootstrap}"/etc/pacman.conf
|
|
|
|
|
2021-09-11 12:09:16 +02:00
|
|
|
# The ParallelDownloads feature of pacman
|
|
|
|
# Speeds up packages installation, especially when there are many small packages to install
|
|
|
|
sed -i 's/#ParallelDownloads = 5/ParallelDownloads = 3/g' "${bootstrap}"/etc/pacman.conf
|
2021-06-17 14:46:35 +02:00
|
|
|
|
2021-03-26 18:03:50 +01:00
|
|
|
run_in_chroot pacman -Syu --noconfirm
|
2021-05-25 16:19:37 +02:00
|
|
|
|
2021-10-27 21:52:32 +02:00
|
|
|
date -u +"%d-%m-%Y %H:%M (DMY UTC)" > "${bootstrap}"/version
|
|
|
|
|
2021-05-25 16:19:37 +02:00
|
|
|
# These packages are required for the self-update feature to work properly
|
2021-05-27 16:21:37 +02:00
|
|
|
run_in_chroot pacman --noconfirm --needed -S base reflector squashfs-tools fakeroot
|
|
|
|
|
|
|
|
run_in_chroot pacman --noconfirm --needed -S ${packagelist}
|
2021-03-26 18:03:50 +01:00
|
|
|
|
2021-05-25 16:19:37 +02:00
|
|
|
run_in_chroot locale-gen
|
|
|
|
|
2021-09-22 13:15:48 +02:00
|
|
|
# Generate a list of installed packages
|
|
|
|
run_in_chroot pacman -Qn > "${bootstrap}"/pkglist.x86_64.txt
|
|
|
|
|
2021-04-06 21:18:13 +02:00
|
|
|
unmount_chroot
|
|
|
|
|
2021-05-22 11:54:24 +02:00
|
|
|
# Clear pacman package cache
|
2021-04-11 21:32:56 +02:00
|
|
|
rm -f "${bootstrap}"/var/cache/pacman/pkg/*
|
2021-05-22 11:54:24 +02:00
|
|
|
|
|
|
|
# Create some empty files and directories
|
|
|
|
# This is needed for bubblewrap to be able to bind real files/dirs to them
|
|
|
|
# later in the conty-start.sh script
|
2021-03-27 12:59:35 +01:00
|
|
|
mkdir "${bootstrap}"/media
|
2021-09-12 12:40:14 +02:00
|
|
|
mkdir -p "${bootstrap}"/usr/share/steam/compatibilitytools.d
|
2021-04-06 21:18:13 +02:00
|
|
|
touch "${bootstrap}"/etc/asound.conf
|
2021-05-22 11:54:24 +02:00
|
|
|
touch "${bootstrap}"/etc/localtime
|
2021-05-28 13:36:11 +02:00
|
|
|
chmod 755 "${bootstrap}"/root
|
2021-03-26 18:03:50 +01:00
|
|
|
|
2021-06-09 23:03:50 +02:00
|
|
|
# Enable full font hinting
|
|
|
|
rm -f "${bootstrap}"/etc/fonts/conf.d/10-hinting-slight.conf
|
|
|
|
ln -s /usr/share/fontconfig/conf.avail/10-hinting-full.conf "${bootstrap}"/etc/fonts/conf.d
|
|
|
|
|
2021-03-26 18:03:50 +01:00
|
|
|
clear
|
|
|
|
echo "Done"
|