论坛之前已经有一个使用debootstrap生成Debian rootfs的教程了,但我一直使用的是一个Github上的自动生成脚本来生成,优势主要是:
更方便,跑一个脚本生成直接可用的rootfs,无需更多设置
包括版本和预装包都完全可定制
生成的rootfs可以直接chroot进去,所需的依赖自动安装
最近给D1s定制rootfs,为了支持riscv64,我对原作者的脚本进行了一定的魔改,在此分享一下使用方法:
首先clone仓库到本地:
git clone https://github.com/SdtElectronics/debian-rootfs.git
然后安装相关依赖
apt-get install multistrap binfmt-support qemu-user-static
最后运行一条命令即可生成:
./make-rootfs.sh ARCHITECTURE
支持的ARCHITECTURE有:
amd64
arm64
armel
armhf
i386
mips
mipsel
powerpc
powerpcspe
ppc64el
s390x
riscv64
注意要是想生成riscv64的rootfs,需要改用如下命令(因为risc-v目前还在Debian port源下):
sudo ./make-rootfs.sh riscv64 multistrap_debian-ports.conf
生成的rootfs在build/目录下。
若脚本运行时出现类似错误信息:
The following signatures couldn't be verified because the public key is not available
需要手动给multistrap的文件打上这个补丁。
更多信息,可以参考原仓库:
https://github.com/SdtElectronics/debian-rootfs
离线
一些进阶用法:
更改预装包:
修改multistrap.conf中的packages字段即可。注意要生成riscv64的rootfs,需要修改的是multistrap_debian-ports.conf。
更改版本:
修改multistrap.conf中的suite字段即可。合法的值可以是版本名,或者是stable, testing和sid。注意要生成riscv64的rootfs,需要修改的是multistrap_debian-ports.conf。
异构chroot:
异构chroot所需的qemu等依赖,脚本都已经自动装好,直接chroot ./ 即可。
离线
强大!
对 qemu-user-static 版本有要求吗? 有些低版本的Ubuntu没有 riscv。
离线
ubuntu 18.04 安装这个包: http://ftp.br.debian.org/debian/pool/main/q/qemu/qemu-user-static_3.1+dfsg-8+deb10u8_amd64.deb
安装:
sudo apt-get install qemu-user-static_3.1+dfsg-8+deb10u8_amd64.deb
https://github.com/jubinson/debian-rootfs
好像是这个, 看起来不错。
但是
Get:1 http://ftp.ports.debian.org/debian-ports unstable InRelease [24.2 kB]
Err:1 http://ftp.ports.debian.org/debian-ports unstable InRelease
The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5A88D659DCB811BB
Reading package lists... Done
W: GPG error: http://ftp.ports.debian.org/debian-ports unstable InRelease: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY 5A88D659DCB811BB
E: The repository 'http://ftp.debian-ports.org/debian unstable InRelease' is not signed.
N: Updating from such a repository can't be done securely, and is therefore disabled by default.
N: See apt-secure(8) manpage for repository creation and user configuration details.
apt update failed. Exit value: 100
mutltistrap with configuration file multistrap_debian-ports.conf failed
按照楼主提供的方法, 不知道怎么修改
--- multistrap 2018-11-21 11:00:46.000000000 -0300
+++ multistrap_mod 2019-05-16 15:11:44.157699994 -0300
@@ -320,7 +320,8 @@
$config_str .= " -o Apt::Get::AllowUnauthenticated=true"
if (defined $noauth);
$config_str .= " -o Apt::Get::Download-Only=true";
-$config_str .= " -o Apt::Install-Recommends=false"
+$config_str .= " -o Apt::Install-Recommends=false";
+$config_str .= " -o Acquire::AllowInsecureRepositories=yes"
if (not defined $allow_recommends);
$config_str .= " -o Dir=" . shellescape($dir);
$config_str .= " -o Dir::Etc=" . shellescape("${dir}${etcdir}");
离线
搞定! 是patch这个文件: /usr/sbin/multistrap
离线
$ sudo chroot build/riscv64/riscv64-rootfs/
root@ubuntu:/#
root@ubuntu:/# whoami
root
root@ubuntu:/# du -sh /
364M /
root@ubuntu:/#
折腾半小时后,终于搞定,chroot进去,一切正常。
离线
强大!
对 qemu-user-static 版本有要求吗? 有些低版本的Ubuntu没有 riscv。
没有专门对多个qemu版本进行测试,但已知Ubuntu16.04源中的qemu在模拟aarch64平台的时候有bug,部分程序运行时会报非法指令然后退出。最好用高一点的版本。
离线
有何有效国内源,让apt下载的时候快一点?
离线