Wie starte ich ein interaktives Skript beim Start von ubuntu?

9030
Carsten Scholtes

Basierend auf Ubuntu Core 12.04 habe ich eine bootfähige DVD vorbereitet. Nach dem Booten (nur auf Konsole) kann ich mich als Benutzer anmelden und ein Skript zur Installation eines eingebetteten Geräts starten:

sudo install_script 

Um dieses Skript bereits beim Start auszuführen, habe ich Folgendes /etc/rc.localin das Image des Root-Dateisystems auf der DVD eingefügt :

/bin/bash -ic install_script 

Da dieses Skript unbedingt ausgeführt wird, möchte ich dem Benutzer die Möglichkeit geben, die Installation zu umgehen und zu einer Anmeldeaufforderung zu gelangen. Zu diesem Zweck möchte ich readin install_script verwenden. Leider reagiert das Skript nicht auf Tastatureingaben, wenn es ausgeführt wird /etc/rc.local. (Es gibt kein Problem mit demselben Skript, das nach der Anmeldung von einer Shell aus gestartet wurde).

Wie kann ich beim Start einige Benutzereingaben erhalten?

(Einige Gedanken:

  • Vielleicht kann ich ein tty irgendwie erkennen und readmit dem Skript verbinden? Ich habe versucht /bin/bash -ic install_script </dev/console, ohne Erfolg.
  • Vielleicht gibt es mehr geeignete Optionen dafür /bin/bashoder read?
  • Vielleicht könnte ich in eine einzelne Shell eines bestimmten Benutzers booten (möglicherweise rootohne sich einzuloggen?) .bashrc, sudo install_scriptIndem Sie anrufen (um zu vermeiden, dass das Kennwort für sudo überprüft wird?)?
  • Vielleicht gibt es einen besseren Ort, um das Skript aufzurufen?
  • Ich möchte die Interaktion (die früher auftritt) und das install_script (z. B. durch Angabe verschiedener Boot-Optionen über isolinux und Untersuchung /proc/cmdlineim Skript) nicht aus folgendem Grund trennen : Bevor ich den Benutzer frage, möchte ich das System untersuchen und geben Sie einen Überblick darüber, was genau während der Installation passieren würde. In früheren Stadien des Startvorgangs sind die für die Untersuchung des Systems erforderlichen Informationen möglicherweise noch nicht leicht verfügbar.

)

4
Hinweis: Wenn Sie es hier veröffentlichen, sollten Sie mehr http://askubuntu.com/ Sosi vor 11 Jahren 0

3 Antworten auf die Frage

4
Carsten Scholtes

In meiner aktuellen Lösung, ich bin mit openvtstarten, install_scriptindem Sie die folgenden Zeile \etc\rc.local:

openvt -s -w /path/to/install_script 
  • Es öffnet sich ein neues virtuelles Terminal (neben den sieben anderen, die in Ubuntu Core 12.04 über verfügbar sind Alt-F[1-7]).
  • Der Switch -sweist openvtan, zum neuen virtuellen Terminal zu wechseln (ohne zu drücken Alt-F8).
  • Der Switch -wlässt openvtwarten /path/to/install_script, bis der Befehl abgeschlossen ist openvt.
  • Auf diese Weise gestartet, kann das Skript wie üblich durch Aufrufen Eingaben vom Benutzer erhalten read.
  • Nachdem das Skript beendet ist, wird das virtuelle Terminal geschlossen (es wird nicht mehr mit Alt-F8 gewechselt), und die Steuerung wird an das zuvor aktive virtuelle Terminal zurückgegeben.
Ich habe Stunden damit verbracht, meine eigene LiveCd mit Remastersys zu bauen. Ihre Antwort hat endlich funktioniert! Die Verwendung von profile.d ist eine schlechte Idee. Kombiniert mit Autologin (standardmäßig in einigen Casper-Init-Skripts (25configure_init) und geänderter Sudoers-Datei für den Root-Kontext befinden Sie sich bald in einer Vielzahl von ausgeführten Skripts (für jedes TTY oder die Initialisierung von Sub-Shells [Ich bin nicht das sicher über den zweiten Punkt]). Mister Henson vor 11 Jahren 0
0
Phil

Ich hatte das gleiche Problem, als ich an einer benutzerdefinierten Distribution für das Raspel-Pi arbeitete. Ich habe festgestellt, dass das Hinzufügen des folgenden Codes zu meinem Skript sicherstellen würde, dass mein Skript Eingaben erhält.

Ich rufe einfach diesen Code auf, bevor ich mit dem Lesen der Eingabe beginne:

exec < /dev/tty1 
-1
shouso_boy

just try to imitate Slackware linux install method..

Um dies zu einer nützlichen Antwort zu machen, sind mehr Details erforderlich Dave M vor 11 Jahren 4