# Лабораторная 4. Сетевая загрузка

Цель:<br><br>
Получение навыков по работе с сетевой загрузкой операционной системы<br><br>
Задачи:
1.	Подключится к виртуальной машине на облачной платформе СПбГУТ
0. Подготовить образ операционной системы Ubuntu
0. Скомпилировать загрузчик IPXE
0. Настроить dnsmasq
0. Снять дамп трафика во время установки ОС по сети
0. Установить операционную систему, с помощью сетевой загрузки


#### Задание 1. Подготовка образа

В первую очередь необходимо скачать минимальный образ Ubuntu 20.04 Server на виртуальный сервер 
```sh
cp /var/lib/cloud/s3cfg .s3cfg
s3cmd get s3://lab5/ubuntu-20.04-server.iso ~/  
```
После этого необходимо смонтировать образ в папку `/mnt/`

```sh
sudo mount ubuntu-20.04-server.iso /mnt/
```

Создайте папку, где в дальнейшем мы разместим образ ubuntu
```sh
sudo mkdir /var/www/deploy/ubuntu
```
Скопируйте все файлы из папки `/mnt/` в папку `/var/www/deploy/ubuntu`
```sh
sudo cp -Rf /mnt/* /var/www/deploy/ubuntu
```
Также необходимо перенести и сам образ Ubuntu в папку `/var/www/deploy/ubuntu`
```sh
sudo cp ubuntu-20.04-server.iso /var/www/deploy/ubuntu
```
Измените владельца директории и его все его содержимого на Apache
```sh
sudo chown -R apache:apache /var/www/deploy
```
#### Задание 2. Подготовка загрузчика IPXE
 IPXE -  это свободная реализация программного обеспечения для начальной загрузки по сети.
В первую очередь устанавливаем все необходимые пакеты для скачивания и сборки пакета
```sh
sudo yum install git-core gcc binutils make perl syslinux xz-devel
```
Перейдите в домашнюю директорию
```sh
cd ~
```
Скопируете репозиторий ipxe c копии официального git репозитория
```sh
git clone https://gitlab.resds.ru/tarabanov.if/ipxe.git
```
> Ничего изменять в комманде не нужно

Перейти в директорию репозитория и перейти на ветку версии 1.21.1
```bash
cd ipxe
git checkout v1.21.1
```

Перейдите в директорию с исходным кодом
```sh
cd src/
```
Включаем поддержку сетевого хранилища
```sh
sed -i  's/#undef\tDOWNLOAD_PROTO_NFS/#define\tDOWNLOAD_PROTO_NFS/' config/general.h
```
> выполнять внимательно 

Также нам необходим добавить поддержку команды Ping
```sh
sed -i 's/\/\/#define\ PING_CMD/#define\ PING_CMD/' config/general.h
sed -i 's/\/\/#define\ IPSTAT_CMD/#define\ IPSTAT_CMD/' config/general.h
sed -i 's/\/\/#define\ REBOOT_CMD/#define\ REBOOT_CMD/' config/general.h
sed -i 's/\/\/#define\ POWEROFF/#define\ POWEROFF/' config/general.h
```
> выполнять внимательно 

Создайте встроенный скрипт `embed.ipxe`
```sh
vi embed.ipxe
```
Заполните скрипт такой конфигураций
```
#!ipxe

dhcp
chain http://${next-server}/boot.ipxe || shell
```
> Не допускается пустая строка сверху

Скомпилируйте образ загрузчика IPXE
```sh
make bin-x86_64-efi/ipxe.efi EMBED=embed.ipxe
```
Скопируйте, скомпилированный загрузчик в папку `/var/lib/tftpboot/`
```sh
sudo cp bin-x86_64-efi/ipxe.efi /var/lib/tftpboot/
```
Дальше необходимо подготовить скачать загрузочное меню 
```
s3cmd get s3://lab5/boot.ipxe ~/boot.ipxe
sudo cp ~/boot.ipxe /var/www/deploy/boot.ipxe
sudo chown -R apache:apache /var/www/deploy/
```

#### Задание 3. Настройка DNSMASQ

Установите пакет dnsmasq
```sh
sudo yum install dnsmasq
```
Запустите демон dnsmasq
```sh
sudo systemctl start dnsmasq
```
Добавьте в автозагрузку
```sh
sudo systemctl enable dnsmasq
```
Измените конфигурацию dnsmasq `/etc/dnsmasq.conf`
```sh
dhcp-range=192.168.0.15,192.168.0.15,12h
dhcp-option=option:router,192.168.0.1
dhcp-boot=ipxe.efi,192.168.0.10
enable-tftp
tftp-root=/var/lib/tftpboot/
log-queries
conf-dir=/etc/dnsmasq.d
```
>  конфигурацию можно изначально полностью очистить

Перезапустите dnsmasq 
```sh
sudo systemctl restart dnsmasq
```
Для проверки состояния можно воспользоваться командой
```sh
sudo systemctl status dnsmasq
```

Отключите фаервол 
```bash
sudo systemctl stop firewalld
sudo systemctl disable firewalld
sudo systemctl mask firewalld
```

#### Задание 4. Снятие трафика
Во время установки операционной системы будет необходимо снять трафик, который идет при взаимодействии `labnode1` и `labnode2`, самый простой способ записи в файл это
```bash
sudo tcpdump -i eth0 -w dump.pcap
```

#### Задание 5. Развертывания Ubuntu
 Для дальнейшей работы нам необходим на виртуальной машине `labnode2` 

1. Перед вами после перехода в консоль появится UEFI shell в нем необходимо вписать команду `exit` 
0. После этого в меню вам необходимо выбрать Boot Manager, после этого выбрать вариант загрузки в виде `UEFI PXEv4`, дальше будет происходить получения ранее созданного ipxe 
0. В меню загрузчика необходимо выбрать образ ubuntu, после нажатия `Enter`, будет загружен live образ Ubuntu с помощью которого в дальнейшем мы будем производить установку системы. На самом деле перед вами установочное меню операционной системы ubuntu 20 в серверном исполнении, и возможностью установки различных сервисов.
В данной работе установка подразумевает под собой установку параметров в режиме по
умолчанию. Для навигации по установочному меню используются кнопки клавиатуры:
  `вверх-вниз`– для перемещения фокуса выделения по пунктам меню,
  `enter` – для нажатия на необходимый пункт,
  `пробел` – для выбора пунктов в меню со списком выбора,
  `Tab` – для переключения между группами пунктов выбора.
0. В первом пункте по умолчанию выбран язык English – лучше его изменить на русский, для
  избегания проблем с локализацией. Для этого переместить фокус выделения на русский язык и
  нажать – `enter`.
0. В следующем пункте выберете вариант продолжения установки без обновления загрузчика
0. В следующем меню оставить английскую раскладку клавиатуры и нажать готово
0. В следующем меню – сетевые соединения – оставить все параметры по умолчанию и нажать `готово`
0. Меню ввода адреса прокси сервера оставить пустым и нажать – готово
0. В меню выбора зеркала для скачивания архивов ничего не менять и нажать готово
0. В меню настройки дисковых устройств выбрать пункт автоматической разметки диска, и если он и выбран – нажать готово

 
Когда вы убедитесь, что все сделали правильно нажмите «Готово»
В следующем меню заполнить все поля имени пользователя и пароля, в качестве имени пользователя и пароля можно использовать:
`labuser`
`labpass1!`
 
[![Рисунок4.png](https://docs.resds.ru/uploads/images/gallery/2022-02/scaled-1680-/3cKddI65UKKPxis8-risunok4.png)](https://docs.resds.ru/uploads/images/gallery/2022-02/3cKddI65UKKPxis8-risunok4.png)

В новом меню включите установку сервера `OpenSSH` и нажмите готово
 
 [![Рисунок5.png](https://docs.resds.ru/uploads/images/gallery/2022-02/scaled-1680-/fhzVwMKLdtMuJc98-risunok5.png)](https://docs.resds.ru/uploads/images/gallery/2022-02/fhzVwMKLdtMuJc98-risunok5.png)
 
В следующем меню, сразу нажмите готов
Дождитесь установки операционной системы и с помощью нажатия ***Cancel update and reboot***, произойдет перезагрузка системы, введите свой логин и пароль установленный в прошлых пунктах и попробуйте проверить работу сети с помощью команды
```sh
ping 192.168.0.10
```
#### Задание 6. Анализ трафика

1. закончите снятие трафика 
2. перенесите дамп на аудиторный пк
3. Ответьте на вопросы:
	1. Какие протоколы использовались во время установки ОС?
	2. Как выглядит сценарий взаимодействия при сетевой загрузки?
    3. За что отвечает dnsmasq?
    4. Что такое IPXE?
4. Показать сценарий взаимодействия загрузки