Информация
Услуги
  • Внедрение
  • Настройка
  • Поддержка
  • Ремонт
Контакты
Оплата
Новости
Доставка
Загрузки
Форум
Настройка
    info@proxmox.su
    +7 (495) 320-70-49
    Заказать звонок
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Войти
    0 Сравнение
    0 Избранное
    0 Корзина
    Аспро: ЛайтШоп
    Телефоны
    +7 (495) 320-70-49
    Заказать звонок
    0
    0
    0
    Аспро: ЛайтШоп
    • +7 (495) 320-70-49
      • Назад
      • Телефоны
      • +7 (495) 320-70-49
      • Заказать звонок
    • info@proxmox.su
    • Москва, Бакунинская улица, 69с1
    • Пн-Пт: 09-00 до 18-00
      Сб-Вс: выходной
    • 0 Сравнение
    • 0 Избранное
    • 0 Корзина
    Главная
    Форум
    Proxmox Виртуальная Среда
    пост-старт скрипт для LXC

    Форумы: Proxmox Виртуальная Среда, Proxmox Backup Server, Proxmox Mail Gateway, Proxmox Datacenter Manager
    Поиск  Пользователи  Правила  Войти
    Страницы: 1
    RSS
    пост-старт скрипт для LXC, Proxmox Виртуальная Среда
     
    greg
    Guest
    #1
    0
    13.08.2017 02:18:00
    Привет! Когда Proxmox использовал VZ, у нас была возможность запускать скрипт после загрузки виртуальной машины. Как мы можем сделать то же самое с LXC? Моя цель — создать привязку монтирования (с помощью fsbind), когда заданная виртуальная машина запущена и работает. Спасибо заранее!
     
     
     
    apmuthu
    Guest
    #2
    0
    16.10.2022 13:51:00
    Есть какие-либо обновления по этому поводу в PVE 7.x?
     
     
     
    fiona
    Guest
    #3
    0
    17.10.2022 09:30:00
    Привет, ты можешь использовать hook-скрипт и сделать все, что нужно на этапе пост-старта. Документация и где найти пример hook-скрипта: https://pve.proxmox.com/pve-docs/chapter-pct.html#_hookscripts
     
     
     
    apmuthu
    Guest
    #4
    0
    17.10.2022 10:31:00
    Есть ли возможность выполнить скрипты на хосте и сохранить результаты в гостевом LXC при первом запуске контейнера? Код: # dmesg | grep apparmor

    [ 4091.454217] audit: type=1400 audit(1665995133.442:20): apparmor="STATUS" operation="profile_load" profile="/usr/bin/lxc-start" name="lxc-101_</var/lib/lxc>" pid=10356 comm="apparmor_parser"
    [ 4092.391168] audit: type=1400 audit(1665995134.378:21): apparmor="DENIED" operation="mount" info="failed flags match" error=-13 profile="lxc-101_</var/lib/lxc>" name="/" pid=10471 comm="mount" flags="rw, remount"
    [ 4092.391577] audit: type=1400 audit(1665995134.378:22): apparmor="DENIED" operation="mount" info="failed flags match" error=-13 profile="lxc-101_</var/lib/lxc>" name="/" pid=10472 comm="mount" flags="rw, remount, relatime"

    В приведённом выше логе apparmor нет имени контейнера, только VMID. Системный мониторинг и трассировка будут обходными путями. Где находится папка snippets — на хосте или в гостевом LXC? Куда в шаблоне LXC / VMID.conf / dab.conf нужно поместить hookscript? Выполнение из хоста с использованием pct указано здесь. Обратите внимание, что VMID ещё не известен, когда создаётся шаблон и контейнер, если работать изнутри контейнера. В руководстве для pct.conf указано следующее: Код: hookscript: <string>

       Скрипт, который будет выполнен на различных этапах жизненного цикла контейнера, но не указано, как вывод нужно сохранить в файловой системе гостя.
     
     
     
    fiona
    Guest
    #5
    0
    17.10.2022 10:54:00
    Да, хук-скрипт выполняется на хосте. Это тип содержимого для файлового хранилища в Proxmox VE, то есть на хосте. Вы помещаете его в папку snippets на вашем хранилище Proxmox VE. В идеале, хранилище разделяется между узлами, так что хук-скрипт доступен со всех узлов, когда контейнер мигрирует. Если хранилище не разделено, вам все равно нужно убедиться, что скрипт доступен на каждом узле соответственно. Это устанавливает хук-скрипт для контейнера. ID передается в хук-скрипт как аргумент. Смотрите пример хук-скрипта. Например: Код: } elsif ($phase eq 'post-start') {

    # Вторая фаза 'post-start' будет выполняться после того, как гость
    # успешно запустится.

    print "$vmid успешно запущен.\n";

    my $node = `cat /etc/hostname`;
    system("pct exec $vmid -- /root/updateinfo.sh $vmid $node");

    } elsif ($phase eq 'pre-stop') { где updateinfo.sh — это скрипт в контейнере, который помещает информацию куда-то подходящее.
     
     
     
    apmuthu
    Guest
    #6
    0
    17.10.2022 12:22:00
    Разрешив папку snippets в разделе хранения веб-интерфейса узла и назвав скрипт lxc_hookscript.pl с установкой прав 755, кроме режима cli с установленным pci... куда в контейнере (из шаблона) мы должны поместить это имя скрипта? Иначе, выполняются ли все скрипты в папке snippets для всех контейнеров, так что имя хук-скрипта не имеет значения, или оно должно быть прописано как hostscript.pl? В противном случае, как и где в файле Makefile DAB этот скрипт должен быть указан? Как убедиться, что указанный скрипт выполняется только при первом запуске?
     
     
     
    fiona
    Guest
    #7
    0
    17.10.2022 12:32:00
    Этот скрипт выполняется не только при первом запуске, а при каждом запуске, он не предназначен для DAB. Внутри контейнера вам нужно то, что команда pct exec пытается выполнить (в моем примере это был /root/updateinfo.sh, но это может быть любой другой бинарный файл или скрипт). Команда pct set <ID> --hookscript ... просто устанавливает hookscript в конфигурации контейнера. Вы можете установить только один hookscript за раз, но можете использовать его для нескольких контейнеров. Если в конфигурации контейнера установлен hookscript, он будет выполнен на различных этапах, таких как post-start.
     
     
     
    apmuthu
    Guest
    #8
    0
    17.10.2022 14:29:00
    Спасибо. Итак, нет возможности установить hookscript из гостевой LXC, его нужно настраивать только из командной строки хоста с помощью pct set VMID --hookscript ... и только после завершения первого запуска. Поэтому, чтобы DAB знал о VMID, можем ли мы создать скрипт, который позволит первому запуску webapp-setup использовать его? Это было бы неплохо, учитывая, что VMID недоступен при парсинге логов или запуске скриптов из LXC, как это было в OpenVZ (PVE-3.4) и LXC до 6.x. Даже если будет какой-то вывод в dmesg гостевой LXC, который можно парсить, этого было бы достаточно. Текущая ручная процедура без pci set --hookscript ... выглядит так: Bash: root@pr72:~# pct start 101 root@pr72:~# pct enter 101 # Если выполнен "pct mount 101", его нужно отменить с помощью "pct unmount 101" перед завершением/удалением гостевой LXC. # В GUI PVE-7.x нет пункта меню UnMount # Загрузите /root/updateinfo.sh и установите разрешения на 755 # root@sqlamp:/# cd ~ # root@sqlamp:~# ./updateinfo.sh 101 root@sqlamp:~# exit root@pr72:~# cd /var/lib/vz/snippets root@pr72:/var/lib/vz/snippets# ./lxc_hookscript.pl 101 post-start GUEST HOOK: 101 post-start 101 успешно запущен. Файлы приложений должны иметь права 755 и находиться по адресу /var/lib/vz/snippets/lxc_hookscript.pl на хосте (по умолчанию), и по адресу /root/updateinfo.sh в шаблонном LXC госте (VMID 101). Фиона, ты супер!
     
     
     
    Страницы: 1
    Читают тему
    +7 (495) 320-70-49
    info@proxmox.su

    Конфиденциальность Оферта
    © 2026 Proxmox.su
    Главная Каталог 0 Корзина 0 Избранные Кабинет 0 Сравнение Акции Контакты Услуги Бренды Отзывы Компания Лицензии Документы Реквизиты Поиск Блог Обзоры