Automated-Install
使用 preseed 進行無人值守安裝 – 為 partman-auto 提供自定義設備
我在不同類型的伺服器(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
. 我想到了不同的替代方案,但我找不到實現其中一個的方法:
- 使
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 驅動器的硬碟驅動器。