2023-04-27 08:17:28 +00:00
# Projekt systemów zdalnych
Projekt uruchamiania zdalnych systemów.
## Instalacja wymaganych składników
Aby zainstalować wymagane składniki wydaj komendę:
```bash
2023-04-28 09:07:26 +00:00
sudo apt install python3-venv python3-pip postgresql postgresql-contrib
2023-04-27 08:17:28 +00:00
```
A następnie:
```bash
python3 -m venv venv
source venv/bin/activate
```
I zainstaluj wymagane paczki pip
```bash
pip install -r requirements.txt
```
## Konfiguracja
2023-04-28 09:07:26 +00:00
Aby dodać bazę i użytkownika w PostgreSQL należy wykonać następujące kroki:
```bash
sudo adduser < username >
sudo passwd < username >
sudo -u postgres psql
```
```sql
CREATE USER < username > WITH PASSWORD 'PASSWORD';
CREATE DATABASE < db_name > ;
GRANT ALL PRIVILEGES ON DATABASE < db_name > to < username > ;
```
Konfiguracja dostępu do serwera PostgreSQL znajduje się w pliku config.py
2023-04-27 08:17:28 +00:00
2023-04-28 09:07:26 +00:00
## Pliki konfiguracyjne
- config.py - zawiera konfiguracje dostępu do bazy danych plik domyslny czy też port dostępu do serwera ssh
- configs/msmtprc - zawiera konfiguracje msmtp
- configs/sendmail.sh - skrypt w którym znajduje sie konfiguracja co i w jaki sposób ma zostac wysłane mailem
- configs/sshd_config - plik zawierający konfiguracje serwera ssh
- configs/uVPN.conf,uVPN.ini - pliki konfiguracyjne do uVPNa
2023-04-27 08:17:28 +00:00
## Uruchomienie
Aby uruchomić serwer deweloperski:
```bash
flask run --host=0.0.0.0
```
## Dodanie nowego użytkownika
Aby dodać użytkownika do bazy w pliku app.py w funkcji
```python
login_api
```
należy odkomentować linijkę:
```python
# db.add_user(username, password)
```
A następnie przejść na stronę logowania wpisac żądaną nazwę użytkownika i hasło a następnie wyłączyć serwer zakomentować tą linijkę i uruchomic serwer ponownie.
## Aktualizacja i instalacja kolejnych pakietów do rootfs
Aby zainstalować nowe pakiety należy uruchomic skrypt
```bash
update_rootfs.sh
```
W celu instalacji dodatkowych pakietów można wydać polecenie:
```bash
sudo ./update_rootfs.sh -n < obraz wyjściowy > -s < obraz żródłowy > -i "< pakiety do instalacji > "
```
Natomiast w celu aktualizacji pakietów w obrazie :
```bash
sudo ./update_rootfs.sh -n < obraz wyjściowy > -s < obraz żródłowy > -u
2023-04-28 09:07:26 +00:00
```
## Tworzenie initramfs
Aby zacząć tworzenie obrazu initramfs należy najpierw zainstalować poniższe składniki:
```bash
sudo apt install build-essential libncurses5-dev
```
Następnie pobrac i rozpakować buildroota z tej strony: https://buildroot.org/download.html i przejść do katalogu w którym został on wypakowany. Kolejnym krokiem jest wypakowanie paczki external.tar.gz do głównego katalogu buildroota i skopiowanie pliku .config również do głównego katalogu.
Kolejnym krokiem jest wydanie polecenia
```bash
make BR2_EXTERNAL=/path/to/external
```
I finalnie uruchomienie kompilacji
```bash
make
```
W katalogu ./output/images znajdują sie pliki:
- bzImage - kernel linuxa
- rootfs.cpio.xz - spakowany obraz initramfs
## Przykładowe parametry startowe
Dodatkowe parametry wymagane:
- root=/dev/ram0
- server=< adres serwera dysponującego wraz z portem >
- sqfile=< nazwa obrazu rootfs >
- nfsrootfs=< ip > :/< ścieżka do folderu z plikami systemu >
- token=< nazwa tokenu >
Opcjonalnie podawane do uruchomienia systemu:
- ip=< ip >
- netmask=< maska podsieci w postaci pełnej >
- gateway=< adres gateway >
Przykład uruchomienia qemu:
```bash
sudo qemu-system-x86_64 -kernel bzImage -append "root=/dev/ram0 console=ttyS0 ip=dhcp nfsrootfs=< ip > :/< path / to / foo > sqfile=< obraz > server=< adres serwera z portem > token=< token > panic=5" -initrd rootfs.cpio.xz -nographic -net nic,model=virtio,macaddr=00:00:00:00:00:02 -net tap,ifname=tap0 -m 512 -no-reboot -smp cpus=4
```
## Przykład konfiguracji dla iPXE
```ipxe
#!ipxe
set server_ip < ip serwera >
set root_path /tftpboot/os-images
set boot_url http://${server_ip}
set os_locate < nazwa folderu z obrazami >
set os_root ${boot_url}/${url_path}/${os_locate}
kernel ${os_root}/bzImage
initrd ${os_root}/initramfs.cpio.xz
imgargs bzImage initrd=initramfs.cpio.xz root=/dev/ram0 console=ttyS0 ip=dhcp nfsrootfs=${server_ip}:${root_path}/${os_locate} sqfile=< obraz > server=< adres serwera z portem > token=< token > panic=5
boot || goto failed
2023-04-27 08:17:28 +00:00
```