基于Ubuntu-base构建根文件系统

本文介绍了如何从UbuntuBase构建适用于ARM板的定制根文件系统,包括下载、解压、安装QEMU模拟器、挂载和定制Ubuntu系统,以及添加网络配置、安装软件、设置root密码和图形界面等步骤。
摘要由CSDN通过智能技术生成

        Ubuntu是一个非常常见的发行版系统,具有丰富的软件功能,可以方便的进行各类开发,系统的apt工具更是搭建各种开发环境的神器。当我们在基于X86的电脑Ubuntu完成功能开发后,想要将功能移植到arm板上,使用Ubuntu可以大大节省时间。

        Ubuntu-Base 是Ubuntu官方构建的ubuntu最小系统,一般只有几十兆大小,我们可以在此基础上增加自己需要的组件,或预装自己的软件等。

        首先我们需要下载Ubuntu-base,下面是网址Index of /ubuntu-base/releasesicon-default.png?t=N7T8https://cdimage.ubuntu.com/ubuntu-base/releases/        我下载的是基于ARM64的Ubuntu20.04.5,文件名称是ubuntu-base-20.04.5-base-arm64.tar.gz,只有25MB。

        我们新建两个文件夹,一个叫ubuntu_rootfs,一个叫rootfs_maker。我们把刚下载的Ubuntu20.04.5解压到ubuntu_rootfs中。

sudo tar -xvf ubuntu-base-20.04.5-base-arm64.tar.gz -C ubuntu_rootfs/

       因为我们使用的电脑是X86的,不支持ARM架构,所以需要安装qemu-user-static来进行仿真运行,先本机安装再拷贝到Ubuntu文件系统的文件夹中。

sudo apt install qemu-user-static
sudo cp /usr/bin/qemu-aarch64-static ubuntu_rootfs/usr/bin/

        然后我们需要挂载根文件系统,下面是挂载脚本https://download.csdn.net/download/u011436603/89227108?spm=1001.2014.3001.5503,也可以参考下面的博客构建Ubuntu20.04根文件系统并移植到RK3568_rk3568 ubuntu-CSDN博客去复制。

        有了挂载脚本后我们就可以对文件系统进行定制了,下面是挂载和卸载指令,在此之前需要确保脚本是具备执行权限的。

sudo chmod +x mount.sh
./mount.sh -m ubuntu_rootfs/
./mount.sh -u ubuntu_rootfs/

        执行./mount.sh -m ubuntu_rootfs/指令后我们会发现终端字体变白了,而且是以root身份执行的,这表明我们已经进入了Ubuntu-base的文件系统了,可以用cat /etc/issue查看下系统版本,会发现跟你本机使用的Ubuntu是有差别的。

        接下来就是定制了,你可以安装你喜欢的各种软件。

apt update
apt install vim bash-completion net-tools iputils-ping ifupdown ethtool ssh rsync udev htop rsyslog nfs-common language-pack-en-base sudo psmisc 

        这时候发现报错了,因为此时的根文件系统没有网络功能,需要拷贝本机的resolv.conf文件到文件夹中。

cp /etc/resolv.conf  ubuntu_roofs/etc/resolv.conf	

        现在再去使用apt安装软件就正常了。

        接下来我们来进行一些配置,比如修改root密码,修改hostname等,综合参考

基于 RK3588 构建 Ubuntu 22.04 根文件系统_rk3588 ubuntu-CSDN博客构建Ubuntu20.04根文件系统并移植到RK3568_rk3568 ubuntu-CSDN博客两篇博客内容,我修改的内容有:

开机等待网络超时时间

vim /lib/systemd/system/networking.service
//将里面的TimeoutStartSec=5min修改为
TimeoutStartSec=5sec

串口调试root登录

vi /lib/systemd/system/serial-getty\@.service
ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM


//取消自动登录
vi /etc/systemd/system/serial-getty@.service.d/override.conf

[Service]
ExecStart=
ExecStart=-/sbin/agetty -o '-p -- \\u' --noclear %I $TERM

配置检查终端是否可用

vim /root/.profile
# 添加下面的内容,替换掉 mesg n || true 这一行
tty -s && mesg n || true

双网口DHCP

vim /etc/network/interfaces

auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet dhcp
source-directory /etc/network/interfaces.d

重启默认等待时间

vim /etc/systemd/system.conf

 //解除注释
 DefaultTimeoutStartSec=90s
 DefaultTimeoutStopSec=1s
 DefaultTRestartSec=100ms

后续我在使用ssh连接时老是提示Access denied,发现还得改一个地方,这里一并改掉

vi  /etc/ssh/sshd_config

//找到并改成这样
PermitRootLogin yes

        以上就是全部针对Ubuntu-base的定制,本次没有安装gnome桌面,当然后续也可以通过终端自行安装。

        接下来是根文件系统打包,先创建一个镜像。

//首先创建一个空镜像文件,大小参考ubuntu_rootfs那个文件夹,可以略大一些
dd if=/dev/zero of=ubuntu_rootfs.img bs=1M count=4096

//将该文件格式化为ext4文件系统
mkfs.ext4 ubuntu_rootfs.img

        将该镜像挂载到一个空文件夹里,然后把ubuntu_rootfs文件夹里的东西拷过去。

//将镜像文件挂载到一个空文件中,并将ubuntu_roofs中的文件拷贝到该空文件中
chmod 777 rootfs_maker
sudo mount ubuntu_rootfs.img rootfs_maker/
sudo cp -rfp ubuntu_rootfs/* rootfs_maker/

        复制完后再卸载,此时ubuntu_rootfs.img就已经有数据了,但是比较大,是我们之前创建的4096M,因此可以减小下。

//复制完以后用e2fsck修复及检测镜像文件系统,resize2fs减小镜像文件的大小
umount rootfs_maker/
e2fsck -p -f ubuntu_rootfs.img
resize2fs -M ubuntu_rootfs.img

        现在我们就得到一个可用的Ubuntu根文件系统了。

--2024.5.14--

        基于无桌面的Ubuntu根文件系统,安装gnome桌面。

        安装桌面并设置开机默认进入图形界面

apt install  ubuntu-desktop 
systemctl set-default graphical.target

        新建用户,图像界面必须有一个账户,且不能是root。修改 /etc/sudoers 文件使user可以使用管理员权限,即sudo指令,在root下方添加一行:。

adduser user
vim /etc/sudoers

        设置图形界面自启动

vim /etc/gdm3/custom.conf
解除注释并修改如下
AutomaticLoginEnable=true # 开启自动登录功能。
AutomaticLogin=user # 自动登录的账户名为user。
TimedLoginEnable=true # 开启定时登录功能。
TimedLogin=user # 定时登录的账户名为user。
TimedLoginDelay=10 # 定时登录前等待10秒钟。

        禁用休眠

systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target

         至此Ubuntu桌面安装完毕,开机会自动以user身份进入桌面。

--2024.5.15--

        没安装桌面时的网络一切正常,但是安装好桌面后发现网络异常,有带问号的网络图标,提示ethernet unmanaged,前面参考博客基于 RK3588 构建 Ubuntu 22.04 根文件系统_rk3588 ubuntu-CSDN博客提到的解决方案如下

vim /usr/lib/NetworkManager/conf.d/10-globally-managed-devices.conf

[keyfile]
unmanaged-devices=*,except:type:ethernet,except:type:wifi,except:type:gsm,except:type:cdma

        或者按下方操作,也是我使用的方法,之后网络可以正常连接了。

cd /usr/lib/NetworkManager/conf.d/
sed -i '/unmanaged-devices/s/$/&,except:type:ethernet/' 10-globally-managed-devices.conf

  • 14
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕诗客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值