栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

替代chroot、docker,使用systemd-nspawn容器搭建ARM交叉编译环境(2)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

替代chroot、docker,使用systemd-nspawn容器搭建ARM交叉编译环境(2)

1: 替代chroot、docker,使用systemd-nspawn容器搭建ARM交叉编译环境(1)
2: 替代chroot、docker,使用systemd-nspawn容器搭建ARM交叉编译环境(2)

上一篇说到了systemd-nspawn的基本使用方法,这边来说一下他的一些贴心功能

systemd-snpawn文件主属问题

systemd-nspawn -D与systemd-nspawn -bD启动的系统文件主属并不一致,要注意在systemd-nspawn -D下尽量少做操作,毕竟我们主要是在systemd-nspawn -bD模式下面操作的,出现主属无法识别的时候我们只能强制使用chmod重设一下主属。

共享主机文件夹

共享文件夹很简单,只需要在启动的时候添加–bind参数即可,要注意路径必须使用绝对路径:

#默认容器中的目录与主机一致
sudo systemd-nspawn -bD ./ubuntu20.04 --bind $PWD/主机目录
#指定容器中的目录 
sudo systemd-nspawn -bD ./ubuntu20.04 --bind $PWD/主机目录:容器中的目录
图形化

systemd-nspawn运行图形界面不需要安装xorg、wayland这些显示服务端,都是借助主机上已有的服务端来运行,这样显示服务才不会争抢显卡。运行图形界面有两种方式,一种是借助主系统的Xorg 一种是直接采用systemd-nspawn系统的Xephyr,Xorg的方式需要在另一个tty中启动一个xorg服务,不能与主机共享显示器,所以这里只介绍Xephyr方式,这种方式比较方便。
在主机上先安装一下Xephyr:

sudo apt install xserver-xephyr

启动一个X服务:

Xephyr :1 -resizeable

我们使用:1这个端口,不和主机冲突,启动完成的样子:

图形服务有了,我们该启动一个带图形配置的容器了,X 在 /tmp 文件夹中存储一些必要的文件。为了使容器能显示任何内容,它需要访问这些文件。为此,当启动容器时,请追加 --bind-ro=/tmp/.X11-unix 选项:

sudo systemd-nspawn -bD ./ubuntu20.04 --bind-ro=/tmp/.X11-unix

进入容器之后我们就可以随意启动图形程序,DISPLAY环境变量可以设置到系统中,在完整启动模式下无法从外部传入。

DISPLAY=:1 xterm

开机启动

因为是systemd那一套的东西,自然开机启动什么的自然也是无缝衔接的,我们只需要写一个systemd启动服务即可。

vim /lib/systemd/system/server-name.service
填写如下内容
[Unit]
Description=”系统名称“
After=network.target systemd-resolved.service
PartOf=machines.target
Before=machines.target
RequiresMountsFor=/var/lib/machines

[Service]
ExecStart=/usr/bin/systemd-nspawn -bD “容器文件夹位置”
KillMode=mixed
Type=notify
RestartForceExitStatus=133
SuccessExitStatus=133
WatchdogSec=3min
Slice=machine.slice
Delegate=yes
TasksMax=16384
DevicePolicy=closed
DeviceAllow=/dev/net/tun rwm
DeviceAllow=char-pts rw
DeviceAllow=/dev/loop-control rw
DeviceAllow=block-loop rw
DeviceAllow=block-blkext rw
DeviceAllow=/dev/mapper/control rw
DeviceAllow=block-device-mapper rw

[Install]
WantedBy=machines.target

启动容器

sudo systemctl start server-name.service

停止容器

sudo systemctl stop server-name.service

设置开机自起

sudo systemctl enable server-name.service
参考

freedesktop: 官方文档
archwiki: systemd-nspawn (简体中文)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/939326.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号