500行Linux容器运行时学习与避坑

500行Linux容器 [避坑]

参考链接:

  1. https://arthurchiao.art/blog/linux-container-and-runtime-zh/

  2. https://blog.lizzie.io/linux-containers-in-500-loc.html

测试均基于Ubuntu 22.04

内核版本为6.2.0。

问题1:版本检查错误 expected 6.x

按照参考链接1,在Ubuntu 22.04(内核版本6.2.0-37-generic)测试busybox,报如下错误:

user@zh-ubuntu:~/Work/busybox-1.36$ sudo ./a.out -u 0 -m ~/Work/busybox-1.36/rootfs/ -c /bin/sh
=> validating Linux version...expected 6.x: 6.2.0-37-generic

打开ctn-d.c源码可以发现,会检查是否为6.0或6.1,而Ubuntu内核版本为6.2,所以报错。注释该检查代码即可。

注:链接1的作者是用6.1内核版本的Ubuntu测试的, 我的Ubuntu 22.04是6.2的版本,但兼容,所以无需检查。CentOS 7的内核版本是3.10.0,CentOS 8的内核是4.18.0,均不满足要求,所以没有测试CentOS。另外Debian 12.4的内核是6.1.0,但测试没有成功,下面还会提到。

问题2:未找到cgroup/memory位置 No such file or directory

user@zh-ubuntu:~/Work/busybox-1.36$ sudo ./a.out -u 0 -m ~/Work/busybox-1.36/rootfs/ -c /bin/sh
=> validating Linux version...6.2.0-37-generic on x86_64.
=> generating hostname for container ... 00585c-five-of-wands done
=> setting cgroups...memory...mkdir /sys/fs/cgroup/memory/00585c-five-of-wands failed: No such file or directory
=> cleaning cgroups...opening /sys/fs/cgroup/memory/tasks failed: No such file or directory

解决方法(参考链接):

sudo sh -c 'echo "GRUB_CMDLINE_LINUX=systemd.unified_cgroup_hierarchy=false" > /etc/default/grub.d/cgroup.cfg'

问题3:go文件编译问题

编译之前,先安装go编译包:sudo apt install golang-go

之后报错:

user@zh-ubuntu:~/Work/busybox-1.36/rootfs/home$ go build hello-world.go
no required module provides package hello-world.go: go.mod file not found in current directory or any parent directory; see 'go help modules'

解决方法:go env -w GO111MODULE=off

Debian系统下的一系列问题

问题1:Docker 安装

直接输入apt install docker会装不能用的wmdocker。

解决方法:Debian下的docker需要按参考链接3来安装。

问题2:Debian的cgroup.cfg路径

据说Debian系统默认关闭cgroup memory子系统(参考链接4),需要先打开。这个过程中,执行update-grub会提示“未找到命令”,需要先执行sudo chmod +x /usr/sbin/update-grub,之后重启。但这之后,cgroup.cfg文件不在/etc/default/grub.d/cgroup.cfg路径下,所以无法按照Ubuntu问题2的方法解决(找到这个cgroup.cfg文件应该就行)。

提示:Debian输入“reboot”提示未找到命令,输入export PATH=$PATH:/sbin/导入环境变量可以暂时解决(重启失效)。感觉Debian还是不够完善...应该很少人用,我测试了Debian,单纯是因为发现12.4内核版本刚好是6.1.0,和参考链接1作者的内核版本相同。

posted @ 2024-01-18 23:12  Digitzh  阅读(73)  评论(0)    收藏  举报