Ich verteile eine VM an meine Schüler für einen Programmierkurs für Anfänger. Anstatt sie dazu zu bringen, Ubuntu von Grund auf neu zu installieren, plane ich, ihnen ein vollständig eingerichtetes Image zu geben, das sie einfach ausführen können.
Um es einzurichten, habe ich ihm einen Opfer-Hostnamen, einen Benutzernamen und ein Passwort gegeben. Was ist der sauberste Weg, dies für die Schüler zu ändern, wenn sie in Betrieb sind?
Ich bin bis zu diesem Kern gekommen , der einige unzuverlässige Fortschritte mit dem Hostnamen hat, aber der Benutzername widersetzt sich mir, ihn zu ändern.
Ich möchte, dass es so schmerzlos wie möglich ist, wie dies in ihrem ersten Labor geschehen soll.
Es ist durchaus möglich, dass ich einen völlig anderen Ansatz wählen sollte. Ich bin offen für alle Vorschläge.
#!/bin/bash
clear
toilet " CODE1161 " --metal --font future
echo ""
toilet "Let's get started!" --metal --font future
echo ""
echo "We need to make this computer be YOURS"
echo "We need a name for you and your computer, make it short or it'll take up a lot of space."
echo "My computer is called um and my name is ben, so I get ben@um:~$ as my command prompt."
echo ""
read -p "Enter a name for your computer:" compname
read -p "Enter your name: " username
echo ""
toilet "$username@$compname~$" --gay --font wideterm
echo ""
echo "What do you think? If you hate it, press ctrl+c and do this again"
read -p "otherwise, just press enter." sacrificial
# set the host name, in a million places, for some unknown reason.
echo "1"
sed -i "/127\.0\.1\.1\s*vc/ { c \
127.0.1.1 $compname
}" /etc/hosts
echo "2"
sudo hostname -b $compname
echo "3"
sudo hostnamectl set-hostname $compname
echo "4"
sudo groupadd $username
echo "5"
sudo usermod -d /home/$username -m -g $username -l $username ben
expect
- admin-magazine.com/Articles/Automating-with-Expect-Scriptsexpect
einen interaktiven Prozess durchgeführt und ihn nicht interaktiv gemacht. Grundsätzlich erstellen Sie ein Skript, dasexpect
bestimmte Ausgaben und die Antwort bereits im Skript bekannt. Ben möchte auf Benutzereingaben warten und einen darauf basierenden Befehl ausführen. Zugegeben, ich irre mich mindestens einmal am Tag, also könnte dies der Fall sein.exec bash
aber es wird technisch ein verschachteltes Terminal öffnen.sed
.sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts
Dadurch wird die Zeile 127.0.1.1 aktualisiert und der neue Host einfach an das angehängt, was sich dort befindet. Der alte Host bleibt an Ort und Stelle, es ist jedoch konform, wenn einer IP mehrere Hosts zugewiesen sind. Dadurch wird das unlösbare Problem mit Ihrem anderensudo
Befehl verhindert, bei dem der Hostname geändert wird.Antworten:
Warum nicht einfach eine OEM-Installation dafür verwenden? Es ist nicht so hübsch, aber es erledigt den Job. Wenn Sie diesen Weg gehen möchten, lesen Sie die ausgezeichnete Antwort von izx auf diese Frage: Wie installiere ich Ubuntu für jemanden vor (OEM-Installation)?
Grundsätzlich fordert das System den Benutzer (beim ersten Start) auf, eine Reihe von Informationen einzugeben, um seinen Computer zu personalisieren. Dies umfasst die Sprache, den Speicherort, den Benutzernamen, den Hostnamen, das Kennwort usw. Grundsätzlich alles, was Ihr Computer normalerweise zu einer Installation auffordert.
Dies ist genau das, was OEM Bilder für gemeint sind, und sie haben einen tollen Job gemacht. Außerdem geben Sie Ihren Schülern einen kleinen Einblick in die Erfahrung von "Ubuntu installieren". Ubuntu-Installationen sind jedoch nicht gerade schmerzhaft. Sie können dies wahrscheinlich in einer einzelnen Klasse tun und Ihren Schülern einige Hausaufgaben geben, um ihre VM zu personalisieren und zu erkunden. Außerdem macht das Partitionieren
schmerzhaftenSpaß!Zurück zum eigentlichen Problem (und eine Antwort auf Ihre eigentliche Frage) .....
Schauen wir uns an
man usermod
, um eine Erklärung dafür zu erhalten, was los ist:Grundsätzlich bedeutet dies nur, dass wir die UID eines Benutzers, seinen Benutzernamen, sein Ausgangsverzeichnis oder ähnliches nicht ändern können, wenn der Benutzer angemeldet ist.
Wir können also ein paar lustige Dinge tun, um dies beim nächsten Start des Systems einzurichten. Anstatt dass Ihr Skript die Arbeit erledigt, lassen wir Ihr Skript ein anderes Skript erstellen, um all das schwere Heben und Manipulieren zu erledigen. Ein Beispiel dafür:
Grundsätzlich stellen Sie auf diese Weise Ereignisse in die Warteschlange, die beim nächsten Start des Systems ausgeführt werden sollen. Dies wird ausgeführt, bevor das Benutzerland auftritt, sodass das System diese Befehle als root ausführt. Daher wird der
ben
Benutzer nicht angemeldet und das System beschwert sich nicht.Möglicherweise müssen Sie diesem Element noch zusätzliche Befehle hinzufügen, um eine stärkere Personalisierung zu ermöglichen (z. B. Festlegen des tatsächlichen Namens usw.). Dies ist jedoch optional und muss nur durchgeführt werden, wenn dies während des Setup-Skripts erfolgen soll.
Es kann jedoch eine gute Idee sein, nur einen neuen Benutzer für die Schüler zu erstellen und dann Ihr vorhandenes Opferkonto beizubehalten. Auf diese Weise können Sie, wenn etwas passiert, den Computer bei Bedarf reparieren / verwalten. Wenn Sie Ihren Schülern Administratorzugriff auf ihre VM gewähren, ist dies natürlich eine Art Streitpunkt, da sie den Benutzer "Ausbilder" möglicherweise sehr gut löschen, weil sie Schüler sind.
quelle
Lassen Sie sie auf dem ctrlaltF2Anmeldebildschirm
ben
von dem Terminal aus drücken und sich anmelden , das geöffnet und ausgeführt wirdUnd geben Sie allen das gleiche Passwort für root, dh die Kursnummer. Wenn also etwas kaputt geht, können Sie es reparieren. Lassen Sie sie sich dann durch Eingabe abmelden
exit
und als root mit ihrem neuen root-Passwort anmelden und das Skript ausführen (möglicherweise müssen Sie es so ändern, dass es denben
Benutzer und nicht root verändert).Oder lassen Sie sie sich vom Terminal aus als ben anmelden, indem Sie ctrlaltF2(wie zuvor) auf dem Anmeldebildschirm drücken, und lassen Sie sie dann das Skript von dort aus ausführen. Dies könnte funktionieren, da der Benutzer, wie Muru und Kaz Wolfe in der vorherigen Antwort betonten, keine Prozesse ausführen kann und die Anmeldung über das Terminal keine Prozesse wie
X
oderUbuntu-Desktop
oder andere Userland-Prozesse starten sollte , die störenusermod
. (Ich weiß nicht, ob das funktioniert, ich habe es nicht ausprobiert, aber es ist einen Versuch wert).quelle