我试图向在Ubuntu 14.04安装期间创建的用户授予无密码的sudo特权。但是,在创建镜像时,不存在与sudo相关的任何更改。以下是预置文件的相关部分:

# Create Vagrant User
d-i passwd/user-fullname string Vagrant User
d-i passwd/username string vagrant
d-i passwd/user-password password vagrant
d-i passwd/user-password-again password vagrant
d-i user-setup/encrypt-home boolean false
d-i user-setup/allow-password-weak boolean true

# Setup passwordless sudo for vagrant user
d-i preseed/late_command string echo "vagrant   ALL=(ALL:ALL) NOPASSWD:ALL" > /target/etc/sudoers.d/vagrant
d-i preseed/late_command string chmod 0440 /target/etc/sudoers.d/vagrant

我也尝试过
d-i preseed/late_command string in-target echo "vagrant ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers.d/vagrant

镜像完成后,/etc/sudoers.d/vagrant将不存在于任何地方。

即使我运行以下命令:
d-i preseed/late_command string mkdir /stuff
d-i preseed/late_command string in-target mkdir /stuff

东西目录将不存在。

我知道命令正在运行,因为我输入了一次错字并在安装过程中看到错误。所有其他前面的命令似乎都在起作用。

我已经阅读了有关in-target指令的内容,并且安装程序将创建一个具有最终文件系统的/target,但是我似乎无法使这些工作正常。

使用打包程序,我运行了提供的Shell脚本,该脚本执行相同的回显并且有效。

最佳答案

问题在于,预置文件只能有一个preseed/late_command节,不能有多个。

如果您需要执行多个命令,则可以将它们作为一个单独的late_command并以;分隔,例如

d-i preseed/late_command string \
    in-target cmd1 args ... ; \
    in-target cmd2 args ... ; \
    ...

08-25 01:10