Deaktivierung der Startscripte beim Erstbootvorgang

  • Hallo alle zusammen,
    da ich meine Raspberry Pis generell ohne Desktop nutze und eher einen SSH-Zugang nutze, erstelle ich gerade ein Script, das das heruntergeladene Image auf der gemounteten SD-Card für einen Direktstart vorbereitet. Im Prinzip erzeuge ich eine individuelle Netzwerkverbindung für eth0, mache eine Vorbereitung des SSH-Zugriffs bei erstem Boot-Vorgang, aktiviere den SSH-Dienst, setze die Tastaturlayout und Zeitzone, gebe dem Benutzer pi ein Passwort mit und generiere die SSH-Keys. Alles was man lokal beim ersten Boot am Raspberry auch macht.
    Hintergrund ist vor allem das lästige Umstecken der Anschlüsse (Tastatur, Monitor), insbesondere wird beim Raspbery Pi 4 bereits ein Micro-HDMI benötigt. Das ist alles viel zu umständlich.
    Das Script funktioniert auch bereits sehr gut, bis auf die Startskripte. Es wird immer noch ein Script gestartet, dass die Eingabe eines beliebigen Nenutzers und sein Passwort erwartet. Erst danach startet auch der SSH-Service.
    Wie heißt dieses Script? So dass ich es deaktivieren bzw. löschen kann?

    Beste Grüße
    NakuroJ

  • Deaktivierung der Startscripte beim Erstbootvorgang? Schau mal ob du hier fündig wirst!

  • Das wäre zu einfach und schön gewesen, denn das hätte ich bestimmt bereits gefunden.
    In dem Verzeichnis rootfs/boot existieren direkt nach dem dd-Befehl:

    Analog sieht es unter bootfs aus:

    Es gibt in rootfs/etc/rc3.d/ zwei Startskripte S01raspi-config -> ../init.d/raspi-config und S01resize2fs_once -> ../init.d/resize2fs_once, in rc4.d und rc5.d nur das Erste. Aber in keinem von beiden sehe ich etwas über die Benutzeradministration.
    Auch das eigentliche Script raspi-config wird hier nicht gestartet. Es muss also irgendwo anderes etwas geben, das den Befehl einmalig startet.

  • Mein Pi-OS funktioniert schon lange mit systemd, und nicht mehr mit sys V (mit den Runleveln und den Startscripts)

    Wenn Du aber in Dein Spezialscript, das beim ersten Booten den Pi einrichtet, das boot-behavior auf " B2: boot to console, logging in automatically" mit raspi-config - noninteraktiv einstellst, dann könnte Dein Vorhaben gelingen.

    Das wird in der RaspberryPi Dokumentatin unter - Computer - Configuration - non-interactive raspi-config - Boot/auto login erklärt.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • So ganz habe ich deine Vorgehensweise nicht verstanden aber ich habe etwas Ähnliches (siehe RE: Upgrade einer Raspberry - wie macht Ihr das? ) gemacht. Es ist mir nicht gelungen die einmalige Anmeldung trotz:

    Code
    sudo raspi-config nonint do_boot_behaviour B2

    zu deaktivieren. Das greift erst nachdem man sich einmalig lokal oder remote per telnet angemeldet hat. Vermutlich ein Sicherheitsfeature. Ich habe danach gegoogeld aber die Lösungen funktionierten entweder nicht oder sie erforderten einen relativ komplexen Eingriff ins System. Ich kann damit leben und wollte deswegen nicht das System verkonfigurieren.

    Ob das so auch unter Bookworm läuft kann ich nicht sagen, ohne Anpassungen vermutlich nicht.

    Edited 2 times, last by Tastenknecht (August 27, 2024 at 3:08 PM).

  • Grundgedanke ist ganz einfach:
    Du willst 100 SDCards mit einem lauffähigen RaspianOS, IP-Adresse, PI-User mit Passwort bestücken und beim ersten Starten läuft auch der SSH-Service. Übrigens meine Images laufen auch mit systemd, die Init-Scripte gibt es aber dennoch - das lässt sich nicht wegdiskutieren.

    So, ich sagte bereits, dass das An- und Abstöpseln von Monitor, Tastatur nur wegen einer Defaulteinrichtung ziemlich nervig und zeitraubend ist. Also warum nicht die SDCard vor einem ersten Booten mit allem Gewünschten einrichten, in die Platine stecken, booten und Login via SSH. Dass dieses raspiconfig immer startet, muss ja irgendwo konfiguriert wurden sein, meine Debian-Workstation macht das nicht nach der Erstinstallation.

    Das antwortet ChatGPT:

    Auf einem frischen Raspbian (jetzt Raspberry Pi OS) wird bei der ersten Inbetriebnahme üblicherweise das Tool `raspi-config` oder der "Setup Wizard" automatisch gestartet. Dies geschieht, um grundlegende Einstellungen wie Netzwerk, Benutzer, Tastatur, Sprache und Zeitzone zu konfigurieren. Dieses Verhalten ist im Standard-Image des Betriebssystems implementiert.

    Hier sind einige relevante Details zu den Mechanismen dahinter und wie man das automatische Starten deaktivieren kann:

    ### 1. Automatischer Start von `raspi-config` bei Erststart

    - Der automatische Start von `raspi-config` wird durch ein sogenanntes "Erststart-Flag" ausgelöst. In der Regel wird beim ersten Boot überprüft, ob bestimmte Konfigurationen bereits vorgenommen wurden.
    - Diese Überprüfung wird von einem Skript erledigt, das nach dem Booten ausgeführt wird. Typischerweise handelt es sich um `/etc/rc.local` oder Skripte im Verzeichnis `/etc/profile.d/`, die prüfen, ob das System erstmalig gebootet wird.

    ### 2. Dateien und Skripte, die verantwortlich sind:

    - **`/etc/profile.d/raspi-config.sh`**: Hierbei handelt es sich um ein Skript, das prüft, ob die Konfigurationen abgeschlossen sind. Es kann das `raspi-config`-Tool ausführen, wenn bestimmte Bedingungen erfüllt sind.
    - **`/etc/rc.local`**: In manchen älteren Versionen von Raspberry Pi OS wurde hier eine Bedingung eingefügt, um `raspi-config` bei einem Erststart aufzurufen.

    ### 3. Deaktivierung des automatischen Starts

    Um zu verhindern, dass `raspi-config` automatisch startet, gibt es mehrere Methoden:

    #### a) Deaktivierung durch Entfernen des Autostart-Skripts

    - **`/etc/profile.d/raspi-config.sh` entfernen oder umbenennen**:
    ```bash
    sudo mv /etc/profile.d/raspi-config.sh /etc/profile.d/raspi-config.sh.bak
    ```
    Dies verhindert, dass das Skript beim Start ausgeführt wird.

    #### b) Setzen eines Flags in der Konfigurationsdatei

    - Der automatische Start basiert auf der Existenz eines Erststart-Flags. Das Deaktivieren des Flags vor dem ersten Boot kann den Setup Wizard überspringen:
    ```bash
    sudo touch /boot/.noauto
    ```
    Das Erstellen dieser leeren Datei signalisiert, dass der Setup Wizard nicht benötigt wird.

    #### c) Deaktivierung über `raspi-config` selbst:

    - Wenn Sie den Assistenten beim ersten Start durchlaufen, können Sie ihn beenden, und die entsprechende Konfiguration wird automatisch vorgenommen, sodass der Assistent beim nächsten Boot nicht erneut startet.

    ### Fazit

    Der automatische Start von `raspi-config` wird durch Skripte wie `/etc/profile.d/raspi-config.sh` gesteuert, die beim ersten Boot ausgeführt werden. Diese können deaktiviert werden, indem das Skript umbenannt oder ein Flag gesetzt wird.

  • Wenn Du aber in Dein Spezialscript, das beim ersten Booten den Pi einrichtet, das boot-behavior auf " B2: boot to console, logging in automatically" mit raspi-config - noninteraktiv einstellst, dann könnte Dein Vorhaben gelingen.

    Workflow ist Folgender:

    • Mit dd wird die SDCard mit dem Image beschrieben.
    • Mounten der beiden Partitionen der SDCard
    • ./SetupScript.sh
    • Umounten der SDCard
    • Einstecken der SDCard in RaspBerry Pi
    • Einschalten desselben
    • Login via SSH auf RaspBerry PI
  • Das ist aber witzlos, da es weder /etc/profile.d/raspi-config.sh noch

    Vermutlich bezieht sich die Labertasche auf https://github.com/nmcclain/raspberian-firstboot

    Ich kann nichts weiteres dazu sagen, außer das der 'First Boot' als 'Second Boot' ausgeführt wird. Der wirklich erste Boot kümmert sich um die Partitionen (expand). Evtl. schaltet dieses Skript den eigentlichen Firstboot scharf.

  • Es wird immer noch ein Script gestartet, dass die Eingabe eines beliebigen Nenutzers und sein Passwort erwartet. Erst danach startet auch der SSH-Service.
    Wie heißt dieses Script? So dass ich es deaktivieren bzw. löschen kann?

    Evtl. wird das Script das Du suchst, durch eine unit gestartet. Schau mal mit z. B.:

    Code
    systemctl list-unit-files | grep -iE 'ssh|switch|first|run|user|boot'

    nach.

    EDIT:

    Code
    systemctl cat userconfig.service
    cat /usr/lib/userconf-pi/userconf-service

    Wi-Fi_Signal_Strength  txpower
    iptables chains order scheme iptables-diagram
    nftables-diagram

    Meine PIs

    PI4B/8GB (border device) FreeBSD 15.1R-p1 (arm64): SSH-Server, WireGuard-Server, ircd-hybrid-Server, Mumble-Server

    PI4B/4GB FreeBSD 14.5R-p0 (arm64): SSH-Serv., WireGuard-Serv., ngircd-Serv., Mumble-Serv., ddclient

    PI4B/8GB Bookworm-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, Mumble-Server, botamusique, ample

    Edited once, last by rpi444 (August 27, 2024 at 4:47 PM).

  • Zitat aus dem 2024-07-04-raspios-bookworm-armhf-lite.img :

    Code
    # cat bootfs/cmdline.txt
    console=serial0,115200 console=tty1 root=PARTUUID=d28ec40f-02 rootfstype=ext4 fsck.repair=yes rootwait quiet init=/usr/lib/raspberrypi-sys-mods/firstboot

    init= ........ vielleicht hilfts.

    Gruß Martin

  • Es ist kein Script, in systemd gibt es nur Units, im konkreten Fall: Die "sytemd-firstboot.service" Unit

    Mit einem Script auf eine gemountete (dd-Image)-root Partition kannst Du ein Systemd - Boot nicht manuell managen.

    Systemd verwendet die Linux (Kernel) Controll Groups und startet alle aktivierten Units quasi gleichzeitig und ordnet sie nach Abhängigkeiten und Bedingungen.

    Wenn Du vorkonfigurierte Images flashen willst, dann verwende einen aktuellen rpi-imager.


    Servus !

    RTFM = Read The Factory Manual, oder so

  • Es ist kein Script, in systemd gibt es nur Units, ...

    In systemd gibt es mehr als nur units. Mit units kann man u. a. auch Scripte ausführen.

  • Setze doch einfach über den Raspi-Imager den SSH User und das Passwort, oder den SSH Key.
    Dann bootet der gleich durch ohne anzuhalten und dumme Fragen zu stellen.

    Ich habe so etwas ähnliches, allerdings rufe ich das Setup Script was den PI konfiguriert danach manuell per SSH auf.

    Offizieller Schmier und Schmutzfink des Forum.
    Meine PI:

    Display Spoiler

    #1 : Pi1 - Packet Radio Digi mit TNC-PI
    #2 : Pi2 - ADSB Feeder
    #3 : Pi3 - DHCP/DNS Server für 4 VLAN
    #4 : Pi3 - Wireguard Gateway Umgezogen nach Proxmox
    #5 : Pi3 - FM Funknetz Gateway mit Shari SA818
    #6 : PI Zero W mit DMR Hotspot
    #7 : Pi4 4GB - Kiosk Browser
    #8 : Pi4 4GB - Kiosk Browser
    #9 : Pi4 8GB - Test Pi
    #10 : Pi2 - Auto CD Ripper abcde

    Dazu noch ein paar Zero und Pi1/2 die noch auf einen sinnvollen Einsatz warten.

  • Setze doch einfach über den Raspi-Imager den SSH User und das Passwort, oder den SSH Key.
    Dann bootet der gleich durch ohne anzuhalten und dumme Fragen zu stellen.

    Das ist eine gute Idee. Ich habe die Images bislang stets mit dem 'dd'-Befehl generiert.

    Die anderen ideen sind auch hilfreich, ich muss es einfach testen.
    Kernziel ist nach wie vor, dass das lästige Anschließen des Raspberry Pi an andere Peripheriegeräte als Netzwerk wegfällt. Und vor allem sollte man direkt nach einem SSH-Login mit den Standardinstallationen beginnen - das du immer auch deinen Maschinen per Default drauf hast, was aber eben hinzu installiert werden muss. Wenn dieser Image-Generator das zumindest bezüglich User und SSH liefert wäre das schon eine Erleichterung.

    Vielen Dank für die Unterstützungen!

    NakuroJ

    Edited once, last by NakuroJ: Erweiterung (August 28, 2024 at 10:33 AM).

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!