一、成功做好一个小Linux的前提准备 

1、挂载一块10G的IDE磁盘,并划分两个分区:(分别为/dev/hda1  +20M、/dev/hda2  +512M)  

# fdisk /dev/hda  

# partprobe /dev/hda  

074816619.png

# mke2fs -j /dev/hda1      格式化/dev/hda1  

074640745.png

# mke2fs -j /dev/hda2      格式化/dev/hda2  

074706951.png

# mkdir /mnt/{boot,sysroot}    创建两个目录  

# mount /dev/hda1 /mnt/boot     把/dev/hda1挂载到/mnt/boot下  

# mount /dev/hda2 /mnt/sysroot  把/dev/hda2挂载到/mnt/sysroot下  

# mount   查看挂载情况  

121235533.png

2、# cp /boot/vmlinuz-2.6.18-308.el5 /mnt/boot/vmlinuz  复制内核  

# mkdir test   创建test目录  

# cd test/     切换到test目录下  

# zcat /boot/initrd-2.6.18-308.el5.img | cpio -id  

进入init并编辑、修改里面的内容(前面带#的为要注释掉的信息)  

vim init  编辑脚本内容如下:

  1. #!/bin/nash  

  2. mount -t proc /proc /proc  

  3. setquiet  

  4. echo Mounting proc filesystem  

  5. echo Mounting sysfs filesystem  

  6. mount -t sysfs /sys /sys  

  7. echo Creating /dev  

  8. mount -o mode=0755 -t tmpfs /dev /dev  

  9. mkdir /dev/pts  

  10. mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts  

  11. mkdir /dev/shm  

  12. mkdir /dev/mapper  

  13. echo Creating initial device nodes  

  14. ......  

  15. insmod /lib/mptbase.ko  

  16. echo "Loading mptscsih.ko module"

  17. insmod /lib/mptscsih.ko  

  18. echo "Loading mptspi.ko module"

  19. insmod /lib/mptspi.ko  

  20. echo "Loading libata.ko module"

  21. insmod /lib/libata.ko  

  22. echo "Loading ata_piix.ko module"

  23. insmod /lib/ata_piix.ko  

  24. #echo "Loading dm-mod.ko module"

  25. #insmod /lib/dm-mod.ko   

  26. #echo "Loading dm-log.ko module"

  27. #insmod /lib/dm-log.ko   

  28. #echo "Loading dm-mirror.ko module"

  29. #insmod /lib/dm-mirror.ko   

  30. #echo "Loading dm-zero.ko module"

  31. #insmod /lib/dm-zero.ko   

  32. #echo "Loading dm-snapshot.ko module"

  33. #insmod /lib/dm-snapshot.ko   

  34. #echo "Loading dm-mem-cache.ko module"

  35. #insmod /lib/dm-mem-cache.ko   

  36. #echo "Loading dm-region_hash.ko module"

  37. #insmod /lib/dm-region_hash.ko   

  38. #echo "Loading dm-message.ko module"

  39. #insmod /lib/dm-message.ko   

  40. #echo "Loading dm-raid45.ko module"

  41. #insmod /lib/dm-raid45.ko   

  42. echo Waiting for driver initialization.  

  43. stabilized --hash --interval 1000 /proc/scsi/scsi 

  44. mkblkdevs  

  45. echo Scanning and configuring dmraid supported devices  

  46. echo Scanning logical volumes  

  47. lvm vgscan --ignorelockingfailure 

  48. echo Activating logical volumes  

  49. lvm vgchange -ay --ignorelockingfailure  vol0 

  50. resume LABEL=SWAP-sda3  

  51. echo Creating root device.  

  52. mkrootdev -t ext3 -o defaults,ro /dev/hda2   (此处的/dev/hda2为修改后的内容)  

  53. echo Mounting root filesystem.  

  54. mount /sysroot  

  55. echo Setting up other filesystems.  

  56. setuproot  

  57. echo Switching to new root and running init.  

  58. switchroot  

  59. 把上述文件归档压缩到/mnt/boot/目录下  

  60. find . | cpio -H newc --quiet -o | gzip -9 > /mnt/boot/initrd.gz 

  61. (newc指的是新规范的方式归档,支持更多的文件数量;--quiet指静默模式;-o指创建档案文件;gzip -9 指压缩的级别) 

3、安装grub并配置grub下的文件  

  1. # grub-install --root-directory=/mnt /dev/hda 

074857710.png

  1. # ls /mnt/boot/     检验boot下是否有grub  

074457178.png

  1. 编辑grub下的配置文件  

# vim /mnt/boot/grub/grub.conf  内容如下:

  1. default=0  

  2. timeout=3  

  3. title Mylinux  

  4.    root (hd0,0)  

  5.    kernel /vmlinuz  

  6.    initrd /initrd.gz  

5、切换到/mnt/sysroot目录下,创建几个etc目录下的文件    

  1. # cd /mnt/sysroot  切换到/mnt/sysroot目录下  

  2. # mkdir etc/rc.d/init.d bin sbin proc dev lib root mnt media var/{log,run,lock/subys,tmp} usr/{bin,sbin,local} tmp home opt boot -pv  创建一些需要用到的目录  

6、编辑etc/inittab文件  

vim etc/inittab   内容如下:  

  1. id:3:initdefault:  

  2. si::sysinit:/etc/rc.d/rc.sysinit  

7、编辑etc/rc.d/rc.sysinit文件  

vim etc/rc.d/rc.sysinit   内容如下:  

  1. #!/bin/bash  

  2. #  

  3. echo -e "\tWelcome to \033[34mMylinux\033[0m system"

  4. /bin/bash      

# chmod +x etc/rc.d/rc.sysinit   为其添加执行权限  

8、编辑bincp.sh文件  

vim bincp.sh  内容如下:  

  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. bincp() {  

  10.   CMDPATH=${1%/*}  

  11.   [ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH  

  12.   [ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH  

  13. for LIB in  `ldd $1 | egrep -o "/.*lib(64){0,1}/[^[:space:]]{1,}"`; do  

  14.     libcp $LIB  

  15.   done  

  16. }  

  17. read -p "Your command: " CMD  

  18. until [ $CMD == 'q' ]; do  

  19.    ! which $CMD && echo "Wrong command" && read -p "Input againe:" CMD && continue

  20.   COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`  

  21.   bincp $COMMAND  

  22.   echo "copy $COMMAND finished."

  23. read -p "Continue: " CMD  

  24. done  

# ./bincp.sh  测试bincp.sh  (测试时输入 init  ls   bash   q)  

# sync(同步几次)  

9、关闭虚拟机,挂载一块IDE磁盘大小为10G(可以用虚拟机内以存在的)  

  1. 新建一个虚拟机,即为小Linux系统  

二、需要小Linux配合的一些工作 

# ./bincp.sh  执行脚本后添加 touch mkdir rm mv cp cat mount umount vi vim chmod chown ping ifconfig insmod modprobe rmmod route halt reboot shutdown hostname sleep sync q   以便以下的操作   

1、实现开机关机功能  

  1. help exec:切断电源能一并关闭父进程,exec是以当前bash直接替换为这个进程,以子进程替换父进程  

  2. # cd /mnt/sysroot  切换到/mnt/sysroot目录下

vim etc/rc.d/init.d/halt  编辑内容如下:

  1. #!/bin/bash  

  2. #  

  3. case $0 in

  4. *reboot)  

  5.   COMMAND=' /sbin/halt -p' ;;  

  6. *halt)  

  7.   COMMAND=' /sbin/reboot; ;;  

  8. *)  

  9.   echo "Only call this script by *reboot OR *halt;"

  10.   ;;  

  11. esac  

  12. case $1 in

  13. start)  

  14.   ;;  

  15. stop)  

  16.   ;;  

  17. *)  

  18.   echo "Usage:`basename $0` {start|stop}"

  19.   ;;  

  20. esac  

  21. exec $COMMAND  

# chmod +x etc/rc.d/init.d/halt 添加执行权限  

# cd etc/rc.d  

# mkdir rc0.d   创建rc0.d目录  

# ln -sv ../init.d/halt S99halt   进入rc0.d目录创建链接  

# cd rc6.d/  

# ln -sv ../init.d/halt S99reboot 进入rc6.d目录创建链接  

  1. 编辑vim etc/inittab文件  

  2. 在配置文件内添加 :l0:0:wait:/etc/rc.d/rc 0  

  3.                    l6:6:wait:/etc/rc.d/rc 6   

  4. 创建脚本:etc/rc.d/rc  

vim etc/rc.d/rc  编辑内容如下:  

  1. RUNLEVEL =$1  

  2. #!/bin/bash  

  3. #  

  4. for I in /etc/rc.d/rc$RUNLEVEL.d/K*;do  

  5.   $I stop  

  6. done  

  7. for I in /etc/rc.d/rc$RUNLEVEL.d/S*;do  

  8.   $I start  

  9. done  

2、挂载文件系统             

  1. 编辑/mnt/sysroot/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    

  6. 在/mnt/sysroot/et/rc.d/rc.sysinit下添加一些内容:                 

  7. echo "Remount rootfs...."

  8. mount -n -o remount,rw /   

  9. mount -a                     

3、function函数的添加                  

  1. vim /etc/rc.d/init.d/functions 此脚本可用于控制服务脚本的信息显示,其内容如下:  

  2. SCREEN=`stty -F /dev/console size`  

  3. COLUMNS=${SCREEN#* }  

  4. SPA_COL=$[$COLUMNS-14]  

  5. RED='\033[31m'

  6. GREEN='\033[31m'

  7. YELLOW='\033[31m'

  8. BLUE='\033[31m'

  9. success() {  

  10.   string=$1  

  11.   RT_SPA=$[$SPA_COL-${#string}]  

  12.   echo -n "String"

  13. for I in `seq 1 $RT_SPA`;do  

  14.      echo -n " "

  15.   done  

  16.   echo -e "[   ${GERRN}OK{NORMAL}   ]"

  17. }  

  18. failure() {  

  19.   string=$1  

  20.   RT_SPA=$[$SPA_COL-${#string}]  

  21.   echo -n "String"

  22. for I in `seq 1 $RT_SPA`;do  

  23.      echo -n " "

  24.   done  

  25.   echo -e "[ ${RED}FAILED${NORMAL} ]"

  26.   }  

# chmod +x  /mnt/sysroot/rc.d/init.d/functios  添加执行权限  

让脚本变得更漂亮一些,可以修改成如下内容:  

vim etc/rc.d/init.d/tserver  修改脚本内容:

  1. # chkconfig: 35 66 33  

  2. # description: test service script  

  3. #!/bin/bash  

  4. #  

  5. ./etc/rc.d/init.d/functions  

  6. prog=`basename $0`  

  7. lockfile=/var/lock/subsys/$prog  

  8. start() {  

  9.   touch $lockfile  

  10.   [ $? -eq 0 ] } && success "Starting $prog" ||failure "Staring $prog"

  11. stop() {  

  12.   echo "Stopping $prog..."

  13.   [ $? -eq 0 ] } && success "Stopping $prog" ||failure "Stopping $prog"

  14. }  

  15. status() {  

  16.   if [ -f $lockfile ];then

  17.     echo"Running..."

  18. else

  19.     echo"Stopped..."

  20. fi  

  21. }  

  22. usage() {  

  23.   echo "Usage:$prog {start|stop|status|restart}"

  24. case $1 in

  25. start)  

  26.   start ;;  

  27. stop)  

  28.   stop ;;  

  29. restart)  

  30.   stop  

  31.   start  

  32.   ;;  

  33. status)  

  34.   status  

  35.   ;;  

  36. *)    

  37.   usage  

  38.   exit 1  

  39.   ;;  

  40. esac  

  41. chmod +x inin.d/tserver  添加执行权限  

  42. init.d/tserver start     测试  

4、为系统添加主机名和IP  

1、进行模块的移植  

# cd /mnt/sysroot  

# mkdir lib/moudules  

# modinfo pcnet32  121355227.png # modinfo mii   121449117.png

# cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/pcnet32.ko /mnt/sysroot/modules  

# cp /lib/modules/2.6.18-308.el5/kernel/drivers/net/mii.ko /mnt/sysroot/modules  

2、添加主机名,装载内核模块  

vim etc/rc.d/rc.sysinit  编辑脚本内容如下:

  1. #!/bin/bash  

  2. #  

  3. echo -e "\tWelcome to \033[34mMylinux\033[0m system"

  4. echo "Remount rootfs..."

  5. mount -n -o remount,rw /  

  6. echo "Set the hostname..."

  7. [ -f /etc/sysconfig/network ] && /etc/sysconfig/network  

  8. [ -z $HOSTNAME -O "$HOSTNAME" == '(none)' ] && HOSTNAME=localhost  

  9. /bin/hostname $HOSTNAME  

  10. echo "Initializing network device..."

  11. /sbin/insmod /lib/modules/mii.ko  

  12. /sbin/insmod /lib/modules/pcent32.ko  

3、定义IP地址  

# mkdir -pv /mnt/sysroot/etc/sysconfig  创建目录

# vim etc/sysconfig/network-scripts/ifcfg-etho  修改配置文件内容如下:

  1. EDVICE=eth0  

  2. BOOTPROTO=static

  3. IPADDR=172.16.59.1  

  4. NETMASK=255.255.0.0  

  5. GATEWAY=172.16.0.1  

  6. ONBOOT=yes  

4、编辑脚本来实现IP的添加

vim etc/rc.d/init.d/network  内容如下:  

  1. #!/bin/bash  

  2. #  

  3. # chkconfig: 35 09 90   启动级别是09 关闭级别是90  

  4. # description: network service  

  5. prog=network  

  6. ./etc/rc.d/init.d/functions  

  7. CONF=/etc/sysconfig/network-scripts/ifcfg-eth0  

  8. . $CONF  

  9. start() {  

  10.   ifconfig etho $IPADDR/$NETWORK  

  11.   [ -z $GATEWAY ] && route adddefault gw $GATEWAY  

  12.   }  

  13. stop() {  

  14.   ifconfig eth0  

  15. }  

  16. usage() {  

  17.   echo "$prog: {start|stop|restart|status}"

  18. }  

  19. case $1 in

  20. start)  

  21.   start  

  22.   success "Config network etho"

  23.   ;;  

  24. stop)  

  25.   stop  

  26.   success "Stop network card eth0"

  27.   ;;  

  28. restart)  

  29.   stop  

  30.   start  

  31.   success "Restart network card etho"

  32.   ;;  

  33. status)  

  34.   status  

  35.   ;;  

  36. *)  

  37.   usage  

  38.   exit  

# chmod +x etc/rc.d/init.d/network   为其添加执行权限  

# cd etc/rc.d/rc0.d  

# ln  -sv ../init.d/network K90netwrok  创建链接

# cd ../rc6.d/  

# ln -sv ../init.d/network K90netwrok     

# cd ../rc3.d/  

# ln -sv ../init.d/network S09netwrok    

注意:0和6级别不需开启网络服务