Я розповсюджую VM студентам для курсу програмування для початківців. Для швидкості, замість того, щоб змусити їх встановити 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 і просто додасть новий хост до того, що там є. Він залишить старий хост на місці, але він сумісний із тим, що одному хосту призначено кілька хостів. Це дозволить уникнути нерозв’язної проблеми з вашою іншою sudo
командою, змінивши ім'я хоста.
expect
- admin-magazine.com/Articles/Automating-with-Expect-Scripts