Сегодня на пятничной повестке скрипт установки и запуска утилиты iVentoy, основанной на свободном PXE-сервере iPXE. Собственно, эта история для тех, кто хочет «поднять» PXE-сервер за пять минут, запустив только один скрипт.
iVentoy я разворачивал на Ubuntu Server 20.04. Обращаю Ваше внимание, что iVentoy для Linux существует только в редакции для 64-битных систем.
На сервере у меня предварительно запущена Samba с коллекцией сетевых папок (пост), к которой добавим ещё одну сетевую папку — iso. В неё будем складывать загрузочные образы.
sudo mkdir /iso && sudo chmod 777 /iso
В файл конфигурации Samba добавляем созданную папку:
[ISO] path = /iso read only = Yes guest ok = Yes browseable = yes writable = yes create mask = 0777 directory mask = 0777
Перезапускаем сервис:
sudo service smbd restart
Теперь сам sh-скрипт:
#!/bin/bash # sudo chmod +x /scripts/getiventoy.sh # Блок переменных # iventoy_path="/ventoy" iventoy_version="/$iventoy_path/iventoy-*" iventoy_run="$iventoy_version/iventoy.sh" # Установка jq # dpkg --verify jq || apt install jq -y if [ ! -f $iventoy_run ] then mkdir -p $iventoy_path cd $iventoy_path link=$(curl --silent "https://api.github.com/repos/ventoy/PXE/releases/latest" | jq -r ".assets[-4] | .browser_download_url") filename=$(basename "$link") wget $link $filename -q --show-progress tar -xvf $filename rm *gz* cd $iventoy_version sudo bash $iventoy_run start else cd $iventoy_version sudo bash $iventoy_run -R start fi
Скрипт установит утилиту jq (тег), если она не будет найдена в системе. В принципе, вся конструкция основана на скрипте из предыдущего поста.
Сразу после запуска iVentoy, в консоль упадёт url формата http://127.0.0.1:26000/. Проследите, чтобы порт 26000 был разрешён в брандмауэре сервера. IP-адрес можно заменить на реальный адрес сервера и войти в консоль с любого компьютера. Логины-пароли не требуются.
Перед запуском PXE-сервера требуется провести первичные настройки (читаем доки) и обновить список доступных установочных образов. Вот теперь, как раз, о самом важном…
Создаём символьные ссылки на все образы, которые накидали в общую папку iso. Ссылки создаются рекурсивно, с учётом иерархии.
sudo ln -s /iso/* /ventoy/iventoy-1.0.20/iso/
Обратите внимание на версию iVentoy, которая фигурирует в имени папки — если она у Вас будет отличаться — укажите корректный номер версии.
В случае повторного создания ссылок можно получить вот такую ошибку:
ln: failed to create symbolic link '/ventoy/iventoy-1.0.20/iso/file.iso': File exists
Это вполне нормально, так как ссылки уже существуют. Попробуйте форсировать команду:
sudo ln -sf /iso/* /ventoy/iventoy-1.0.20/iso/
Из ощутимых минусов: как не пытался осуществить автозапуск iVentoy при старте системы, ничего не вышло. Возможно, попытаю удачу чуть позже, а пока остаётся только ручной запуск.
UPD: исправляю тот самый ощутимый минус, о котором я упоминал чуть выше. Большое спасибо читателю Vazelinchik за метод запуска iVentoy в виде системной службы. Структура команд полностью авторская.
Важно понимать, что для последующих действий необходимы права суперпользователя!
Итак, первым делом скачиваем iVentoy. На момент публикации этой upd’шки последняя доступная (читай — стабильная) версия 1.0.21.
wget https://github.com/ventoy/PXE/releases/download/v1.0.21/iventoy-1.0.21-linux-free.tar.gz -O /tmp/iventoy.tar.gz
Теперь извлекаем все файлы из скачанного архива в папку /opt:
sudo tar -xvzf /tmp/iventoy.tar.gz -C /opt
Для удобства отсекаем номер версии в имени папки:
sudo mv /opt/iventoy-1.0.21 /opt/iventoy
И удаляем скачанный архив:
rm /tmp/iventoy.tar.gz
Начинается самое интересное: создание файла службы. Для этого используем магическую силу команды cat.
cat << EOF > /etc/systemd/system/iventoy.service [Unit] Description=iVentoy iPXE Server Requires=network-online.target After=network-online.target Wants=network-online.target [Service] Type=forking User=root Group=root WorkingDirectory=/opt/iventoy ExecStart=/opt/iventoy/iventoy.sh -R start ExecStop=/opt/iventoy/iventoy.sh stop [Install] WantedBy=multi-user.target EOF
Данный сервис имеет зависимость от network-online.target и не сможет запуститься, если соединения с сетью не будет. Также сервис будет запускаться от имени пользователя root. Учитывая особенность запуска службы, предусмотрено «ветвление» процесса.
Как только создание сервиса будет успешно завершено — перезапустим конфигурацию systemd:
systemctl daemon-reload
Осталось лишь включить автозапуск iventoy.service:
systemctl enable iventoy
Последним штрихом будет создание символических ссылок на образы. Предполагается, что они лежат в каталоге /iso.
ln -s /iso/* /opt/iventoy/iso/
Кстати, чтобы список образов обновлялся каждый раз при запуске службы можно прописать данную команду в секцию Service в качестве директивы ExecStartPost:
[Service] Type=forking User=root Group=root WorkingDirectory=/opt/iventoy ExecStart=/opt/iventoy/iventoy.sh -R start ExecStartPost=/bin/sh -c 'ln -s /iso/* /opt/iventoy/iso/' ExecStop=/opt/iventoy/iventoy.sh stop
Запускаем сервис:
systemctl start iventoy
Чтобы убедиться, что всё прошло штатно — опрашиваем iVentoy:
bash /opt/iventoy/iventoy.sh status
Напоминаю, что iVentoy работает на 26000 порту.