Rozdaję maszynę wirtualną moim studentom na kurs programowania dla początkujących. Ze względu na szybkość, zamiast nakłaniać ich do zainstalowania Ubuntu od zera, planuję dać im w pełni skonfigurowany obraz, który mogą po prostu uruchomić.
Aby go skonfigurować, podałem mu ofiarną nazwę hosta, nazwę użytkownika i hasło. Jaki jest najczystszy sposób, aby to zmienić dla uczniów, gdy zaczynają działać?
Dotarłem do tej istoty , która ma pewne niewiarygodne postępy z nazwą hosta, ale nazwa użytkownika powstrzymuje mnie przed jej zmianą.
Chciałbym, aby był to jak najbardziej bezbolesny proces, jak ma się to zdarzyć w ich pierwszym laboratorium.
Całkiem możliwe, że powinienem przyjąć zupełnie inne podejście. Jestem otwarty na wszystkie sugestie.
#!/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
udział w procesie interaktywnym i uczyniłem go nieinteraktywnym. Zasadniczo tworzenie skryptu oexpect
określonych wynikach i posiadanie odpowiedzi znanej już w skrypcie. Ben chce czekać na dane wejściowe użytkownika i na tej podstawie wykonać polecenie. To prawda, że się mylę przynajmniej raz dziennie, więc może tak być.exec bash
ale technicznie otworzy to zagnieżdżony terminal.sed
ją czymś takim.sudo sed -i "s/127.0.1.1/& $compname/" /etc/hosts
To zaktualizuje linię 127.0.1.1 i po prostu dołączy nowego hosta do tego, co tam jest. Opuści stary host na swoim miejscu, ale zgodnym jest, aby przypisać wiele hostów do jednego adresu IP. Zapobiegnie to nierozwiązywalnemu problemowi z drugąsudo
komendą, zmieniając nazwę hosta.Odpowiedzi:
Dlaczego nie użyć do tego instalacji OEM? Nie jest tak ładna, ale wykonuje zadanie. Jeśli chcesz pójść tą drogą, zobacz doskonałą odpowiedź izx na to pytanie: Jak wstępnie zainstalować Ubuntu dla kogoś (instalacja OEM)?
Zasadniczo system (przy pierwszym uruchomieniu) poprosi użytkownika o podanie szeregu informacji umożliwiających personalizację komputera. Obejmuje to język, lokalizację, nazwę użytkownika, nazwę hosta, hasło i tak dalej. Zasadniczo wszystko, co zwykle monituje komputer o instalację.
To jest dokładnie to, co zdjęcia są przeznaczone dla OEM i robią świetną robotę. Ponadto dasz swoim uczniom niewielki smak doświadczenia z instalacją Ubuntu. Chociaż instalacje Ubuntu nie są do końca bolesne. Prawdopodobnie możesz to zrobić na jednej lekcji i dać uczniom odrobinę pracy domowej, aby spersonalizować i poznać ich maszynę wirtualną. Ponadto partycjonowanie to
bolesnazabawa!Powrót do aktualnego problemu (i odpowiedź na twoje aktualne pytanie) .....
Spójrzmy na
man usermod
wyjaśnienie, co się dzieje:Zasadniczo oznacza to po prostu, że nie możemy zmienić identyfikatora użytkownika, jego nazwy użytkownika, katalogu domowego ani niczego w tym rodzaju, jeśli użytkownik jest zalogowany.
Możemy więc zrobić kilka fajnych rzeczy, aby skonfigurować to przy następnym uruchomieniu systemu. Zamiast skryptu wykonującego pracę, sprawimy, że skrypt utworzy kolejny skrypt do wykonywania wszystkich ciężkich operacji podnoszenia i manipulacji. Przykład tego:
Zasadniczo, robiąc to, „kolejkujesz” zdarzenia do uruchomienia przy następnym uruchomieniu systemu. Uruchomi się to zanim nastąpi zdarzenie użytkownika, więc system wykona te polecenia jako root. Dlatego
ben
użytkownik nie będzie zalogowany, a system nie będzie narzekał.Nadal może być konieczne dodanie do tego polecenia dodatkowych poleceń, aby umożliwić większą personalizację (np. Ustawienie faktycznej nazwy itp.). Jest to jednak opcjonalne i należy to zrobić tylko wtedy, gdy chcesz, aby miało to miejsce podczas skryptu instalacyjnego.
Chociaż dobrym pomysłem może być całkowite utworzenie nowego użytkownika dla studentów, a następnie utrzymanie istniejącego konta ofiarnego na miejscu. W ten sposób, jeśli coś się stanie, możesz wejść i naprawić / administrować ich maszyną, jeśli to konieczne. Oczywiście, jeśli dajesz swoim uczniom administratorom dostęp do ich maszyn wirtualnych, jest to rodzaj spornego punktu, ponieważ mogą oni równie dobrze usunąć użytkownika „instruktora”, ponieważ są studentami.
źródło
Na ekranie logowania każ im nacisnąć ctrlaltF2i zalogować się
ben
z poziomu terminala, który zostanie otwarty i uruchomionyI podaj im to samo hasło do roota, tj. Numer kursu, więc jeśli coś się zepsuje, możesz wejść i go naprawić. Następnie wyloguj się, wpisując
exit
i zaloguj się jako root przy użyciu nowego hasła roota i uruchom skrypt (być może będziesz musiał go zmodyfikować, aby zmieniłben
użytkownika, a nie roota).Lub poproś, aby zalogowali się jako ben z terminala, naciskając ctrlaltF2(jak poprzednio) na ekranie logowania, a następnie uruchomili skrypt z tego miejsca. Może to zadziałać, ponieważ, jak wskazali Muru i Kaz Wolfe w poprzedniej odpowiedzi, użytkownik nie może uruchamiać żadnych procesów, a zalogowanie się przez terminal nie powinno uruchamiać żadnych procesów, takich jak
X
lubUbuntu-Desktop
, lub innych procesów użytkownika, które przeszkadzająusermod
. (Nie wiem, czy to działa, nie próbowałem, ale warto spróbować).źródło