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
einen interaktiven Prozess durchgeführt und ihn nicht interaktiv gemacht. Grundsätzlich erstellen Sie ein Skript, das expect
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 anderen sudo
Befehl verhindert, bei dem der Hostname geändert wird.
expect
- admin-magazine.com/Articles/Automating-with-Expect-Scripts