泰晓科技 -- 聚焦 Linux - 追本溯源,见微知著!
网站地址:http://tinylab.org
微信公众号关注我们知识星球
关注 @泰晓科技

与数百位一线 Linux 工程师做朋友,您准备好了吗?
周一到周五,天天有新文。529 页合集等着领!

开课啦:Linux 码农 5 万月薪必修课!
请稍侯

从 Docker 镜像中随时抓取想要的 Linux Rootfs

Wu Zhangjin 创作于 2019/07/08

微信公众号知识星球
关注 @泰晓科技

与数百位一线 Linux 工程师做朋友,您准备好了吗?
周一到周五,天天有新文。529 页合集等着领!

By Falcon of TinyLab.org Jul 04, 2019

Linux Lab 新增全功能 Rootfs 支持 一文不仅介绍了 7 种 Linux 文件系统的制作方法,也介绍了如何把文件系统制作成 Docker 镜像并发布到 Docker 官方镜像库中。

实际上,也有其他人在 Docker 镜像库中发布了很多的文件系统,而其中比较正式的当属 Ubuntu 和 Debian 的 Rootfs,以 arm64v8 举个例子:

$ docker search --no-trunc arm64 | egrep "ubuntu|debian"
arm64v8/ubuntu Ubuntu is a Debian-based Linux operating system based on free software.                   25
arm64v8/debian Debian is a Linux distribution that's composed entirely of free and open-source software. 20

进一步调查,发现 Docker 官方提供多种处理器架构和各种版本的 Ubuntu 和 Debian 文件系统,这些文件系统虽然不是 Full Rootfs,但是因为有包管理工具,很容易扩展功能,所以很适合嵌入式系统开发。

除了 arm64v8,两种发行版当前支持的架构列表如下:

  • Ubuntu: amd64, arm32v7, arm64v8, i386, ppc64le, s390x
  • Debian: amd64, arm32v5, arm32v7, arm64v8, i386, ppc64le, s390x

通过 Linux Lab 的工具,可以直接从这些镜像中抽取出文件系统(请确保已经安装了 qemu-user-static):

$ cd linux-lab
$ tools/rootfs/docker/extract.sh arm64v8/debian aarch64
$ ls prebuilt/fullroot/tmp/arm64v8-debian/

这个脚本做了几个事情:

拉取镜像

$ docker pull arm64v8/debian

启动镜像

$ cid=$(docker run -d -v /usr/bin/qemu-aarch64-static:/usr/bin/qemu-aarch64-static arm64v8/debian)

拷贝出文件系统

$ rootdir=prebuilt/fullroot/tmp/arm64v8-debian/
$ mkdir -p $rootdir
$ sudo docker cp $cid:/ $rootdir
$ sudo chown $USER:$USER -R $rootdir

删除容器

$ sudo docker rm -f $cid

拉取下来的文件系统带有 apt-get,可以用 chroot 或者 docker 运行起来,安装更多需要的工具:

$ tools/rootfs/docker/run.sh arm64v8/debian aarch64
LOG: Running arm64v8/debian
root@57471f588826:/#
root@57471f588826:/#

$ tools/rootfs/docker/chroot.sh arm64v8/debian
LOG: Chroot into ./prebuilt/fullroot/tmp/arm64v8-debian
[sudo] password for falcon:
root@ubuntu:/#

由于文件系统比较简陋,不带编辑器,建议在本地修改好文件系统中的 apt 源,改成国内比较快的镜像站

$ cd $rootdir
$ vim etc/apt/sources.list

之后就可以用到目标环境中,比如在 Linux Lab 下,可以用 ROOTFS 直接指定作为文件系统启动:

$ make b=aarch64/virt boot ROOTFS=$PWD/prebuilt/fullroot/tmp/arm64v8-debian/

更进一步的调查发现,Ubuntu 和 Debian 镜像用到的 rootfs 源自这里:

所以,如果没有安装 docker,也可以从上述路径直接下载目标架构最新的 rootfs。

Read Related:

Read Latest: