From Łukasz Graczykowski
Wirtualizacja
Wirtualizacja - jest jednym ze sposobów wydajniejszego wykorzystania sprzętu komputerowego; w naszym przypadku zajmiemy się wirtualizacją systemu operacyjnego, czyli uruchomieniem dwóch systemów operacyjnych na jednym komputerze jednocześnie.
Wyróżniamy:
- Host (lub “matka”) — system, w którym uruchomione są inne systemy operacyjne (poprzez odpowiednie oprogramowanie)
- Guest (lub "gość") — system, który jest uruchomiony w oprogramowaniu symulującym komputer, które działa na hoście. Jeden host może mieć uruchomionych wiele systemów operacyjnych typu guest. Tego typu wirtualny kompuer nazywamy maszyną wirtualną.
Kiedy wirtualizacja jest przydatna?
- Gdy pracujemy na Windows'ie a musimy uruchomić program napisany pod Linux'a w tym samym czasie
- W dużych zespołach programistycznych - każdy projekt ma dedykowany szablon maszyn wirtualnych, który jest skonfigurowany pod potrzeby tego projektu. W ten sposób programista może pracować nad dwoma projektami, które wymagają różnych konfiguracju systemu operacyjnego.
- Na potrzeby testowania i wdrażania aplikacji. Możemy testować działanie tej samej aplikacji na różnych konfiguracjach systemu operacyjnego (czy nawet na różnych systemach operacyjnych).
- W celu sprawdzenia komunikacji między aplikacjami - każda maszyna wirtualna (każdy system guest) może otrzymać swój indywidualny adres IP w sieci i być widoczny dla hosta i innych komputerów jako rzeczywista maszyna.
W przypadku laboratorium z Sieci komputerowych tworzymy maszynę wirtualną po to, by Państwo mieli pełną kontrolę nad systemem operacyjnym. Przykładowo, ewentualne przypadkowe usunięcie plików systemowych w maszynie wirtualnej uniemożliwi pracę tylko systemowi guest, host zaś będzie pracował normalnie.
Zadanie 1: tworzenie maszyny wirtualnej
Istnieje wiele programów (narzędzi wirtualizacji), które umożliwiają wirtualizację systemu operacyjnego. W naszym przypadku wykorzystamy program VirtualBox firmy Oracle. Jest on już zainstalowany na komputerach w laboratorium.
W celu stworzenia nowej maszyny wirtualnej postępujemy według poniższego schematu:
- otwieramy aplikację VirtualBox (wybieramy Applications w górnym menu),
- włączamy kreator tworzenia nowej maszyny wirtualnej (Machine -> New)
- Name: student
- Type: Linux
- Version: Ubuntu (64 bit)
-
Uwaga: w laboratorium będziemy używać systemu Linux Ubuntu 16.04 LTS w wersji o 64-bitowej architekturze procesora ze śrdowiskiem graficznym MATE. Na 64-bitowym hoście można postawić system typu guest o architekturze zarówno 64 jak i 32 bity. Na 32-bitowym hoście możliwe jest postawienie tylko 32-bitowego systemu typu guest.
- Memory size: 3 GB (trzeba pamiętać, że pula pamięci RAM jest wspólna dla obu systemów - jeśli udostępnimy za dużo systemowi goszczącemu, możemy doprowadzić do problemów z działaniem hosta)
- Hard disk: wybieramy Create a virtual hard disk now
-
Uwaga: dysk maszyny wirtualnej będzie widoczny tylko w systemie typu guest. Na maszynie typu host będzie to po prostu zwykły plik.
- Hard disk file type: VDI (VirtualBox Disk Image)
- Storage on physical hard disk: Dynamically allocated (rozmiar pliku na dysku hosta będzie się zwiększał w zależności od zajętości miejsca w systemie gościa)
- File location and size: w pierwszym polu wpisujemy nazwę dysku dla naszej maszyny (np. student, dysk zostanie utworzony w katalogu domowym), natomiast rozmiar ustawiamy trochę większy od domyślnego (np. 10 GB)
W tym momencie maszyna wirtualna jest już utworzona. Aby zainstalować system, musimy "włożyć" do wirtualnego napędu maszyny wirtualnej obraz płyty ISO z systemem operacyjnym. W tym celu należy zaznaczyć utworzoną maszynę oraz kliknąć przycisk Settings (lub kliknąć prawy przycisk myszy i również wybrać Settings). Następnie przechodzimy do Storage i tam klikamy na ikonę płyty (podpisaną Empty) znajdującą się pod polem Controller: IDE. Następnie w menu wybieramy opcję Choose Virtual Optical Disk File. W okienku wyboru pliku wybieramy plik .iso z folderu /opt/sk/shared/iso/
.
W tym momencie mamy stworzoną maszynę wirtualną z włożoną "płytą" do wirtualnego napędu optycznego. Możemy zatem przejść do Zadania 2.
Zadanie 2: instalacja systemu Linux Ubuntu
- Uruchamiamy maszynę wirtualną (zaznaczamy maszynę w oknie VirtualBox'a i klikamy Start w górnym menu)
- W oknie Welcome wybieramy język angielski i klimay Install Ubuntu MATE
- W kolejnym oknie zaznaczamy ściąganie aktualizacji i nie zaznaczamy ściągania dodatkowego oprogramowania (kodeków MP3, itp.)
- W kolejnym oknie z menu wyboru dotyczącym sposobu instalacji wybieramy Something else (sami przeprowadzimy partycjonowanie dysku)
-
Uwaga: polecane jest zapoznanie się z hierarchią systemu plików w systemach Linux - [link]
- W kolejnym oknie zaznaczamy dysk
/dev/sda
oraz klikamy New Partition Table i następnie w oknie Continue - pojawi się free space
. Tworzymy dwie partycje:
- Partycja głównego systemu plików
- Rozmiar: 8 GB
- Typ: primary
- Location: Beginning of this space
- Use as: Ext4 journaling file system
- Mount point: /
-
Uwaga: W tej konfiguracji wszystkie dane będą na jednej partycji. W praktyce raczej przydziela się partycje na wybrane podkatalogi; przykładowo katalog /home często tworzony jest na oddzielnej partycji.
- Partycja wymiany (swap)
- Rozmiar: 2 GB (pozostały rozmiar dysku)
- Typ: logical
- Location: Beginning of this space
- Use as: swap area
- Klikamy Install now i Continue
- W opcji wyboru lokacji zostawiamy Warsaw i klikamy Continue
- W ekranie wyboru klawiatury ustawiamy Polish - Polish i klikamy Continue
- W ekranie Who are you? wpisujemy:
- Your name: student
- Your computer's name: student-XX, gdzie XX to numer komputera
- Pick a userame: student
- Choose a password: student
- Zaznaczamy opcję, by wpisywać hasło przy logowaniu
- Na koniec instalacji wyskoczy okienko Installaction complete - klikamy Restart Now
- Pojawi się ekran proszący o wyjęcie płyty - sprawdzamy, czy obraz iso jest w wirtualnym napędzie (Settings -> Storage), jeśli tak - usuwamy i następnie restartujemy system
- Po restarcie pojawi się okno logowania - logujemy się na użytkownika student i w zasadzie mamy działający system
- Możemy zauważyć, że okienko maszyny wirtualnej ma dość niską rozdzielczość i nie można tego rozmiaru zmienić. W tym celu istalujemy tzw. VirtualBox GuestAdditions:
- otwieramy terminal (Applications -> System tools -> MATE Terminal) i wpisujemy:
sudo apt-get install virtualbox-guest-utils
- po pomyślnej instalacji restartujemy system
Ustawienia sieci maszyny wirtualnej
Ważnym elementem konfiguracji maszyny wirtualnej jest jej podłączenie do sieci (Settings -> Network -> Adapter 1 -> Attached to). Może ona działać w jednym z trzech możliwych trybów:
- NAT - maszyna funkcjonuje w wirtualnej podsieci. Jest to analogiczna sytuacja, gdy ustawiamy router, który tworzy własną sieć lokalną i do niego podłączamy komputer (w tym przypadku takim routerem jest host). Adres IP maszyny wirtualnej nie jest widoczny na zewnątrz.
- Host-only-network - podobnie jak wyżej, ale maszyna wirtualna ma dostęp do innych maszyn wirtualnych tego samego hosta oraz samego hosta. Maszyna wirtualna nie jest widoczna na zewnątrz.
- Bridged Adapter - maszyna wirtualna jest podpięta bezpośrednio do interfejsu sieciowego hosta i będzie widoczna w sieci jako kolejne urządzenie podłączone bezpośrednio do niej. Nasz system dostanie adres IP z puli sieci oraz będzie widoczny dla wszystkich innych komputerów w tej sieci tak jakby to było fizyczne urządzenie.
Na chwilę obecną pozostawiamy ustawienie NAT, jednakże w dalszej części laboratorium będziemy sposób podłączenia zmieniać.
Zadanie 3: powtórzenie podstawowych komend systemu Linux
Na zajęciach z Sieci komputerowych będziemy pracować w systemie Linux z dużym wykorzystaniem terminala i powłoki bash
i stopniowo poznawać bardziej zaawansowane komendy.
Pierwszym zadaniem jest przypomnienie sobie podstawowych komend, znanych jeszcze z PTI:
- Proszę pobrać tekst Romeo i Julii po angielsku:
wget http://db.fizyka.pw.edu.pl/sk-2015/_downloads/pg1112.txt
- Sprawdzić, w którym katalogu się znajdujemy (
pwd
)
- Stworzyć w katalogu
/tmp
katalogi foo
i bar
(do tworzenia katalogów polecenie mkdir
, do przejścia do katalogu polecenie cd
)
- Skopiować do katalogu
foo
plik z tekstem dramatu (cp
)
- Przejść do katalogu
bar
i wyświetlić zawartość dramatu za pomocą ścieżki absolutnej (cat
)
- Skopiować dramat z katalogu
foo
do bar
za pomocą ścieżki względnej
Podstawy administracji systemem Linux
Użytkownik administracyjny i komenda sudo
W systemie Linux istnieje bardzo mocno wymuszany podział na administratora komputera oraz zwykłego użytkownika (w nowszych wersjach systemu Windows został wprowadzony analogiczny mechanizm). Do wykonywania czynności administracyjnych stworzono użytkownika o nazwie root. W nowszych systemach (np. naszym Ubuntu) konto administracyjne jest domyślnie wyłączone (nie da się zalogować na takiego użytkownika), a jego uprawnienia nabywa zwykły użytkownik tymczasowo, z użyciem komendy sudo
.
Komenda sudo pozwala aktualnemu użytkownikowi (o ile spełnia dodatkowo pewne wymagania) wykonywać zadania administracyjne.
Przykłady użycia:
sudo adduser ola # Wykona polecenie adduser ola z uprawnieniami administratora
sudo -i # Zalogouje się do konsoli administratora
sudo -u ola -i # Uruchomi konosolę z zalogowanym użytkownikiem ola
Instalowanie oprogramowania
Wszystkie sytemy operacyjne Linux przychodzą z (mniej lub bardziej bogatym) zestawem oprogramowania oraz narzędziami do automatycznej instalacji programów. Instalowanie programów w systemach Linux przypomina bardziej znane ze smartfonów aplikacje typu Google Play czy Apple Store, które pozwalają na automatyczną instalację zweryfikowanych aplikacji. W systemach Linux tego typu "sklepy" z (darmowym) nazywamy najczęściej repozytoriami a programy (jak i dodatkowe biblioteki) pakietami lub paczkami. Takie podejście jest znacznie bezpieczniejsze i pewniejsze niż uruchamianie losowych plików typu setup.exe ściągniętych z podejrzanych stron.
Uwaga: Oczywiście w systemie Linux istnieje możliwość ściągnięcia i zainstalowania programu, który nie istnieje w repozytoriach. Z reguły ściągamy wtedy archiwum ze skompilowany programem, po czym uruchamiamy dołaczony do niego skrypt instalacyjny.
W Ubuntu (i innych ystrybucjach pochodzących od systemu Debian) do zarządzania pakietami/paczkami służą narzędzia dpkg oraz apt.
Uwaga: Niektóre dystrybucje Linuxa (np. nasze Ubuntu) posiadają całkiem użyteczne graficzne nakładki na system instalacji pakietów z repozytoriów (np. program Synaptic). Taki graficzny program to już w zasadzie to samo co “sklepy” w smartfonach.
Typy repozytoriów w Ubuntu
Żródła z których pobieramy oprogramowanie są opisane w pliku /etc/apt/sources.list
.
Domyślne repozytorium Ubuntu podzielone jest na 4 części:
- Main – aplikacje o otwartym kodzie źródłowym szczególnie ważne i potrzebne, wspierane przez developerów Ubuntu
- Restricted – programy dodatkowe, niewspierane przez Ubuntu, nieoparte na wolnej licencji
- Universe – także niewspierane do końca pakiety Open Source
- Multiverse – niewspierane i niewolne oprogramowanie
Do tego pliku można dopisywać kolejne repozytoria będące poza kontrolą dostawcy.
Przeszukiwanie pakietów
Po zmianie konfiguracji repozytoriów (tj. modyfikacji pliku /etc/apt/sources.list
) nalezy pobrać informacje o pakietach z repozytorium. Służy do tego komenda
sudo apt-get update
Komenda sudo apt-get update
pobiera również informacje o nowych pakietach, które wydali twórcy Ubuntu i dobrze ją wykonać przed każdą czynnością dotyczącą pakietów.
Do aktualizacji pakietów służy komenda:
sudo apt-get upgrade
lub sudo apt-get dist-upgrade
(druga komenda nie tylko aktualizuje zainstalowane pakiety, ale również usuwa pakiety już niepotrzebne i usuwa niepotrzebne zależności między pakietami)
Do przeszukiwania repozytorium pakietów służy program apt-cache
. By wyszukać pakiety, które mają w nazwie lub opisie ciąg znaków foo, należy napisać polecenie:
apt-cache search foo
By wyszukiwać tylko w nazwie pakietu należy wpisać:
apt-cache search -n foo
Zadanie 4: instalacja pakietów
Odnaleźć nazwę pakietu który dostarcza serwer ssh, w tym celu proszę przeszukać paczki które w nazwie mają ssh a następnie za pomocą grep znaleźć paczki które w nazwie mają server.
Za pomocą apt-get install
zainstalować program emacs oraz serwer ssh (openssh-server
).
Należy pamiętać o komendzie sudo apt-get update
!