# PointCab Renamer - Deployment-Anleitung

**Version 4.2.1** | Datum: 16. Januar 2026

---

## Build-Status (Testergebnisse 2026-01-16)

| Build-Methode | Status | Hinweise |
|---------------|--------|----------|
| `build_windows.bat` | ✅ Funktioniert | Empfohlen auf Windows |
| `build_linux.sh` | ✅ Getestet | Funktioniert auf Ubuntu 20.04+ |
| `build_windows_wine.sh` | ⚠️ Experimentell | Fehlschläge auf Headless-Servern möglich |
| `build_windows_on_linux.sh` | ⚠️ Docker | Nicht in Docker-in-Docker möglich |

---

## Übersicht

Diese Anleitung beschreibt, wie Sie aus dem Python-Quellcode ausführbare Dateien für Windows (.exe) und Ubuntu (Binary) erstellen.

---

## Voraussetzungen

### Benötigte Software

| Komponente | Windows | Ubuntu |
|------------|---------|--------|
| Python | 3.8+ | 3.8+ |
| PyInstaller | 5.0+ | 5.0+ |
| tkinter | (in Python enthalten) | `python3-tk` |

### Installation der Voraussetzungen

#### Windows

1. **Python installieren:**
   - Laden Sie Python von https://www.python.org/downloads/ herunter
   - Bei der Installation: ☑ "Add Python to PATH" aktivieren

2. **PyInstaller installieren:**
   ```cmd
   pip install pyinstaller
   ```

#### Ubuntu

1. **Python und tkinter installieren:**
   ```bash
   sudo apt update
   sudo apt install python3 python3-pip python3-tk
   ```

2. **PyInstaller installieren:**
   ```bash
   pip3 install pyinstaller
   ```

---

## Windows-Build (.exe)

### Automatisch (empfohlen)

1. Öffnen Sie eine Eingabeaufforderung (cmd)
2. Navigieren Sie zum Projektordner:
   ```cmd
   cd C:\Pfad\zum\pointcab_renamer
   ```
3. Führen Sie das Build-Skript aus:
   ```cmd
   build_windows.bat
   ```
4. Die fertige `.exe` finden Sie im Ordner `dist\pointcab_renamer\`

### Manuell

1. Öffnen Sie eine Eingabeaufforderung
2. Navigieren Sie zum Quellcode-Ordner
3. Führen Sie PyInstaller aus:
   ```cmd
   pyinstaller --onefile --windowed --name "PointCab_Renamer" ^<br>     --add-data "cluster_cleanup.txt;." ^<br>     pointcab_renamer.py
   ```
4. Die `.exe` befindet sich in `dist\PointCab_Renamer.exe`

### PyInstaller-Optionen erklärt

| Option | Beschreibung |
|--------|-------------|
| `--onefile` | Alles in eine einzige .exe packen |
| `--windowed` | Kein Konsolenfenster anzeigen |
| `--name` | Name der Ausgabedatei |
| `--add-data` | Zusätzliche Dateien einbinden |
| `--icon` | (Optional) Icon-Datei (.ico) |

### Bekannte Probleme unter Windows

**Problem:** Antivirus blockiert die .exe

**Lösung:** Die erstellte .exe als Ausnahme hinzufügen oder signieren.

**Problem:** "DLL nicht gefunden"

**Lösung:** Visual C++ Redistributable installieren.

---

## Ubuntu-Build (Binary)

### Automatisch (empfohlen)

1. Öffnen Sie ein Terminal
2. Navigieren Sie zum Projektordner:
   ```bash
   cd /pfad/zum/pointcab_renamer
   ```
3. Machen Sie das Build-Skript ausführbar und führen Sie es aus:
   ```bash
   chmod +x build_linux.sh
   ./build_linux.sh
   ```
4. Das fertige Binary finden Sie im Ordner `dist/`

### Manuell

1. Öffnen Sie ein Terminal
2. Navigieren Sie zum Quellcode-Ordner
3. Führen Sie PyInstaller aus:
   ```bash
   pyinstaller --onefile --name "pointcab_renamer" \
     --add-data "cluster_cleanup.txt:." \
     pointcab_renamer.py
   ```
4. Das Binary befindet sich in `dist/pointcab_renamer`
5. Machen Sie es ausführbar:
   ```bash
   chmod +x dist/pointcab_renamer
   ```

### Bekannte Probleme unter Ubuntu

**Problem:** "No display name and no $DISPLAY environment variable"

**Lösung:** Das Binary muss in einer grafischen Umgebung gestartet werden, nicht über SSH.

**Problem:** "_tkinter not found"

**Lösung:** `sudo apt install python3-tk`

---

## Cross-Compilation: Windows .exe unter Linux erstellen

Es gibt mehrere Möglichkeiten, eine Windows .exe unter Linux zu erstellen, ohne Windows zu installieren.

### Methode 1: Docker (Empfohlen)

Die Docker-Methode ist die zuverlässigste und reproduzierbarste Option.

#### Voraussetzungen

1. **Docker installieren:**
   ```bash
   sudo apt update
   sudo apt install docker.io
   sudo systemctl start docker
   sudo systemctl enable docker
   ```

2. **Benutzer zur docker-Gruppe hinzufügen:**
   ```bash
   sudo usermod -aG docker $USER
   # Danach neu einloggen oder:
   newgrp docker
   ```

3. **Docker-Installation testen:**
   ```bash
   docker run hello-world
   ```

#### Verwendung

1. Navigieren Sie zum Projektordner:
   ```bash
   cd /pfad/zum/pointcab_renamer
   ```

2. Führen Sie das Build-Skript aus:
   ```bash
   ./build_windows_on_linux.sh
   ```

3. Die fertige `.exe` befindet sich in `dist/PointCab_Renamer.exe`

#### Was das Skript macht

1. Prüft Docker-Installation und -Status
2. Lädt das `cdrx/pyinstaller-windows` Docker-Image (beim ersten Mal)
3. Startet einen Container mit Windows-Umgebung
4. Führt PyInstaller im Container aus
5. Kopiert die .exe und Zusatzdateien nach `dist/`

#### Vorteile der Docker-Methode

- ✅ Zuverlässig und reproduzierbar
- ✅ Isolierte Build-Umgebung
- ✅ Keine manuelle Windows-Python-Installation
- ✅ Gleiche Ergebnisse wie auf echtem Windows
- ✅ Einfach in CI/CD-Pipelines integrierbar

#### Troubleshooting Docker

**Problem:** "Permission denied" beim Docker-Aufruf

**Lösung:** 
```bash
sudo usermod -aG docker $USER
# Neu einloggen erforderlich!
```

**Problem:** Docker-Image-Download schlägt fehl

**Lösung:** Proxy-Einstellungen prüfen oder manuell herunterladen:
```bash
docker pull cdrx/pyinstaller-windows:python3
```

**Problem:** Container startet nicht

**Lösung:** Docker-Daemon prüfen:
```bash
sudo systemctl status docker
sudo systemctl restart docker
```

---

### Methode 2: Wine (Fallback)

Die Wine-Methode ist weniger zuverlässig, kann aber ohne Docker verwendet werden.

#### Voraussetzungen

1. **Wine installieren:**
   ```bash
   sudo dpkg --add-architecture i386
   sudo apt update
   sudo apt install wine64 wine32
   ```

2. **Installation prüfen:**
   ```bash
   wine --version
   ```

#### Verwendung

1. Navigieren Sie zum Projektordner:
   ```bash
   cd /pfad/zum/pointcab_renamer
   ```

2. Führen Sie das Build-Skript aus:
   ```bash
   ./build_windows_wine.sh
   ```

3. Das Skript installiert automatisch:
   - Windows-Python in Wine
   - PyInstaller

#### Einschränkungen der Wine-Methode

- ⚠️ Nicht alle Windows-Funktionen werden unterstützt
- ⚠️ Kann bei komplexen Abhängigkeiten fehlschlagen
- ⚠️ Langsamerer Build-Prozess
- ⚠️ Ergebnisse können von echter Windows-Build abweichen

---

### Methode 3: GitHub Actions (Automatisiert)

Für regelmäßige Builds können Sie GitHub Actions verwenden.

Erstellen Sie `.github/workflows/build.yml`:

```yaml
name: Build Windows Executable

on:
  push:
    tags:
      - 'v*'
  workflow_dispatch:

jobs:
  build-windows:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v3
      
      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10'
      
      - name: Install dependencies
        run: pip install pyinstaller
      
      - name: Build executable
        run: |
          pyinstaller --onefile --windowed --name "PointCab_Renamer" `
            --add-data "cluster_cleanup.txt;." `
            --add-data "BENUTZERHANDBUCH.md;." `
            pointcab_renamer.py
      
      - name: Upload artifact
        uses: actions/upload-artifact@v3
        with:
          name: PointCab_Renamer_Windows
          path: |
            dist/PointCab_Renamer.exe
            cluster_cleanup.txt
            BENUTZERHANDBUCH.md
```

---

### Vergleich der Cross-Compilation-Methoden

| Methode | Zuverlässigkeit | Geschwindigkeit | Aufwand |
|---------|-----------------|-----------------|---------|
| Docker | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | Niedrig |
| Wine | ⭐⭐ | ⭐⭐ | Mittel |
| GitHub Actions | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | Niedrig |
| Echtes Windows | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | Hoch (VM) |

**Empfehlung:** Verwenden Sie die Docker-Methode für lokale Builds und GitHub Actions für automatisierte Release-Builds.

---

## Testen der Executables

### Windows-Test

1. Kopieren Sie die `.exe` und `cluster_cleanup.txt` in einen Testordner
2. Doppelklicken Sie auf die `.exe`
3. Das Hauptmenü sollte erscheinen
4. Testen Sie alle drei Modi mit einem Testprojekt

### Ubuntu-Test

1. Kopieren Sie das Binary und `cluster_cleanup.txt` in einen Testordner
2. Starten Sie das Programm:
   ```bash
   ./pointcab_renamer
   ```
3. Das Hauptmenü sollte erscheinen
4. Testen Sie alle drei Modi mit einem Testprojekt

### Checkliste für Tests

- [ ] Programm startet ohne Fehler
- [ ] Hauptmenü wird angezeigt
- [ ] LSDX-Datei kann ausgewählt werden
- [ ] PointCloud-Ordner wird erkannt
- [ ] Vorschau wird korrekt angezeigt
- [ ] Umbenennung funktioniert
- [ ] LSDX wird aktualisiert
- [ ] Log-Datei wird erstellt
- [ ] Batch-Modus funktioniert
- [ ] Merger funktioniert

---

## Distribution an Mitarbeiter

### Bereitstellung

1. **Für Windows:**
   - Kopieren Sie diese Dateien in einen Ordner:
     - `PointCab_Renamer.exe`
     - `cluster_cleanup.txt`
     - `BENUTZERHANDBUCH.md` (oder als PDF)
   - Erstellen Sie ein ZIP-Archiv
   - Verteilen Sie über Netzlaufwerk oder E-Mail

2. **Für Ubuntu:**
   - Kopieren Sie diese Dateien in einen Ordner:
     - `pointcab_renamer`
     - `cluster_cleanup.txt`
     - `BENUTZERHANDBUCH.md`
   - Erstellen Sie ein tar.gz-Archiv:
     ```bash
     tar -czvf pointcab_renamer_linux.tar.gz pointcab_renamer cluster_cleanup.txt BENUTZERHANDBUCH.md
     ```
   - Verteilen Sie über Netzlaufwerk

### Empfohlene Ordnerstruktur für Mitarbeiter

```
PointCab_Renamer/
├── PointCab_Renamer.exe (oder pointcab_renamer für Linux)
├── cluster_cleanup.txt
├── BENUTZERHANDBUCH.md
└── logs/  (wird automatisch erstellt)
```

### Updates verteilen

1. Erstellen Sie die neue Executable
2. Informieren Sie die Mitarbeiter über Änderungen (CHANGELOG)
3. Mitarbeiter ersetzen die alte .exe durch die neue
4. `cluster_cleanup.txt` kann beibehalten werden (falls angepasst)

---

## Troubleshooting beim Build

### "ModuleNotFoundError"

**Lösung:** Fehlende Module installieren:
```bash
pip install <modulname>
```

### "Hidden import not found"

**Lösung:** Hidden imports hinzufügen:
```bash
pyinstaller --hidden-import=<modulname> ...
```

### "Executable zu groß" (>100MB)

**Lösung:** UPX-Kompression aktivieren:
```bash
pip install upx
pyinstaller --onefile --upx-dir=/pfad/zu/upx ...
```

### "tkinter funktioniert nicht"

**Windows:** tkinter ist normalerweise in Python enthalten. Reinstallieren Sie Python mit der "tcl/tk" Option.

**Ubuntu:** Installieren Sie python3-tk:
```bash
sudo apt install python3-tk
```

---

## Versionskontrolle

Bei jeder neuen Version:

1. Version im Quellcode aktualisieren (`VERSION = "4.2"` etc.)
2. CHANGELOG.md aktualisieren
3. Neue Builds für Windows und Ubuntu erstellen
4. Builds testen
5. Im Git-Repository taggen:
   ```bash
   git tag -a v4.2 -m "Version 4.2"
   git push origin v4.2
   ```

---

---

## Troubleshooting: Docker-Probleme

### Docker ist nicht installiert

**Ubuntu/Debian:**
```bash
sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker
sudo usermod -aG docker $USER
# Dann neu einloggen oder: newgrp docker
```

**Fedora/RHEL:**
```bash
sudo dnf install docker
sudo systemctl start docker
```

### Docker-Daemon startet nicht

**Symptom:** `Cannot connect to the Docker daemon`

**Lösungen:**

1. **Service starten:**
   ```bash
   sudo systemctl start docker
   ```

2. **Status prüfen:**
   ```bash
   sudo systemctl status docker
   ```

3. **Logs prüfen:**
   ```bash
   sudo journalctl -u docker.service
   ```

### Berechtigung verweigert

**Symptom:** `permission denied while trying to connect to the Docker daemon`

**Lösung:** Benutzer zur Docker-Gruppe hinzufügen:
```bash
sudo usermod -aG docker $USER
# Danach neu einloggen
```

Oder mit sudo ausführen:
```bash
sudo ./build_windows_on_linux.sh
```

### Docker in Container-Umgebung (Docker-in-Docker)

**Problem:** Docker kann nicht in unprivilegierten Containern laufen.

**Lösungen:**

1. **Wine-Alternative verwenden:**
   ```bash
   ./build_windows_wine.sh
   ```

2. **Auf Host-System bauen**

3. **GitHub Actions nutzen** (siehe `.github/workflows/`)

4. **Container mit `--privileged` starten** (nicht empfohlen für Produktion)

### WSL2 unter Windows

**Problem:** Docker-Befehle schlagen in WSL2 fehl.

**Lösung:**
1. Docker Desktop für Windows installieren
2. In Docker Desktop: Settings → Resources → WSL Integration aktivieren
3. WSL-Distribution auswählen

### Docker-Image Download schlägt fehl

**Symptom:** `Error pulling image` oder Timeout

**Lösungen:**

1. **Internetverbindung prüfen**

2. **Proxy konfigurieren:**
   ```bash
   export HTTP_PROXY=http://proxy:port
   export HTTPS_PROXY=http://proxy:port
   ```

3. **Manueller Download:**
   ```bash
   sudo docker pull cdrx/pyinstaller-windows:python3
   ```

---

## Vergleich der Build-Methoden

| Methode | Plattform | Vorteile | Nachteile |
|---------|-----------|----------|-----------|
| `build_windows.bat` | Windows | Nativ, zuverlässig | Braucht Windows |
| `build_windows_on_linux.sh` | Linux + Docker | Cross-compilation | Docker erforderlich |
| `build_windows_wine.sh` | Linux + Wine | Kein Docker nötig | Weniger zuverlässig |
| GitHub Actions | Cloud | Automatisiert | Braucht GitHub-Repo |

**Empfehlung:** Für zuverlässige Windows-Builds verwenden Sie:
1. **Native Windows** (build_windows.bat) - Am zuverlässigsten
2. **Docker auf Linux** (build_windows_on_linux.sh) - Gut für CI/CD
3. **GitHub Actions** - Automatisiert bei jedem Push/Release

---

*PointCab Renamer Deployment Guide v4.1.2 - © 2026*
