设为首页 收藏本站
查看: 1872|回复: 1

[经验分享] 自己的linux系统

[复制链接]

尚未签到

发表于 2018-5-24 07:24:44 | 显示全部楼层 |阅读模式
  前言   
   随着接触Linux的慢慢深入、对Linux也有了一个基本认识了吧,慢慢的接触系统内核、系统配置文件、在了解Linux的系统启动流程后,现在来总结一下一个简单的Linux系统的裁减方法和步骤,一个只有内核文件和几个简单的命令的小Linux系统,现在就开始以下裁减:   
正文    
   首先在一个虚拟机上新增一块硬盘、这样等裁减好了之后可以把这块硬盘挂载到别的虚拟机上去、运行自已裁减的那个Linux系统;
DSC0000.jpg

DSC0001.jpg

DSC0002.jpg

DSC0003.jpg

DSC0004.jpg

  添加完硬盘后就启动虚拟机了;
  查找一下刚才添加的硬盘:   
   # fdisk -l /dev/sd[a-z]
DSC0005.jpg

  添加完硬盘之后就应该分区格式化硬盘了;   
   # fdisk /dev/sdb
  这里就自己分区好了、很简单的、比windows简单多了!!!   
   分区完后就给这两个分区格式化了;   
   格式化指定文件系统类型为ext4   
   # mke2fs -t ext4 /dev/sdb1   
   # mke2fs -t ext4 /dev/sdb2
DSC0006.jpg

  格式化完了之后就看到刚才分的两个分区列表了;   
   而后在/mnt目录下创建两个目录分别挂载到刚分好的那两个分区上去:   
   # mkdir -pv /mnt/{boot,sysroot}
  挂载目录/mnt/boot到/dev/sdb1分区上去;   
   挂载目录/mnt/sysroot到/dev/sdb2分区上去;   
   # mount /dev/sdb1 /mnt/boot/   
   # mount /dev/sdb2 /mnt/sysroot/
DSC0007.jpg

  而后就往sdb上安装grub;   
   创建的boot在哪就指定到哪个路径下去,然后再指定安装在哪块硬盘上,grub安装完之后就会生成/mnt/boot/grub/目录、grub目录下就会生成相关的文件   
   # grub-install --root-directory=/mnt /dev/sdb
DSC0008.jpg

DSC0009.jpg

  现在我们把宿主机里的内核文件给sdb拷贝一份到/mnt/boot/目录下,名字我们就叫mvlinuz、版本号我们就不带了、init文件也拷贝一份到/mnt/boot/目录下,名字就简单的改为initramfs.img   
   # cp /boot/vmlinuz-2.6.32-431.el6.x86_64 /mnt/boot/vmlinuz   
   # cp /boot/initramfs-2.6.32-431.el6.x86_64.img /mnt/boot/initramfs.img
DSC00010.jpg

  完整的linux有哪些目录呢、那我们就得来创建一下这些个目录了;之前我们挂载的那个sysroot的目录都没有到、那我们就在这个目录下创建这些目录、切换到/mnt/sysroot/下:   
   # mkdir -pv /etc/rc.d root boot dev proc sys tmp var usr srv lib lib64 bin sbin home mnt media
DSC00011.jpg

  到这里了、如果我们的第二块硬盘上再有个可执行程序是不是就可以运行了呢、那我们不仿移植一些程序到我们的第二块硬盘上去、我们之前写了一个移植可执行程序的脚本、包括程序所依赖的库文件也一并移植过去了、代码如下:
  #!/bin/bash
  #
  #定义目标目录、也就是要拷贝到的那个目录
  target=/mnt/sysroot
  #声明清理命令的方法
  clearCmd() {
  #判断命令是否存在、如果不存在就提示没有找到命令
  if which $cmd &> /dev/null; then
  #获取命令的路径
  cmdPath=`which --skip-alias $cmd`
  else
  echo "No such command"
  return 5
  fi
  }
  #定义拷贝命令的方法
  cmdCopy() {
  #获取命令路径、只取目录部分
  cmdDir=`dirname $1`
  #判断目录是否存在、不否在就创建
  [ -d ${target}${cmdDir} ] || mkdir -p ${target}${cmdDir}
  #判断要拷贝的命令否存在在、不存在就拷贝
  [ -f ${target}${1} ] || cp $1 ${target}${cmdDir}
  }
  #定义拷贝库文件的方法
  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
  echo "quit"
  exit 0
  fi
  #调用清理命令方法
  clearCmd $cmd
  [ $? -eq 5 ] && continue
  #调用拷贝命令和库文件的方法
  cmdCopy $cmdPath
  libCopy $cmdPath
  done
DSC00012.jpg

DSC00013.jpg

  接着切换到/mnt/sysroot/bin/目录下、给bash创建一个软链接、因为系统默认找shell都是找sh   
   # ln -sv bash sh     
   现在我们切换到/mnt/sysroot/目录试一下看就知道了:   
   # chroot /mnt/sysroot/
DSC00014.jpg

  看、我们的小根可以用了     
   这里我们再提供一个init脚本给这个小系统,在/sbin/目录下,这个init要通过调用/etc/inittab这个配置文件,然后再去执行/etc/rc.d/rc.sysinit下的初始化脚本、这样的话那我们就把初始化脚本的内容拿到init里来执行;   
   这个脚本到底要做哪些操作呢:   
   # vim /mnt/sysroot/sbin/init
  #!/bin/bash
  #
  #打印欢迎信息
  echo -e "\tWecome to \033[34m Mini Linux-2.6 OS\033[0m"
  #挂载两个伪文件系统;-t后面跟文件系统类型
  mount -n -t proc proc /proc
  mount -n -t sysfs sysfs /sys
  #启动后再以读写方式重新挂载/dev/sda2上,这样的话就要把宿主机关机再后再新运行这个小系统了
  mount -n -o remount,rw /dev/sda2 /
  #运行bin下的bash
  /bin/bash
  保存退出后给init一个可执行权限:   
   chmod +x /mnt/sysroot/sbin/init   
   此时我们就要给这块硬盘上的小系统提供一个grub的配置文件了,如果不写这个配置文件也可以启动、但一进入就会进到grub小shell中让你配置系统的grub信息;   
   # vim /mnt/boot/grub/grub.conf
  default=0
  timeout=5
  title Mini Linux OS
  root(hd0,0)
  kernel /vmlinuz ro root=/dev/sda2 selinux=0 init=/sbin/init
  initrd /initramfs.img
  OK,保存退出!         
   同步一下到对应的磁盘上:   
   # sync     
   经过以上的操作、下面我们就来创建一个新的虚拟机、然后选择虚拟机使用我们刚才装小系统的那块硬盘、CentOS_SecondSCSI.vmdk;
DSC00015.jpg    
   好了、我们把已经运行的虚拟机都挂载起,运行我们刚才创建好的那个有CentOS_SecondSCSI.vmdk磁盘的虚拟机,到这里我们就看到我们裁减的小系统跑起来了、看到我们自己定义的Min Linux-2.6 OS了!    DSC00016.jpg

  进到我们的小系统里去了:
DSC00017.jpg

  接下来我们要在小系统里装载网卡、但是要确保被装载的网卡驱动没有使用、我们可以用lsmod这个命令查看一下:这里以e1000为例来说明问题、我这里的虚拟机上已经装有了、那我就先卸载了再装载上去:   
   在宿主机上查看当前内核装载的模块信息:   
   # lsmod   
   卸载e1000网卡驱动:   
   # modprobe -r e1000   
   要装载的话用下面命令即可:   
   # modprobe e1000   
   那怎么样把e1000的内核模块拷贝到我们的小系统里面里、让他装上去、并且启用网络功能呢、首先确保我们系统中的piv4没有做成模块,这里我们的ipv4没有做成模块、那就去移植这个模块吧:   
   首先给他创建一个目录、切换到/mnt/sysroot/lib目录中:   
   # mkdir modules   
   再拷贝我们系统上的内核模块到这个目录里去   
   # cp /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/e1000/e1000.ko /mnt/sysroot/lib/modules/   
   再移植一些所需要用到的命令:insmod、rmmod、ifconfig、ip、ping   
   OK、同步一下我们就可以重新启动小系统了   
   # sync   
   进到小系统里、敲命令吧;   
   # insmod /lib/modules/e1000.ko   
   # ifocnfig eth0 176.16.251.100/16   
   # ping -c 3 176.16.251.100   
DSC00018.jpg
DSC00019.jpg

DSC00020.jpg

  好了、到这里我们就基本完成了小系统的裁减了、要想装载更多的功能、后面可以自己再添加、想装什么就装什么、要想系统启动就有网络那可以在init中设置一下、在init中加上ifconfig eth0 176.16.251.100/16就可以了、init要写得更好自己后期再慢慢改吧、加慢判断和显示颜色什么的等等:   
结语:   
   好像东西很多的样子、其实也不是很多了、可能我比较啰嗦、噼里啪啦的写了一大堆吧、其实操作也不多、就是要理清步骤就很清晰了、不是吗、好吧、就到此结束吧、人无完人、有错或有什么不妥还望大神指点哦!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-480443-1-1.html 上篇帖子: 自制小型Linux 下篇帖子: Linux简介总结
累计签到:567 天
连续签到:1 天
发表于 2018-5-24 08:42:47 | 显示全部楼层
图片太小看不清

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表