Skip to content

Commit

Permalink
fixed couple of typos and formatting in sprawozdanie.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Esgariot committed Jan 27, 2017
1 parent d85351f commit 321ba3a
Show file tree
Hide file tree
Showing 2 changed files with 93 additions and 47 deletions.
138 changes: 93 additions & 45 deletions SPRAWOZDANIE.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,59 @@
# Robert Marciniak 149500 Grupa 61
## Projekt 109. Serwer PXE + narzędzie generujące skrypt instalacyjny dla wybranej dystrybucji Linuxa
### Sprawozdanie:
## Sprawozdanie:
#### Opis:
Główną częścią projektu jest skrypt ```pykickxe.py``` zgodny pythonem 2.7. Na podstawie opcji zawartych w ```pykickxe.conf``` i argumentów konsolowych
Główną częścią projektu jest skrypt ```pykickxe.py``` zgodny pythonem 2.7. Na podstawie opcji zawartych w ```pykickxe.conf``` i argumentów wiersza poleceń
zastępuje znaczniki zaczynające się od znaku ```$``` (np. ```$KERNEL```) w pliku ```pxelinux.cfg/autoinstall.menu.source``` na określone zdefiniowane w
```pykickxe.conf``` po czym kopiuje pliki potrzebne do uruchomienia instalacji sieciowej do folderu podanego przez użytkownika - np. korzenia serwera ftp
```pykickxe.conf``` po czym kopiuje pliki potrzebne do uruchomienia instalacji sieciowej do folderu podanego przez użytkownika - korzenia serwera ftp.

Drugą częścią projektu jest założenie, że istnieje poprawnie skonfigurowany serwer DHCP z którego będzie korzystać karta sieciowa komputera na którym ma
zostać zainstalowany system operacyjny oraz poprawnie skonfigurowany serwer FTP z którego instalator po załadowaniu do pamięci operacyjnej będzie pobierać
pliki pełnego systemu operacyjnego
zostać zainstalowany system operacyjny oraz poprawnie skonfigurowany serwer FTP z którego instalator sieciowy po załadowaniu do pamięci operacyjnej będzie pobierać
pliki pełnego systemu operacyjnego.

[Cały projekt jest dostępny tutaj](https://github.com/Esgariot/PXE_Install)

#### Wymagania:
* karta sieciowa wspierająca bootowanie sieciowe
* serwer DHCP widoczny dla karty sieciowej klienta
* serwer udostępniający potrzebne pliki widoczny dla karty sieciowej klienta
* potrzebne pliki:
* obraz pxelinux.0
* pliki konfiguracji dla pxelinux.0 w drzewie folderu pxelinux.cfg
* poprawny wpis menu bootowania w pliku tekstowym pxelinux.cfg/default
* pliki binarne modułów wykorzystywanych przez konfigurację pxelinux.0
* odpowiednie dla klienta uprawnienia dostępu do zawartości udostępnianej przez serwer
* pliki związane z instalacją dystrybucji

#### Pykickxe:
```$ python pykickxe.py -h```
```
usage: Pykickxe [-h] [-l] [-d] [-v] [-t TFTP_ROOT] [--auto_cfg AUTO_CFG]
{debian,fedora,centos}
a Python PXE and autoinstall tool
positional arguments:
{debian,fedora,centos}
pick a linux distro to download, unpack and append the
PXE config to (Debian or Fedora for now)
optional arguments:
-h, --help show this help message and exit
-l, --list list some default options
-d, --download Download (not really working)
-v, --verbose (also not really working)
print some of what this is doing at any moment
-t TFTP_ROOT, --tftp_root TFTP_ROOT
pass an absolute path to tftp root directory
--auto_cfg AUTO_CFG pass an absolute path to Kickstart file
This program requires that the root from where pxe gets files has following
structure: <distro>/<~copied content of iso image~> for everything, especially
<distro>/images/pxeboot for kernel and ramdisk, kickstart file in
<distro>/ks.cfg or passed manually, (will get copied to util/ks.cfg)
```


#### Pliki:
```
├── dnsmasqappend.conf # przykładowa konfiguracja - dodać do /etc/dnsmasq.conf
Expand All @@ -35,28 +80,12 @@ pliki pełnego systemu operacyjnego
└── reboot.c32
```

#### Przebieg:
1. Wstęp - żeby uruchomic sieciowo instalacje systemu potrzebne jest
* wsparcie dla PXE,
* serwer, który będzie udostępniał kernel i ramdisk,
* obraz kernela pxelinux.0
* drzewo konfiguracje pxelinux.0 w drzewie katalogów pxelinux.cfg
* poprawne wpisy do pxelinux.cfg/default - ścieżki do plików na serwerze, parametry kernela po APPEND

w folderze tftproot znajdują się powyższe, z wyjątkiem plików związanych z dystrybucjami.

2. Po pobraniu uruchomieniu kernela i załadowaniu ramdisku z serwera tftp uruchomionego przez dnsmasq system szuka drzewa katalogów związanych z dystrybucją.
Znajduje wszystko, czego potrzebuje dzięki serwerowi vsftp (z jakiegoś powodu dnsmasqowy tftp nie udostępnia plików jako "normalny" ftp, tylko dla PXE).
W korzeniu serwera ftp jest katalog ```/<distro>/<wypakowane-iso>``` z którego pobiera pliki host na którym jest uruchomiona instalacja. Można też przeprowadzić instalację przez Internet i nie udostępniać całej dystrybucji na serwerze, ale ma to bardzo małe szanse powodzenia przez duże opóźnienie, które nie jest brane pod uwagę przez dracut
3. Żeby to wszystko zautomatyzować do parametrów kernela RedHatowych dystrybucji dodaję ```ks= <ścieżka-do-pliku-kickstart>```
4. Wszystko powyższe można zrobić manualnie, mój skrypt pykickxe.py dąży do zautomatyzowania tego ( z różną skutecznością ). Np. wybór pliku kickstart, kernela i parametrów
kernela odbywa się na zasadzie złożenia pliku kickstart, znalezieniu znaczników do zastąpienia zaczynających się od ```$``` w ```/pxelinux.cfg/autoinstall.menu``` i skopiowania pliku kickstart do ```/util/```


#### pykickxe.conf:
Plik konfiguracji ```pykickxe.py``` zgodny z formatem .INI i dzięki temu parsowalny przez bibliotekę ConfigParser pythona 2.7.
Format .INI pozwala na wykorzystanie makr w postaci ```%(<nazwa_zmiennej_z_jakiejś_sekcji>)<typ_zmiennej>``` co jest przydatne np. używając
```method=%(ftp_url)s/%(dir)s```, bo ConfigParser sam rozszerzy to do ```method=ftp://192.168.0.1/centos```
```method=%(ftp_url)s/%(dir)s```, bo ConfigParser sam rozszerzy to do ```method=ftp://192.168.0.1/centos```
Podzielony jest na sekcje postaci ```[DEFAULT]``` i ```[<nazwa_dystrybucji>]```.
w ```[DEFAULT]``` znajdują się opcje główne, niezależne od dystrybucji:

Expand All @@ -81,31 +110,50 @@ w ```[<nazwa_dystrybucji>]``` znajdują się opcje zależne od konkretnej dystry
* ```append = initrd\=%(dir)/initrd.gz``` - parametry kernela potrzebne do uruchomienia danej dystrybucji
* ```url = ``` - adres pod którym można znaleźć aktualne co do ```last_updated``` pliki instalacji sieciowej danej dystrybucji (nie zaimplementowane)

#### parametry wywołania:
python pykickxe.py -h:

### Przebieg:
[Posłużyłem się tym poradnikiem](http://www.tecmint.com/install-pxe-network-boot-server-in-centos-7/)
#### konfiguracja interfejsów sieciowych:
W ```/etc/network/interfaces``` dodałem wpis dla interfejsu sieciowego, na którym będzie udostępniany serwer dhcp i ftp
```
usage: Pykickxe [-h] [-l] [-d] [-v] [-t TFTP_ROOT] [--auto_cfg AUTO_CFG]
{debian,fedora,centos}
auto eth1
allow-hotplug eth1
iface eth1 inet static
address 192.168.0.1 # ten sam adres co w ftp_url pliku pykickxe.conf
netmask 255.255.255.0
broadcast 192.168.0.255
gateway 10.0.2.15
```
#### konfiguracja dnsmasq:
[Źródło - Debian wiki](https://wiki.debian.org/PXEBootInstall#Another_Way_-_use_Dnsmasq)
```
dhcp-range=192.168.0.3,192.168.0.253,255.255.255.0,1h
dhcp-boot=pxelinux.0,pxeserver,192.168.0.2 # adres z którego karta sieciowa klienta będzie pobierać obraz kernela i ramdisku, potem przełączy się na adres ftp
pxe-service=x86PC,"Install Linux",pxelinux
enable-tftp
tftp-root=/srv/tftp # ścieżka korzenia serwera ftp
```

a Python PXE and autoinstall tool
#### konfiguracja vsftpd
```
local_root=/srv/tftp
anon_root=/srv/tftp
listen_address=192.168.0.1 # ten sam co w ftp_url pliku pykickxe.conf
listen_port=21
```

#### uruchomienie:
1. Uruchomiłem usługi ```dnsmasq``` i ```vsftpd``` dla systemd poprzez polecenie ```# service enable dnsmasq && service enable vsftpd``` i zrestartowałem maszynę, żeby uwzględnione zostały zmiany w ```/etc/network/interfaces```
2. Uruchomiłem maszynę wirtualną bez zainstalowanego systemu operacyjnego, mającą za to ustawioną kartę sieciową jako urządzenie startowe (Główne okno menedżera VirtualBox->nowa maszyna->system->kolejność bootowania->Karta sieciowa zaznaczone, na pierwszej pozycji)
3. Karta sieciowa klienta odnalazła serwer dhcp, znalazła ```pxelinux.0``` i rozpoczęła instalację.
4. Przesłany został obraz kernela i ramdisk i uruchomił się system operacyjny z podanymi wcześniej parametrami kernela
5. System znalazł serwer ftp pod adresem ```192.168.0.1``` po czym zaczął pobierać pliki pełnego systemu operacyjnego. Uruchomiony został instalator graficzny CentOSa i postępował automatycznie wg. skryptu kickstart

#### problemy:
1. Nie udało mi się powtórzyć sukcesu powyżej z powodu złych uprawnień dla klienta łączącego się z serwerem ftp. Za każdym razem instalator dochodził do momentu uruchomienia systemu z kernela i ramdisku, wszystko stawało w momencie próby pobrania plików z ftp
2. Z jakiegoś powodu podczas wywołania funkcji ```writeToMenu``` w pliku ```pykickxe.py```, która nadpisuje znaczniki ```$<NAZWA>``` ich odpowiednikami z ```pykickxe.conf``` występuje błąd, i część przepisywanego tekstu jest jeszcze raz dopisywana na sam koniec pliku ```autoinstall.menu```
3. Nie wszystkie argumenty wiersza poleneń ani pliku konfiguracyjnego ```pykickxe.conf``` są zaimplementowane. Niektóre rzeczy (jeszcze) niczego nie robią

positional arguments:
{debian,fedora,centos}
pick a linux distro to download, unpack and append the
PXE config to (Debian or Fedora for now)

optional arguments:
-h, --help show this help message and exit
-l, --list list some default options
-d, --download Download (not really working)
-v, --verbose (also not really working)
print some of what this is doing at any moment
-t TFTP_ROOT, --tftp_root TFTP_ROOT
pass an absolute path to tftp root directory
--auto_cfg AUTO_CFG pass an absolute path to Kickstart file

This program requires that the root from where pxe gets files has following
structure: <distro>/<~copied content of iso image~> for everything, especially
<distro>/images/pxeboot for kernel and ramdisk, kickstart file in
<distro>/ks.cfg or passed manually, (will get copied to util/ks.cfg)
```
2 changes: 0 additions & 2 deletions dnsmasqappend.conf
Original file line number Diff line number Diff line change
@@ -1,5 +1,3 @@
#TODO replace with variables like $tftp-root and so

dhcp-range=192.168.0.3,192.168.0.253,255.255.255.0,1h
dhcp-boot=pxelinux.0,pxeserver,192.168.0.2
pxe-service=x86PC,"Install Linux",pxelinux
Expand Down

0 comments on commit 321ba3a

Please sign in to comment.