Aktuelles
Digital Eliteboard - Das Digitale Technik Forum

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Registriere dich noch heute kostenlos, um Mitglied zu werden! Sobald du angemeldet bist, kannst du auf unserer Seite aktiv teilnehmen, indem du deine eigenen Themen und Beiträge erstellst und dich über deinen eigenen Posteingang mit anderen Mitgliedern unterhalten kannst! Zudem bekommst du Zutritt zu Bereichen, welche für Gäste verwehrt bleiben

Support Inhaus / LabBETA Skript zum signieren.

Lösung
So, das Script sollte nun eigentlich fertig sein!
Code:
./test --help
 Verwendung:
  ./test <Modell> <Typ> [Buildnummer]

 Beispiele:
  ./test 7530 inhaus         → lädt Inhaus-Version für 7530
  ./test 7590 labor 122809   → lädt Labor-Version für 7590 mit Build 122809

 Unterstützte Modelle:
  - 7530
  - 7590
  - 7590AX

 Typen:
  - inhaus       → wird zu Inhaus im Namen, Downloadpfad inhaus
  - labor        → wird zu LabBETA im Namen, Downloadpfad labor

 Optional:
  - Dritte Angabe (Build) kann weggelassen werden, dann wird Standard-Build 121784 verwendet.
Und es ist soweit eigentlich ein rundum sorglos Script. Bis halt auf den Fehler in dem einen Script von Peter. Und ich halt auf mein System OpenSSL 3 habe. Kann ich auch nicht das alte...
Hier das Script am Beispiel einer inhouse das ich benutze um das Image mit modfs zu bearbeiten und zu signieren. Die benötigte Ordner vom Git vom PeterPawn sollten schon vorhanden sein.

Code:
#!/bin/bash

# Download the firmware image
wget -q -O var.tar http://download.avm.de/inhaus/Smart24P2/7530/FRITZ.Box_7530-08.10-121784-Inhaus.image

# Extract the tar file and remove the tarball
tar -x -f var.tar
rm var.tar

# Move the extracted filesystem image
mv var/tmp/filesystem.image filesystem.image

# Unsquash the filesystem image
YourFritz/bin/squashfs/$(uname -m)/unsquashfs4-le -no-progress filesystem.image
rm filesystem.image

# Run modification scripts
cd modfs/
./run_modscripts ../squashfs-root
cd ..

# Download the public key
wget -P squashfs-root/etc https://instinto.mooo.com:1974/osprey/avm_firmware_public_key9

# Modify the hardware revision in the configuration file
sed -i 's/\b\(export HWRevision\)\b/\1=236/' squashfs-root/etc/init.d/rc.conf

# Verify the public key
ls squashfs-root/etc | grep avm_firmware_publ*

# Resquash the modified filesystem
YourFritz/bin/squashfs/$(uname -m)/mksquashfs4-le squashfs-root/ filesystem.image -all-root -no-progress
mv filesystem.image var/tmp/filesystem.image

# Remove the signature file
rm var/signature

# Create a new tarball with the modified filesystem
tar -c -f var.tar ./var/
tar -tvf var.tar

# Sign the image and wait for completion
bash YourFritz/signimage/sign_image var.tar > 7530.image
wait
tar -tvf 7530.image

# Rename the signed image
mv 7530.image 7530_signed.image

# Clean up
rm -r var var.tar squashfs-root

Das funktioniert nur bei der 7530/7590/7590AX
mit fiting.image bsp. 7530AX geht modfs nur über den Umweg mit freetz-ng.
 
Code:
# Repositories klonen (falls sie nicht existieren)
[ ! -d YourFritz ] && git clone --recurse-submodules https://github.com/PeterPawn/YourFritz.git
[ ! -d modfs ] && git clone -b beta --recurse-submodules https://github.com/PeterPawn/modfs.git

# Backup und Vorbereitung der Modskripte
mv modfs/modscripts/ modfs/modscripts.org 2>/dev/null || true
mv modfs/contrib/modscripts modfs/contrib/modscripts.org 2>/dev/null || true
mkdir -p modfs/modscripts

# Nur benötigte Modskripte kopieren
SCRIPTS=(
    "mod_enable_calllog"
    "mod_fixed_branding"
    "mod_telnet_enable"
    "mod_rc_tail_sh"
)
for script in "${SCRIPTS[@]}"; do
    cp "modfs/modscripts.org/$script" "modfs/modscripts/" 2>/dev/null || true
done
 
ich habe dein script mal getestet. da bekommt man schon mal ein fehler
Code:
./test
Found TI checksum (0x4C795F1F) at the end of the image.
Filesystem on filesystem.image is xz compressed (4:0)
Parallel unsquashfs: Using 20 processors
14182 inodes (15594 blocks) to write

dir_scan: failed to make directory squashfs-root, because File exists

created 0 files
created 0 directories
created 0 symlinks
created 0 devices
created 0 fifos
"/home/MeinName/Ubuntu/test1/squashfs-root" seems to be not an unpacked FRITZ!OS structure - so this script was unable to extract needed values from this directory.
--2025-08-01 08:51:44--  https://instinto.mooo.com:1974/osprey/avm_firmware_public_key9
Auflösen des Hostnamens instinto.mooo.com (instinto.mooo.com)… 82.223.55.182
Verbindungsaufbau zu instinto.mooo.com (instinto.mooo.com)|82.223.55.182|:1974 … verbunden.
FEHLER: Das Zertifikat von instinto.mooo.com kann nicht geprüft werden, ausgestellt von »CN=R10,O=Let's Encrypt,C=US«:.
  Die Autorität des Ausstellers des Zertifikates kann lokal nicht geprüft werden.
Verwenden Sie »--no-check-certificate«, um zu dem Server instinto.mooo.com eine nicht gesicherte Verbindung aufzubauen.
sed: squashfs-root/etc/init.d/rc.conf kann nicht gelesen werden: Datei oder Verzeichnis nicht gefunden
avm_firmware_public_key1
avm_firmware_public_key2
avm_firmware_public_key3
avm_firmware_public_key9
Parallel mksquashfs: Using 20 processors
Creating 4.0 filesystem on filesystem.image, block size 65536.

Exportable Squashfs 4.0 filesystem, xz compressed, data block size 65536
    compressed data, compressed metadata, compressed fragments, no xattrs
    duplicates are removed
Filesystem size 30728.55 Kbytes (30.01 Mbytes)
    19.07% of uncompressed filesystem size (161144.14 Kbytes)
Inode table size 104108 bytes (101.67 Kbytes)
    21.49% of uncompressed inode table size (484439 bytes)
Directory table size 138652 bytes (135.40 Kbytes)
    35.82% of uncompressed directory table size (387029 bytes)
Number of duplicate files found 8797
Number of inodes 14601
Number of files 13024
Number of fragments 505
Number of symbolic links  724
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 853
Number of ids (unique uids + gids) 1
Number of uids 1
    root (0)
Number of gids 1
    root (0)
drwxr-xr-x MeinName/MeinName       0 2025-08-01 08:51 ./var/
-rw-r--r-- MeinName/MeinName      42 2025-06-07 01:52 ./var/version
-rwxrwxr-x MeinName/MeinName  633340 2025-06-07 01:52 ./var/tzupdate
-rw-r--r-- MeinName/MeinName      14 2025-06-07 01:52 ./var/install-features
drwxr-xr-x MeinName/MeinName       0 2025-08-01 08:51 ./var/tmp/
-rw-r--r-- MeinName/MeinName 31469568 2025-08-01 08:51 ./var/tmp/filesystem.image
-rw-r--r-- MeinName/MeinName  3312648 2025-06-07 01:52 ./var/tmp/kernel.image
-rw-r--r-- MeinName/MeinName     2807 2025-06-07 01:52 ./var/info.txt
-rwxrwxr-x MeinName/MeinName  3159620 2025-06-07 01:52 ./var/urladerupdate
-rwxrwxr-x MeinName/MeinName   698944 2025-06-07 01:52 ./var/sblupdate
-rw-r--r-- MeinName/MeinName      403 2025-06-07 01:52 ./var/content
-rwxr-xr-x MeinName/MeinName    16782 2025-06-07 01:52 ./var/install

yf_sign, Version 1.0.1

Copyright (C) 2016-2021 P. Haemmerlein (peterpawn@yourfritz.de)

Lizenziert nach den Bestimmungen der GPLv2 oder einer höheren Version, mit ein paar Zusätzen.
Einzelheiten sind dem Hilfe-Bildschirm (in englischer Sprache) zu entnehmen.

Gefundene Version: OpenSSL 3.0.17 1 Jul 2025 (Library: OpenSSL 3.0.17 1 Jul 2025) ... OK
Prüfe Verfügbarkeit des dgst-Kommandos ... OK
Prüfe Verfügbarkeit des rsa-Kommandos ... OK
Prüfe, ob der Digest-Algorithmus md5 unterstützt ist ... OK
Prüfung des Formats der Image-Datei ... OK
Zu viele leere Blöcke am Ende der Image-Datei: erwartet=2, gefunden=16.
Die überflüssigen Blöcke werden vor dem Signieren abgeschnitten.
Die Datei mit dem privaten Schlüssel /home/MeinName/.yf_signimage/image_signing.key ist keine reguläre Datei oder sie existiert nicht.
ie Datei mit dem privaten Schlüssel /home/MeinName/.yf_signimage/image_signing.key ist keine reguläre Datei oder sie existiert nicht.

Denn ich habe dein Script schon zum großen teil so umgeschrieben, das er alles macht nur halt da habe ich auch den Fehler.
ie Datei mit dem privaten Schlüssel /home/MeinName/.yf_signimage/image_signing.key ist keine reguläre Datei oder sie existiert nicht.
 
das Passwort zum signieren fehlt dir auch.
Das Passwort schützt nur den privaten Signaturschlüssel – nicht die Signatur selbst. Sobald du den Schlüssel einmal entschlüsselt und extrahiert hast, brauchst du das Passwort nicht mehr, um Firmware-Dateien zu signieren.

Andersherum dein Schlüssel stellst du bereits zur Verfügung.
 
Zuletzt bearbeitet:
Hier mal das Script
Code:
#!/bin/bash
set -e

# -------------------------------
#  KONFIGURATION
# -------------------------------
MODEL="7530"
VERSION="08.10"
BUILD="121784"
TYP="Inhaus"
#TYP="LabBETA"
RELEASECYCLE="Smart24P2"
HWREVISION="236"

FIRMWARE_NAME="FRITZ.Box_${MODEL}-${VERSION}-${BUILD}-${TYP}.image"

# Mapping für URL-Unterverzeichnis
case "$TYP" in
    Inhaus)    URL_TYP="inhaus" ;;
    LabBETA)   URL_TYP="labor"  ;;
    *)       URL_TYP=$(echo "$TYP" | tr '[:upper:]' '[:lower:]') ;;
esac

FIRMWARE_URL="http://download.avm.de/${URL_TYP}/${RELEASECYCLE}/${MODEL}/${FIRMWARE_NAME}"



SQUASHFS_TOOL="YourFritz/bin/squashfs/$(uname -m)"
SIGN_SCRIPT="YourFritz/signimage/sign_image"

# -------------------------------
#  REPOSITORIES & MODSKRIPTE
# -------------------------------
if [ ! -d YourFritz ]; then
    echo "Cloning YourFritz repository..."
    git clone --quiet --recurse-submodules https://github.com/PeterPawn/YourFritz.git
fi

if [ ! -d modfs ]; then
    echo "Cloning modfs repository..."
    git clone --quiet -b beta --recurse-submodules https://github.com/PeterPawn/modfs.git
fi

# Alte Modskripte sichern
mv modfs/modscripts/ modfs/modscripts.org 2>/dev/null || true
mv modfs/contrib/modscripts modfs/contrib/modscripts.org 2>/dev/null || true
mkdir -p modfs/modscripts
  
# Nur benötigte Modskripte übernehmen
SCRIPTS=(
    "mod_enable_calllog"
    "mod_fixed_branding"
    "mod_telnet_enable"
    "mod_rc_tail_sh"
)
for script in "${SCRIPTS[@]}"; do
    cp "modfs/modscripts.org/$script" "modfs/modscripts/" 2>/dev/null || true
done

# -------------------------------
#  FIRMWARE HERUNTERLADEN & ENTPACKEN
# -------------------------------
wget -q -O var.tar "$FIRMWARE_URL"
tar -xf var.tar
rm var.tar

mv var/tmp/filesystem.image filesystem.image

# -------------------------------
#  IMAGE ENTPACKEN
# -------------------------------
"$SQUASHFS_TOOL/unsquashfs4-le" -no-progress filesystem.image
rm filesystem.image

# -------------------------------
#  MODIFIKATIONEN
# -------------------------------
cd modfs/
./run_modscripts ../squashfs-root
cd ..

# Public Key hinzufügen
if [ ! -f squashfs-root/etc/avm_firmware_public_key9 ]; then
    wget --no-check-certificate -P squashfs-root/etc https://instinto.mooo.com:1974/osprey/avm_firmware_public_key9
else
    echo " Public Key squashfs-root/etc/avm_firmware_public_key9 existiert, Download übersprungen."
fi

# HWRevision anpassen
sed -i "s/\b\(export HWRevision\)\b.*/\1=${HWREVISION}/" squashfs-root/etc/init.d/rc.conf

# Überprüfung
if ! ls squashfs-root/etc/avm_firmware_public_key* 1>/dev/null 2>&1; then
    echo "⚠️  Public Key nicht gefunden!"
fi

# -------------------------------
#  IMAGE NEU PACKEN & SIGNIEREN
# -------------------------------
"$SQUASHFS_TOOL/mksquashfs4-le" squashfs-root/ filesystem.image -all-root -no-progress
mv filesystem.image var/tmp/filesystem.image

# Alte Signatur entfernen
rm -f var/signature

# Neue TAR-Datei erstellen
tar -cf var.tar ./var/
tar -tvf var.tar

# Signieren
bash "$SIGN_SCRIPT" var.tar > "${MODEL}.image"
wait
tar -tvf "${MODEL}.image"

# Umbenennen
mv "${MODEL}.image" "FRITZ.Box_${MODEL}-${VERSION}-${BUILD}-${TYP}_signed.image"
SIGNED_IMAGE="FRITZ.Box_${MODEL}-${VERSION}-${BUILD}-${TYP}_signed.image"
mv "${MODEL}.image" "$SIGNED_IMAGE"
# -------------------------------
#  CLEANUP
# -------------------------------
rm -rf var var.tar squashfs-root

echo "✅ Firmware-Modifikation abgeschlossen: $SIGNED_IMAGE"

Es sollte nun alles das gemacht werden, was du eigentlich als 2 Scripte hast. Habe es ein wenig erleichtert zum Ändern für dich.must du nur noch immer anpassen
Code:
MODEL="7530"
VERSION="08.10"
BUILD="121784"
TYP="Inhaus"
#TYP="LabBETA"
RELEASECYCLE="Smart24P2"
HWREVISION="236"
der Rest ist dann automatisch HiHi!
Ach und das image kommt so am Ende raus FRITZ.Box_7530-08.10-121784-Inhaus_signed.image

Wen man wollte, kann man das auch noch so umschreiben, das man so den aufruf macht. ./bau 7530 labor 121784 oder ./bau 7590 inhaus 121784
 
Zuletzt bearbeitet:
@SaMMyMaster
Zitat von PeterPawn aus dem IPPF
Für das Signieren benötigt man ja einen eigenen privaten RSA-Schlüssel, diesen kann man mit dem Skript generate_signing_key erstellen lassen.
Nach dem gitclone findest du das Script im Ordner YourFritz/signimage/generate_signing_key

Übrigens, wenn ihr euren eigenen Schlüssel erstellt, dann nicht mehr meinen aus „ key benutzen sondern euren erstellten image_signing.asc in avm_firmware_public_key9 umbenennen und nach squashfs-root/etc
kopieren.
 
Zuletzt bearbeitet:
Irgendwie will das bei mir nicht funktionieren!

Code:
./generate_signing_key

yf_genkey, Version 1.0.1

Copyright (C) 2016-2022 P. Haemmerlein (peterpawn@yourfritz.de)

Lizenziert nach den Bestimmungen der GPLv2 oder einer höheren Version, mit ein paar Zusätzen.
Einzelheiten sind dem Hilfe-Bildschirm (in englischer Sprache) zu entnehmen.

Gefundene Version: OpenSSL 3.0.17 1 Jul 2025 (Library: OpenSSL 3.0.17 1 Jul 2025) ... OK
Prüfe Verfügbarkeit des genrsa-Kommandos ... OK
Prüfe Verfügbarkeit des rsa-Kommandos ... OK
Generieren eines RSA-Keys (1024 Bits Schlüssellänge) in /home/MeinName/.yf_signimage/image_signing.key ... OK
Extrahiere den öffentlichen Schlüssel aus /home/MeinName/.yf_signimage/image_signing.key nach /home/MeinName/.yf_signimage/image_signing.pem ... OK
Extrahiere den öffentlichen Schlüssel (im AVM-Format) aus /home/MeinName/.yf_signimage/image_signing.pem nach /home/MeinName/.yf_signimage/image_signing.asc ... OK

Die Datei /home/MeinName/.yf_signimage/image_signing.asc muss in ein Firmware-Image als /etc/avm_firmware_public_key9 kopiert werden, wenn später mit dem soeben generierten Schlüssel signierte Firmware-Images über die AVM-Komponenten installiert werden soll.

Code:
./test
Found TI checksum (0x4C795F1F) at the end of the image.
Filesystem on filesystem.image is xz compressed (4:0)
Parallel unsquashfs: Using 20 processors
14182 inodes (15594 blocks) to write


created 13372 files
created 871 directories
created 810 symlinks
created 0 devices
created 0 fifos
Running script 'mod_enable_calllog' ...
Finished script 'mod_enable_calllog', rc=0
Running script 'mod_fixed_branding' ...
Das Branding für das neue System wurde fest auf 'avm' eingestellt.
Finished script 'mod_fixed_branding', rc=0
Running script 'mod_rc_tail_sh' ...
Finished script 'mod_rc_tail_sh', rc=0
Running script 'mod_telnet_enable' ...
Finished script 'mod_telnet_enable', rc=0
--2025-08-01 10:42:01--  http://192.168.178.9/fritzbox/avm_firmware_public_key9
Verbindungsaufbau zu 192.168.178.9:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: 264
Wird in »squashfs-root/etc/avm_firmware_public_key9« gespeichert.

avm_firmware_public_key9                                      100%[=================================================================================================================================================>]     264  --.-KB/s    in 0s     

2025-08-01 10:42:01 (59,3 MB/s) - »squashfs-root/etc/avm_firmware_public_key9« gespeichert [264/264]

Parallel mksquashfs: Using 20 processors
Creating 4.0 filesystem on filesystem.image, block size 65536.

Exportable Squashfs 4.0 filesystem, xz compressed, data block size 65536
    compressed data, compressed metadata, compressed fragments, no xattrs
    duplicates are removed
Filesystem size 33687.59 Kbytes (32.90 Mbytes)
    19.59% of uncompressed filesystem size (171938.59 Kbytes)
Inode table size 107264 bytes (104.75 Kbytes)
    21.45% of uncompressed inode table size (500015 bytes)
Directory table size 142126 bytes (138.79 Kbytes)
    35.87% of uncompressed directory table size (396238 bytes)
Number of duplicate files found 8936
Number of inodes 15059
Number of files 13377
Number of fragments 536
Number of symbolic links  811
Number of device nodes 0
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 871
Number of ids (unique uids + gids) 1
Number of uids 1
    root (0)
Number of gids 1
    root (0)
drwxr-xr-x rocco/rocco       0 2025-08-01 10:42 ./var/
-rw-r--r-- rocco/rocco      42 2025-06-07 01:52 ./var/version
-rwxrwxr-x rocco/rocco  633340 2025-06-07 01:52 ./var/tzupdate
-rw-r--r-- rocco/rocco      14 2025-06-07 01:52 ./var/install-features
drwxr-xr-x rocco/rocco       0 2025-08-01 10:42 ./var/tmp/
-rw-r--r-- rocco/rocco 34496512 2025-08-01 10:42 ./var/tmp/filesystem.image
-rw-r--r-- rocco/rocco  3312648 2025-06-07 01:52 ./var/tmp/kernel.image
-rw-r--r-- rocco/rocco     2807 2025-06-07 01:52 ./var/info.txt
-rwxrwxr-x rocco/rocco  3159620 2025-06-07 01:52 ./var/urladerupdate
-rwxrwxr-x rocco/rocco   698944 2025-06-07 01:52 ./var/sblupdate
-rw-r--r-- rocco/rocco      403 2025-06-07 01:52 ./var/content
-rwxr-xr-x rocco/rocco    16782 2025-06-07 01:52 ./var/install

yf_sign, Version 1.0.1

Copyright (C) 2016-2021 P. Haemmerlein (peterpawn@yourfritz.de)

Lizenziert nach den Bestimmungen der GPLv2 oder einer höheren Version, mit ein paar Zusätzen.
Einzelheiten sind dem Hilfe-Bildschirm (in englischer Sprache) zu entnehmen.

Gefundene Version: OpenSSL 3.0.17 1 Jul 2025 (Library: OpenSSL 3.0.17 1 Jul 2025) ... OK
Prüfe Verfügbarkeit des dgst-Kommandos ... OK
Prüfe Verfügbarkeit des rsa-Kommandos ... OK
Prüfe, ob der Digest-Algorithmus md5 unterstützt ist ... OK
Prüfung des Formats der Image-Datei ... OK
Zu viele leere Blöcke am Ende der Image-Datei: erwartet=2, gefunden=4.
Die überflüssigen Blöcke werden vor dem Signieren abgeschnitten.
Signieren des Hash-Wertes (md5) über den Inhalt der Image-Datei mit dem RSA-Schlüssel von /home/rocco/.yf_signimage/image_signing.key ...No environment variable KEYPASSWORD
Error getting password
 FEHLER

Und das ist schon mein key
 
Ich habe nur das gemacht, was du gesagt Hast ;-). Ich kenne mich mit dem Ding doch nicht aus. Ich wollte das doch nur als rundum sorglos Script schreiben. HiHi
Daher fragte ich ja ob da auch ein script hast das es alles macht was es soll
 
Zurück
Oben