#!/usr/bin/env bash if grep -qU $'\r' "$0" 2>/dev/null; then sed -i 's/\r$//' "$0" && exec bash "$0" "$@"; fi # Windows-Zeilenumbrüche selbst reparieren # ===================================================================== # 1_install_ursim_docker_v2.sh (nutzt 2_start_ursim_v2.sh) # # Installiert auf einer frischen Ubuntu-VM (22.04 / 24.04): # 1. Docker Engine (Docker-Repository) # 2. das Universal Robots Simulator-Image "ursim_polyscopex" # # Aufruf (als normaler Benutzer, NICHT mit sudo): # bash 1_install_ursim_docker_v2.sh # # Das Skript fragt selbst nach dem sudo-Passwort und kann gefahrlos # mehrfach ausgeführt werden. # ===================================================================== set -euo pipefail IMAGE="universalrobots/ursim_polyscopex:latest" MIN_RAM_GB=8 # PolyScope X läuft ab ca. 8 GB RAM flüssig MIN_DISK_GB=25 # Image ~7 GB + interne Container ~10 GB step() { echo; echo -e "\e[1;34m==> $*\e[0m"; } ok() { echo -e "\e[1;32m [OK] $*\e[0m"; } warn() { echo -e "\e[1;33m [!] $*\e[0m"; } fail() { echo -e "\e[1;31m [X] $*\e[0m"; exit 1; } if [[ $EUID -eq 0 ]]; then # mit "sudo bash ..." gestartet -> als normaler Benutzer neu starten if [[ -n "${SUDO_USER:-}" && "${SUDO_USER}" != "root" ]]; then exec sudo -u "${SUDO_USER}" -H bash "$(readlink -f "$0")" "$@" fi fail "Bitte als normaler Benutzer starten: bash $0" fi USER_NAME="$(id -un)" echo -e "\e[1m" echo " ============================================================" echo " Universal Robots URSim PolyScope X - Installation (Docker)" echo " ============================================================" echo -e "\e[0m" # --------------------------------------------------------------------- step "1/7 System prüfen" # --------------------------------------------------------------------- . /etc/os-release if [[ "${ID}" != "ubuntu" ]]; then warn "Kein Ubuntu erkannt (${PRETTY_NAME}) - es wird trotzdem versucht." else ok "Betriebssystem: ${PRETTY_NAME}" fi case "$(uname -m)" in x86_64) ok "Architektur: x86_64 (amd64)" ;; aarch64) ok "Architektur: aarch64 (arm64)" ;; *) fail "Nicht unterstützte Architektur: $(uname -m)" ;; esac ram_gb=$(awk '/MemTotal/ {printf "%d", $2/1024/1024 + 0.5}' /proc/meminfo) if (( ram_gb < MIN_RAM_GB )); then warn "Nur ${ram_gb} GB RAM - empfohlen sind mindestens ${MIN_RAM_GB} GB." else ok "Arbeitsspeicher: ${ram_gb} GB" fi disk_gb=$(df -BG --output=avail / | tail -1 | tr -dc '0-9') if (( disk_gb < MIN_DISK_GB )); then warn "Nur ${disk_gb} GB frei auf / - empfohlen sind mindestens ${MIN_DISK_GB} GB." else ok "Freier Speicher: ${disk_gb} GB" fi echo echo " Für die Installation wird das sudo-Passwort benötigt." sudo -v || fail "sudo nicht möglich." # --------------------------------------------------------------------- step "2/7 Docker Engine installieren" # --------------------------------------------------------------------- if command -v docker >/dev/null 2>&1 && sudo docker info >/dev/null 2>&1; then ok "Docker ist bereits installiert: $(docker --version)" else echo " Alte/ Docker-Pakete entfernen (falls vorhanden) ..." for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove -y "$pkg" >/dev/null 2>&1 || true done echo " Paketquellen aktualisieren ..." sudo apt-get update sudo apt-get install -y ca-certificates curl echo " Docker-Repository einrichten ..." sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu ${UBUNTU_CODENAME:-$VERSION_CODENAME} stable" \ | sudo tee /etc/apt/sources.list.d/docker.list >/dev/null echo " Docker installieren ..." sudo apt-get update sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin ok "Docker installiert: $(docker --version)" fi # curl (Bereitschaftsprüfung) und whiptail (Auswahlmenü) braucht das Startskript if ! command -v curl >/dev/null 2>&1 || ! command -v whiptail >/dev/null 2>&1; then sudo apt-get install -y curl whiptail fi # --------------------------------------------------------------------- step "3/7 Docker-Dienst aktivieren (startet automatisch mit Ubuntu)" # --------------------------------------------------------------------- sudo systemctl enable --now docker >/dev/null 2>&1 if systemctl is-active --quiet docker; then ok "Docker-Dienst läuft" else fail "Docker-Dienst läuft nicht - siehe: sudo systemctl status docker" fi # --------------------------------------------------------------------- step "4/7 Benutzer '${USER_NAME}' zur Gruppe 'docker' hinzufügen" # --------------------------------------------------------------------- NEED_RELOGIN=0 if id -nG "${USER_NAME}" | tr ' ' '\n' | grep -qx docker; then ok "'${USER_NAME}' ist bereits in der Gruppe docker" else sudo usermod -aG docker "${USER_NAME}" NEED_RELOGIN=1 ok "'${USER_NAME}' hinzugefügt (wirksam nach Ab-/Anmelden)" fi # --------------------------------------------------------------------- step "5/7 Docker testen (hello-world)" # --------------------------------------------------------------------- HAD_HELLO=0 sudo docker image inspect hello-world >/dev/null 2>&1 && HAD_HELLO=1 if sudo docker run --rm hello-world >/dev/null 2>&1; then ok "Docker funktioniert" else fail "Testcontainer hello-world konnte nicht gestartet werden (Internet?)" fi (( HAD_HELLO )) || sudo docker rmi hello-world >/dev/null 2>&1 || true # --------------------------------------------------------------------- step "6/7 URSim PolyScope X Image herunterladen (~2,5 GB Download)" # --------------------------------------------------------------------- echo " ${IMAGE}" echo " Das dauert je nach Internetverbindung einige Minuten ..." echo sudo docker pull "${IMAGE}" echo ok "Image vorhanden: $(sudo docker image inspect "${IMAGE}" --format '{{.Id}}' | cut -c1-19)" # --------------------------------------------------------------------- step "7/7 Startskript und Symbol \"URSim PolyScope X\" einrichten" # --------------------------------------------------------------------- SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" URSIM_DIR="${HOME}/ursimx" START_SH="${URSIM_DIR}/2_start_ursim.sh" ICON="${URSIM_DIR}/ursim-icon.svg" [[ -f "${SCRIPT_DIR}/2_start_ursim_v2.sh" ]] || fail "2_start_ursim_v2.sh nicht gefunden - beide Dateien müssen im selben Ordner liegen." mkdir -p "${URSIM_DIR}" # Kopie ohne Windows-Zeilenumbrüche, falls die Datei unter Windows bearbeitet wurde tr -d '\r' < "${SCRIPT_DIR}/2_start_ursim_v2.sh" > "${START_SH}.tmp" mv -f "${START_SH}.tmp" "${START_SH}" chmod 0755 "${START_SH}" ok "Startskript: ${START_SH}" ok "Ordner für Programme: ${URSIM_DIR}" # Einfaches Roboterarm-Symbol cat > "${ICON}" <<'SVG' SVG LAUNCHER_TEXT="[Desktop Entry] Type=Application Name=URSim PolyScope X Comment=Universal Robots Simulator starten - Robotermodell auswählen Exec=bash \"${START_SH}\" --pause Icon=${ICON} Terminal=true Categories=Development;" # Eintrag im App-Menü (Super-Taste -> "URSim") mkdir -p "${HOME}/.local/share/applications" printf '%s\n' "${LAUNCHER_TEXT}" > "${HOME}/.local/share/applications/ursim-polyscopex.desktop" ok "App-Menü: \"URSim PolyScope X\"" # Symbol auf dem Desktop (Ordnername ist sprachabhängig, z.B. "Schreibtisch") DESKTOP_DIR="$(xdg-user-dir DESKTOP 2>/dev/null || true)" if [[ -z "${DESKTOP_DIR}" || "${DESKTOP_DIR}" == "${HOME}" ]]; then DESKTOP_DIR="${HOME}/Desktop" fi mkdir -p "${DESKTOP_DIR}" DESKTOP_FILE="${DESKTOP_DIR}/ursim-polyscopex.desktop" printf '%s\n' "${LAUNCHER_TEXT}" > "${DESKTOP_FILE}" chmod +x "${DESKTOP_FILE}" # als vertrauenswürdig markieren, damit Ubuntu den Doppelklick erlaubt if ! gio set "${DESKTOP_FILE}" metadata::trusted true >/dev/null 2>&1; then warn "Symbol bitte einmal per Rechtsklick -> \"Start erlauben\" freigeben." fi ok "Desktop-Symbol: ${DESKTOP_FILE}" # --------------------------------------------------------------------- echo echo -e "\e[1;32m ============================================================" echo " Installation abgeschlossen!" echo -e " ============================================================\e[0m" echo if (( NEED_RELOGIN )); then echo -e "\e[1;33m WICHTIG: Einmal ab- und wieder anmelden (oder VM neu starten)," echo -e " damit 'docker' ohne sudo funktioniert.\e[0m" echo fi echo " Simulator starten:" echo echo " Doppelklick auf das Desktop-Symbol \"URSim PolyScope X\"" echo " oder im App-Menü nach \"URSim\" suchen" echo " oder im Terminal: bash ~/ursimx/2_start_ursim.sh" echo