Я раздаю виртуальную машину своим студентам для курса программирования для начинающих. Для скорости, вместо того, чтобы заставить их устанавливать Ubuntu с нуля, я планирую дать им полностью настроенный образ, который они могут просто запустить.
Чтобы настроить его, я дал ему жертвенное имя хоста, имя пользователя и пароль. Какой самый чистый способ изменить это для студентов, когда они встают и бегут?
Я дошел до этой сути , которая имеет некоторый ненадежный прогресс с именем хоста, но имя пользователя не позволяет мне изменить его.
Я бы хотел, чтобы это был как можно более безболезненный процесс, как это должно было произойти в их первой лаборатории.
Вполне возможно, что я должен использовать совершенно другой подход. Я открыт для всех предложений.
#!/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
интерактивный процесс и делал его неинтерактивным. В основном, создание сценария с expect
определенным выводом и ответ уже известен в сценарии. Бен хочет дождаться пользовательского ввода и выполнить команду на его основе. Конечно, я ошибаюсь хотя бы раз в день, так что это может быть так.
exec bash
но это технически откроет вложенный терминал.
sed
на что-то вроде этого. sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts
Это обновит строку 127.0.1.1 и просто добавит новый хост к тому, что там есть. Он оставит старый хост на месте, но он совместим с несколькими хостами, назначенными одному IP. Это предотвратит неразрешимую проблему с другой sudo
командой, меняющей имя хоста.
expect
- admin-magazine.com/Articles/Automating-with-Expect-Scripts