diff --git a/CHANGELOG.md b/CHANGELOG.md index ca6828b..461d258 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,12 @@ # Changelog -- **25/06/15** - commit: v0.1.0 +- **25/06/15** - commit: v0.2.0 + - **Hinzugefügt:** + - [X] git submodule erstellt + - [X] Rust Toolchain Einrichtung + - [X] Rust offline-installation + +- **25/06/15** - commit: v0.1.0 - **Hinzugefügt:** - [X] helix - [x] desktop.ini diff --git a/README.md b/README.md index 9bc64df..a57f0fc 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,11 @@ ![Logo Adam Skotarczak](./media/realAscotLogo_128x128.png) -Kleine Sammlung von Gedächnissstützen für den privaten und persönlichen Gebrauch. Ausserdem befinden sich hier auch viele Artikel die von mir noch nicht vollständig verwertet worden sind. +Kleine Sammlung von Gedächnissstützen für den privaten und persönlichen Gebrauch. +Ausserdem befinden sich hier auch viele Artikel die von mir noch nicht vollständig verwertet worden sind. +Die Artikel sind auch zur Vorbereitung für neue Artikel auf vorgesehen. + +**origin:** ## Inhalt @@ -22,6 +26,7 @@ Kleine Sammlung von Gedächnissstützen für den privaten und persönlichen Gebr - [Webserver](#webserver) - [Windows](#windows) - [Programmierung](#programmierung) + - [Rust](#rust) - [ts - js - node](#ts---js---node) - [Projektinhalt](#projektinhalt) - [Neue Dokumente](#neue-dokumente) @@ -57,6 +62,7 @@ Unter `./tools/` befinden sich Programme/ Skripte (aktuell in Typescript und Pyt - [Artikel: git](dokus/git/git.md) - [SSH-Zugriff auf Git-Repository in WSL einrichten](dokus/git/git-ssh-remote.md) - [Git – Remote-Branches: Häufige Aufgaben und Lösungen](dokus/git/git-remote-branch.md) + - [Git-Submodule: Der umfassende Praxisleitfaden](dokus/git/git-submodule-leitfaden.md) ### Markdown @@ -90,6 +96,13 @@ Unter `./tools/` befinden sich Programme/ Skripte (aktuell in Typescript und Pyt ### Programmierung +#### Rust + +- [Rust-Toolchain mit MSVC unter Windows einrichten](dokus/rust/rust-toolchain-msvc.md) +- [Erstellung eines Installationsmediums für Rust + MSVC (Offline)](dokus/rust/rust-offline-installation.md) + +--- + #### ts - js - node - [Einstieg in JavaScript-Dialekte und TypeScript-Konfiguration](dokus/js-ts/js-ts-dialekte.md) @@ -102,9 +115,6 @@ Unter `./tools/` befinden sich Programme/ Skripte (aktuell in Typescript und Pyt ```plaintext 📁 ./ -├── 📁 .vscode -│ ├── 📄 cspell.json -│ └── 📄 settings.json ├── 📁 dokus │ ├── 📁 apache-plesk │ │ └── 📄 lets-encrypt-plesk.md @@ -113,6 +123,7 @@ Unter `./tools/` befinden sich Programme/ Skripte (aktuell in Typescript und Pyt │ ├── 📁 git │ │ ├── 📄 git-remote-branch.md │ │ ├── 📄 git-ssh-remote.md +│ │ ├── 📄 git-submodule-leitfaden.md │ │ └── 📄 git.md │ ├── 📁 js-ts │ │ └── 📄 js-ts-dialekte.md @@ -120,6 +131,9 @@ Unter `./tools/` befinden sich Programme/ Skripte (aktuell in Typescript und Pyt │ │ └── 📄 gewindetabellen.md │ ├── 📁 plesk │ │ └── 📄 plesk-benutzer-schon-vorhanden.md +│ ├── 📁 rust +│ │ ├── 📄 rust-offline-installation.md +│ │ └── 📄 rust-toolchain-msvc.md │ ├── 📁 windows │ │ └── 📄 desktop_ini.md │ └── 📄 helix__editor_einfuehrung_de.md @@ -142,12 +156,14 @@ Unter `./tools/` befinden sich Programme/ Skripte (aktuell in Typescript und Pyt │ ├── 📄 fscopy.ts │ └── 📄 fsdel.ts ├── 📄 .gitignore +├── 📄 CHANGELOG.md ├── 📄 LICENSE ├── 📄 package-lock.json ├── 📄 package.json ├── 📄 README.md ├── 📄 scan.cmd -└── 📄 tsconfig.json +├── 📄 tsconfig.json +└── 📄 VERSION ``` --- diff --git a/VERSION b/VERSION index b3e7542..88c8879 100644 --- a/VERSION +++ b/VERSION @@ -1,2 +1,2 @@ -0.1.0 +0.2.0 15.06.2025 \ No newline at end of file diff --git a/dokus/git/git-submodule-leitfaden.md b/dokus/git/git-submodule-leitfaden.md new file mode 100644 index 0000000..678d0c7 --- /dev/null +++ b/dokus/git/git-submodule-leitfaden.md @@ -0,0 +1,203 @@ +# Git-Submodule: Der umfassende Praxisleitfaden + +## Inhalt + +- [Git-Submodule: Der umfassende Praxisleitfaden](#git-submodule-der-umfassende-praxisleitfaden) + - [Inhalt](#inhalt) + - [🔰 Was ist ein Git-Submodul?](#-was-ist-ein-git-submodul) + - [🧱 Grundlagen](#-grundlagen) + - [📌 `.gitmodules`](#-gitmodules) + - [🧠 Merksatz](#-merksatz) + - [🛠️ Submodul hinzufügen](#️-submodul-hinzufügen) + - [🔄 Submodule aktualisieren](#-submodule-aktualisieren) + - [📥 Klonen mit Submodulen](#-klonen-mit-submodulen) + - [Methode 1: Inklusive Submodule](#methode-1-inklusive-submodule) + - [Methode 2: Nachträglich initialisieren](#methode-2-nachträglich-initialisieren) + - [🔃 Submodul-Synchronisation](#-submodul-synchronisation) + - [📂 Weitere Remotes im Submodul](#-weitere-remotes-im-submodul) + - [❗ Stolperfallen und Besonderheiten](#-stolperfallen-und-besonderheiten) + - [🔄 Remote-URL wechseln](#-remote-url-wechseln) + - [🚀 Push \& Pull Verhalten](#-push--pull-verhalten) + - [🧼 Submodul löschen](#-submodul-löschen) + - [🧰 Best Practices](#-best-practices) + - [📎 Nützliche Kommandos](#-nützliche-kommandos) + - [📑 Beispiel `.gitmodules` mit kommentierter Remote-Auswahl](#-beispiel-gitmodules-mit-kommentierter-remote-auswahl) + - [🧭 Alternative: Subtree statt Submodul?](#-alternative-subtree-statt-submodul) + - [📚 Fazit](#-fazit) + - [🔗 Weiterführende Links](#-weiterführende-links) + +--- + +## 🔰 Was ist ein Git-Submodul? + +Ein **Submodul** ist ein Git-Repository innerhalb eines anderen Git-Repositories. Es erlaubt, einen festen Commit eines externen Repositories als Teilprojekt einzubinden, ohne dessen Dateien direkt zu übernehmen. + +Beispielhafte Struktur: + +```plaintext +hauptprojekt/ +├── .gitmodules +├── modul1/ ← eingebundenes Submodul +└── modul2/ +``` + +## 🧱 Grundlagen + +### 📌 `.gitmodules` + +Diese Datei beschreibt Pfad und Remote-URL aller eingebundenen Submodule: + +```ini +[submodule "modul1"] + path = modul1 + url = git@github.com:user/modul1.git +``` + +### 🧠 Merksatz + +> Submodule sind **Pointer auf einen bestimmten Commit** eines anderen Repositories. + +## 🛠️ Submodul hinzufügen + +```bash +git submodule add +git commit -m "📦 Submodul hinzugefügt" +``` + +Beispiel: + +```bash +git submodule add git@github.com:user/libmath.git extern/libmath +``` + +Erzeugt: + +- `.gitmodules` +- Verzeichniseintrag im Git-Index +- Initialer Checkout des Submoduls (HEAD auf Remote-Commit) + +## 🔄 Submodule aktualisieren + +```bash +cd extern/libmath +git pull origin main +cd ../.. +git add extern/libmath +git commit -m "🔄 Submodul libmath aktualisiert" +``` + +> Nur das **Hauptrepo speichert den Commit-Zeiger**, nicht den Submodul-Inhalt selbst. + +## 📥 Klonen mit Submodulen + +### Methode 1: Inklusive Submodule + +```bash +git clone --recurse-submodules +``` + +### Methode 2: Nachträglich initialisieren + +```bash +git clone +git submodule update --init +``` + +## 🔃 Submodul-Synchronisation + +Wenn sich `.gitmodules` ändert (z. B. Remote-URL): + +```bash +git submodule sync +``` + +## 📂 Weitere Remotes im Submodul + +```bash +cd modul1 +git remote add backup git@backup.server:repo.git +``` + +> Diese Remotes sind **lokal**, nicht versioniert. `.gitmodules` kennt nur den Haupt-Remote. + +## ❗ Stolperfallen und Besonderheiten + +| Problem | Erklärung | +|--------|-----------| +| Submodul wird nicht mitgeclont | `--recurse-submodules` vergessen | +| Änderungen im Submodul nicht sichtbar | Submodul-Commit im Hauptrepo nicht geupdated | +| `.gitmodules` zeigt nicht funktionierende URL | z. B. lokale URL nach GitHub-Push – muss angepasst werden | +| Submodul zeigt „detached HEAD“ | normaler Zustand, wenn Submodul auf festen Commit gesetzt ist | + +## 🔄 Remote-URL wechseln + +```bash +# In .gitmodules ändern oder per Befehl: +git config -f .gitmodules submodule.modul1.url git@github.com:newuser/libmath.git +git submodule sync +``` + +## 🚀 Push & Pull Verhalten + +| Aktion | Wirkung | +|---------------------|---------| +| `git push` im Hauptrepo | Pusht nur Zeiger auf Submodul-Commit | +| `git push` im Submodul | Muss separat erfolgen | +| `git pull` im Hauptrepo | Holt *nicht* automatisch neuen Submodul-Stand | + +## 🧼 Submodul löschen + +```bash +# Schritt 1: Entfernen +git submodule deinit -f pfad/zum/modul +git rm -f pfad/zum/modul +rm -rf .git/modules/pfad/zum/modul +git commit -m "❌ Submodul entfernt" +``` + +## 🧰 Best Practices + +- **Nur stabile Submodul-Commits einchecken**, keine laufenden Branches. +- **Submodule niemals blind aktualisieren** – Änderungen genau prüfen. +- **Remote-Umschaltung dokumentieren oder automatisieren**, z. B. per Script. +- **Submodule klein halten** – große, tief verschachtelte Strukturen vermeiden. +- Für wiederverwendbare Bibliotheken oder Assets ideal (CAD, Snippets, Markdown, etc.). + +## 📎 Nützliche Kommandos + +```bash +git submodule status # Überblick über alle Submodule +git submodule update --init # Submodule initial holen +git submodule update --remote # Auf neuesten Remote-Stand updaten +git config -f .gitmodules ... # .gitmodules direkt bearbeiten +``` + +## 📑 Beispiel `.gitmodules` mit kommentierter Remote-Auswahl + +```ini +[submodule "modul1"] + path = modul1 + url = ssh://git@local.example.com:2222/myorg/modul1.git + # url = git@github.com:myorg/modul1.git +``` + +## 🧭 Alternative: Subtree statt Submodul? + +Subtree ist einfacher zu verwalten, aber: + +- kein fester Commit-Zeiger, +- kein Remote-Wechsel ohne Umweg, +- gemergte Historie im Hauptrepo. + +**Submodul = getrennte Repos** +**Subtree = eingemergter Inhalt** + +## 📚 Fazit + +Git-Submodule sind mächtig, aber erfordern **Disziplin und Überblick**. Für wiederverwendbare Komponenten, zentral gepflegte Inhalte oder externe Bibliotheken sind sie oft die bessere Wahl als Duplikate oder Copy-Paste. + +## 🔗 Weiterführende Links + +- [Git Book: Submodules](https://git-scm.com/book/en/v2/Git-Tools-Submodules) +- [git-scm Doku: submodule](https://git-scm.com/docs/git-submodule) +- [Vergleich Submodule vs. Subtree](https://www.atlassian.com/git/tutorials/git-submodule) diff --git a/dokus/rust/rust-offline-installation.md b/dokus/rust/rust-offline-installation.md new file mode 100644 index 0000000..0239b63 --- /dev/null +++ b/dokus/rust/rust-offline-installation.md @@ -0,0 +1,152 @@ +# Erstellung eines Installationsmediums für Rust + MSVC (Offline) + +Dieser Artikel beschreibt, wie du ein **vollständiges Installationsmedium** für die **Rust-Toolchain mit MSVC** unter Windows vorbereitest, damit du Rust auf anderen Rechnern **ohne Internetzugang** einrichten kannst. + +--- + +## Ziel + +Ein USB-Stick oder Offline-Verzeichnis mit: + +- Rust-Installer (offlinefähig) +- Visual Studio Build Tools (komplett inkl. MSVC) +- Optional: vorkompilierte Ziel-Toolchains + +--- + +## 1. Rust Offline-Installer vorbereiten + +### 1.1 Rustup Offline-Installer besorgen + +Gehe auf: + + https://forge.rust-lang.org/infra/release-archives.html + +Lade von dort: + +- `rust--x86_64-pc-windows-msvc.msi` +- `cargo--x86_64-pc-windows-msvc.msi` (optional) + +Oder direkt über: + + https://static.rust-lang.org/dist/ + +### 1.2 Installation ohne Internet + +Auf dem Zielrechner: + +- Führe `.msi`-Datei lokal aus +- Setze den `Path` manuell oder automatisch via Skript + +--- + +## 2. Visual Studio Build Tools offline installieren + +### 2.1 Installer herunterladen + +Lade den **Visual Studio Installer** von: + + https://visualstudio.microsoft.com/de/visual-cpp-build-tools/ + +Starte dann: + +```cmd +vs_BuildTools.exe --layout C:\VSOffline --lang de-DE +``` + +Dieser Befehl erstellt einen vollständigen Offline-Installer im Verzeichnis `C:\VSOffline`. + +### 2.2 Auswahl der Workloads + +Wähle beim interaktiven Download (GUI oder CLI): + +- **C++ Build Tools** +- Workload-Komponenten: + - MSVC v14.x (x64/x86) + - Windows 10/11 SDK + - CMake-Tools (optional) + +> 💡 Achtung: Download-Größe ca. 4–6 GB! + +### 2.3 Installation auf Zielsystem (Offline) + +Auf dem Zielrechner: + +```cmd +C:\VSOffline\vs_BuildTools.exe --noweb --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --quiet --wait +``` + +Alternativ über `vs_setup.exe`, je nach Version. + +--- + +## 3. Optional: Toolchains, Crates & Targets vorbereiten + +Falls du zusätzliche Targets (z. B. Linux oder ARM) brauchst: + +### 3.1 Ziel-Toolchain lokal laden + +```cmd +rustup target add x86_64-unknown-linux-gnu --print +``` + +Lade die `.tar.gz` von: + + https://static.rust-lang.org/dist/ + +Speichere diese im `dist/`-Ordner und installiere offline via: + +```cmd +rustup toolchain link +``` + +--- + +## 4. Automatisierung via USB-Stick + +### Dateistruktur auf Stick + +```text +USB-STICK/ +├── rust/ +│ └── rust-1.xx.x-x86_64-pc-windows-msvc.msi +├── vsbuildtools/ +│ └── setup + Offline-Daten +├── install.cmd +``` + +### Beispiel `install.cmd` + +```cmd +@echo off +echo [1/2] Installiere Rust... +start /wait rust\rust-*.msi + +echo [2/2] Installiere Visual Studio Build Tools... +start /wait vsbuildtools\vs_BuildTools.exe --noweb --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --quiet --wait + +echo Fertig. Bitte PC neu starten! +pause +``` + +--- + +## 5. Validierung + +Nach der Offline-Installation auf Zielsystem: + +```cmd +cargo new testprojekt +cd testprojekt +cargo build --release +``` + +Ergebnis: + + target\release\testprojekt.exe + +--- + +## Fazit + +Mit dieser Methode kannst du eine vollständige Rust- und MSVC-Umgebung offline auf jedem Windows-System aufsetzen – ideal für abgeschottete Systeme ohne Internetverbindung. diff --git a/dokus/rust/rust-toolchain-msvc.md b/dokus/rust/rust-toolchain-msvc.md new file mode 100644 index 0000000..d4ea7bc --- /dev/null +++ b/dokus/rust/rust-toolchain-msvc.md @@ -0,0 +1,152 @@ +# Rust-Toolchain mit MSVC unter Windows einrichten + +Dieser Artikel beschreibt die vollständige Einrichtung einer produktionsfähigen Rust-Toolchain mit **MSVC (Microsoft Visual C++)** unter **Windows**, einschließlich Erstellung einer `.exe`-Datei aus einem Beispielprogramm. + +## Inhalt + +- [Rust-Toolchain mit MSVC unter Windows einrichten](#rust-toolchain-mit-msvc-unter-windows-einrichten) + - [Inhalt](#inhalt) + - [Voraussetzungen](#voraussetzungen) + - [1. Rust installieren](#1-rust-installieren) + - [2. Visual Studio Build Tools installieren](#2-visual-studio-build-tools-installieren) + - [Schritt-für-Schritt](#schritt-für-schritt) + - [3. Umgebungsvariablen setzen (optional)](#3-umgebungsvariablen-setzen-optional) + - [4. Beispielprojekt erstellen](#4-beispielprojekt-erstellen) + - [5. Projekt kompilieren](#5-projekt-kompilieren) + - [Debug-Build (schnell, nicht optimiert)](#debug-build-schnell-nicht-optimiert) + - [Release-Build (optimiert, kleine `.exe`)](#release-build-optimiert-kleine-exe) + - [6. Optional: `.exe` testen](#6-optional-exe-testen) + - [7. Troubleshooting](#7-troubleshooting) + - [8. Alternative: Toolchain in einem Offline-Installer vorbereiten](#8-alternative-toolchain-in-einem-offline-installer-vorbereiten) + - [Zusammenfassung](#zusammenfassung) + - [Weiterführende Themen](#weiterführende-themen) + +--- + +## Voraussetzungen + +- Windows 10 oder 11 (64 Bit) +- Administratorrechte +- Mindestens 2 GB freier Speicherplatz + +## 1. Rust installieren + +Lade das offizielle Rust-Installationsprogramm herunter und führe es aus: + + + +Beim Setup: + +- **Toolchain wählen**: `default host triple: x86_64-pc-windows-msvc` +- Folge dem Assistenten, um `rustc`, `cargo` und `rustup` zu installieren. + +Verifiziere die Installation: + +```shell +rustc --version +cargo --version +``` + +## 2. Visual Studio Build Tools installieren + +Die Rust-Toolchain mit MSVC benötigt den **"C++ Build Tools"**-Teil von Visual Studio. + +### Schritt-für-Schritt + +1. Lade den **Visual Studio Installer**: + - + +2. Wähle bei der Installation: + - ✅ **C++ Build Tools** + - Und in der rechten Spalte: + - ✅ "MSVC v14.x - VS 2022 C++ x64/x86-Buildtools" + - ✅ "Windows 10 SDK" oder "Windows 11 SDK" (je nach Zielsystem) + - ✅ "C++ CMake-Tools für Windows" (optional für CMake-Projekte) + +3. Installiere alles und starte das System neu, falls verlangt. + +## 3. Umgebungsvariablen setzen (optional) + +Falls du die Buildtools über Kommandozeile verwenden willst, öffne: + +```cmd +"C:\Program Files (x86)\Microsoft Visual Studio\2022\BuildTools\VC\Auxiliary\Build\vcvars64.bat" +``` + +Das setzt temporär alle notwendigen Umgebungsvariablen für den Build-Prozess. + +## 4. Beispielprojekt erstellen + +```cmd +cargo new hello_world +cd hello_world +``` + +Beispielcode in `src/main.rs`: + +```rust +fn main() { + println!("Hallo Welt – kompiliert mit MSVC!"); +} +``` + +## 5. Projekt kompilieren + +### Debug-Build (schnell, nicht optimiert) + +```cmd +cargo build +``` + +### Release-Build (optimiert, kleine `.exe`) + +```cmd +cargo build --release +``` + +Die fertige `.exe` liegt unter: + + .\target\release\hello_world.exe + +## 6. Optional: `.exe` testen + +```cmd +.\target\release\hello_world.exe +``` + +## 7. Troubleshooting + +- **Fehlermeldung `link.exe not found`?** + → Build-Tools sind nicht korrekt installiert (siehe Schritt 2) + +- **Fehlermeldung zu fehlendem SDK?** + → Stelle sicher, dass du das passende Windows SDK mit installiert hast + +- **MSVC und GNU Toolchain gleichzeitig installiert?** + → Du kannst über `rustup` zwischen beiden wechseln: + +```cmd +rustup show +rustup default stable-x86_64-pc-windows-msvc +``` + +## 8. Alternative: Toolchain in einem Offline-Installer vorbereiten + +Wenn du das Setup auf mehreren Rechnern ohne Internetzugang durchführen möchtest, siehe [separater Artikel zur Erstellung eines Installationsmediums](./rust-offline-installation.md). + +## Zusammenfassung + +| Komponente | Aufgabe | +|------------------|----------------------------------| +| Rustup | Verwaltung von Toolchains | +| Cargo | Buildsystem und Paketmanager | +| MSVC Build Tools | C++-Compiler/Linker für Windows | +| `vcvars64.bat` | Aktiviert Build-Umgebung | +| `cargo build` | Erstellt `.exe` mit Rust und MSVC | + +## Weiterführende Themen + +- Einbindung von Ressourcen und Icons in die `.exe` +- Verwendung von `cc`/`bindgen` für C-Bindings +- Cross-Kompilierung mit `x86_64-pc-windows-gnu` oder Linux-Zielsystemen +- Automatisierter Build via Makefile oder PowerShell diff --git a/tools/collector/processed.log b/tools/collector/processed.log index 1ba696b..c8810d1 100644 --- a/tools/collector/processed.log +++ b/tools/collector/processed.log @@ -8,3 +8,6 @@ dokus/git/git-ssh-remote.md dokus/git/git.md dokus/asciidoc/asciidoctor-theme-bug-workaround.md dokus/apache-plesk/lets-encrypt-plesk.md +dokus/git/git-submodule-leitfaden.md +dokus/rust/rust-toolchain-msvc.md +dokus/rust/rust-offline-installation.md