进行分区,来放置虚拟小linux系统,并通知内核进行读取

小linux系统的制作_linux制作 

小linux系统的制作_linux制作_02 

格式化文进系统,格式化为ext3文件系统,

  1. [root@localhost ~]# mke2fs -j /dev/hda1  
  2. [root@localhost ~]# mke2fs -j /dev/hda2 

建立boot和sysroot目录,进行挂载,作为小系统的boot分区和 "/"分区,并且进行挂载

小linux系统的制作_linux制作_03

拷贝内核的配置文件,作为小系统的内核配置文件

小linux系统的制作_linux制作_04

接下来,我们来制作initrd文件,为系统提供开机时所需要的基本驱动。建立一个目录,用来制作新的initrd文件,展开initrd到这个目录,vim init 注释掉不用的语句,删除掉不用的模块来减小initrd的大小,方便运行

小linux系统的制作_linux制作_05 

进行打包,送到/mnt/boot/下为initrd.gz,
我们可以查看一下/mnt/boot/

小linux系统的制作_linux制作_06

 安装grub

小linux系统的制作_linux制作_07 

查看/mnt/boot/是否有grub,编辑grub配置文件grub.conf

小linux系统的制作_linux制作_08

这样boot下的文件等就ok啦。

下来就是我们经常使用的根目录/mnt/sysroot/是作为根目录,创建各个子目录。例如

 

  1. mkdir -pv  proc  sys  etc/init.d  tmp  dev  sysroot var/{log,lock,run} home root boot  

编辑/etc/inittab

  1. id:3:initdefault:  
  2. si::sysinit:/etc/rc.d/rc.sysinit  
  3.  
  4. l0:0:wait:/etc/rc.d/rc 0 
  5. l3:3:wait:/etc/rc.d/rc 3 
  6. l6:6:wait:/etc/rc.d/rc 6 
  7.  
  8. 1:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty1  
  9. 2:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty2   

     这个过程是为了实现系统初始化,每个级别所执行的脚本,还有远程登录

编辑/mnt/sysroot/etc/rc.d/init.d/rc.sysinit脚本,这个脚本来进行系统初始化,并给文件增加权限

  1. #!/bin/bash  
  2. #  
  3. echo -e "\tWelcome to \033[34mMageEdu\033[0m Linux" 
  4.  
  5. echo "Remount rootfs..." 
  6. mount -n -o remount,rw /  
  7.  
  8. echo "Set the hostname..." 
  9. [ -f /etc/sysconfig/network ] && . /etc/sysconfig/network  
  10. [ -z $HOSTNAME -o "$HOSTNAME" == '(none)' ] && HOSTNAME=localhost  
  11. /bin/hostname $HOSTNAME  
  12.  
  13. echo "Initializing network device..." 
  14. /sbin/insmod /lib/modules/mii.ko  
  15. /sbin/insmod /lib/modules/pcnet32.k 
  1. chmod  +x /mnt/sysroot/etc/rc.d/rc.sysinit 

建立个级别所执行的脚本文件,以达到各个级别的执行

  1. /etc/rc.d/init.d/functions脚本,可用于控制服务脚本的信息显示:
  2. #!/bin/bash
  3. SCREEN=`stty -F /dev/console size 2>/dev/null`
  4. COLUMNS=${SCREEN#* }
  5. [ -z $COLUMNS ] && COLUMNS=80
  6. SPA_COL=$[$COLUMNS-14]
  7. RED='\033[31m'
  8. GREEN='\033[32m'
  9. YELLOW='\033[33m'
  10. BLUE='\033\34m'
  11. NORMAL='\033[0m'
  12. success() {
  13. string=$1
  14. RT_SPA=$[$SPA_COL-${#string}]
  15. echo -n "$string"
  16. for I in `seq 1 $RT_SPA`;do
  17. echo -n " "
  18. done
  19. echo -e "[ ${GREEN}OK${NORMAL} ]"
  20. }
  21. failure() {
  22. string=$1
  23. RT_SPA=$[$SPA_COL-${#string}]
  24. echo -n "$string"
  25. for I in `seq 1 $RT_SPA`;do
  26. echo -n " "
  27. done
  28. echo -e "[ ${RED}FAILED${NORMAL} ]"
  29. }


/etc/rc.d/init.d/tserver脚本,测试SysV服务的定义格式

  1. #!/bin/bash  
  2. #  
  3. # chkconfig: 35 66 33  
  4. # description: test service script  
  5. #  
  6. . /etc/rc.d/init.d/functions  
  7.  
  8. prog=tserver  
  9. lockfile=/var/lock/subsys/$prog  
  10.  
  11. start() {  
  12.   touch $lockfile  
  13.   [ $? -eq 0 ] && success "Starting $prog" || failure "Staring $prog" 
  14. }  
  15.  
  16. stop() {  
  17.   rm -f $lockfile  
  18.   [ $? -eq 0 ] && success "Stopping $prog" || failure "Stopping $prog" 
  19. }  
  20.  
  21. status() {  
  22.   if [ -f $lockfile ]; then  
  23.     echo "Running..." 
  24.   else 
  25.     echo "Stopped..." 
  26.   fi  
  27. }  
  28.  
  29. usage() {  
  30.   echo "Usage: $prog {start|stop|status|restart}" 
  31. }  
  32.  
  33. case $1 in 
  34. start)  
  35.   start ;;  
  36. stop)  
  37.   stop ;;  
  38. restart)  
  39.   stop   
  40.   start  
  41.   ;;  
  42. status)  
  43.   status  
  44.   ;;  
  45. *)  
  46.   usage  
  47.   exit 1 
  48.   ;;  
  49. esac     

编辑/mnt/sysroot /etc/rc.d/rc.实现关机和重启

小linux系统的制作_linux制作_09

建立连接文件

小linux系统的制作_linux制作_10

让根文件系统进行读写挂载 /etc/fstab

  1. /etc/fstab文件示例:  
  2. /dev/hda2   /   ext3    defaults    0 0  
  3. /dev/hda1   /boot   ext3    defaults    0 0  
  4. proc        /proc   proc    defaults    0 0  
  5. sysfs       /sys    sysfs   defaults    0 0 

 

  1. 启动网络服务,需要移植模块  
  2.     vim etc/rc.d/init.d/network  
  3.     #!/bin/bash  
  4. #  
  5. # chkconfig: 35 09 90  
  6. #  description:network  
  7. prog=network 
  8.  
  9. ./etc/rc.d/init.d/functions  
  10.  
  11. CONF=/etc/sysconfig/network-script/ifcfg-eth0  
  12.  
  13. . $CONF  
  14. NETMASK=16 
  15. start() {  
  16.  ifconfig eth0 $IPADDR/$NETMASK  up  
  17.  [ -z $GATEWAY ]&& route add default gw $GATEWAY  
  18. }  
  19.  
  20. stop() {  
  21.  ifconfig eth0 down  
  22. }  
  23.  
  24. status() {  
  25.   ifconfig eth0  
  26. }  
  27.  
  28.  ifconfig eth0 $IPADDR/$NETMASK  up  
  29.  [ -z $GATEWAY ]&& route add default gw $GATEWAY  
  30. }  
  31.  
  32. stop() {  
  33.  ifconfig eth0 down  
  34. }  
  35.  
  36. status() {  
  37.   ifconfig eth0  
  38. }  
  39.  
  40. usage() {  
  41.   echo "$prog: {start|stop|restart|status}"  
  42. }  
  43.  
  44. case $1 in  
  45. start)  
  46.   start  
  47.   success "Config network card eth0"  
  48.   ;;  
  49. stop)  
  50.   stop  
  51.   success "Stop  network card eth0"  
  52.   ;;  
  53. restart)  
  54.   stop  
  55.   start  
  56.   success "Restart network card eth0"  
  57.   ;;  
  58. status)  
  59.   status  
  60.   ;;  
  61. *)  
  62.   usage  
  63.   exit 1  
  64.   ;;  
  65. esac 

编辑/mnt/sysroot/etc/sysconfig/network-scripts/ifcfg-eth0

小linux系统的制作_linux制作_11 

这样小系统就好啦。可以使用终端登录,还有地址,不过需要拷贝一些基本命令,这些基本命令大家视情况而定,这个步骤拷贝起来很麻烦,这里为大家提供一个脚本轻松实现,仅供参考:

  1. #!/bin/bash  
  2. #  
  3. DEST=/mnt/sysroot  
  4. libcp() {  
  5.   LIBPATH=${1%/*}  
  6.   [ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH  
  7.   [ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished." 
  8. }  
  9.  
  10. bincp() {  
  11.   CMDPATH=${1%/*}  
  12.   [ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH  
  13.   [ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH  
  14.  
  15.   for LIB in  `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do  
  16.     libcp $LIB  
  17.   done  
  18. }  
  19.  
  20. read -p "Your command: " CMD  
  21. until [ $CMD == 'q' ]; do  
  22.    ! which $CMD &> /dev/null && echo "Wrong command" && read -p "Input again:" CMD && continue 
  23.   COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`  
  24.   bincp $COMMAND  
  25.   echo "copy $COMMAND finished." 
  26.   read -p "Continue: " CMD  
  27. done 

小linux系统的制作_linux制作_12 

ok啦,希望对各位有所帮助。