阿使得肌肤· 发表于 2018-5-12 06:03:58

linux系统组成之小型RedHat little linux制作一

  ⑴、利用Redhat.Enterprise.Linux.v5.8为环境宿主机,对RedHat系统进行精简,制作一个能实现linux级别功能的微型linux小系统。
  环境搭建:RedHat Enterprise Linux 5.8系统,新增一块IDE接口的硬盘。
  具体制作步骤:
  1、新增加一块IDE硬盘,新建两个分区hda1和hda2,分别挂载到/mnt/boot,/mnt/sysroot下。
  命令如下:

[*]  fdisk /dev/hda ....
[*]  partprobe /dev/hda
[*]  mke2fs -j /dev/hda1
[*]  mke2fs -j /dev/hda2
[*]  fdisk -l
结果如下

  挂载硬盘:
  


[*]  mkdir -p /mnt/boot
[*]  mkdir -p /mnt/sysroot
[*]  mount /dev/hda1 /mnt/boot/
[*]  Mount /dev/hda2 /mnt/sysroot/
[*]  mount
  
2、安装内核:利用系统内的内核直接复制过来利用,并放在新建的分区1下命名为vmkinux
  


[*]  cp /boot/vmlinuz-2.6.18-e.. /mnt/boot/vmlinuz/mnt/boot/vmlinuz
  3、制作initrd:利用系统原有的initrd文件制作新的initrd
  

  

vim init//把不需要的模块都给注释点,启动的时候不在加载,保留下面的即可



把加载root目录的路径修改为/dev/hda2



删除lib下不需要的库文件,只保留firmware、ext3.kofirmwarejbd.ko即可


重启打包并复制到/mnt/boot下。重新命名为initrd.gz



[*]  find . | cpio -H newc --quiet -o | gzip -9 >/mnt/boot/
[*]  find . | cpio -H newc --quiet -o | gzip -9 >/mnt/boot/initrd.gz
至此inited制作完毕
4、系统引导之grub的制作:
  

安装grub:grub-install --root-directory=/mnt /dev/hda

进入grub文件,配置grub.conf文件

[*]  cd /mnt/boot/grub/grub.conf
[*]  vimgrub.cong
[*]  加入以下命令
[*]  default=0
[*]  timeout=3
[*]  title chris tille linux
[*]  root (hd0,0)
[*]  kernel /vmlinuz
[*]  initrd /initrd.gz
[*]  grub配置完成。
5、建立真正的根目录/mnt/sysroot

  

   新建目录并把原系统内的initrd展开到此文件,对init进行编辑


[*]  cd /mnt
[*]  mkdir test
[*]  cd test
[*]  zcat /boot/initrd-2.6.18-308.el5.img | cpio -id

[*]  cd /mntsysroot/
[*]  创建必须的文件目录
[*]  mkdir -p sys etc/{rc.d,init.d} root boot bin sbin var{log,lock,run} dev home tmp lib usr/{bin,sbin}
[*]  配置系统启动文件etc/inittab,添加如下内容
[*]  id:3:initdefault:
[*]  si::sysinit:/etc/rc.d/rc.sysinit
[*]  配置增加启动脚本/etc/rc.d/rc.sysinit,添加如下内容
[*]  vim etc/rc.d/rc.sysinit
[*]  #!/bin/bash
[*]  #
[*]  echo "welecome chris little linux"
[*]  /bin/bash
[*]  对脚本增加执行权限
[*]  chmod +x etc/rc.d/rc.sysinit
  
6、增加系统运行环境和命令(由于命令运行的时候需要依赖一些库文件,所以此利用一个脚本增加命令)

[*]  脚本addshell.sh如下
[*]  #!/bin/bash
[*]  #!/bin/bash
[*]  #
[*]  DEST=/mnt/sysroot
[*]  DIRE() {
[*]  if [ -d $DEST/$CMD ]; then
[*]  echo "this direstory is inxted"
[*]  else
[*]  mkdir -p $DEST/$CMD &> /dev/null
[*]  echo "$CMD is a directory,mkdir finished"
[*]  fi
[*]  }
[*]  libcp() {
[*]  LIBPATH=${1%/*}
[*][ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH
[*][ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished."
[*]  }
[*]  bincp() {
[*]  CMDPATH=${1%/*}
[*][ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH
[*][ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH
[*]  for LIB in`ldd $1 | grep -o "/.*lib/[^[:space:]]\{1,\}"`; do
[*]  libcp $LIB
[*]  done
[*]  }
[*]  read -p "Your command: " CMD
[*]  until [ $CMD == 'q' ]; do
[*]  which $CMD &>/dev/null
[*]  MM=`echo $?`
[*]  if [ $MM -eq 0 ]; then
[*]  ! which $CMD && echo "Wrong command" && read -p "Input againe: " CMD && continue
[*]  COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
[*]  bincp $COMMAND
[*]  echo "copy $COMMAND finished."
[*]  read -p "Continue:" CMD
[*]  else
[*]  DIRE
[*]  read -p "Continue:" CMD
[*]  fi
[*]  done
增加系统的第一个进程init
增加系统的bash等



  至此:一个极其简单的小linux建立成功,sync同步数据,利用IDE硬盘新建一个系统测试结果如下
  

页: [1]
查看完整版本: linux系统组成之小型RedHat little linux制作一