Author SHA1 Message Date
DragonSlayer_14 705ecd8142 Merge pull request 'Merge dev in testing: Automatischer Aufruf von sudo' (#4) from dev into testing
Unit-Tests / Unit-Tests (pull_request) Skipped
Auto-PR (Testing → Main) / Erstelle automatisch PR von testing nach main (push) Successful in 11s
Testing Build, Publish & Preview Release / Erkenne relevante Code-Änderungen (push) Successful in 14s
TruffleHog Secret Scan / TruffleHog (pull_request) Successful in 25s
Security Scans / Trivy & OSV-Scanner (push) Successful in 41s
Security Scans / Trivy & OSV-Scanner (pull_request) Successful in 42s
Testing Build, Publish & Preview Release / Build, Publish Packages (Testing) & Create Preview Release (push) Successful in 12m0s
TruffleHog Secret Scan / TruffleHog (push) Successful in 10s
Reviewed-on: #4
2026-09-20 14:24:48 +00:00
Gitea-Bot 9c34fc93cb Chore: Erhöht Patch-Version auf 2.0.1 für Promotion nach testing
Testing Build, Publish & Preview Release / Build, Publish Packages (Testing) & Create Preview Release (push) Skipped
TruffleHog Secret Scan / TruffleHog (push) Successful in 29s
Security Scans / Trivy & OSV-Scanner (push) Successful in 55s
Security Scans / Trivy & OSV-Scanner (pull_request) Successful in 55s
TruffleHog Secret Scan / TruffleHog (pull_request) Successful in 26s
Code Quality (Auto-Format & Clippy-Fix) / Formatierung & Clippy automatisch beheben (push) Successful in 1m39s
Unit-Tests / Unit-Tests (pull_request) Successful in 3m20s
2026-09-20 14:19:22 +00:00
DragonSlayer_14andClaude Sonnet 5 cd9a016cf8 Feature: require_root startet sich bei fehlenden Root-Rechten automatisch per sudo neu
Testing Build, Publish & Preview Release / Build, Publish Packages (Testing) & Create Preview Release (push) Skipped
TruffleHog Secret Scan / TruffleHog (push) Successful in 15s
Security Scans / Trivy & OSV-Scanner (push) Successful in 24s
Code Quality (Auto-Format & Clippy-Fix) / Formatierung & Clippy automatisch beheben (push) Successful in 33s
Auto Patch-Version-Bump (Dev → Testing PR) / Erkenne relevante Änderungen im PR (pull_request) Successful in 10s
TruffleHog Secret Scan / TruffleHog (pull_request) Successful in 17s
Auto Patch-Version-Bump (Dev → Testing PR) / Patch-Version erhöhen & auf Dev pushen (pull_request) Successful in 12s
Security Scans / Trivy & OSV-Scanner (pull_request) Successful in 35s
Unit-Tests / Unit-Tests (pull_request) Successful in 4m6s
Statt nur mit einer Fehlermeldung abzubrechen, ersetzt sich der Prozess
für root-pflichtige Commands (mount/unmount/watch/service crontab/
drive add/edit/remove) jetzt transparent über sudo-ctdra::run_as_root()
via execve mit sudo neu; der Fehlerpfad greift nur noch, wenn sudo
selbst nicht gefunden werden kann.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 16:15:42 +02:00
DragonSlayer_14andClaude Sonnet 5 d88dcac7a0 Fix: Entfernt nmap als eigene Abhängigkeit, mac2ip verlangt es bereits selbst
nmap wird von smart-mount nie direkt aufgerufen, sondern nur intern von
mac2ip für den MAC->IP-Scan verwendet. Da das mac2ip-Paket nmap bereits
selbst als Abhängigkeit deklariert (siehe dessen Depends), war die
zusätzliche Nennung in den deb-/rpm-/arch-Paketmetadaten sowie der
nmap-Check in `doctor` redundant.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 16:10:02 +02:00
DragonSlayer_14 7f5c8db6ce Merge pull request 'Merge dev in testing: Ref: Entfernt vollständige 32-Bit-Unterstützung (i686)' (#3) from dev into testing
Unit-Tests / Unit-Tests (pull_request) Skipped
Auto-PR (Testing → Main) / Erstelle automatisch PR von testing nach main (push) Successful in 12s
Testing Build, Publish & Preview Release / Erkenne relevante Code-Änderungen (push) Successful in 13s
TruffleHog Secret Scan / TruffleHog (pull_request) Successful in 27s
Security Scans / Trivy & OSV-Scanner (push) Successful in 44s
Security Scans / Trivy & OSV-Scanner (pull_request) Successful in 45s
Testing Build, Publish & Preview Release / Build, Publish Packages (Testing) & Create Preview Release (push) Successful in 12m11s
TruffleHog Secret Scan / TruffleHog (push) Successful in 10s
Reviewed-on: #3
2026-09-20 12:20:30 +00:00
DragonSlayer_14andClaude Sonnet 5 09cb728f30 Ref: Entfernt vollständige 32-Bit-Unterstützung (i686)
Testing Build, Publish & Preview Release / Build, Publish Packages (Testing) & Create Preview Release (push) Skipped
TruffleHog Secret Scan / TruffleHog (push) Successful in 17s
Security Scans / Trivy & OSV-Scanner (push) Successful in 26s
Code Quality (Auto-Format & Clippy-Fix) / Formatierung & Clippy automatisch beheben (push) Successful in 35s
Auto Patch-Version-Bump (Dev → Testing PR) / Erkenne relevante Änderungen im PR (pull_request) Successful in 9s
Auto Patch-Version-Bump (Dev → Testing PR) / Patch-Version erhöhen & auf Dev pushen (pull_request) Skipped
TruffleHog Secret Scan / TruffleHog (pull_request) Successful in 19s
Security Scans / Trivy & OSV-Scanner (pull_request) Successful in 28s
Unit-Tests / Unit-Tests (pull_request) Successful in 1m52s
Baut, paketiert und dokumentiert nur noch x86_64 und aarch64;
i686-Cross-Compilation-Toolchain, -Targets und -Paketierungsschritte
in den Gitea-Workflows sowie die i686-Linker-Konfiguration entfallen.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-20 14:14:38 +02:00
11 changed files with 46 additions and 41 deletions
-3
View File
@@ -10,6 +10,3 @@ git-fetch-with-cli = true
[target.aarch64-unknown-linux-gnu] [target.aarch64-unknown-linux-gnu]
linker = "aarch64-linux-gnu-gcc" linker = "aarch64-linux-gnu-gcc"
[target.i686-unknown-linux-gnu]
linker = "i686-linux-gnu-gcc"
+2 -7
View File
@@ -64,7 +64,7 @@ jobs:
- name: Install Cross-Compilation Toolchains (apt) - name: Install Cross-Compilation Toolchains (apt)
run: | run: |
sudo apt-get update sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu gcc-i686-linux-gnu sudo apt-get install -y gcc-aarch64-linux-gnu
- name: Ermittle Rust-Version für Rustup-Target-Cache-Key - name: Ermittle Rust-Version für Rustup-Target-Cache-Key
run: echo "RUST_VERSION=$(rustc --version | awk '{print $2}')" >> "$GITHUB_ENV" run: echo "RUST_VERSION=$(rustc --version | awk '{print $2}')" >> "$GITHUB_ENV"
@@ -75,12 +75,11 @@ jobs:
with: with:
path: | path: |
~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu
~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/i686-unknown-linux-gnu
key: rustup-targets-${{ runner.os }}-${{ env.RUST_VERSION }} key: rustup-targets-${{ runner.os }}-${{ env.RUST_VERSION }}
- name: Add Rust Cross-Compilation Targets - name: Add Rust Cross-Compilation Targets
if: steps.cache-rustup-targets.outputs.cache-hit != 'true' if: steps.cache-rustup-targets.outputs.cache-hit != 'true'
run: rustup target add aarch64-unknown-linux-gnu i686-unknown-linux-gnu run: rustup target add aarch64-unknown-linux-gnu
- name: PATH um Cargo-bin-Verzeichnis ergänzen - name: PATH um Cargo-bin-Verzeichnis ergänzen
run: | run: |
@@ -111,7 +110,6 @@ jobs:
run: | run: |
cargo build --release --target x86_64-unknown-linux-gnu cargo build --release --target x86_64-unknown-linux-gnu
cargo build --release --target aarch64-unknown-linux-gnu cargo build --release --target aarch64-unknown-linux-gnu
cargo build --release --target i686-unknown-linux-gnu
- name: Determine Build Number - name: Determine Build Number
id: build_num id: build_num
@@ -130,20 +128,17 @@ jobs:
run: | run: |
cargo deb --target x86_64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build cargo deb --target x86_64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build
cargo deb --target aarch64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build cargo deb --target aarch64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build
cargo deb --target i686-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build
- name: Build Fedora / RPM Packages (.rpm) - name: Build Fedora / RPM Packages (.rpm)
run: | run: |
mkdir -p target/generate-rpm mkdir -p target/generate-rpm
cargo generate-rpm --target x86_64-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm cargo generate-rpm --target x86_64-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm
cargo generate-rpm --target aarch64-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm cargo generate-rpm --target aarch64-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm
cargo generate-rpm --target i686-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm
- name: Build Arch Linux Packages (.pkg.tar.zst) - name: Build Arch Linux Packages (.pkg.tar.zst)
run: | run: |
python3 scripts/package-arch.py --target x86_64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}" python3 scripts/package-arch.py --target x86_64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}"
python3 scripts/package-arch.py --target aarch64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}" python3 scripts/package-arch.py --target aarch64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}"
python3 scripts/package-arch.py --target i686-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}"
- name: Publish Packages to Gitea Package Registry - name: Publish Packages to Gitea Package Registry
env: env:
+2 -7
View File
@@ -64,7 +64,7 @@ jobs:
- name: Install Cross-Compilation Toolchains (apt) - name: Install Cross-Compilation Toolchains (apt)
run: | run: |
sudo apt-get update sudo apt-get update
sudo apt-get install -y gcc-aarch64-linux-gnu gcc-i686-linux-gnu sudo apt-get install -y gcc-aarch64-linux-gnu
- name: Ermittle Rust-Version für Rustup-Target-Cache-Key - name: Ermittle Rust-Version für Rustup-Target-Cache-Key
run: echo "RUST_VERSION=$(rustc --version | awk '{print $2}')" >> "$GITHUB_ENV" run: echo "RUST_VERSION=$(rustc --version | awk '{print $2}')" >> "$GITHUB_ENV"
@@ -75,12 +75,11 @@ jobs:
with: with:
path: | path: |
~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/aarch64-unknown-linux-gnu
~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu/lib/rustlib/i686-unknown-linux-gnu
key: rustup-targets-${{ runner.os }}-${{ env.RUST_VERSION }} key: rustup-targets-${{ runner.os }}-${{ env.RUST_VERSION }}
- name: Add Rust Cross-Compilation Targets - name: Add Rust Cross-Compilation Targets
if: steps.cache-rustup-targets.outputs.cache-hit != 'true' if: steps.cache-rustup-targets.outputs.cache-hit != 'true'
run: rustup target add aarch64-unknown-linux-gnu i686-unknown-linux-gnu run: rustup target add aarch64-unknown-linux-gnu
- name: PATH um Cargo-bin-Verzeichnis ergänzen - name: PATH um Cargo-bin-Verzeichnis ergänzen
run: | run: |
@@ -111,7 +110,6 @@ jobs:
run: | run: |
cargo build --release --target x86_64-unknown-linux-gnu cargo build --release --target x86_64-unknown-linux-gnu
cargo build --release --target aarch64-unknown-linux-gnu cargo build --release --target aarch64-unknown-linux-gnu
cargo build --release --target i686-unknown-linux-gnu
- name: Determine Build Number - name: Determine Build Number
id: build_num id: build_num
@@ -130,20 +128,17 @@ jobs:
run: | run: |
cargo deb --target x86_64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build cargo deb --target x86_64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build
cargo deb --target aarch64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build cargo deb --target aarch64-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build
cargo deb --target i686-unknown-linux-gnu --deb-revision "${BUILD_NUMBER}" --no-build
- name: Build Fedora / RPM Packages (.rpm) - name: Build Fedora / RPM Packages (.rpm)
run: | run: |
mkdir -p target/generate-rpm mkdir -p target/generate-rpm
cargo generate-rpm --target x86_64-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm cargo generate-rpm --target x86_64-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm
cargo generate-rpm --target aarch64-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm cargo generate-rpm --target aarch64-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm
cargo generate-rpm --target i686-unknown-linux-gnu -s "release=\"${BUILD_NUMBER}\"" -o target/generate-rpm
- name: Build Arch Linux Packages (.pkg.tar.zst) - name: Build Arch Linux Packages (.pkg.tar.zst)
run: | run: |
python3 scripts/package-arch.py --target x86_64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}" python3 scripts/package-arch.py --target x86_64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}"
python3 scripts/package-arch.py --target aarch64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}" python3 scripts/package-arch.py --target aarch64-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}"
python3 scripts/package-arch.py --target i686-unknown-linux-gnu --pkgrel "${BUILD_NUMBER}"
- name: Publish Packages to Gitea Package Registry - name: Publish Packages to Gitea Package Registry
env: env:
+16
View File
@@ -3,6 +3,22 @@
<component name="JsonSchemaMappingsProjectConfiguration"> <component name="JsonSchemaMappingsProjectConfiguration">
<state> <state>
<map> <map>
<entry key="Cargo Config">
<value>
<SchemaInfo>
<option name="name" value="Cargo Config" />
<option name="relativePathToSchema" value="https://www.schemastore.org/cargo-config.json" />
<option name="applicationDefined" value="true" />
<option name="patterns">
<list>
<Item>
<option name="path" value=".cargo/config.toml" />
</Item>
</list>
</option>
</SchemaInfo>
</value>
</entry>
<entry key="GitHub Workflow"> <entry key="GitHub Workflow">
<value> <value>
<SchemaInfo> <SchemaInfo>
+2 -2
View File
@@ -7,7 +7,7 @@ Dieses Dokument dient als technischer Leitfaden und Kontextdokument für KI-Codi
## 1. Projektübersicht & Philosophie ## 1. Projektübersicht & Philosophie
Dieses Repository ist ein **Rust-Projekt-Template** für Linux-Anwendungen und CLI-Tools mit Fokus auf: Dieses Repository ist ein **Rust-Projekt-Template** für Linux-Anwendungen und CLI-Tools mit Fokus auf:
- Automatisierte Multi-Architektur-Kompilierung (`x86_64`, `aarch64`, `i686`). - Automatisierte Multi-Architektur-Kompilierung (`x86_64`, `aarch64`).
- Native Paketierung für Debian (`.deb`), Fedora/RHEL (`.rpm`) und Arch Linux (`.pkg.tar.zst`) sowie Docker-Container-Images. - Native Paketierung für Debian (`.deb`), Fedora/RHEL (`.rpm`) und Arch Linux (`.pkg.tar.zst`) sowie Docker-Container-Images.
- Vollständig automatisierte CI/CD-Pipelines via Gitea Actions (kompatibel mit Forgejo / GitHub Actions). - Vollständig automatisierte CI/CD-Pipelines via Gitea Actions (kompatibel mit Forgejo / GitHub Actions).
- Automatisierte Sicherheits-Scans (Schwachstellen, Secrets) und Dependency-Updates. - Automatisierte Sicherheits-Scans (Schwachstellen, Secrets) und Dependency-Updates.
@@ -15,7 +15,7 @@ Dieses Repository ist ein **Rust-Projekt-Template** für Linux-Anwendungen und C
### Standards & Tech-Stack ### Standards & Tech-Stack
- **Sprache**: Rust (Edition 2024), Python 3 (für Hilfsskripte in `scripts/`). - **Sprache**: Rust (Edition 2024), Python 3 (für Hilfsskripte in `scripts/`).
- **Rust Toolchain**: Stable. - **Rust Toolchain**: Stable.
- **Zielplattform**: Linux (GLIBC-basiert, Cross-Kompilierung für `x86_64-unknown-linux-gnu`, `aarch64-unknown-linux-gnu`, `i686-unknown-linux-gnu`). - **Zielplattform**: Linux (GLIBC-basiert, Cross-Kompilierung für `x86_64-unknown-linux-gnu`, `aarch64-unknown-linux-gnu`).
- **Container**: Docker-Images werden zusätzlich zu den nativen Paketen gebaut und in die Gitea Container Registry veröffentlicht. - **Container**: Docker-Images werden zusätzlich zu den nativen Paketen gebaut und in die Gitea Container Registry veröffentlicht.
- **Sicherheits-Tooling**: Trivy, OSV-Scanner, TruffleHog (Secret-Scanning), Renovate (Dependency-Updates), Qodana (statische Codeanalyse). - **Sicherheits-Tooling**: Trivy, OSV-Scanner, TruffleHog (Secret-Scanning), Renovate (Dependency-Updates), Qodana (statische Codeanalyse).
- **Lizenz**: GPL-3.0-or-later (sofern nicht im abgeleiteten Projekt anders definiert). - **Lizenz**: GPL-3.0-or-later (sofern nicht im abgeleiteten Projekt anders definiert).
Generated
+1 -1
View File
@@ -2052,7 +2052,7 @@ checksum = "ba467056f1b547ed52077911161fc86985becbc60e8e1857c8a144dab0def891"
[[package]] [[package]]
name = "smart-mount" name = "smart-mount"
version = "2.0.0" version = "2.0.1"
dependencies = [ dependencies = [
"aes-gcm 0.11.1", "aes-gcm 0.11.1",
"anyhow", "anyhow",
+8 -7
View File
@@ -1,6 +1,6 @@
[package] [package]
name = "smart-mount" name = "smart-mount"
version = "2.0.0" version = "2.0.1"
edition = "2024" edition = "2024"
authors = ['DragonSlayer_14'] authors = ['DragonSlayer_14']
readme = "README.md" readme = "README.md"
@@ -46,10 +46,11 @@ maintainer = "DragonSlayer_14"
copyright = "2026 DragonSlayer_14" copyright = "2026 DragonSlayer_14"
section = "net" section = "net"
priority = "optional" priority = "optional"
# mac2ip und nmap sind harte Laufzeitabhängigkeiten (MAC->IP-Auflösung); davfs2/cifs-utils/ # mac2ip ist eine harte Laufzeitabhängigkeit (MAC->IP-Auflösung;
# nfs-common werden bewusst NICHT hart verlangt, da smart-mount pro konfiguriertem Laufwerk # davfs2/cifs-utils/nfs-common werden bewusst NICHT hart verlangt,
# nur das jeweils benötigte Mount-Backend zur Laufzeit prüft/lädt (siehe MountBackend::check_available). # da smart-mount pro konfiguriertem Laufwerk nur das jeweils benötigte Mount-Backend
depends = "$auto, mac2ip, nmap" # zur Laufzeit prüft/lädt (siehe MountBackend::check_available).
depends = "$auto, mac2ip"
recommends = "davfs2, cifs-utils, nfs-common" recommends = "davfs2, cifs-utils, nfs-common"
extended-description = """\ extended-description = """\
smart-mount bindet Paare aus einem lokalen (LAN, WebDAV/SMB/NFS) und einem Cloud-Laufwerk smart-mount bindet Paare aus einem lokalen (LAN, WebDAV/SMB/NFS) und einem Cloud-Laufwerk
@@ -78,7 +79,7 @@ assets = [
{ source = "packaging/systemd/smart-mount-watch.service", dest = "/usr/lib/systemd/system/smart-mount-watch.service", mode = "644" }, { source = "packaging/systemd/smart-mount-watch.service", dest = "/usr/lib/systemd/system/smart-mount-watch.service", mode = "644" },
{ source = "packaging/systemd/smart-mount-watch.timer", dest = "/usr/lib/systemd/system/smart-mount-watch.timer", mode = "644" }, { source = "packaging/systemd/smart-mount-watch.timer", dest = "/usr/lib/systemd/system/smart-mount-watch.timer", mode = "644" },
] ]
requires = { "mac2ip" = "*", "nmap" = "*" } requires = { "mac2ip" = "*" }
suggests = { "davfs2" = "*", "cifs-utils" = "*", "nfs-utils" = "*" } suggests = { "davfs2" = "*", "cifs-utils" = "*", "nfs-utils" = "*" }
# postinst/postrm-Äquivalente: richten den paketierten systemd-Dienst automatisch ein/entfernen # postinst/postrm-Äquivalente: richten den paketierten systemd-Dienst automatisch ein/entfernen
# (Gegenstück zu packaging/deb/postinst+postrm). $1 in %postun: Anzahl verbleibender Versionen # (Gegenstück zu packaging/deb/postinst+postrm). $1 in %postun: Anzahl verbleibender Versionen
@@ -99,7 +100,7 @@ fi
[package.metadata.arch] [package.metadata.arch]
pkgrel = "1" # Wird in CI durch get-build-number.py dynamisch überschrieben pkgrel = "1" # Wird in CI durch get-build-number.py dynamisch überschrieben
arch = "x86_64" arch = "x86_64"
depends = ["gcc-libs", "glibc", "mac2ip", "nmap"] depends = ["gcc-libs", "glibc", "mac2ip"]
optdepends = [ optdepends = [
"davfs2: WebDAV-Laufwerke einbinden", "davfs2: WebDAV-Laufwerke einbinden",
"cifs-utils: SMB/CIFS-Laufwerke einbinden", "cifs-utils: SMB/CIFS-Laufwerke einbinden",
+3 -2
View File
@@ -14,8 +14,9 @@ werden (z. B. über ein separates Sync-Tool).
## Voraussetzungen ## Voraussetzungen
- **[`mac2ip`](https://gitea.creative-dragonslayer.de/Linuxapps/Mac2Ip)** und **`nmap`**: hart - **[`mac2ip`](https://gitea.creative-dragonslayer.de/Linuxapps/Mac2Ip)**: hart benötigt, sofern
benötigt, sofern lokale Laufwerke per MAC-Adresse adressiert werden (Auflösung MAC → IP). lokale Laufwerke per MAC-Adresse adressiert werden (Auflösung MAC → IP). `mac2ip` verlangt
`nmap` bereits selbst als eigene Paketabhängigkeit.
- **`timeout`** (GNU coreutils): auf praktisch jedem Linux-System bereits vorhanden (Basis- - **`timeout`** (GNU coreutils): auf praktisch jedem Linux-System bereits vorhanden (Basis-
Systempaket). Wird verwendet, um `mount`/`umount`-Aufrufe zeitlich zu begrenzen - siehe Systempaket). Wird verwendet, um `mount`/`umount`-Aufrufe zeitlich zu begrenzen - siehe
"Verhalten bei nicht mehr erreichbarem Server" unten. "Verhalten bei nicht mehr erreichbarem Server" unten.
+2 -6
View File
@@ -17,10 +17,6 @@ TARGET_ARCH_MAP = {
"aarch64-unknown-linux-musl": "aarch64", "aarch64-unknown-linux-musl": "aarch64",
"aarch64": "aarch64", "aarch64": "aarch64",
"arm64": "aarch64", "arm64": "aarch64",
"i686-unknown-linux-gnu": "i686",
"i686-unknown-linux-musl": "i686",
"i686": "i686",
"i386": "i686",
} }
@@ -200,8 +196,8 @@ def build_package(target_triple=None, target_arch=None, pkgrel=None):
def main(): def main():
parser = argparse.ArgumentParser(description="Erstellt Arch Linux-Pakete (.pkg.tar.zst)") parser = argparse.ArgumentParser(description="Erstellt Arch Linux-Pakete (.pkg.tar.zst)")
parser.add_argument("--target", help="Rust Target-Triple (z.B. x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu, i686-unknown-linux-gnu)") parser.add_argument("--target", help="Rust Target-Triple (z.B. x86_64-unknown-linux-gnu, aarch64-unknown-linux-gnu)")
parser.add_argument("--arch", help="Architektur (z.B. x86_64, aarch64, i686)") parser.add_argument("--arch", help="Architektur (z.B. x86_64, aarch64)")
parser.add_argument("--pkgrel", help="Release-/Build-Nummer (z.B. 1, 2, ...)") parser.add_argument("--pkgrel", help="Release-/Build-Nummer (z.B. 1, 2, ...)")
args = parser.parse_args() args = parser.parse_args()
+10 -5
View File
@@ -10,13 +10,18 @@ pub mod watch;
use clap::{CommandFactory, Parser, Subcommand}; use clap::{CommandFactory, Parser, Subcommand};
use clap_complete::Shell; use clap_complete::Shell;
/// Bricht mit einer klaren Fehlermeldung ab, falls nicht als root aufgerufen. Mounten läuft /// Startet den Prozess bei Bedarf transparent über `sudo` neu, falls nicht bereits als root
/// ausschließlich als root/System-Dienst (siehe [`smart_mount::systemd`]) - es gibt seit dem /// aufgerufen. Mounten läuft ausschließlich als root/System-Dienst (siehe
/// Wegfall des Nutzerkontexts keine unprivilegierte Mount-Variante mehr, für die ein /// [`smart_mount::systemd`]) - es gibt seit dem Wegfall des Nutzerkontexts keine
/// Rechte-Check hier zu früh käme. /// unprivilegierte Mount-Variante mehr, für die ein Rechte-Check hier zu früh käme.
///
/// `run_as_root()` ersetzt den aktuellen Prozess per `execve` und kehrt bei Erfolg nie zurück
/// (siehe sudo-ctdra); der `io::Error`-Rückgabewert ist ausschließlich der Fehlerfall (z. B.
/// `sudo` nicht gefunden).
pub(crate) fn require_root(context: &str) -> anyhow::Result<()> { pub(crate) fn require_root(context: &str) -> anyhow::Result<()> {
if !sudo_ctdra::is_run_as_root() { if !sudo_ctdra::is_run_as_root() {
anyhow::bail!("'{context}' requires root privileges (re-run with sudo)."); let err = sudo_ctdra::run_as_root();
anyhow::bail!("'{context}' requires root privileges: could not re-exec via sudo: {err}");
} }
Ok(()) Ok(())
} }
-1
View File
@@ -64,7 +64,6 @@ pub fn run_checks(cfg: &AppConfig) -> Vec<CheckResult> {
&cfg.settings.mac2ip_binary, &cfg.settings.mac2ip_binary,
"install mac2ip (private tool, see README)", "install mac2ip (private tool, see README)",
)); ));
results.push(check_binary("nmap", "nmap", "install package 'nmap'"));
} }
results results