Я выполняю автоматическую установку Ubuntu-14.04-server с USB-накопителем и файлом preseed на разных типах серверов (HP Proliant ML110, ML310, ML350).
/dev/sda
а USB-накопитель занимает /dev/sdb
./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
. Я думал о разных альтернативах, но не мог найти способ реализовать одну из них:
partma-auto/disk
интерпретировать переменную. Но, к сожалению, он принимает в качестве значения только строку.debian-installer
база данных, в которой, я надеюсь, хранятся предварительно заданные значения. Но я не нашел файл базы данных (ни возможности его изменить).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-накопителем.