Estoy distribuyendo una VM a mis alumnos para un curso de programación para principiantes. En cuanto a la velocidad, en lugar de hacer que instalen Ubuntu desde cero, planeo darles una imagen completamente configurada que puedan ejecutar.
Para configurarlo, le he dado un nombre de host, nombre de usuario y contraseña sacrificados. ¿Cuál es la forma más limpia de cambiar esto para los estudiantes cuando se ponen en marcha?
Llegué a esta esencia , que tiene un progreso poco confiable con el nombre de host, pero el nombre de usuario se resiste a cambiarlo.
Me gustaría que fuera un proceso tan indoloro como sea posible, ya que se supone que esto suceda en su primer laboratorio.
Es completamente posible que haya un enfoque completamente diferente que deba adoptar. Estoy abierto a todas las sugerencias.
#!/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
tomar un proceso interactivo y hacerlo no interactivo. Básicamente, hacer un script que expect
tenga cierta salida y tener la respuesta ya conocida en el script. Ben quiere esperar la entrada del usuario y ejecutar un comando basado en él. De acuerdo, me equivoco al menos una vez al día, así que este podría ser el caso.
exec bash
pero técnicamente abrirá una terminal anidada.
sed
con algo como esto ... sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts
que actualizará la línea 127.0.1.1 y simplemente agregará el nuevo host a lo que está allí. Dejará el host anterior en su lugar, pero es compatible con tener varios hosts asignados a una IP. Eso evitará el problema irresoluble con su otro sudo
comando, cambiando el nombre de host.
expect
- admin-magazine.com/Articles/Automating-with-Expect-Scripts