Debian/Ubuntu 通过 early/run 命令设置预置镜像变量

Debian/Ubuntu 通过 early/run 命令设置预置镜像变量

我需要知道如何通过 di early/command 或 di preseed/run 将其添加到预置中以preseed.cfg/proc/cmdline参数中设置我的镜像。

如果我做:

d-i preseed/run string ws/ubuntu.sh

#!/bin/sh
     for x in `cat /proc/cmdline`; do
             case $x in RPHOST*)
                     eval $x

                     d-i mirror/http/hostname string ${RPHOST}
                     d-i mirror/http/mirror string ${RPHOST}
                     d-i apt-setup/security_host string ${RPHOST}
                     ;;
             esac; 
done

它失败。

它在 CentOS kickstart%pre部分运行良好,但我不知道如何通过 debian/ubuntu 预置来实现它。

答案1

在对 debconf 进行一些研究之后,我想出了这个解决方案:

在您的 preseed.cfg 中您可以通过以下方式调用脚本:

d-i preseed/run string ws/ubuntu.sh    // subdir from preseed file location

ubuntu.sh的内容:

#!/bin/sh
echo "Start ubuntu.sh runscript" >> /var/log/syslog
for x in `cat /proc/cmdline`; do
        case $x in RPHOST*)
                eval $x
                HOST=$RPHOST
                echo "d-i mirror/http/hostname string ${HOST}" > /tmp/mirror.cfg
                echo "d-i mirror/http/mirror string ${HOST}" >> /tmp/mirror.cfg
                echo "d-i apt-setup/security_host string ${HOST}" >> /tmp/mirror.cfg
                ;;
        esac;
done
// add´s values to /var/lib/cdebconf/question.dat
debconf-set-selections /tmp/mirror.cfg

12.04.2 LTS 运行良好!

答案2

听起来你正试图在(PXE?)启动期间将任意值传递给内核,然后在预置期间检测并对其做出反应?我认为可能有更好的方法来实现这一点,但我必须更多地了解你的具体情况。Cobbler 项目但我想到。

无论如何,实现此目的的另一种方法可能是使用基于主机名或命令行的条件包含,其中包括具有适当镜像设置的配置文件,因为包含文件会覆盖任何早期文件的值。

# More flexibly, this runs a shell command and if it outputs the names of
# preconfiguration files, includes those files. 
#d-i preseed/include_command \
#      string if [ "`hostname`" = bob ]; then echo bob.cfg; fi

相关内容