前置作業
請先基礎瞭解此篇文章的內容:自動化建立、分割、格式化、掛載虛擬映像檔
橋接介面也要先做好:每次開機自動建立 br10 虛擬橋
最後也要架設自己的鏡像站:架設自幹鏡像站
什麼是 Root File System(rootfs)?
所謂的 rootfs 就是開機後系統必須讀取的安裝系統,簡單來說就是整個系統的根目錄 (/)
由於這個學期做的是嵌入式系統,這是一個微型的 linux 系統
因此其 rootfs 大部份來說與 PC Linux 的磁碟分割配置會不同
一般 PC Linux 會有分成好幾個分割區
但是嵌入式系統就只有一個分割區。
STARTO!
建立一個虛擬 sdcard.img
建立一個檔案名為 create_image.sh,輸入以下程式碼
SD_IMAGE=sdcard.img SD_IMAGE_SIZE=1G SD_IMAGE1=sdcard.img1 SD_IMAGE2=sdcard.img2 PART1_SIZE=80M PART1_OFFSET=1 PART1_SECTORS=1 PART1_BLOCKS=1 PART2_OFFSET=1 PART2_SECTORS=1 PART2_BLOCKS=1 LOOP0=/dev/loop0 LOOP1=/dev/loop1 LOOP2=/dev/loop2 MOUNT_DIR1=/mnt/sdcard1 MOUNT_DIR2=/mnt/sdcard2 echo "建立掛載資料夾" mkdir $MOUNT_DIR1 2>/dev/null mkdir $MOUNT_DIR2 2>/dev/null sleep 1 echo "建立完成,開始解除掛載資料夾 $MOUNT_DIR1 $MOUNT_DIR2" umount $MOUNT_DIR1 2>/dev/null umount $MOUNT_DIR2 2>/dev/null sleep 1 echo "清除連接裝置 $LOOP2" losetup -d $LOOP2 2>/dev/null echo "清除連接裝置 $LOOP1" losetup -d $LOOP1 2>/dev/null echo "清除連接裝置 $LOOP0" losetup -d $LOOP0 2>/dev/null sleep 1 echo "建立虛擬 SD 卡 $SD_IMAGE 中" dd if=/dev/zero of=$SD_IMAGE bs=$SD_IMAGE_SIZE count=1 2>/dev/null echo "建立完成" sleep 1 echo "更改使用者權限" chown eecs:eecs $SD_IMAGE echo "開始執行虛擬映像 $SD_IMAGE 的分割 (PART1: 建立腳本)..." cat > /tmp/fdisk.cmd << EOF n p 1 +$PART1_SIZE t b n p 2 w EOF echo "腳本建立完成" sleep 1 echo "開始執行虛擬映像 $SD_IMAGE 的分割 (PART2: 執行腳本)..." fdisk $SD_IMAGE < /tmp/fdisk.cmd >/dev/null echo "分割完成" sleep 1 echo "開始計算分割所需容量..." PART1_OFFSET=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE1 | tr -s ' ' | cut -d\ -f 2` PART1_SECTORS=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE1 | tr -s ' ' | cut -d\ -f 4` PART1_BLOCKS=`expr $PART1_SECTORS / 2` PART2_OFFSET=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE2 | tr -s ' ' | cut -d\ -f 2` PART2_SECTORS=`fdisk -lu $SD_IMAGE | grep $SD_IMAGE2 | tr -s ' ' | cut -d\ -f 4` PART2_BLOCKS=`expr $PART2_SECTORS / 2` echo "計算完成" sleep 1 echo "開始將 $SD_IMAGE 連接至 $LOOP0 上" losetup $LOOP0 $SD_IMAGE echo "開始將 $SD_IMAGE1 連接至 $LOOP1 上" losetup -o `expr $PART1_OFFSET \* 512` $LOOP1 $LOOP0 echo "開始將 $SD_IMAGE2 連接至 $LOOP2 上" losetup -o `expr $PART2_OFFSET \* 512` $LOOP2 $LOOP0 # echo PART1_OFFSET=$PART1_OFFSET, PART1_BLOCKS=$PART1_BLOCKS # echo PART2_OFFSET=$PART2_OFFSET, PART2_BLOCKS=$PART2_BLOCKS sleep 1 echo "裝置連接完成,執行格式化..." apt-get install dosfstools -y >/dev/null mkdosfs -s 2 $LOOP1 $PART1_BLOCKS 2>/dev/null mkfs.ext4 $LOOP2 >/dev/null sleep 1 echo "格式化完成,執行掛載..." mount $LOOP1 $MOUNT_DIR1 mount $LOOP2 $MOUNT_DIR2 echo "掛載完成。" echo ""
使用root 權限,執行這個腳本
su -
cd /home/eecs/
sh create_image.sh
待腳本執行完成後,虛擬裝置分割區 1、2 即掛載完成到系統上,可以確認一下
df -h
更新自己的鏡像站
請先執行一次取得校外鏡像站的 getdeb.sh 腳本
或是執行取得 pominglee 鏡像站的指令
把本身電腦的鏡像站更新到最新
一樣要使用 root 權限
安裝基本套件
安裝建立 rootfs 的套件
apt-get install debootstrap -y
安裝 qemu-user-static 套件
apt-get install qemu-user-static -y
建立一個建立 rootfs 的腳本(使用 eecs 權限)
進入 ~/virtualarm
cd ~/virtualarm
新建一個檔案名為 debootstrap_armhf.sh
nano debootstrap_armhf.sh
ROOTFS_DIR=/mnt/sdcard2
DEBIAN_VERSION=buster
debootstrap \
--arch=armhf \
--keyring=/usr/share/keyrings/debian-archive-keyring.gpg \
--verbose \
--foreign \
$DEBIAN_VERSION \
$ROOTFS_DIR \
file:///home/ftp/debian使用 root 權限,執行這個腳本
su -
cd /home/eecs/virtualarm
sh debootstrap_armhf.sh
完成後檢查一下檔案有沒有寫入 /mnt/sdcard2
df -h
第1階段告一段落,請執行複製虛擬執行環境(一樣使用 root 權限)
cp /usr/bin/qemu-arm-static /mnt/sdcard2/usr/bin/
再來進入 chroot 環境
chroot /mnt/sdcard2 /bin/bash
執行以下指令執行第2階段
/debootstrap/debootstrap --second-stage
會執行一段時間,請耐心等待,結束後會看到這個畫面
設定虛擬機器裡面的環境
總共要做以下這些事情(注意:要在 chroot 的虛擬機裡面做)
- root 密碼:leenix123
- 新增一個使用者帳號 leenix/密碼: leenix123
- 設定 locale (可裝/可不裝)
- 設定網路
- 設定 apt 來源
- 架設 apache 伺服器
- 設定主機名稱
- 清理不必要檔案以節省空間
設定 root 密碼:leenix123
echo root:leenix123 | chpasswd
新增一個使用者帳號 leenix/密碼: leenix123
useradd leenix
echo leenix:leenix123 | chpasswd
設定網路
進入 interfaces ,貼上以下設定檔。儲存並退出
nano /etc/network/interfaces
# The loopback network interface auto lo iface lo inet loopback # The primary network interface allow-hotplug eth0 iface eth0 inet static address 192.168.10.100 netmask 255.255.255.0 geteway 192.168.10.1
設定 apt 來源
先編輯 sources.list 檔案
nano /etc/apt/sources.list
輸入以下內容(注意以下IP:127.117.72.23部份,請替換成自己電腦的IP)
deb http://127.117.72.23/debian/ buster main contrib non-free
deb http://security.debian.org/debian-security buster/updates main
儲存並退出,輸入指令更新套件清單
apt-get update
架設 apache 伺服器
安裝 apache2 套件並啟用開機自動啟動套件
apt-get install apache2 -y
systemctl enable apache2
查看 apache2 啟動狀態
systemctl is-enabled apache2
設定主機名稱
echo arm_leenix > /etc/hostname
清理不必要檔案以節省空間
基礎清除
首先看一下現在虛擬機佔了多少空間,在實體機下指令
df -h
下指令清除不必要的東西
apt-get clean
再看一次佔了多少空間
df -h
跳出 chroot 環境
exit
至此,rootfs 基本設定結束。
解除掛載虛擬機
解除掛載 /mnt/sdcard
umount /mnt/sdcard2
umount /mnt/sdcard1
解除連接 sdcard.img
losetup -d /dev/loop2
losetup -d /dev/loop1
losetup -d /dev/loop0
- 受保護的內容: NAS 版 Mathbot 管理網站與 Linebot 啟動方法 - 2024 年 11 月 15 日
- Realtime 啥鬼的 - 2021 年 6 月 15 日
- nodejs 數學遊戲 - 2021 年 6 月 8 日















在〈建立 Root File System (rootfs)〉中有 2 則留言