|
⑴、利用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.ko firmware jbd.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
- vim grub.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硬盘新建一个系统测试结果如下
|
|
|