我使用以下预置:
d-i preseed/late_command string \
in-target wget http://my.server.adress.com/postinst.sh -O /root/postinst.sh; \
in-target /bin/bash /root/postinst.sh
在脚本的最后,我做了以下操作:
/usr/bin/expect << EOF
set timeout 10
spawn realm join --user=usertojoinad mydomain.com
expect "Password for usertojoinad:"
send "TheJoinAdPassword\r";
expect eof
EOF
postinst.sh 中的所有其他命令均正确执行,但对于此命令,我得到:
realm: Couldn't connect to system bus: Could no connect: No such file or directory". Sadly it does not say which file
如果我登录后在新安装的桌面上的终端中输入这个命令,它就会起作用sudo su -
。
#ubuntu at freenode 上的 ppf 建议用户没有会话,因此 dbus 不可用。他建议尝试:export XDG_RUNTIME_DIR="/run/user/$UID" DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"
。但这并不能解决问题。
对此有什么提示吗?
编辑:我尝试过sudo su -l -c
,但似乎无法解决这个问题。执行时sudo su -l
我得到:pan_systemd(su:session): Failed to connect to system bus: No such file or directory
答案1
我可以通过创建最后运行的服务来做我想做的事情。这可能不是最好的方法,所以我仍然想解决这个问题。与此同时,以下是我的做法:
在 postinst.sh 中:
pam-auth-update --package --enable mkhomedir
wget --quiet http://my.server.adress.com/join_ad.sh -O /root/join_ad.sh
wget --quiet http://my.server.adress.com/firstbootsetup.sh -O /root/firstbootsetup.sh
chmod 760 /root/join_ad.sh
chmod 760 /root/firstbootsetup.sh
touch /root/firstboot.flag
wget --quiet http://my.server.adress.com/firstbootsetup.service.rename.txt -O /etc/systemd/system/firstbootsetup.service
systemctl enable firstbootsetup.service
在 firstbootsetup.service.rename.txt 中:
[Unit]
Description=FirstBootSetup
ConditionPathExists=/root/firstboot.flag
[Service]
Type=idle
RemainAfterExit=yes
ExecStart=/root/firstbootsetup.sh
ExecStartPost=/bin/rm -f /root/firstboot.flag
[Install]
WantedBy=multi-user.target
在 firstbootsetup.sh 中:
#!/bin/bash
/root/join_ad.sh
rm -f /root/join_ad.sh
在 join_ad.sh 中:
#!/bin/bash
realm discover mydomain.com
/usr/bin/expect << EOF
set timeout 10
spawn realm join --user=usertojoinad mydomain.com
expect "Password for usertojoinad:"
send "TheJoinAdPassword\r";
expect eof
EOF
注意:我从这篇文章开始https://serverfault.com/questions/853396/run-script-on-first-boot
答案2
在脚本 4ex 中使用选项 --install=/:
#!/bin/bash
realm discover mydomain.com
/usr/bin/expect << EOF
set timeout 10
spawn realm join --install=/ --user=usertojoinad mydomain.com
expect "Password for usertojoinad:"
send "TheJoinAdPassword\r";
expect eof
EOF