Sto distribuendo una VM ai miei studenti per un corso di programmazione per principianti. Per velocità, invece di far loro installare Ubuntu da zero, sto pensando di dare loro un'immagine completamente configurata che possono semplicemente eseguire.
Per configurarlo, gli ho assegnato un nome host, un nome utente e una password sacrificali. Qual è il modo più pulito di cambiarlo per gli studenti quando si alzano e funzionano?
Sono arrivato a questo punto , che ha alcuni progressi inaffidabili con il nome host, ma il nome utente mi sta resistendo cambiando.
Vorrei che fosse un processo il più indolore possibile come dovrebbe accadere nel loro primo laboratorio.
È del tutto possibile che debba adottare un approccio completamente diverso. Sono aperto a tutti i suggerimenti.
#!/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
un processo interattivo e renderlo non interattivo. Fondamentalmente, creare uno script che produce un expect
determinato output e avere la risposta già nota nello script. Ben vuole attendere l'input dell'utente ed eseguire un comando basato su di esso. Certo, mi sbaglio almeno una volta al giorno, quindi potrebbe essere così.
exec bash
ma tecnicamente aprirà un terminale nidificato.
sed
con qualcosa del genere .. sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts
Che aggiornerà la riga 127.0.1.1 e aggiungerebbe semplicemente il nuovo host a quello che c'è. Lascia il vecchio host al suo posto, ma è conforme avere più host assegnati a un solo IP. Ciò impedirà il problema irrisolvibile con l'altro sudo
comando, modificando il nome host.
expect
- admin-magazine.com/Articles/Automating-with-Expect-Scripts