您的位置:首页 > 运维架构 > Linux

CentOS 7.1 linux 裁剪 嵌入式 系统 定制

2015-11-13 21:59 411 查看
本文原地址: http://blog.csdn.net/zhangrui_fslib_org/article/details/49824353
转载请注明出处,有疑问或错误请发邮件到zhangrui@fslib.org

长期在linux做开发,一直使用centos做系统,现在项目越来越多,升级维护越来越复杂

权衡了很久,决定使用裁剪版系统,所有的升级维护都使用更新的方式,支持单包更新;

1,安装系统

用centos7.1光盘最小化安装系统到u盘A;

2,裁剪系统

在完整系统下,插入u盘B,用DD复制一份系统到U盘B,修改u盘B启动分区的uuid,修改/etc/fstab中启动分区的uuid为u盘B的启动分区的UUID,修改u盘B中的grub.cfg中的启动分区UUID为u盘B的启动分区的UUID; 此时两个U盘都可以启动系统了。

用u盘B启动系统,根据自己的经验删除部分数据,然后重启,如果能启动,就继续删除,如果不能启动,就让系统从u盘A启动,把刚才删除的数据拷贝回去,再删除上次删除数据上的一个或一部分,重复此步骤直到系统达到你想要的大小为此;

3,裁剪系统的启动流程

用grub2做引导(grub2已支持md5数据校验),grub2脚本内查找符合预设值的md5校验和的内核和initrd.img(内核和initrd上升级时不是替换而是写一份新的,这时有两份数据,如果升级写入硬盘的数据校验和正确就能升级成功,否则还能用旧的),保证这两个文件绝对正确,此时控制权限已由initrd.img内的某程序控制;

检查升级,此时initrd.img内的某程序会检查硬盘上某文件的状态,如果标记为升级状态并且所有所有模块的校验和上正常的,程序就会把系统的所有模块读出来解开并合并压缩成一个快照文件存在硬盘内;

加载根系统,此时initrd.img内的某程序会读取硬盘上的快照文件,解压出来,挂载为根系统;

启动系统,此时系统按centos的正常流程启动;

4,经我裁剪的系统预览

-rw-r--r-- 1 root root 5029136 Sep 25 01:10 2 //内核,升级后只会保留一份数据,升级过程中有两份,这个是centos原版;

-rw-r--r-- 1 root root 9214325 Oct 4 08:54 2.img //initrd,升级后只会保留一份数据,升级过程中有两份,这个我修改过的,加了一些驱动,删除了一些不用的东西;

-rw-r--r-- 1 root root 0 Oct 4 08:56 2.ok //内核标记,表示此份内核已经过校验并成功启动过;

drw-r--r-- 5 root root 1024 Sep 23 17:26 grub2 //引导

-rw-r--r-- 1 root root 15101639 Nov 13 14:10 system-1.0.7.0-1.5.img //系统15M,只有此模块系统可以登录,可用fdisk,top,cpio,gzip命令;

-rw-r--r-- 1 root root 14001 Oct 22 19:56 network-1.0.7.0-2.1.img //网络14k,有此模块就可修改网络;

-rw-r--r-- 1 root root 3071882 Nov 2 21:58 ssh-1.0.7.0-2.1.img //ssh远程控制3M,有此模块就可远程用ssh登陆系统;

-rw-r--r-- 1 root root 24393 Oct 22 19:56 telnet-1.0.7.0-2.1.img //telnet远程控制24k,有此模块就可远程用telnet登陆系统;

-rw-r--r-- 1 root root 548663 Nov 13 14:10 fsServer-1.0.0.0-3.2.img //自定义程序548k,有此模块可远程升级本系统,可远程查看本系统后台程序的命令行实时和历史打印信息;

-rw-r--r-- 1 root root 2805916 Nov 3 18:41 git-1.0.7.0-4.1.img //gti服务器2.8M,有此模块系统就是一个git服务器;

-rw-r--r-- 1 root root 414434 Oct 22 19:56 ngnix-1.0.7.0-4.1.img //web服务器414k,有此模块系统就是一个web服务器;

-rw-r--r-- 1 root root 269615 Oct 22 19:56 vsftpd-1.0.7.0-4.1.img //ftp服务器269k,有此模块系统就是一个ftp服务器;

-rw-r--r-- 1 root root 5640213 Oct 22 19:56 smb-1.0.7.0-4.1.img //windows局域网共享服务器5.6M,有此模块windows就可用局域网共享方式直接访问系统的数据;

-rw-r--r-- 1 root root 1587519 Nov 12 16:14 zfs-1.0.7.0-4.1.img //zfs文件系统工具和驱动1.5M,有此模块系统将拥有zfs的功能;

-rw-r--r-- 1 root root 1733459 Nov 5 22:23 php-1.0.7.0-5.1.img //php1.7M,有此模块系统拥有php功能;

-rw-r--r-- 1 root root 5071498 Oct 22 19:56 mariadb-1.0.7.0-5.1.img //mysql5M,有此模块系统就是mysql服务器;

-rw-r--r-- 1 root root 326005 Nov 13 14:22 sos-1.0.0.0-5.2.img //工程主模块326k,有此模块系统就是一个高性能的流媒体服务器;

-rw-r--r-- 1 root root 9912214 Oct 22 19:56 virtual-1.0.7.0-5.1.img //虚拟化9.9M,有此模块系统可虚拟windows,linux,苹果,unix;

-rw-r--r-- 1 root root 5038616 Oct 22 19:56 virtualtool-1.0.7.0-6.1.img //虚拟化的本地管理工具5M,有此模块可本地管理虚拟机;

-rw-r--r-- 1 root root 1646254 Oct 22 19:56 valgrind-1.0.7.0-99.1.img //调试用的内存工具1.6M,有此模块可诊断程序bug;

-rw-r--r-- 1 root root 1043320 Oct 22 19:56 vdisktool-1.0.0.0-99.1.img //虚拟硬盘工具1M,有此模块就可直接读写虚拟机磁盘文件,支持vmdk文件;

-rw-r--r-- 1 root root 993602 Oct 22 19:56 mariadbtool-1.0.7.0-99.1.img //mysql本地管理工具993k,有此模块可本地管理mysql数据库;

-rw-r--r-- 1 root root 28304 Nov 13 14:10 disktool-1.0.0.0-99.1.img //硬盘高级监控工具28K;

-rw-r--r-- 1 root root 134677 Oct 22 19:56 journalctl-1.0.7.0-99.1.img //journalctl134k,测试用;

-rw-r--r-- 1 root root 16565 Oct 22 19:56 chroot-1.0.7.0-99.1.img //客户定制

-rw-r--r-- 1 root root 628736 Oct 22 19:56 diskdriver-1.0.7.0-99.1.img //客户定制

-rw-r--r-- 1 root root 1074674 Oct 22 19:56 dracut-1.0.7.0-99.1.img //客户定制

-rw-r--r-- 1 root root 1 Nov 13 21:16 status //标记模块的状态,更新用

5,系统已知bug

grub2在升级时只有一份数据,如果正在升级grub2时断电系统可能无法开机;



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: