debootstrap 制作根文件系統


                <svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
                    <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path>
                </svg>
                <h1><a id="_2"></a>效果圖</h1> 

在這里插入圖片描述

制作根文件系統,在PC上最全面的莫過於LFS(linux form scratch),而嵌入式中 busybox 是不二之選。不過,我們這次使用debootstrap來構建文件系統。debootstrap是debian/ubuntu下的一個工具,用來構建一套基本的根文件系統,其生成的目錄符合Linux文件系統標准(FHS),即包含了/boot、/etc、/bin、/usr等等目錄,但它比發行版本的Linux體積小很多,當然功能也沒那么強大,因此,只能說是“基本的系統”。

准備環境

安裝所需依賴,使用debootstrap命令創建文件系統。

sudo apt-get install debian-archive-keyring
sudo apt-get install  qemu qemu-user-static  binfmt-support debootstrap

使用也十分簡單,命令格式為:

sudo debootstrap --arch [平台] [發行版本代號] [構建目錄] [鏡像地址]

當前debootstrap支持的發行版本可以在/usr/share/debootstrap/scripts查看,而各發行版代號可以到http://en.wikipedia.org/wiki/List_of_Ubuntu_releases查看。

創建版本

cd && mkdir build && cd build

這里以bionic版本為例

Armhf

sudo debootstrap --arch=armhf bionic linux-rootfs http://mirrors.ustc.edu.cn/ubuntu-ports/
sudo cp -a /usr/bin/qemu-arm-static ~/build/linux-rootfs/usr/bin/qemu-arm-static

arm64

sudo debootstrap --arch=arm64 bionic linux-rootfs http://mirrors.ustc.edu.cn/ubuntu-ports/
sudo cp -a /usr/bin/qemu-aarch64-static ~/build/linux-rootfs/usr/bin/qemu-aarch64-static

其他鏡像:

  • https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/
wget https://raw.githubusercontent.com/ywhs/linux-software/master/ch-mount.sh
chmod 777 ch-mount.sh
./ch-mount.sh -m linux-rootfs/
# 執行腳本后,沒有報錯會進入文件系統,顯示 I have no name ,這是因為還沒有初始化。
debootstrap/debootstrap --second-stage
exit
./ch-mount.sh -u linux-rootfs/
./ch-mount.sh -m linux-rootfs/
# sudo chroot linux-rootfs

配置系統字符集(根據提示進行)

export LC_ALL=en_US.UTF-8
apt-get install locales
dpkg-reconfigure locales

配置時區

cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

換源

apt-get install nano
cp /etc/apt/sources.list /etc/apt/sources.list.bak
nano /etc/apt/sources.list
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-proposed main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-proposed main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main multiverse restricted universe
deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main multiverse restricted universe
apt-get update
apt-get upgrade

配置root用戶密碼

# 先設置root用戶的密碼
passwd

創建一個普通用戶

# 這兩個環境變量可以自行修改
USER=pi
HOST=robot
useradd -G adm tty disk dialout sudo audio video plugdev games users systemd-journal input netdev ssh bluetooth -m -s /bin/bash $USER
passwd $USER
# cat /etc/group
# 查看當前系統用戶組

設置主機名稱:

echo $HOST>/etc/hostname

設置本機入口ip:

cat <<EOF > /etc/hosts
127.0.0.1       localhost
127.0.1.1       $HOST

::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

EOF

配置Wi-Fi

nano/etc/network/interfaces
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp
auto wlan0
iface wlan0 inet dhcp
pre-up wpa_supplicant -Dwext -i wlan0 -c/etc/wpa_supplicant/wpa_supplicant.conf -B
nano etc/wpa_supplicant/wpa_supplicant.conf
network={
    ssid="WIFI-Name"
    psk="Password"
    key_mgmt=WPA-PSK
    priority=1
}

允許自動更新dns:

dpkg-reconfigureresolvconf

安裝依賴

apt-get install -y sudo ssh net-tools ethtool wireless-tools network-manager iputils-ping rsyslog alsa-utils bash-completion gnupg busybox kmod --no-install-recommends

# 安裝音頻管理
apt-get install alsa-utils libasound2-dev wget git curl git

# add-apt-repository命令
apt-get install software-properties-common

#apt update
#apt install sudo language-pack-en-base ssh net-tools ethtool ifupdown iputils-ping htop vim kmod network-manager xorg qt5-default openbox make
#apt upgrade
#apt install gcc g++

Neofetch

Ubuntu 17.04 and up

apt update
apt install neofetch

Ubuntu 16.10 and below

add-apt-repository ppa:dawidd0811/neofetch
apt update && apt install neofetch

掛載

nano /etc/fstab
#<file system> <mount point>   <type>  <options>       <dump>  <pass>
/dev/mmcblk0p1  /boot   vfat    defaults                0       0
/dev/mmcblk0p2  /       ext4    defaults,noatime        0       1

sudo權限問題

https://blog.csdn.net/zhouguangfei0717/article/details/82768474

cd /home && ls -la  
drwxr-xr-x  3 root root 4096 May 26  2020 .                                     
drwx------ 21 pi   pi   4096 May 26  2020 ..                                    
drwxr-xr-x  3 pi   pi   4096 Feb 11 16:28 pi
chmod 755 ".." 
visudo
chmod 4755 /usr/bin/sudo

SSH 問題

https://hant.kutu66.com/ubuntu/article_176553
chown root: /

raspi-config

apt install whiptail parted lua5.1 alsa-utils psmisc
wget http://archive.raspberrypi.org/debian/pool/main/r/raspi-config/raspi-config_20200504_all.deb
dpkg -i raspi-config_20200504_all.deb
 apt-get -f -y install

安裝Ubuntu mate桌面

https://www.htcp.net/880.html

清理系統

rm -Rf /tmp/* && apt clean && apt autoclean

卸載

./ch-mount.sh -u linux-rootfs/

其他

在構建根文件系統過程中可能還存在其他紕漏,歡迎指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM