# 跨平台更新制作rootfs 在x64( pc /ubuntu 18.10 )跨平台编译arm64 的debian rootfs完整镜像,通常地,更新rootfs都是直接放在目标机上面,制作更新好rootfs后再拷贝回编译机。 对于目标机平台,通常拷贝rootfs需要非运行时环境,所以例如在emmc的rootfs需要通过sd卡系统启动去执行拷贝操作。 同时拷贝/压缩还需要关心文件的uid、gid、用户名、组名、执行权限。稍不注意,功亏一篑。 这里通过介绍qemu虚拟跨平台制作、更新rootfs。 ## qemu-debootstrap 如我们知道,debootstrap用以通过源制作debian/ubuntu 的基础rootfs。通常来说其分为下载(--foreign)和安装配置(--second-stage)两个阶段。对于跨平台的第一阶段下载只需要通过--arch置顶平台下载对应deb包,但是对于包安装则需chroot后在编译机上面虚拟目标机的deboosttap 执行安装。 ```bash $which qemu-debootstrap |xargs tail -n 10 if ! which "qemu-$qemu_arch-static" >/dev/null 2>&1; then die "Sorry, couldn't find binary %s" "qemu-$qemu_arch-static" fi eval run debootstrap --arch "$deb_arch" --foreign $opts $args mkdir -p "$target/usr/bin" cp $(which "qemu-$qemu_arch-static") "$target/usr/bin" run chroot "$target" /debootstrap/debootstrap --second-stage ``` > **提示**:如上代码片段所示qemu-debootstrap 功能: > > line.7 指示debootstrap 第一阶段通过指定--arch 确定平台下载包。 > > line.9 拷贝qemu-arrch64-static 下的虚拟软件到rootfs /usr/bin 目录用以chroot > > line10指示chroot后debootstrap 第二阶段。 ## arm64 debian jessie 如上讨论,这里我们在x64 平台下载arm64(aarch64)平台rootfs并且尝试通过chroot实现初始用户、包安装重等操作。 * 安装依赖包; ```bash sudo apt-get install debootstrap #用以下载安装rootfs sudo apt-get install qemu-user-static #包含应用qemu-debootstarp,以及用以跨平台chroot的qemu-aarch64-static的应用软件 ``` * 下载归档keyring ```bash sudo apt-get install debian-archive-keyring sudo apt-key add /usr/share/keyrings/debian-archive-keyring.gpg ``` * 通过源下载rootfs ```bash sudo qemu-debootstrap --arch=arm64 --keyring /usr/share/keyrings/debian-archive-keyring.gpg --variant=buildd --exclude=debfoster unstable debian-arm64 http://ftp.debian.org/debian ``` > **提示**:如上已经分析qemu-debootstrap 源码,其操作已经包含编译机(x64)的下载和chroot后arm64(arm64)的包安装配置阶段。 deiban jessie 如上下载安装可能会因为包缺失提示下载失败,这里搜索寻找替换了老的软件源。 ```bash sudo qemu-debootstrap --arch=arm64 --keyring /usr/share/keyrings/debian-archive-keyring.gpg --variant=buildd --exclude=debfoster --include=systemd-sysv jessie debian-jessie https://mirrors.mediatemple.net/debian-archive/debian ``` ## chroot chroot 是linux 用以切换rootfs的一个应用,跨平台操作通过需要切换的rootfs 路径下的/usr/bin/qemu-aarch64-static 应用实现。 如上通过qemu-debootstrap 跨平台下载rootfs之后,可以通过chroot增加用户和安装软件。 ```bash [mdp-jay]~$sudo chroot debian #之后就可以在x64 平台 虚拟 arm64 roofs,并且可以虚拟运行其软件。 root@mdp-jay-thinkpad:/# adduser pi root@mdp-jay-thinkpad:/# apt-get install vim ```