Назад | Перейти на главную страницу

Автоматическая установка с preseed - отдайте пользовательское устройство partman-auto

Я выполняю автоматическую установку Ubuntu-14.04-server с USB-накопителем и файлом preseed на разных типах серверов (HP Proliant ML110, ML310, ML350).

Поскольку это должна быть полностью автоматическая установка, независимо от типа сервера, мне нужно найти способ указать правильный путь к устройству d-i partman-auto/disk.

Моя первая идея заключалась в том, чтобы заставить жесткий диск отображаться перед USB-накопителем, чтобы он мог /dev/sda на серверах ML350; но Я не нашел способа сделать это.

Поэтому я сделал небольшой скрипт, который определяет имя устройства непосредственно перед partman выполняет и записывает это в переменную $INSTALL_DEV:

d-i partman/early_command string                                  \
    for DEV in `ls /sys/block | grep sd`; do                      \
        if [ -n "`ls -l /sys/block/$DEV | grep /usb`" ]; then     \
            USB_DEV=/dev/${DEV};                                  \
            echo "USB_DEV is $USB_DEV" >> /var/log/syslog;        \
        else                                                      \
            INSTALL_DEV=/dev/${DEV};                              \
            echo "INSTALL_DEV = $INSTALL_DEV" >> /var/log/syslog; \
            break;                                                \
        fi;                                                       \
    done;                                                         \

С тех пор я изо всех сил пытаюсь найти способ передать эту переменную d-i partman-auto/disk. Я думал о разных альтернативах, но не мог найти способ реализовать одну из них:

  1. Сделать partma-auto/disk интерпретировать переменную. Но, к сожалению, он принимает в качестве значения только строку.
  2. Измените debian-installer база данных, в которой, я надеюсь, хранятся предварительно заданные значения. Но я не нашел файл базы данных (ни возможности его изменить).
  3. Создайте сценарий, включающий крошечный файл предварительной загрузки с правильным устройством. Но я могу включать только файлы из preseed/include, прежде чем жесткий диск появится в /dev.

Вот простой partman/early_command это делает именно то, что я хотел

d-i partman/early_command \
    string debconf-set partman-auto/disk "$(echo /dev/`ls -l /sys/block/[hs]d* | grep -v "usb" | head -n1 | sed 's/^.*\([hs]d[a-z]\+\).*$/\1/'`)"

это early-command выполняется непосредственно перед partman выполняет. Он динамически устанавливает значение partman-auto/disk конфигурация debian-installer.

Команда между $( и ) выводит первый найденный жесткий диск, не являющийся USB-накопителем.