Virtual Machine – automatyczny start

Jestem fanem wirtualizacji, więc tej opcji nie mogło również zabraknąć na moim domowym serwerze. Miałem jednak pewien problem. Otóż domowy serwer nie chodzi 365/24, czyli non-stop, tylko jest wyłączany na noc. Skrypt, który odpowiadał za uruchamianie wirtualnej maszyny leżał w cronie. Niestety, opcja uruchamiania skryptu podczas rozruchu systemu w cronie nie poskutkowała, a choinka błędów robiła się coraz dłuższa. Najwyższy czas coś z tym zrobić.

Porada była wykonywana pod systemem Debian 6.0
Moduł  VBoxVRDP posiada VirtualBox w wersji 4.1.x

Wpadłem na pomysł, aby wsadzić skrypt do init.d, który będzie się uruchamiał wraz z system. A więc na początku przechodzimy do katalogu bin (oczywiście po zalogowaniu się jako root):

cd /usr/bin

i tworzymy nowy plik np. windows.sh

touch windows.sh

Nadajemy mu prawa do wykonywania:

chmod +x windows.sh

i edytujemy go:

nano /usr/bin/windows.sh

Uruchomi nam się edytor nano. Jako treść skryptu wpisujemy:

#!/bin/sh

VBoxVRDP -startvm windows &
sleep 10s

Teraz co to wszystko znaczy:

VBoxVRDP -startvm windows

To jest polecenie, które odpali wirtualną maszynę. VBoxVRDP jest to moduł w programie VirtualBox od edycji 4.1.x, który pozwala zarządzać wirtualnymi maszynami bez konieczności posiadania środowiska graficznego.

&

Znaczek ampersand zapobiega, aby skrypt podczas wykonywania lub wysypania nie zatrzymał uruchamiania systemu.

sleep 10s

Polecenie wymusza odczekanie pewnego okresu czasu. Jeżeli wydamy polecenie wykonania skryptu, to jego właściwe uruchomienie nastąpi ze zwłoką 10 sekund.

Ok. Skrypt odpowiedzialny za uruchamianie wirtualnej maszyny mamy napisy. Teraz musimy napisać drugi skrypt, który będzie uruchamiał powyższy.

Wpisujemy polecenie:

cd /etc/init.d/

Przeniesie nas do katalogu init.d, gdzie znajdują się skrypty startowe. Wpisujemy :

touch windows.sh

Utworzony zostanie plik windows.sh

Nadajemy mu prawa do uruchamiania:

chmod +x windows.sh

Teraz musimy go z edytować:

nano /etc/init.d/windows.sh

Jako treść wpisujemy:

su serwer -c 'sh /usr/bin/windows.sh'

Teraz słówko wyjaśnienia:

su serwer -c

To polecenie zmusza wykonanie danej czynności jako inny użytkownik. Domyślnie wszystkie skrypty w init.d odpalane są przez roota. Nasz windows.sh znajdujący się w init.d też zostanie przez niego uruchomiony, ale już windows.sh w katalogu /bin wykona się jako inny user.

‚sh /usr/bin/windows.sh’

Polecenie, które zostanie wykonane przez innego użytkownika. Należy pamiętać o apostrofach.

Teraz, aby nasz skrypt w init.d stał się faktycznie skryptem startowym, to zamykamy edytor nano i wpisujemy polecenie:

update-rc.d windows.sh defaults

i naciskamy Enter. Jeżeli by to polecenie nie zadziało, to wpisujemy:

insserv windows.sh

Teraz jeżeli uruchomimy ponownie serwer/komputer, to maszyna wirtualna powinna nam się bez problemu uruchomić.

Po co takie kombinacje?

Jeżeli skrypt:

#!/bin/sh

VBoxVRDP -startvm windows &
sleep 10s

dodalibyśmy od razu do init.d, to zostałby wykonany jako root, przez co maszyna wirtualna działałby z prawami administratora, co nie jest zalecane.

P.S Jeżeli będzie wirtualizować Windows Server 2003 i będzie na nim postawiony IIS, to nie zamykajcie serwera jak działa Windows. Najpierw jego wyłączcie, a potem dopiero cały serwer. Ubijanie go może spowodować uszkodzenie plików konfiguracyjnych serwera IIS i będzie wymagana jego ponowna instalacja.