裁剪Linux小系统
一)从linux本身系统上裁剪出来一个小系统。
博客目的和实现功能:
从本身存在的系统上新添加一块硬盘,做一个grub引导,然后把新加的硬盘做好后,加上网卡驱动,放到其余的主机上能正常进入使用,ping通外网即可。
1)先挂载一个新的磁盘——》给磁盘分区-》格式化-》挂载。
/dev/sdb1 1 14 112423+ 83 Linux /dev/sdb2 15 146 1060290 83 Linux
mke2fs -t ext4 /dev/sdb1 mke2fs -t ext4 /dev/sdb2
2)创建两个目录,挂载使用。
mkdir /mnt/{boot,sysroot} mount /dev/sdb1 /mnt/boot/ mount /dev/sdb2 /mnt/sysroot/
3)安装grub到目标磁盘。
[root@station106 ~]# grub-install --root-directory=/mnt /dev/sdb Probing devices to guess BIOS drives. This may take a long time. Installation finished. No error reported. This is the contents of the device map /mnt/boot/grub/device.map. Check if this is correct or not. If any of the lines is incorrect, fix it and re-run the script `grub-install'. (fd0) /dev/fd0 (hd0) /dev/sda (hd1) /dev/sdb
4)复制源主机上的引导程序到目标磁盘上。
cp /boot/vmlinuz-2.6.32-358.el6.x86_64 /mnt/boot/vmlinuz cp /boot/initramfs-2.6.32-358.el6.x86_64.img /mnt/boot/initramfs.img
5)创建一些文件放到根系统上。
[root@station106 ~]# mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys, dev, lib, lib64, bin, sbin, boot, srv, mnt, media, home, root} mkdir: created directory `/mnt/sysroot/{etc' mkdir: created directory `/mnt/sysroot/{etc/rc.d,usr,var,proc,sys,' mkdir: created directory `dev,' mkdir: created directory `lib,' mkdir: created directory `lib64,' mkdir: created directory `bin,' mkdir: created directory `sbin,' mkdir: created directory `boot,' mkdir: created directory `srv,' mkdir: created directory `mnt,' mkdir: created directory `media,' mkdir: created directory `home,' mkdir: created directory `root}'
6)移植bash和一些需要的命令道根系统中。让裁剪好的小系统也能正常使用。
我这里用的脚本实现的。
#!/bin/bash target=/mnt/sysroot(定义一个变量) read -p "enter a command:" cmd(交互模式) clearcmd() { (定义个函数,函数名字为clearcmd) if which $cmd &> /dev/null;then (如果输出的命令存在则放到位桶) cmdpath=`which --skip-alias $cmd` (这里特殊用法--skip-alias是为了跳出别名) else (不存在就显示not,则以退出码为5退出) echo "Not such command" exit 5 fi } cmdcopy() { (在定义一个函数,函数名为cmdcopy) cmddir=`dirname $cmdpath` (截取命令的头文件) [ -d ${target}{cmddir} ] || mkdir -p ${target}${cmddir} 判断/mnt/sysroot下的截取的命令头文件是否存在。或者创建。 [ -f ${target}${1} ] || cp $1 ${target}${cmddir} 检测文件是否存在$1传递的是cmdpath。 } libcopy() { (定义一个函数,名字为,libcopy) for lib in `ldd $1 | grep -o "/[^[:space:]]\{1,\}"`;do (循环命令库文件) libdir=`dirname $lib` (定义解出来的库目录) [ -d ${target}${libdir} ] || mkdir -p ${target}${libdir} [ -f ${target}${lib} ] || cp $lib ${target}${libdir} done } while true;do 为真进入循环 read -p "enter a command:" cmd if [ "$cmd" == 'quit' ];then 等于quit就退出。 echo "quit" exit 6 fi clearcmd $cmd 调用第一个函数。为5就是不存在跳出循环 [ $? -eq 5 ] && continue cmdcopy $cmdpath 调用函数 libcopy $cmdpath调用函数 done
执行这个脚本bash cp.sh复制过去一些需要的命令和库文件,需要用到mount,ls,ifconfig,route,ping。
7)提供grub配置文件。
vim /mnt/boot/grub/grub.conf default=0 默认启动第一个内核 timeout=5 启动显示时间 title shunzi Linux 标题 root (hd0,0) 第一个磁盘的第一个分区 kernel /vmlinuz ro root=/dev/sda2 quiet selinux=0 init=/bin/bash 内核文件 initrd /initramfs.img 额外驱动文件。
8)添加init程序。实现模块加载能ping通外网。
vim /mnt/sysroot/sbin/init #!/bin/bash echo -e "welcome to \033[34 lixianshun Tiny\033[0m Linux" mount -n -t proc proc /proc mount -n -t sysfs sysfs /sys insmod /lib/modules/e1000.ko [ $? -eq 0 ] && echo -e "Load e1000 module succeeded [\033[32mOK\033[0m ]" ifconfig lo 127.0.0.1/8 ifconfig eth0 192.168.1.10/24 route add -net 0.0.0.0 gw 192.168.1.253 mount -n -o remount,rw /dev/sda2 / /bin/bash
添加权限chmod +x sbin/init
添加过init程序后,grub.conf里的init=/bin/bash改为/sbin/init,不改默认也会需找init。
9)把源主机上的网卡驱动复制已到目主机。
mkdir -p /mnt/sysroot/lib/modules/ cp /lib/modules/2.6.32358.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/modules/
10)关闭源系统,启动另一台宿主机,把做好的这个硬盘放上,直接启动。进入到了bash界面,里面能用的命令比较少,因为这里取决于你添加的命令。可以测试ping外网。和查看路由。发现都是ok的。
转载于:https://blog.51cto.com/shunzi/1367850
裁剪Linux小系统相关推荐
- 私人定制---打造属于自己的linux小系统
为什么80%的码农都做不了架构师?>>> 一.前言 linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个linux爱好者都为其贡 ...
- Centos 6.8 为自己打造Linux小系统
一.前言 Linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux内核还是开源软件等方面,都为我 ...
- 为自己打造Linux小系统
为自己打造Linux小系统 一.前言 Linux操作系统至1991.10.5号诞生以来,就源其开源性和自由性得到了很多技术大牛的青睐,每个Linux爱好者都为其贡献了自己的一份力,不管是在Linux ...
- 基于busybox的Linux小系统制作 (initrd)
我们有时候有需要在busybox基础上,制作linux,可是却不知道具体怎么做,这里将对基于busybox的linux小系统制作做出详细的步骤说明. 准备环境: 1.一个Redhat完整系统的虚拟机, ...
- 编译内核,busybox,dropbear组装linux小系统
应用程序使用以下软件 busybox提供命令环境 dropbear提供ssh服务实现远程管理. 查看本物理机的硬件,来确认编译内核时选择相应的驱动.硬件信息获取方法: cat /proc/cpuinf ...
- rootfs 制作ubuntu_Ubuntu12笔记: 基于busybox的Linux小系统制作
开发环境:Ubuntu 12.04 开发板:mini2440 256M NandFlash 64M SDRAM 交叉编译器:arm-linux-gcc 4.4.3点此可下载 BusyBox版本:bu ...
- linux下大文件裁剪,Linux系统裁剪(2)之Linux系统裁剪
1.这里使用交叉编译的思想,我在Redhat6.4上添加一个硬盘,将该硬盘分区以及安装好MBR之后,再将其挂载到另一个新建的虚拟机上,注意该虚拟机在创建时我只使用了这一个处理好的硬盘. 2.怎么添加新 ...
- flash小黄油安卓_体验谷歌的Windows、安卓、Linux三合一系统,一个U盘足以
「本期内容标签」 安卓 iOS 电脑 小程序 网站 游戏 教程 前段时间很火的新闻当属华为的鸿蒙系统,说的是系统将在web端.电脑端.手机端通用一套,也就是真正的全平台打通. 相信未来的系统肯定是这样 ...
- deepin(深度linux)dde-dock系统监控小插件(网速CPU内存)
转载自deepin(深度linux)dde-dock系统监控小插件(网速CPU内存),仅用作个人学习备份,Mark一下 花了一周时间,研究了dde-dock官方插件开发文档和sonichy大神的项目, ...
最新文章
- 英语影视台词---四、Sideways
- python安装orm_Python ORM框架之 Peewee入门
- 信号分解:标架、对偶标架、紧标架
- 2017年10月08日 上学
- 经典的JAVA面试题
- linux cpu load 详解,理解linux cpu load - 什么时候应该担心了
- 53 - II. 0~n-1中缺失的数字
- kvm 网络配置及克隆
- calibre部署指南:docker一键部署calibre在线书库
- 国家企业信用信息查询工商数据爬虫
- ​【Flutter小记7】​Mac M1 使用 pod install编译常见两种错误解决方案(CocoaPod Error | LoadError)
- Maximo 容器化改造试验
- 以AI赋能企业数智化转型 容联“云端”服贸会完美收官
- 树的直径,树的中心,树的重心
- 畅捷通T+ v17任意文件上传漏洞复现
- 2018-08-08 Mac使用中的一些实用设置
- unity之环状图片轮播
- gridview ItemTemplate下绑定数据
- 数字孪生银行项目经典案例
- 中国服务器芯片龙头股票,4只中国芯片龙头股