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

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

  • На ML110 и ML310 жесткий диск находится в /dev/sda и USB-накопитель занимает /dev/sdb,
  • В то время как на серверах ML350, USB-накопитель принимает /dev/sda и жесткий диск обнаруживается в /dev/sdb,

Поскольку это должна быть полностью автоматическая установка, независимо от типа сервера, мне нужно найти способ указать правильный путь к устройству. 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 с правильным устройством. Но я могу включать только файлы из preseed/includeдо того, как жесткий диск покажет в /dev,

1 ответ

Решение

Вот простой 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-накопителем.

Другие вопросы по тегам