构建initrd文件系统
由于需要在initrd增加更多的操作,原来的initrd文件sbin lib等版本太老,新的系统组件命令不兼容,所以此时需要整一个完全新的系统组件。
经过搜索以及查找目前找到了ubuntu-base 基础镜像!
ubuntu-img基础组件 ubuntu-base 基础组件在此;Ubuntu 针对不同的 CPU 架构提供相应的 ubuntu base 根文件系统,有 amd64(64 位 X86)、 armhf、 i386(32 位 X86)、 powerpc、 ppc64el 等系统。
解压缩 ubuntu base 根文件系统
tar -xvf ubuntu-base-18.04.5-base-amd64.tar.gz -C rootfs
配置base跟文件系统
cp /etc/resolv.conf rootfs/etc/resolv.conf
同时替换 rootfs/etc/apt/sources.list 目前一般替换为aliyun等镜像源
编写挂在脚本
#!/bin/bash mnt() { echo "mount ------ing" 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 sudo chroot ${2} } umnt() { echo "umount-----ing" 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 "For example: mount -m /media/sdcard/rootfs" echo "" fi
修改脚本的权限 chmod a+x mountrootfs.sh
执行挂在chroot动作;
./mountrootfs.sh -m rootfs
于是变切换到了ubuntu-base的根文件系统中
安装所需要的的组件
此时已经进入到了chroot 环境,可以安装当前所需要的的组件
apt update apt install sudo language-pack-en-base ssh net-tools ethtool apt install cryptsetup
此时可以添加管理员账号 使用passwd useradd 等进行操作
到目前为止已经按照需求修改了一份跟文件系统。剩下的就是需要将它打包
镜像打包
首先用 dd 工具创建一个空文件,这里conut的大小参考你的根文件系统(rootfs)的大小,这里生成 1G
dd if=/dev/zero of=LeeUbuntuBase.img bs=1M count=1024
使用 mkfs.ext4 来格式化镜像文件
mkfs.ext4 -F -L rootfs LeeUbuntuBase.img
将该镜像文件挂载到一个文件夹上,来读写。将你定制好的根文件系统(rootfs文件夹内)内的文件拷贝到挂载的文件夹内以写入到 img 文件内。
mkdir LeeUbuntuBase mount LeeUbuntuBase.img LeeUbuntuBase cp -rfp rootfs/* LeeUbuntuBase/
- -p:不拷贝符号链接的目标文件,仅拷贝该符号链接
由于项目安全需求, 实际处理过程中一般会对rootfs镜像加密 ;具体涉密就不说了。
核心是
- 要找到ubuntu-base 基础镜像
- mount 后chroot
- apt 安装需要组件
- 裁剪文件系统
- 根据项目需求压缩 加密
http代理服务器(3-4-7层代理)-网络事件库公共组件、内核kernel驱动 摄像头驱动 tcpip网络协议栈、netfilter、bridge 好像看过!!!!
但行好事 莫问前程
--身高体重180的胖子

浙公网安备 33010602011771号