为arm64制作ubuntu根文件系统

build ubuntu rootfs for aarch64

Posted by Remilia Scarlet on September 23, 2022

0. 提前准备

sudo apt-get install qemu-user-static

1. 下载ubuntu的base文件系统

ubuntu20.04的下载位置在http://cdimage.ubuntu.com/ubuntu-base/releases/20.04.5/release/

这里我选的是ubuntu-base-20.04.5-base-arm64.tar.gz

ROOTFSBUILDDIR=/home/$USER/ubuntu-rootfs/
mkdir -p $ROOTFSBUILDDIR
cd $ROOTFSBUILDDIR
wget http://cdimage.ubuntu.com/ubuntu-base/releases/20.04.5/release/ubuntu-base-20.04.5-base-arm64.tar.gz

2. 新建ext4文件系统并挂载到mnt

ROOTFSMNTDIR=/mnt
dd if=/dev/zero of=rootfs.ext4 bs=1M count=2000  
mkfs.ext4 rootfs.ext4
sudo mount rootfs.ext4 $ROOTFSMNTDIR

这里是分配了2G的空间来制作根文件系统,讲道理是够了,如果你不够的话自己改大一些

3. 将ubuntu-base的文件解压到mnt

sudo tar xvf ubuntu-base-20.04.5-base-arm64.tar.gz -C $ROOTFSMNTDIR
cd $ROOTFSMNTDIR 这里如果不用sudo命令去解压,文件的权限都会变样,请确保自己是root权限  

# 用ls -l看一下确保这里文件权限都是root用户
ls -l
lrwxrwxrwx  1 root root     7 8月  30 00:05 bin -> usr/bin
drwxr-xr-x  2 root root  4096 4月  15  2020 boot
drwxr-xr-x  2 root root  4096 8月  30 00:22 dev
drwxr-xr-x 30 root root  4096 8月  30 00:22 etc
drwxr-xr-x  2 root root  4096 4月  15  2020 home
lrwxrwxrwx  1 root root     7 8月  30 00:05 lib -> usr/lib
drwx------  2 root root 16384 9月  23 16:18 lost+found
drwxr-xr-x  2 root root  4096 8月  30 00:05 media
drwxr-xr-x  2 root root  4096 8月  30 00:05 mnt
drwxr-xr-x  2 root root  4096 8月  30 00:05 opt
drwxr-xr-x  2 root root  4096 4月  15  2020 proc
drwx------  2 root root  4096 8月  30 00:21 root
drwxr-xr-x  4 root root  4096 8月  30 00:05 run
lrwxrwxrwx  1 root root     8 8月  30 00:05 sbin -> usr/sbin
drwxr-xr-x  2 root root  4096 8月  30 00:05 srv
drwxr-xr-x  2 root root  4096 4月  15  2020 sys
drwxrwxrwt  2 root root  4096 8月  30 00:22 tmp
drwxr-xr-x 10 root root  4096 8月  30 00:05 usr
drwxr-xr-x 11 root root  4096 8月  30 00:21 var

另外ubuntu20.04的bin、lib、sbin变成了软链接,这点和18.04好像不一样

4. 装软件之前先做一下准备工作

# 设置dns
sudo cp /etc/resolv.conf $ROOTFSMNTDIR/etc/resolv.conf

# 设置国内源(这里用的清华源)
sudo sed -i "s/ports.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g" $ROOTFSMNTDIR/etc/apt/sources.list

5. 使用qemu进入制作的根文件系统中

sudo mount --bind /dev $ROOTFSMNTDIR/dev
sudo chroot $ROOTFSMNTDIR
mount none -t proc /proc
mount none -t sysfs /sys
mount none -t devpts /dev/pts

在我的环境下,这里会自动调用qemu-aarch64-static

6. 安装各种软件

export LC_ALL=C
echo yourname > /etc/hostname
apt-get update
apt-get install -y \
dialog \
adduser \
apt \
apt-utils \
at \
bash \
bash-completion \
bzip2 \
ca-certificates \
command-not-found \
console-setup \
console-setup-linux \
coreutils \
cron \
curl \
dash \
dbus \
dbus-user-session \
debconf \
debconf-i18n \
debianutils \
diffutils \
dpkg \
e2fsprogs \
ethtool \
fdisk \
file \
findutils \
fonts-ubuntu-console \
gawk \
gcc-10-base:arm64 \
glib-networking:arm64 \
glib-networking-common \
glib-networking-services \
grep \
groff-base \
gzip \
hostname \
htop \
info \
iproute2 \
iptables \
iputils-ping \
iputils-tracepath \
klibc-utils \
kmod \
kpartx \
less \
libc-bin \
libc6:arm64 \
libcurl3-gnutls:arm64 \
libcurl4:arm64 \
libdb5.3:arm64 \
libdbus-1-3:arm64 \
libdconf1:arm64 \
libdebconfclient0:arm64 \
libdevmapper-event1.02.1:arm64 \
libdevmapper1.02.1:arm64 \
libmagic-mgc \
libmagic1:arm64 \
libmount1:arm64 \
libncurses6:arm64 \
libncursesw6:arm64 \
libpython3-stdlib:arm64 \
libpython3.8:arm64 \
libpython3.8-minimal:arm64 \
libpython3.8-stdlib:arm64 \
libreadline5:arm64 \
libreadline8:arm64 \
libsqlite3-0:arm64 \
libstdc++6:arm64 \
libyaml-0-2:arm64 \
libzstd1:arm64 \
linux-base \
locales \
login \
logrotate \
logsave \
lsb-base \
lsb-release \
lshw \
lsof \
ltrace \
lvm2 \
lxd-agent-loader \
lz4 \
mount \
ncurses-base \
ncurses-bin \
netplan.io \
networkd-dispatcher \
openssh-client \
openssl \
parted \
passwd \
perl \
perl-base \
perl-modules-5.30 \
python-apt-common \
python3 \
python3-apport \
python3-apt \
python3-attr \
python3-automat \
python3-blinker \
python3-certifi \
python3-cffi-backend \
python3-chardet \
python3-click \
python3-colorama \
python3-commandnotfound \
python3-configobj \
python3-constantly \
python3-cryptography \
python3-dbus \
python3-debconf \
python3-debian \
python3-distro \
python3-distro-info \
python3-distupgrade \
python3-distutils \
python3-entrypoints \
python3-gdbm:arm64 \
python3-gi \
python3-hamcrest \
python3-httplib2 \
python3-hyperlink \
python3-idna \
python3-importlib-metadata \
python3-incremental \
python3-jinja2 \
python3-json-pointer \
python3-jsonpatch \
python3-jsonschema \
python3-jwt \
python3-keyring \
python3-launchpadlib \
python3-lazr.restfulclient \
python3-lazr.uri \
python3-lib2to3 \
python3-markupsafe \
python3-minimal \
python3-more-itertools \
python3-nacl \
python3-netifaces \
python3-newt:arm64 \
python3-oauthlib \
python3-openssl \
python3-pexpect \
python3-pkg-resources \
python3-problem-report \
python3-ptyprocess \
python3-pyasn1 \
python3-pyasn1-modules \
python3-pymacaroons \
python3-pyrsistent:arm64 \
python3-requests \
python3-requests-unixsocket \
python3-secretstorage \
python3-serial \
python3-service-identity \
python3-setuptools \
python3-simplejson \
python3-six \
python3-software-properties \
python3-systemd \
python3-twisted \
python3-twisted-bin:arm64 \
python3-update-manager \
python3-urllib3 \
python3-wadllib \
python3-yaml \
python3-zipp \
python3-zope.interface \
python3.8 \
python3.8-minimal \
readline-common \
rsync \
rsyslog \
sed \
strace \
sudo \
systemd \
systemd-sysv \
systemd-timesyncd \
sysvinit-utils \
tar \
tcpdump \
telnet \
time \
tmux \
tpm-udev \
tzdata \
ubuntu-advantage-tools \
ucf \
udev \
udisks2 \
vim \
vim-common \
vim-runtime \
vim-tiny \
wget \
xkb-data \
xxd \
xz-utils \
zlib1g:arm64 \
socat \
iperf3 \
resolvconf \
libtinyxml2-dev \
libspdlog-dev \
python3-packaging \
net-tools

7. 配置用户与一些其他配置

useradd -G sudo -m -s /bin/bash pi
echo pi:pi | chpasswd
dpkg-reconfigure locales
dpkg-reconfigure resolvconf
apt-get autoremove -y
apt-get clean

8.退出qemu

rm -rf /tmp/* ~/.bash_history
umount /proc
umount /sys
umount /dev/pts
exit
sudo umount $ROOTFSMNTDIR/dev
sudo umount $ROOTFSMNTDIR

| 访问量: