Estou distribuindo uma VM para meus alunos para um curso de programação para iniciantes. Por velocidade, em vez de fazê-los instalar o Ubuntu a partir do zero, planejo dar a eles uma imagem totalmente configurada que eles possam executar.
Para configurá-lo, eu dei a ele um nome de host sacrificial, nome de usuário e senha. Qual é a maneira mais limpa de mudar isso para os alunos quando eles começam a trabalhar?
Eu tenho tanto quanto esta essência , que tem algum progresso confiável com o nome do host, mas o nome de usuário está me resistindo mudá-la.
Eu gostaria que fosse o processo o menos doloroso possível, como deveria acontecer no primeiro laboratório.
É perfeitamente possível que exista uma abordagem completamente diferente que eu deva adotar. Estou aberto a todas as sugestões.
#!/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
um processo interativo para torná-lo não interativo. Basicamente, criar um script com expect
certa saída e ter a resposta já conhecida no script. Ben quer esperar pela entrada do usuário e executar um comando com base nela. É verdade que estou errado pelo menos uma vez por dia, então esse pode ser o caso.
exec bash
mas tecnicamente abrirá um terminal aninhado.
sed
por algo assim. sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts
O que atualizará a linha 127.0.1.1 e anexará o novo host ao que está lá. Ele deixará o host antigo no lugar, mas é compatível com vários hosts atribuídos a um IP. Isso evitará o problema não resolvível com seu outro sudo
comando, alterando o nome do host.
expect
- admin-magazine.com/Articles/Automating-with-Expect-Scripts