预先设置 late_command 脚本:领域无法连接到系统总线

预先设置 late_command 脚本:领域无法连接到系统总线

我使用以下预置:

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

相关内容