Automated-Install

使用 preseed 進行無人值守安裝 – 為 partman-auto 提供自定義設備

  • May 4, 2015

我在不同類型的伺服器(HP Proliant ML110、ML310、ML350)上使用 USB 驅動器和預置文件進行無人值守安裝 Ubuntu-14.04-server。

  • 在 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/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 驅動器的硬碟驅動器。

引用自:https://serverfault.com/questions/685251