首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有引导标志的systemd-nspawn命令

具有引导标志的systemd-nspawn命令
EN

Stack Overflow用户
提问于 2017-09-27 09:10:33
回答 2查看 647关注 0票数 1

在我的Debian开发机器中,我设置了一个systemd -n派生环境,用于定制嵌入式系统。

我可以通过脚本向这个容器发送命令,方式如下:

代码语言:javascript
复制
systemd-nspawn -q --bind /usr/bin/qemu-arm-static -D $MOUNTPATH /bin/bash << EOF
apt-get update
apt-get -y upgrade
EOF

现在,我需要做同样的工作,但是使用-b (boot)标志启动容器。在脚本里还能做到吗?

现在,我手动执行以下操作:

  1. 带有-b标志的启动系统d-n派生
  2. 登录
  3. 发出命令
  4. 站住
EN

回答 2

Stack Overflow用户

发布于 2017-11-01 10:20:51

-D $MOUNTPATH -b arg1 arg2

只是和

-D $MOUNTPATH /bin/init arg1 arg2

/bin/init就是这里的一个例子,可以是任何init系统(如/usr/lib/systemd/systemd)。

这是自动检测到的。

如果您使用--boot,那么您将失去对容器中第一个程序的控制。

Init系统将运行您的程序。但是你必须遵守你的init系统的指令。创建init.rc脚本或systemd服务。

另一个“棘手的方法”是:

代码语言:javascript
复制
systemd-nspawn xxxx --boot
sleep 5s
systemd-run -M xxxx /bin/bash << EOF
  apt-get update
  apt-get -y upgrade
EOF
票数 1
EN

Stack Overflow用户

发布于 2019-07-14 10:57:28

screen

您必须向客户容器应用修补程序,在我的例子中,我必须使用gentoo的规范,使我能够在没有密码的情况下以root身份登录

请注意,对于您的自动冒险,启用控制台-以root用户身份登录的说明随发行版而不同。请查看您的发行版文档。更具体地说,如果您使用的是agettyinittab,则在OpenRC上。在我的例子中,我使用的是/usr/lib/systemd/systemd,所以我就是这样使用agetty

代码语言:javascript
复制
# reset the root password
sed -i -e 's/^root:\*/root:/' /mnt/etc/shadow 2>/dev/null

# patch agetty to autologin as root.
mkdir /mnt/etc/systemd/system/console-getty.service.d
cat <<EOF > /mnt/etc/systemd/system/console-getty.service.d/autologin.conf
  [Service]
  ExecStart=
  ExecStart=-/sbin/agetty --noclear --autologin root --keep-baud console 115200,38400,9600 $TERM
EOF

然后,您可以使用屏幕的内容功能来编写您想要发送的任何内容:

这是一个黑客,但我无法使“棘手的方式”正常工作。至少在客人决定接管控制台设备的系统中没有。这可能不是最好的解决方案,但它是一个有效的解决方案。屏幕可能是资源密集型的,所以我肯定不会把这称为“最佳方式”,而只是“工作方式”。

代码语言:javascript
复制
# SCREEN POWERUP
screen -AmdS myguest /bin/bash
screen -S myguest -p 0 -X stuff $'systemd-nspawn -D /mnt --machine my-pc -b 3 --link-journal host'$(echo -ne '\015')
read -t 5

# ------ put whatever you want here: -------
# screen -S myguest -p 0 -X stuff $'yourBashCommandsGoHere'$(echo -ne '\015')

# GUEST AND SCREEN SHOTDOWN
screen -S myguest -p 0 -X stuff $'poweroff'$(echo -ne '\015')
read -t 1
screen -S myguest -p 0 -X stuff $'exit'$(echo -ne '\015')

# Done
echo ":-)"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46443863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档