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
- admin-magazine.com/Articles/Automating-with-Expect-Scriptsexpect
um processo interativo para torná-lo não interativo. Basicamente, criar um script comexpect
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 outrosudo
comando, alterando o nome do host.Respostas:
Por que não usar apenas uma instalação OEM para isso? Não é tão bonito, mas faz o trabalho. Se você quiser seguir esse caminho, consulte a excelente resposta da izx para esta pergunta: Como pré-instalo o Ubuntu para alguém (instalação OEM)?
Basicamente, o sistema (na primeira inicialização) solicita ao usuário várias informações para personalizar sua máquina. Isso inclui o idioma, local, nome de usuário, nome do host, senha e assim por diante. Basicamente, tudo o que seu computador normalmente solicita uma instalação.
É exatamente para isso que as imagens OEM são destinadas, e elas fazem um ótimo trabalho. Além disso, você dará a seus alunos uma pequena amostra da experiência de "instalação do Ubuntu". Porém, as instalações do Ubuntu não são exatamente dolorosas. Provavelmente, você pode fazer isso em uma única aula e dar aos alunos algum dever de casa para personalizar e explorar a VM deles. Além disso, o particionamento é divertido e
doloroso!De volta ao problema em questão (e uma resposta à sua pergunta real ) .....
Vejamos
man usermod
para obter uma explicação do que está acontecendo:Basicamente, isso significa que não podemos alterar o UID de um usuário, seu nome de usuário, diretório inicial ou qualquer coisa do tipo se o usuário estiver conectado.
Portanto, podemos fazer algumas coisas divertidas para configurar isso na próxima inicialização do sistema. Em vez de o seu script fazer o trabalho, fazemos com que ele crie outro script para fazer todo o trabalho pesado e manipulação. Um exemplo disso:
Basicamente, ao fazer isso, você está "enfileirando" eventos para executar na próxima inicialização do sistema. Isso será executado antes que a terra do usuário aconteça, portanto o sistema executará esses comandos como root. Portanto, o
ben
usuário não estará logado e o sistema não irá reclamar.Você ainda pode precisar adicionar comandos adicionais a esse item para permitir mais personalização (como definir o nome real, etc.). No entanto, isso é opcional e só precisa ser feito se você desejar que ocorra durante o script de instalação.
No entanto, pode ser uma boa idéia criar apenas um novo usuário para os alunos e manter sua conta sacrificial existente. Dessa forma, se algo acontecer, você poderá entrar e reparar / administrar sua máquina, se necessário. Obviamente, se você estiver dando acesso de administrador aos alunos à VM deles, isso é meio que discutível, pois eles podem muito bem excluir o usuário "instrutor" porque são estudantes.
fonte
Na tela de login, pressione-os ctrlaltF2e faça login a
ben
partir do terminal que abrir e executarE forneça a eles a mesma senha para root, ou seja, o número do curso; portanto, se algo acontecer, você poderá entrar e consertá-lo. Depois, faça o logout digitando
exit
e faça o login como root com a nova senha de root e execute o script (talvez seja necessário modificá-lo para alterar oben
usuário e não o root).Ou faça com que eles efetuem login como ben no terminal pressionando ctrlaltF2(como antes) na tela de login e depois execute o script a partir daí. Isso pode funcionar porque, como Muru e Kaz Wolfe apontaram na resposta anterior, o usuário não pode estar executando nenhum processo, e o login através do terminal não deve iniciar nenhum processo, como
X
ouUbuntu-Desktop
ou outros processos da área do usuário que interfiramusermod
. (Não sei se isso funciona, não tentei, mas vale a pena tentar).fonte