ARM64 ubuntu20.04根文件系统制作

ARM64 ubuntu20.04根文件系统制作

  • 虚拟机环境搭建
  • 创建镜像文件
  • 官网下载ubuntu-base
  • 切换根文件系统
  • 安装工具包
  • 安装桌面环境。
  • netplan配置
  • 添加用户
  • 卸载没用的软件
  • ubuntu修改串口实现自动登录。
  • 关闭自动休眠

虚拟机环境搭建

为了规避一些不必要的错误,建议制作的目标系统和主机系统采用同一个ubuntu版本。这里两个系统都选用的是ubuntu20.04.

$ sudo apt-get install qemu-user-static

创建镜像文件

$ mkdir rootfs
$ dd if=/dev/zero of=ubuntu20.04.img bs=1M count=4096
$ mkfs.ext4 -L ubuntu20.04 ubuntu20.04.img
$ sudo mount ubuntu20.04.img rootfs/

利用上面的命令创建一个4G大小的镜像文件,然后将镜像挂载到rootfs下,但是这个的注意镜像的大小尽量大一点,要不然后期安装的时候可能因空间不足导致安装软件包失败。这里也可以直接在roofs目下进行操作,最后在将ubuntu20.04.img挂载到其它地方,将rootfs创建的文件系统复制到挂载的镜像中。

官网下载ubuntu-base

http://cdimage.ubuntu.com/ubuntu-base/releases/
将下载的tarball解压到rootfs中。

$ tar -xzvf ubuntu-base-20.04.2-base-arm64.tar.gz -C rootfs

切换根文件系统

利用chroot命令切换根文件系统,如果切换失败尝试“cp

/usr/bin/qemu-arm-static   rootfs/usr/bin/ ”。
$ sudo chroot rootfs/   #完事后可以用exit退出

推荐使用下面方法切换文件系统,这个会将主机下的/dev /sys /proc挂载到新的文件系统中,在执行一些命令是就不会出现错误。

vim  ch-mount.sh 
#!/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
    echo "CHROOT..."
    sudo chroot ${2}
    echo "Success!"
}
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
$ chmod +x ch-mount.sh
$ ./ch-mount.sh -m rootfs     #进入文件系统,
#exit退出后需要执行下面命令
$ ./ch-mount.sh -u rootfs

https://zhuanlan.zhihu.com/p/575679886

安装工具包

$ apt-get update
$ apt-get install sudo
$ apt-get install vim
$ apt-get install udev       #安装后会从串口输出debug信息。
$ apt-get install net-tools
$ apt-get install ethtool
$ apt-get install udhcpc
$ apt-get install netplan.io    #20.04代替ifupdown,推荐安装这个放弃apt-get install ifupdown
$ apt-get install language-pack-en-base
$ apt-get install language-pack-zh-han*
$ apt-get install iputils-ping
$ apt-get install openssh-sftp-server
$ apt-get install ntp
$ apt-get install usbutils
$ apt-get install alsa-utils
$ apt-get install libmtp9        #和adbd相关

到这里一个不含有桌面的文件系统已经算是完成。网络采用netplan管理,netplan配置详见netplan章节。

安装桌面环境。

ubuntu20的桌面环境比较多,因为在嵌入式平台上用所以需要选一个轻量级的桌面环境,这里选用的lubuntu-desktop。

$ apt-get install lubuntu-desktop

利用上面命令安装lubuntu-desktop时大概需要占用3G多的空间,因为这个命令会将一些可选的依赖包一并安装,但对于嵌入式系统来说有些包根本就用不上,占用系统空间不说还可能会导致系统变慢,所以采用“–no-install-recommends”选项取消可选依赖的安装,如果后期需要了在单独安装即可。命令如下,可以节省1G多空间。

$ apt-get install --no-install-recommends lubuntu-desktop

gdm3图形管理器
上面方式安装后默认用到的图形管理器是sddm。这里可以切换成gdm3或者lightdm。个人感觉gdm3比较好看,所以这里就选择了gdm3作为图形管理器,安装命令:

$ apt-get install --no-install-recommends gdm3 #这里同样取消了可选包  
#想用lightdm时安装下面命令,如果加--no-install-recommends参数,lightdm无法正常工作
$ apt-get install lightdm

安装过程中会让选择图形管理器,过去安装后无法正常显示登录界面可以利用下面命令重新配置。

$ dpkg-reconfigure gdm3

gdm3设置开机自动登录

$ vim /etc/gdm3/custom.conf
# GDM configuration storage
# 
# See /usr/share/gdm/gdm.schemas for a list of available options.

[daemon]
# Uncomment the line below to force the login screen to use Xorg
#WaylandEnable=false

# Enabling automatic login
  AutomaticLoginEnable = true           #取消之前的注释
  AutomaticLogin = username              #取消之前的注释,修改成要登录的用户名字

gdm3设置允许root用户登录桌面

$ vim /etc/gdm3/custom.conf

# Enabling timed login
#  TimedLoginEnable = true
#  TimedLogin = user1
#  TimedLoginDelay = 10
AllowRoot=true           #添加的内容
$ vim /etc/pam.d/gdm-password 

#%PAM-1.0
auth    requisite       pam_nologin.so
#auth   required        pam_succeed_if.so user != root quiet_success   #注释掉这一行
@include common-auth
auth    optional        pam_gnome_keyring.so
@include common-account
# SELinux needs to be the first session rule. This ensures that any 
# lingering context has been cleared. Without this it is possible 

lightdm设置开机自动登录

$ cat /etc/lightdm/lightdm.conf.d/20-autologin.conf
[Seat:*]
user-session=Lubuntu
autologin-user=username                #修改成自动登录的用户名
greeter-show-manual-login=true

netplan配置

Ubuntu 18.04/20.04使用netplan设置网络。Netplan是Canonical(Ubuntu)开发的实用程序,能在Linux系统上轻松配置网络。它基于基于YAML的配置,从而大大简化了网络配置过程。要配置网络接口,只需创建所需网络接口的YAML描述,然后Netplan将为所选的渲染器工具生成所有必需的配置。可以在/etc/netplan目录下创建相应的“*.yaml”文件来配置网络。

$ sudo vim /etc/01-network-manager-all.yaml
#修改时注意yaml文件的格式要求。
network:
  ethernets:        
    eth0:            
      dhcp4: no                                            #指定是否需要进行DHCP,4指的是ipv4            
      addresses: [192.168.3.105/24]            #IP地址            
      optional: true            
      gateway4: 192.168.3.1                         #默认网关,如果不需要网关地址,这一行可以不要            
      nameservers:
        addresses: [114.114.114.114, 8.8.8.8]     #dns配置     
    version: 2    
    renderer: NetworkManager     #对于无NetworkManager可选择networkd

因为yaml需要严格的遵循缩进规则,为了避免配置的错误,可以利用下面两条命令来测试配置和让配置生效

sudo netplan try
sudo netplan apply

添加用户

adduser ubuntu      #增加用户
adduser ubuntu sudo  #增加管理员权限

卸载没用的软件

安装时添加–no-install-recommends参数已经忽略了好多软件的安装,但是还是有些用不到的软件会被安装,可以利用apt-get remove --purge xxx或者dpkg -r xxx卸载掉不用的软件。

$ apt-get remove --purge lubuntu-update-notifier #lubuntu升级管理软件,没啥用嵌入式中乱升级系统可能导致系统无法正常启动。
$ apt-get remove --purge libreoffice*  #系统自带的office,

ubuntu修改串口实现自动登录。

vim /lib/systemd/system/[email protected]
开机设置选项:ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM
文件部分内容展示:

  [Service]
  # The '-o' option value tells agetty to replace 'login' arguments with an
  # option to preserve environment (-p), followed by '--' for safety, and then
  # the entered username.
  ExecStart=-/sbin/agetty --autologin root --noclear %I $TERM
  Type=idle
  Restart=always
  UtmpIdentifier=%I
  TTYPath=/dev/%I
  TTYReset=yes
  TTYVHangup=yes
  KillMode=process
  IgnoreSIGPIPE=nostem/[email protected]" 46L, 1468C
  SendSIGHUP=yes

注意:这种方式需要安装udev, sudo apt-get install udev

关闭自动休眠

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

你可能感兴趣的:(经验分享,ubuntu,linux,运维)