ITOP4412----嘗試使用debootstrap構建檔案系統。
部分轉載:debootstrap 製作arm64位根檔案系統
正文
debootstrap
是debian/ubuntu
下的一個工具,用來構建一套基本的系統(根檔案系統)。
為什麼要使用它呢?因為它打包出來的檔案系統,含有軟體包管理工具,apt\dpkg
。使用製作好的檔案系統,安裝軟體時可以直接使用apt-get install
命令,也可以通過dpkg
安裝deb軟體包
。
下面記錄一下使用ubuntu宿主機,構建debian檔案系統的過程。
一、配置環境:
安裝必要的工具:
1、debootstrap,根檔案系統製作工具。
sudo apt-get install debootstrap
2、qemu虛擬機器,以對arm的執行環境進行模擬。
sudo apt-get install qemu-user-static
二、使用debootstrap:
使用方法如下:
sudo debootstrap --arch=armhf --foreign stretch ./target-rootfs http://ftp.cn.debian.org/debian/
--arch
:指定製作的檔案系統架構,arm架構,支援硬體浮點運算。--foreign
:在與主機架構不相同時需要指定此引數,僅做初始化的解包。stretch
:這個是Debian 9的發行版本號,最新的Debian 10為buster。target-rootfs
:存放檔案系統的資料夾,可以不用先建立,執行上述命令會自動建立此資料夾,也可以先建立。ftp.cn.debian.org/debian/
:這個是中國映象伺服器地址,Debian 全球映象站。
接下來就是等待,檔案系統的部署完成。
若過程中未發生嚴重錯誤,不會有多餘的提示:
接著將qemu的模擬執行環境程式,放入構建好的檔案系統目錄中,注意目錄要根據實際修改,前面用到的也是:
sudo cp /usr/bin/qemu-arm-static ./target-rootfs/usr/bin/
緊接著使用一個指令碼進入目標檔案系統,指令碼內容如下:
#!/bin/bash
function mnt() {
echo "MOUNTING"
sudo mount -t proc /proc ${2}proc
sudo mount -t sysfs /sys ${2}sys
sudo mount -o bind /dev ${2}dev
sudo mount -o bind /dev/pts ${2}dev/pts
sudo chroot ${2}
}
function umnt() {
echo "UNMOUNTING"
sudo umount ${2}proc
sudo umount ${2}sys
sudo umount ${2}dev/pts
sudo umount ${2}dev
}
if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
mnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
umnt $1 $2
else
echo ""
echo "Either 1'st, 2'nd or both parameters were missing"
echo ""
echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
echo ""
echo "For example: ch-mount -m /media/sdcard/"
echo ""
echo 1st parameter : ${1}
echo 2nd parameter : ${2}
fi
使用指令碼,這裡不用sudo:
./ch-mount.sh -m target-rootfs/
進入到目標檔案系統,目前檔案系統還未配置好。
進行第二步驟配置,在製作好的檔案系統下,輸入如下指令:
debootstrap/debootstrap --second-stage
等待完成即可。完成後輸入exit
退出chroot模式,並且取消掛載。
exit
./ch-mount.sh -u target-rootfs/
三、定製檔案系統:
在前面提到了,使用debian
檔案系統,有一個好處就是可以使用包管理工具
。那麼實際上,在上述操作完成之後,我們可以通過apt-get install
指令來進行軟體的安裝了。
以故障演示
這裡我遇到了vi
工具方向鍵以及退格鍵
的故障,表現當按下上下左右鍵時,輸出字元^A^D^H等,不移動游標,是檔案系統中預設的vi
工具配置導致的。
通過解除安裝預設安裝的VIM
解決,首先要進入到檔案系統中,使用命令:
sudo chroot target-rootfs
target-rootfs
為目標檔案系統所在的資料夾,進入檔案系統後輸入:
apt-get remove vim-common
等待解除安裝完成。
更新軟體:
sudo apt-get update
安裝vim full版
sudo apt-get install vim
此問題的另一種解決方法:
在/etc/vim/vimrc.tiny
中,將裡面的 set compatible
改成 set nocompatible
對於退格鍵backspace的問題,只需在set compatible
下面加上一句
backspace = 2
更換國內映象源:
目前檔案系統,就已經和PC的Linux檔案系統很相似了。
對於軟體的下載源,也是可以進行替換的。
目前國內軟體源都是使用https協議,所以要先安裝軟體包。
注:在目標檔案系統中進行!
apt install apt-transport-https
備份原始檔:
cp /etc/apt/sources.list /etc/apt/sources.list_bak
修改映象源列表檔案:
vim /etc/apt/sources.list
修改:
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ stretch main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ stretch main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ stretch-updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ stretch-updates main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ stretch-backports main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ stretch-backports main contrib non-free
deb https://mirrors.tuna.tsinghua.edu.cn/debian-security stretch/updates main contrib non-free
# deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security stretch/updates main contrib non-free
目前這樣折騰出來的檔案系統非常不好用,首先是串列埠終端輸入的問題,又是上下左右鍵錯誤,其次是網絡卡得dhclient
才能啟用,可能的解決方案在這。
所以做一些問題的歸納:
歸納
1、 通過https介面源
拉取軟體時,提示證書問題,更新下系統時間:
date -s '22:36:00 2020-12-19'
2、 Uboot的啟動引數也得改為,原來是busybox的linuxrc:
setenv bootargs root=/dev/mmcblk0p3 rw rootwait rootfstype=ext4 init=/bin/sh
3、啟動後不進入bash模式,手動進入:
bash
登入設定的使用者,su+使用者名稱:
su jc
4、除了debootstrap
能製作根檔案系統,debian還有multistrap
,使用方法類似,但是麻煩得多,靈活性也強得多。
apt-get install multistrap
multistrap -a armel -d ./rootfs -f multistrap_debian.conf
multistrap_debian.conf
檔案如下:
[General]
#directory=target-rootfs
cleanup=true
noauth=true
unpack=true
debootstrap=Debian Net Utils
aptsources=Debian
noauth=true # GPG error
[Debian]
packages=apt kmod lsof
#source=https://mirrors.sjtug.sjtu.edu.cn/debian/
source=https://mirrors.tuna.tsinghua.edu.cn/debian/
keyring=debian-archive-keyring
suite=buster
components=main contrib non-free
[Net]
# Basic packages to enable the networking
packages=netbase net-tools ethtool udev iproute2 iputils-ping ifupdown isc-dhcp-client ssh
#source=https://mirrors.sjtug.sjtu.edu.cn/debian/
source=https://mirrors.tuna.tsinghua.edu.cn/debian/
[Utils]
# General purpose utilities
packages=locales adduser vim less wget dialog usbutils
#source=https://mirrors.sjtug.sjtu.edu.cn/debian/
source=https://mirrors.tuna.tsinghua.edu.cn/debian/
# sudo multistrap -a armel -d armel-rootfs -f multistrap.conf
# sudo multistrap -a armhf -d armhf-rootfs -f multistrap.conf
4-1、拉取源時提示缺少公鑰:
相關解決方案:
1
2
3
大佬部落格
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 6AF0E1940624A220 #此處6AF0E1940624A220需要是錯誤提示的key
5、“dpkg: dpkg - error: PATH is not set”:
export PATH=$PATH:/usr/local/sbin/
export PATH=$PATH:/usr/sbin/
export PATH=$PATH:/sbin
6、不能使用reboot。