
内容
ubuntu-base是Ubuntu正式构建的最小的ubuntu文件系统. 它包括debain软件包管理器. 基本软件包的大小通常只有几十兆字节. 它具有完整的ubuntu软件源支持. ubuntu软件通常是稳定的. ubuntu-base按需安装Linux软件,并且可以进行深度定制...,通常用于嵌入式rootfs构建.
几种常见的嵌入式文件系统构建方法: busybox,yocto,builroot,我认为它们不如Ubuntu方便,强大的担保系统,强大的社区支持,您可以通过apt-get install直接安装新软件包. 本文介绍如何基于Ubuntu平台构建完整的ubuntu系统. 对于已安装archlinux或构建LFS的朋友,此方法不熟悉.
ubuntu支持许多架构,包括arm,X86,powerpc,ppc等. 本文主要以X86_64为例,arm和arm64也给出了简单的生产步骤,其他架构操作也与此相似.
从ubuntu最小的文件系统ubuntu-base开始,使用X-windows构建完整的系统.
/dev/sda1 #UEFI分区 500MB
/dev/sda2 #宿主系统根分区 20GB
/dev/sda3 #用来构建ubuntu-base 5GB
回送文件系统是Linux系统中非常有趣的部分. 我们通常在设备(例如磁盘分区)上创建文件系统. 这些存储设备可以以设备文件的形式使用,例如/ dev / device_name. 为了在存储设备上使用文件系统,我们需要将其挂载到一些称为挂载点的目录中. 环回文件系统是指在文件而不是物理设备中创建的那些文件系统. 我们可以将这些文件作为文件系统挂载在挂载点上. 实际上,这使我们可以在物理磁盘上的文件中创建逻辑磁盘.
我们的目的: 创建一个模拟10GB物理磁盘的循环文件,并将其在循环镜像中分为两个区域:
即创建一个大小为10G的文件.
$dd if=/dev/zero of=ubuntu_base.img bs=1G count=10
记录了10+0 的读入
记录了10+0 的写出
10737418240 bytes (11 GB, 10 GiB) copied, 84.1916 s, 128 MB/s
您会发现所创建文件的大小超过1GB. 这是因为硬盘是一个块设备,并根据块大小的整数倍分配存储空间. 此时,您可以直接格式化此文件并将其用作整个分区,如下所示.
使用mkfs命令将1GB文件格式化为ext4文件系统:
$mkfs.ext4 ubuntu_base.img
您可以使用以下命令来查看它已经是文件系统:
$ file ubuntu_base.img
loobackfile.img: Linux rev 1.0 ext4 filesystem data, UUID=3be1775c-8976-445d-9134-8daabb2bade7 (extents) (64bit) (large files) (huge files)
现在您可以挂载回送文件:
$sudo mkdir /mnt/loopback
$sudo mount -o loop ubuntu_base.img /mnt/loopback
-o loop用于挂载回送文件系统.
这实际上是一种快速安装方式,我们无需手动连接任何设备. 但是在内部,此回送文件连接到名为/ dev / loop1或loop2的设备.
我们也可以手动进行:
$sudo losetup /dev/loop1 ubuntu_base.img
$sudo mount /dev/loop1 /mnt/loopback
使用以下方法卸载(umount):
$sudo umount /mnt/loopback
您还可以将设备文件的路径用作umount命令的参数:

$sudo umount /dev/loop1
以上是将整个文件用作一个分区的方法,但我们的目的是将文件分为多个区域并继续.
您可以使用fdisk或parted创建分区. 我更喜欢分开,这对于设置启动分区非常方便.
$ sudo parted ubuntu_base.img
GNU Parted 3.2
使用 /home/work/loobackfile.img
欢迎使用 GNU Parted! 输入 'help'可获得命令列表.
(parted)
新的UEFI分区:
对于UEFI引导方法,首先将创建标签设置为msdos;
(parted) mklabel msdos
创建分区大小为500M:
(parted)mkpart primary fat32 0 500MB
检查新创建的分区,分区号为1:
(parted) p
Model: (file)
磁盘 /home/work/ubuntu_base.img: 10.7GB
Sector size (logical/physical): 512B/512B
分区表:msdos
Disk Flags:
数字 开始: End 大小 类型 文件系统 标志
1 512B 500MB 500MB primary fat32 lba
(parted)
将此分区设置为引导(UEFI引导)分区:
(parted) set 1 boot on
(parted) p
Model: (file)
磁盘 /home/work/ubuntu_base.img: 10.7GB
Sector size (logical/physical): 512B/512B
分区表:msdos
Disk Flags:
数字 开始: End 大小 类型 文件系统 标志
1 512B 500MB 500MB primary fat32 启动, lba
(parted)
设置后bootx盘可以格式化吗,您可以通过p命令看到标记处有引导标记.
使用剩余空间创建根分区:
(parted) mkpart primary ext4 500MB 100%
现在已经创建了两个分区,使用p查看,q保存并退出:
(parted) p
Model: (file)
磁盘 /home/work/ubuntu_base.img: 10.7GB
Sector size (logical/physical): 512B/512B
分区表:msdos
Disk Flags:
数字 开始: End 大小 类型 文件系统 标志
1 512B 500MB 500MB primary fat32 启动, lba
2 500MB 10.7GB 10.2GB primary ext4 lba
图像文件已分为两个区域,但尚未格式化. 要格式化两个内部分区,您需要先将两个分区安装到设备上.
有一种更快的方式将所有分区挂载到mirror-kpartx中. 默认情况下,它没有安装在系统中,您必须使用程序包管理器来安装它:
$sudo apt-get install kpartx
执行以下命令以自动将分区挂载到映像文件中:
$sudo kpartx -v -a ubuntu_base.img
add map loop0p1 (253:0): 0 976562 linear 7:0 1
add map loop0p2 (253:1): 0 19994624 linear 7:0 976896
此命令在磁盘映像中的分区与/ dev / mapper中的设备之间创建映射,然后可以格式化/挂载这些设备.

格式化两个分区:
$ sudo mkfs.fat -F 32 /dev/mapper/loop0p1 #loop0p1 回环设备的分区1
$ sudo mkfs.ext4 /dev/mapper/loop0p2 #loop0p1 回环设备的分区2
格式更改完成后,您可以安装两个分区:
$ sudo mkdir /mnt/loopback
$ sudo mount /dev/mapper/loop0p2 /mnt/loopback #挂载根分区
$ sudo mkdir -p /mnt/loopback/boot/efi
$ sudo mount /dev/mapper/loop0p1 /mnt/loopback/boot/efi #挂载uefi启动分区
格式化目标分区并将其挂载到/ mnt目录. 如果要挂载其他目录,则需要更改之后的所有命令:
sudo mkfs.ext4 /dev/sda3
sudo mount /dev/sda3 /mnt
将ubuntu-base-16.04.6-base-amd64.tar.gz解压缩到/ mnt目录:
sudo tar -xpvf ubuntu-base-16.04.6-base-amd64.tar.gz -C /mnt
注意: 您需要在ubuntu-base中保留文件权限和所有者,解压缩时需要root权限或sudo操作,并且-p参数用于保留权限.
在ubuntu-base中有一个默认的ubuntu官方资源. 如果您已连接到Internet,并且对访问官方来源的速度没有限制,则无需进行更改. 配置文件/etc/apt/sources.list替换源. 本文中的主机系统与要构建的系统的硬件体系结构和版本一致,因此只需直接复制即可.
sudo cp /etc/apt/sources.list /mnt/etc/apt/
要进入目标环境,需要连接到Internet,首先需要配置DNS,然后将主机系统文件/etc/resolv.conf复制到/ mnt / etc /目录:
sudo cp /etc/resolv.conf /mnt/etc/
默认情况下,ubuntu-base仅具有root用户. 如果需要创建像普通ubuntu这样的普通用户,则需要将用户默认配置文件夹/ etc / skel添加到Ubuntu-bae,该文件夹包含创建用户时的默认配置文件夹,例如.bashrc,.profile等配置文件. ,如果没有这样的文件夹,则adduser在构造的文件系统中添加的用户会遇到各种问题,因此请将主机系统/ etc / skel复制到ubuntu-base:
sudo cp -R /etc/skel /mnt/etc/
方法1: 使用原始方法进入chroot环境
安装并激活/ dev: 激活/ dev目录中的设备的常用方法是在/ dev目录中挂载虚拟文件系统(例如tmpfs),然后在出现以下情况时显示该虚拟文件系统: 检测到或打开设备的设备动态创建设备节点. 这通常是由udev在引导过程中完成的. 由于我们新的基于ubuntu的系统没有udev并且尚未启动,因此必须手动挂载和激活/ dev. 这可以通过绑定和挂载主机系统的/ dev目录来实现. 绑定挂载是一种特殊的挂载模式,它允许您在另一个位置创建目录或挂载点的镜像. 运行以下命令以实现:
sudo mount -v --bind /dev /mnt/dev
安装虚拟文件系统:
sudo mount -vt devpts devpts /mnt/dev/pts -o gid=5,mode=620
sudo mount -vt proc proc /mnt/proc
sudo mount -vt sysfs sysfs /mnt/sys
sudo mount -vt tmpfs tmpfs /mnt/run
进入chroot环境:
chroot /mnt
方法2: 使用arch-chroot
Linux发行版archlinux提供了一个自动chroot脚本arch-chroot,它包括DNS文件的自动配置,虚拟文件系统的自动挂载和其他操作,这对于维护linux系统非常方便. chrooting时,无需挂载和其他操作即可直接执行:
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-286993-1.html
过期商品支接罚50000