Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
proxmox:setup_diskless_ubuntu_vm [2019/09/19 09:04] – [Готовим систему, которая будет грузиться с NFS-шары] admin | proxmox:setup_diskless_ubuntu_vm [2019/09/19 10:11] (current) – [/etc/dhcp/dhcpd.conf] admin | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | Задача - запустить на хосте **Proxmox** виртуалку, | ||
+ | У виртуалки будет два интерфейса - один для выхода в сеть и один для взаимодействия с сервером **NFS**. \\ | ||
+ | ====== Настройка контейнера DHCP+NFS ====== | ||
+ | На хосте **Proxmox** создаем [[proxmox: | ||
+ | В конфигурации контейнера два сетевых интерфейса. Один смотрит во внешнюю сеть, а второй - исключительно для загрузки виртуалки (на нем будут работать сервисы **NFS** и **DHCP**). | ||
+ | В данной конфигурации **IP**-адрес контейнера - **192.168.88.1**. Этот интерфейс смотрит на виртуальную машину. \\ | ||
+ | Запускаем это контейнер и в нем настраиваем: | ||
+ | sudo apt-get install isc-dhcp-server tftpd-hpa syslinux pxelinux nfs-kernel-server initramfs-tools | ||
+ | ===== / | ||
+ | Настраиваем DHCP-зону в файлике **/ | ||
+ | < | ||
+ | option domain-name " | ||
+ | default-lease-time 600; | ||
+ | max-lease-time 7200; | ||
+ | |||
+ | allow booting; | ||
+ | allow bootp; | ||
+ | |||
+ | subnet 192.168.88.0 netmask 255.255.255.0 { | ||
+ | range 192.168.88.100 192.168.88.254; | ||
+ | option broadcast-address 192.168.88.255; | ||
+ | filename "/ | ||
+ | } | ||
+ | |||
+ | host pxe_client { | ||
+ | hardware ethernet 76: | ||
+ | fixed-address 192.168.88.100; | ||
+ | } | ||
+ | </ | ||
+ | Добавлять статичный адрес необходимо для того, чтобы у адаптера всегда был один IP-адрес. В противном случае - адаптер будет иметь два IP-адреса. Два адреса адаптер получает даже если интерфейс не сконфигурирован в **netplan**. | ||
+ | ===== / | ||
+ | Указываем, | ||
+ | INTERFACESv4=" | ||
+ | перезагружаем контейнер и смотрим, | ||
+ | service nfs-server status | ||
+ | service isc-dhcp-server status | ||
+ | |||
+ | ===== / | ||
+ | Настраиваем **tftp**-сервер: | ||
+ | < | ||
+ | TFTP_USERNAME=" | ||
+ | TFTP_DIRECTORY="/ | ||
+ | TFTP_ADDRESS=": | ||
+ | TFTP_OPTIONS=" | ||
+ | </ | ||
+ | Копируем нужные файлы: | ||
+ | cp / | ||
+ | cp / | ||
+ | mkdir -p / | ||
+ | cp -r / | ||
+ | mkdir / | ||
+ | ====== Настраиваем сервер NFS ====== | ||
+ | Создаем папку, в которой будет размещаться корневая директория нашей бездисковой виртуалки: | ||
+ | mkdir /nfsroot | ||
+ | ==== / | ||
+ | Прописываем экспорт этой директории в файлике **/ | ||
+ | / | ||
+ | и применяем изменения | ||
+ | exportfs -rv | ||
+ | ====== Готовим систему, | ||
+ | Делаем обычную виртуальную машину и устанавливаем в ней нужный нам дистрибутив **Linux**. В моем случае это будет **Ubuntu-18.04 Server** + **KDE**.\\ | ||
+ | Для начала я установлю только голый **Ubuntu-18.04 Server** и сделаю его бездисковым. После установки, | ||
+ | sudo apt-get update | ||
+ | sudo apt-get upgrade | ||
+ | sudo apt-get -y purge cloud-init && sudo rm -rf /etc/cloud | ||
+ | sudo apt-get -y install nfs-common | ||
+ | Настраиваем и пересобираем **initrd**: | ||
+ | sudo cp / | ||
+ | sudo sed -i ' | ||
+ | echo ' | ||
+ | sudo mkinitramfs -o ~/ | ||
+ | Копируем систему на **NFS**-сервер: | ||
+ | sudo mount -t nfs -o nolock 192.168.88.1:/ | ||
+ | sudo cp -ax /. /mnt/. | ||
+ | sudo cp -ax /dev/. /mnt/dev/. | ||
+ | sudo cp -ax /boot/. /mnt/boot/. | ||
+ | sudo umount /mnt | ||
+ | Для быстрой загрузки хорошо бы, чтобы первым интерфейсом был тот, с которого будет грузиться система. | ||
+ | |||
+ | ====== Настраиваем параметры загрузки по сети ====== | ||
+ | Возвращаемся в контейнер, | ||
+ | sudo cp / | ||
+ | sudo cp / | ||
+ | В вашей системе версии наверное будут другие. \\ | ||
+ | |||
+ | ===== / | ||
+ | Создаем конфигурацию **PXE**. Тут пишем актуальные имена файлов (ядра и **initrd**), | ||
+ | < | ||
+ | DEFAULT menu.c32 | ||
+ | prompt 0 | ||
+ | timeout 5 | ||
+ | |||
+ | LABEL Ubuntu Linux 18.04 | ||
+ | menu default | ||
+ | menu label Ubuntu Linux 18.04 | ||
+ | KERNEL vmlinuz-4.15.0-45-generic | ||
+ | APPEND root=/ | ||
+ | </ | ||
+ | даем права на чтение папки **/ | ||
+ | chmod -R 777 / | ||
+ | Рестартуем сервис **tftpd-hpa**: | ||
+ | service tftpd-hpa restart | ||
+ | ====== Финальные штрихи ====== | ||
+ | В контейнере NFS-сервере в папке со скопированной системой поправляем **/ | ||
+ | nano / | ||
+ | Указываем, | ||
+ | /dev/nfs / ext4 defaults 0 0 | ||
+ | #/ | ||
+ | Также нужно прописать сетевому интерфейсу, | ||
+ | Файлик **/ | ||
+ | < | ||
+ | ethernets: | ||
+ | ens18: | ||
+ | addresses: [] | ||
+ | dhcp4: no | ||
+ | ens19: | ||
+ | addresses: [192.168.x.x/ | ||
+ | gateway4: 192.168.x.x | ||
+ | nameservers: | ||
+ | search: [domain.name] | ||
+ | addresses: [192.168.x.x, | ||
+ | dhcp4: no | ||
+ | dhcp6: no | ||
+ | version: 2 | ||
+ | </ | ||
+ | Тут первый интерфейс **ens18**, для доступа к корневой файловой системе имеет тип **static** без адреса, | ||
+ | ===== Пробуем загрузиться ===== | ||
+ | Выключаем виртуалку. Отсоединяаем от нее диск и выставляем загрузку по сети. |