1. 程式人生 > 其它 >ITOP4412----嘗試使用debootstrap構建檔案系統。

ITOP4412----嘗試使用debootstrap構建檔案系統。

技術標籤:linux學習linux

部分轉載:debootstrap 製作arm64位根檔案系統


正文

debootstrapdebian/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。