使用Ubuntu Preseed和Packer实现无需密码的sudo

7

我正在尝试为在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

stuff目录不存在。

我知道命令正在运行,因为我曾经打错过一次,安装过程中出现了错误。所有其他的preseed命令似乎都在工作。

我已经了解了in-target指令,并且安装程序将创建一个包含最终文件系统的/target目录,但我似乎无法使它们起作用。

使用packer,我运行了一个shell脚本来进行echo,那个脚本是可行的。


我认为你只能有一个 preseed/late_command,请参见 此处此处 - mata
好的,谢谢你!如果你想把这个作为答案发表,我会接受它。 - Cryptographic_ICE
2个回答

12

问题在于preseed文件只能有一个preseed/late_command部分,而不能有多个。

如果您需要执行多个命令,可以将它们作为单个late_command使用,并用;进行分隔,例如:

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

6
在这种特定情况下,以下是对我有效的内容:
d-i preseed/late_command string \
    echo 'vagrant ALL=(ALL) NOPASSWD: ALL' > /target/etc/sudoers.d/vagrant ; \
    in-target chmod 440 /etc/sudoers.d/vagrant ;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接