- Copie locale des fichiers ROM/HDD depuis le repo cloné - Menu interactif: résolution, couleurs, RAM, son, réseau, autostart - Dépendances X11 (xorg-server, libx11, libxext) pour systèmes minimaux - Options CLI: -y (non-interactif), --help - Service systemd pour démarrage automatique
395 lines
11 KiB
Bash
395 lines
11 KiB
Bash
#!/bin/bash
|
|
#===============================================================================
|
|
# Basilisk II Auto-Installer
|
|
# Installe, compile et configure Basilisk II sur Arch Linux ou Debian/Ubuntu
|
|
#===============================================================================
|
|
|
|
set -e
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Configuration
|
|
#-------------------------------------------------------------------------------
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ROM_SOURCE="${SCRIPT_DIR}/Quadra.ROM"
|
|
HDD_SOURCE="${SCRIPT_DIR}/HDD.img"
|
|
|
|
INSTALL_DIR="${HOME}/.basilisk2"
|
|
ROM_FILE="${INSTALL_DIR}/Quadra.ROM"
|
|
HDD_FILE="${INSTALL_DIR}/HDD.img"
|
|
CONFIG_FILE="${INSTALL_DIR}/basilisk2_prefs"
|
|
SHARED_DIR="${INSTALL_DIR}/shared"
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Options d'installation (modifiées par le menu interactif)
|
|
#-------------------------------------------------------------------------------
|
|
OPT_SCREEN_RES="800/600"
|
|
OPT_COLOR_DEPTH="8"
|
|
OPT_RAM_SIZE="16777216"
|
|
OPT_AUTOSTART="false"
|
|
OPT_SOUND="true"
|
|
OPT_NETWORK="false"
|
|
INTERACTIVE_MODE="true"
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Parsing des arguments CLI
|
|
#-------------------------------------------------------------------------------
|
|
parse_args() {
|
|
while [[ $# -gt 0 ]]; do
|
|
case "$1" in
|
|
-y|--non-interactive)
|
|
INTERACTIVE_MODE="false"
|
|
shift
|
|
;;
|
|
-h|--help)
|
|
echo "Usage: $0 [-y|--non-interactive] [-h|--help]"
|
|
echo ""
|
|
echo "Options:"
|
|
echo " -y, --non-interactive Installation automatique avec valeurs par défaut"
|
|
echo " -h, --help Affiche cette aide"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "Option inconnue: $1"
|
|
echo "Utilisez -h pour l'aide"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Menu interactif
|
|
#-------------------------------------------------------------------------------
|
|
ask_choice() {
|
|
local prompt="$1"
|
|
shift
|
|
local options=("$@")
|
|
local default_index=1
|
|
|
|
echo
|
|
echo "${prompt}"
|
|
for i in "${!options[@]}"; do
|
|
echo " $((i+1))) ${options[$i]}"
|
|
done
|
|
|
|
local choice
|
|
read -p "Choix [${default_index}]: " choice
|
|
choice=${choice:-${default_index}}
|
|
|
|
# Valider l'entrée
|
|
if ! [[ "$choice" =~ ^[0-9]+$ ]] || [ "$choice" -lt 1 ] || [ "$choice" -gt "${#options[@]}" ]; then
|
|
choice=${default_index}
|
|
fi
|
|
|
|
echo $((choice-1))
|
|
}
|
|
|
|
interactive_menu() {
|
|
echo
|
|
echo "=== Configuration de l'installation ==="
|
|
|
|
# Résolution d'écran
|
|
local resolutions=("640x480 (VGA)" "800x600 (SVGA) [défaut]" "1024x768 (XGA)" "1280x1024 (SXGA)")
|
|
local res_values=("640/480" "800/600" "1024/768" "1280/1024")
|
|
local res_choice=$(ask_choice "Résolution d'écran:" "${resolutions[@]}")
|
|
OPT_SCREEN_RES="${res_values[$res_choice]}"
|
|
|
|
# Profondeur de couleur
|
|
local depths=("8 bits (256 couleurs) [défaut]" "16 bits (65K couleurs)" "24 bits (16M couleurs)")
|
|
local depth_values=("8" "16" "24")
|
|
local depth_choice=$(ask_choice "Profondeur de couleur:" "${depths[@]}")
|
|
OPT_COLOR_DEPTH="${depth_values[$depth_choice]}"
|
|
|
|
# Mémoire RAM
|
|
local rams=("8 Mo" "16 Mo [défaut]" "32 Mo" "64 Mo")
|
|
local ram_values=("8388608" "16777216" "33554432" "67108864")
|
|
local ram_choice=$(ask_choice "Mémoire RAM:" "${rams[@]}")
|
|
OPT_RAM_SIZE="${ram_values[$ram_choice]}"
|
|
|
|
# Démarrage automatique
|
|
echo
|
|
read -p "Démarrer automatiquement au boot? [o/N]: " autostart
|
|
[[ "$autostart" =~ ^[oOyY]$ ]] && OPT_AUTOSTART="true"
|
|
|
|
# Son
|
|
read -p "Activer le son? [O/n]: " sound
|
|
[[ "$sound" =~ ^[nN]$ ]] && OPT_SOUND="false"
|
|
|
|
# Réseau
|
|
read -p "Activer le réseau? [o/N]: " network
|
|
[[ "$network" =~ ^[oOyY]$ ]] && OPT_NETWORK="true"
|
|
|
|
echo
|
|
echo ">>> Configuration choisie:"
|
|
echo " Écran: ${OPT_SCREEN_RES}/${OPT_COLOR_DEPTH}"
|
|
echo " RAM: $((OPT_RAM_SIZE/1048576)) Mo"
|
|
echo " Autostart: ${OPT_AUTOSTART}"
|
|
echo " Son: ${OPT_SOUND}"
|
|
echo " Réseau: ${OPT_NETWORK}"
|
|
echo
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Détection de la distribution
|
|
#-------------------------------------------------------------------------------
|
|
detect_distro() {
|
|
if [ -f /etc/arch-release ]; then
|
|
echo "arch"
|
|
elif [ -f /etc/debian_version ]; then
|
|
echo "debian"
|
|
else
|
|
echo "unknown"
|
|
fi
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Installation des dépendances
|
|
#-------------------------------------------------------------------------------
|
|
install_deps_arch() {
|
|
echo ">>> Installation des dépendances (Arch)..."
|
|
sudo pacman -S --needed --noconfirm \
|
|
base-devel git sdl2 gtk2 \
|
|
autoconf automake pkg-config \
|
|
xorg-server libx11 libxext
|
|
}
|
|
|
|
install_deps_debian() {
|
|
echo ">>> Installation des dépendances (Debian/Ubuntu)..."
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
build-essential git libsdl2-dev libgtk2.0-dev \
|
|
autoconf automake pkg-config wget \
|
|
xserver-xorg libx11-dev libxext-dev
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Compilation de Basilisk II
|
|
#-------------------------------------------------------------------------------
|
|
compile_basilisk() {
|
|
echo ">>> Compilation de Basilisk II..."
|
|
|
|
local build_dir="/tmp/basilisk2-build"
|
|
rm -rf "${build_dir}"
|
|
mkdir -p "${build_dir}"
|
|
cd "${build_dir}"
|
|
|
|
git clone --depth 1 https://github.com/cebix/macemu.git
|
|
cd macemu/BasiliskII/src/Unix
|
|
|
|
./autogen.sh
|
|
./configure --enable-sdl-video --enable-sdl-audio --with-gtk=gtk2
|
|
make -j$(nproc)
|
|
|
|
# Installation du binaire
|
|
mkdir -p "${INSTALL_DIR}/bin"
|
|
cp BasiliskII "${INSTALL_DIR}/bin/"
|
|
|
|
echo ">>> Compilation terminée"
|
|
cd /
|
|
rm -rf "${build_dir}"
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Copie des ressources depuis le repo local
|
|
#-------------------------------------------------------------------------------
|
|
copy_resources() {
|
|
echo ">>> Copie de la ROM et de l'image disque..."
|
|
|
|
mkdir -p "${INSTALL_DIR}"
|
|
mkdir -p "${SHARED_DIR}"
|
|
|
|
if [ ! -f "${ROM_SOURCE}" ]; then
|
|
echo "ERREUR: ROM non trouvée: ${ROM_SOURCE}"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -f "${HDD_SOURCE}" ]; then
|
|
echo "ERREUR: Image disque non trouvée: ${HDD_SOURCE}"
|
|
exit 1
|
|
fi
|
|
|
|
cp -v "${ROM_SOURCE}" "${ROM_FILE}"
|
|
cp -v "${HDD_SOURCE}" "${HDD_FILE}"
|
|
|
|
echo ">>> Fichiers copiés"
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Génération de la configuration
|
|
#-------------------------------------------------------------------------------
|
|
generate_config() {
|
|
echo ">>> Génération de la configuration..."
|
|
|
|
# Calcul des valeurs booléennes inversées pour Basilisk II
|
|
local nosound="false"
|
|
local nonet="true"
|
|
[[ "${OPT_SOUND}" == "false" ]] && nosound="true"
|
|
[[ "${OPT_NETWORK}" == "true" ]] && nonet="false"
|
|
|
|
cat > "${CONFIG_FILE}" << EOF
|
|
# Basilisk II Configuration
|
|
# Généré automatiquement
|
|
|
|
# ROM et disque
|
|
rom ${ROM_FILE}
|
|
disk ${HDD_FILE}
|
|
|
|
# Mémoire ($((OPT_RAM_SIZE/1048576)) Mo)
|
|
ramsize ${OPT_RAM_SIZE}
|
|
|
|
# Modèle Quadra 900
|
|
modelid 14
|
|
cpu 4
|
|
fpu true
|
|
|
|
# Affichage (${OPT_SCREEN_RES}, ${OPT_COLOR_DEPTH} bits)
|
|
screen dga/${OPT_SCREEN_RES}/${OPT_COLOR_DEPTH}
|
|
frameskip 1
|
|
|
|
# Audio
|
|
nosound ${nosound}
|
|
|
|
# Réseau
|
|
nonet ${nonet}
|
|
|
|
# Dossier partagé avec l'hôte
|
|
extfs ${SHARED_DIR}
|
|
|
|
# Presse-papier partagé
|
|
enableextfs true
|
|
EOF
|
|
|
|
echo ">>> Configuration générée: ${CONFIG_FILE}"
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Création du lanceur
|
|
#-------------------------------------------------------------------------------
|
|
create_launcher() {
|
|
echo ">>> Création des lanceurs..."
|
|
|
|
# Script de lancement
|
|
local launcher="${INSTALL_DIR}/run.sh"
|
|
cat > "${launcher}" << EOF
|
|
#!/bin/bash
|
|
cd "${INSTALL_DIR}"
|
|
exec "${INSTALL_DIR}/bin/BasiliskII" --config "${CONFIG_FILE}"
|
|
EOF
|
|
chmod +x "${launcher}"
|
|
|
|
# Lien symbolique dans ~/bin si existe
|
|
if [ -d "${HOME}/bin" ]; then
|
|
ln -sf "${launcher}" "${HOME}/bin/basilisk2"
|
|
echo " Lien créé: ~/bin/basilisk2"
|
|
fi
|
|
|
|
# Fichier .desktop
|
|
local desktop_file="${HOME}/.local/share/applications/basilisk2.desktop"
|
|
mkdir -p "$(dirname "${desktop_file}")"
|
|
cat > "${desktop_file}" << EOF
|
|
[Desktop Entry]
|
|
Name=Basilisk II
|
|
Comment=Émulateur Macintosh 68k - System 7
|
|
Exec=${launcher}
|
|
Icon=computer
|
|
Terminal=false
|
|
Type=Application
|
|
Categories=Emulator;System;
|
|
EOF
|
|
|
|
echo " Raccourci bureau créé"
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Configuration du démarrage automatique (systemd)
|
|
#-------------------------------------------------------------------------------
|
|
setup_autostart() {
|
|
if [ "${OPT_AUTOSTART}" != "true" ]; then
|
|
return
|
|
fi
|
|
|
|
echo ">>> Configuration du démarrage automatique..."
|
|
|
|
local service_dir="${HOME}/.config/systemd/user"
|
|
mkdir -p "${service_dir}"
|
|
|
|
cat > "${service_dir}/basilisk2.service" << EOF
|
|
[Unit]
|
|
Description=Basilisk II Macintosh Emulator
|
|
After=graphical-session.target
|
|
|
|
[Service]
|
|
ExecStart=${INSTALL_DIR}/run.sh
|
|
Restart=on-failure
|
|
RestartSec=5
|
|
|
|
[Install]
|
|
WantedBy=default.target
|
|
EOF
|
|
|
|
systemctl --user daemon-reload
|
|
systemctl --user enable basilisk2.service
|
|
|
|
echo " Service systemd activé: basilisk2.service"
|
|
echo " Démarrer manuellement: systemctl --user start basilisk2"
|
|
}
|
|
|
|
#-------------------------------------------------------------------------------
|
|
# Main
|
|
#-------------------------------------------------------------------------------
|
|
main() {
|
|
echo "=============================================="
|
|
echo " Basilisk II - Installation automatique"
|
|
echo "=============================================="
|
|
echo
|
|
|
|
# Menu interactif si pas en mode -y
|
|
if [ "${INTERACTIVE_MODE}" = "true" ]; then
|
|
interactive_menu
|
|
fi
|
|
|
|
local distro=$(detect_distro)
|
|
echo ">>> Distribution détectée: ${distro}"
|
|
|
|
case "${distro}" in
|
|
arch)
|
|
install_deps_arch
|
|
;;
|
|
debian)
|
|
install_deps_debian
|
|
;;
|
|
*)
|
|
echo "ERREUR: Distribution non supportée"
|
|
echo "Supportées: Arch Linux, Debian/Ubuntu"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
compile_basilisk
|
|
copy_resources
|
|
generate_config
|
|
create_launcher
|
|
setup_autostart
|
|
|
|
echo
|
|
echo "=============================================="
|
|
echo " Installation terminée !"
|
|
echo "=============================================="
|
|
echo
|
|
echo " Dossier: ${INSTALL_DIR}"
|
|
echo " Lancer: ${INSTALL_DIR}/run.sh"
|
|
echo " Dossier partagé: ${SHARED_DIR}"
|
|
echo
|
|
echo " Tu peux aussi lancer depuis le menu applications"
|
|
echo " ou taper 'basilisk2' si ~/bin est dans ton PATH"
|
|
if [ "${OPT_AUTOSTART}" = "true" ]; then
|
|
echo
|
|
echo " Autostart activé: systemctl --user status basilisk2"
|
|
fi
|
|
echo
|
|
}
|
|
|
|
# Parse arguments et lance main
|
|
parse_args "$@"
|
|
main
|