mirror of
https://github.com/arthur-pbty/arch-custom-iso.git
synced 2026-08-01 20:28:05 +02:00
133 lines
4.5 KiB
Bash
Executable File
133 lines
4.5 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Si l'utilisateur a oublié de mettre sudo, on redémarre le script avec sudo
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo "Le build nécessite les droits administrateur (sudo). Redémarrage..."
|
|
exec sudo bash "$0" "$@"
|
|
fi
|
|
|
|
set -e
|
|
|
|
ISO_NAME="arch-custom-iso"
|
|
# On récupère le nom de l'utilisateur normal (pas root) pour makepkg
|
|
BUILD_USER="${SUDO_USER:-root}"
|
|
CUSTOM_PKGS_DIR="$PWD/custom-pkgs"
|
|
|
|
# ==============================================================================
|
|
# LES LISTES DE PAQUETS
|
|
# ==============================================================================
|
|
EXTRA_PACKAGES=(
|
|
"neovim" "ghostty" "hyprland" "xdg-desktop-portal-hyprland"
|
|
"git" "yazi" "dolphin" "rofi" "waybar" "wiremix" "impala"
|
|
"bluetui" "btop" "cava" "fastfetch" "obsidian" "obs-studio"
|
|
"lazygit" "docker" "docker-buildx" "docker-compose" "lazydocker"
|
|
"mpv" "prismlauncher" "rust" "chromium" "bat" "base-devel"
|
|
"cmake" "nodejs" "npm" "pnpm" "python" "python-pip"
|
|
"curl" "wget" "unzip"
|
|
)
|
|
|
|
AUR_PACKAGES=(
|
|
"visual-studio-code-bin"
|
|
"subtui-bin"
|
|
"localsend-bin"
|
|
)
|
|
|
|
# ==============================================================================
|
|
# PROCESSUS DE BUILD
|
|
# ==============================================================================
|
|
|
|
echo "====================================="
|
|
echo " Building Arch Linux ISO"
|
|
echo " Project: $ISO_NAME"
|
|
echo " Build lancé par l'utilisateur: $BUILD_USER"
|
|
echo "====================================="
|
|
|
|
if ! command -v mkarchiso &> /dev/null; then
|
|
echo "[ERROR] archiso is not installed"
|
|
echo "Run: sudo pacman -S archiso"
|
|
exit 1
|
|
fi
|
|
|
|
echo "[1/5] Cleaning previous build..."
|
|
rm -rf work out offline_cache
|
|
|
|
# --- TÉLÉCHARGEMENT DES PAQUETS OFFICIELS ---
|
|
echo "[2/6] Downloading Official Packages for offline cache..."
|
|
# On utilise /tmp pour éviter tout problème de permissions dans le Home
|
|
TMP_CACHE="/tmp/archiso_cache_$$"
|
|
mkdir -p "$TMP_CACHE"
|
|
sudo pacman -Sy --noconfirm
|
|
|
|
# On télécharge (-w) sans installer, dans le dossier temporaire
|
|
sudo pacman -Sw --noconfirm --cachedir "$TMP_CACHE" "${EXTRA_PACKAGES[@]}" || true
|
|
|
|
# On crée le vrai dossier de cache et on déplace les paquets
|
|
mkdir -p offline_cache
|
|
cp "$TMP_CACHE"/*.pkg.tar.zst offline_cache/ 2>/dev/null || true
|
|
rm -rf "$TMP_CACHE"
|
|
|
|
# --- COMPILATION DES PAQUETS PERSONNALISÉS ---
|
|
echo "[3/6] Building custom packages from custom-pkgs/..."
|
|
mkdir -p custom_pkg_build
|
|
for pkg_dir in "$CUSTOM_PKGS_DIR"/*; do
|
|
[ -d "$pkg_dir" ] || continue
|
|
[ -f "$pkg_dir/PKGBUILD" ] || continue
|
|
|
|
pkg_name=$(basename "$pkg_dir")
|
|
echo " -> Building custom package: $pkg_name"
|
|
rm -rf "custom_pkg_build/$pkg_name"
|
|
cp -a "$pkg_dir" "custom_pkg_build/$pkg_name"
|
|
chown -R "$BUILD_USER":"$BUILD_USER" "custom_pkg_build/$pkg_name"
|
|
sudo -u "$BUILD_USER" bash -lc "cd '$PWD/custom_pkg_build/$pkg_name' && makepkg -f --noconfirm --needed"
|
|
mv "custom_pkg_build/$pkg_name"/*.pkg.tar.zst offline_cache/ 2>/dev/null || true
|
|
done
|
|
rm -rf custom_pkg_build
|
|
|
|
# --- COMPILATION DES PAQUETS AUR ---
|
|
echo "[4/6] Building AUR Packages for offline cache..."
|
|
mkdir -p aur_build
|
|
|
|
for pkg in "${AUR_PACKAGES[@]}"; do
|
|
echo " -> Building AUR package: $pkg"
|
|
cd aur_build
|
|
rm -rf "$pkg"
|
|
git clone "https://aur.archlinux.org/${pkg}.git" --depth 1
|
|
|
|
# CRUCIAL : On donne les droits à l'utilisateur NORMAL pour que makepkg accepte de tourner
|
|
chown -R "$BUILD_USER":"$BUILD_USER" "$pkg"
|
|
cd "$pkg"
|
|
|
|
# CRUCIAL : On lance makepkg EN TANT QU'UTILISATEUR NORMAL (pas de -s pour éviter de reboucler sur sudo)
|
|
sudo -u "$BUILD_USER" makepkg -d -f --noconfirm --needed
|
|
|
|
# On déplace le paquet compilé dans notre cache
|
|
mv *.pkg.tar.zst ../../offline_cache/
|
|
cd ../..
|
|
done
|
|
rm -rf aur_build
|
|
|
|
# --- INJECTION DANS L'ISO ---
|
|
echo "[5/6] Injecting offline cache into ISO skeleton..."
|
|
mkdir -p airootfs/root/offline_cache
|
|
cp offline_cache/*.pkg.tar.zst airootfs/root/offline_cache/
|
|
rm -rf offline_cache
|
|
|
|
# Copier les scripts personnalisés dans la racine du live system si nécessaire
|
|
mkdir -p airootfs/usr/local/bin
|
|
cp custom-pkgs/hello-custom/hello-custom.sh airootfs/usr/local/bin/hello-custom 2>/dev/null || true
|
|
chmod +x airootfs/usr/local/bin/hello-custom 2>/dev/null || true
|
|
|
|
# --- CRÉATION DE L'ISO ---
|
|
echo "[6/6] Building ISO (this will take a while)..."
|
|
sudo mkarchiso -v .
|
|
|
|
if [ -f out/*.iso ]; then
|
|
echo ""
|
|
echo "====================================="
|
|
echo " Build successful!"
|
|
echo " ISO located in: out/"
|
|
echo "====================================="
|
|
else
|
|
echo "[ERROR] ISO not found in out/"
|
|
exit 1
|
|
fi |