一鍵製作linux

  1. #!/bin/bash  
  2. #:Title: construction.sh  
  3. #:Path:/tmp/myscript/mklinux  
  4. #:Synopsis:  
  5. #:DateTime:2011-08-04 16:24:51  
  6. #:Version:Unknow  
  7. #:Author: redhat_hu  
  8. #:Option:None  
  9. read -p "please input the disk name:" DISKNAME  
  10. if fdisk -l $DISKNAME | grep "^$DISKNAME" &> /dev/null;then  
  11.         fdisk -l $DISKNAME | grep "^$DISKNAME"  
  12.         Adisk=`fdisk -l $DISKNAME | grep "^$DISKNAME" | awk '{print $1}'`  
  13.         for I in $Adisk ;do  
  14.         if mount | grep "$I" &> /dev/null;then  
  15.                 mount | grep "$I"  
  16.         else  
  17.                 echo "$I was not mounted."  
  18.         fi  
  19.         done  
  20. fi  
  21. function FRESH {  
  22. read -p "Continue(y/N)?" CHOISE  
  23. case $CHOISE in  
  24. y|Y)  
  25. for I in $Adisk;do  
  26.         if mount | grep "$I" >/dev/null;then  
  27.         fuser -km $I  
  28.         umount $I  
  29.         fi  
  30. done  
  31. dd if=/dev/zero of=$DISKNAME bs=512 count=1 &> /dev/null  
  32. echo '  
  33. n  
  34. p  
  35. 1  
  36.  
  37. +50m  
  38. n  
  39. p  
  40. 2  
  41.  
  42. +512m  
  43. n  
  44. p  
  45. 3  
  46.  
  47. +256m  
  48. t  
  49. 3  
  50. 82  
  51. w' |fdisk $DISKNAME &> /dev/null  
  52. partprobe $DISKNAME  
  53. sleep 1  
  54.    
  55. mke2fs -j ${DISKNAME}1 &> /dev/null  
  56. mke2fs -j ${DISKNAME}2 &> /dev/null  
  57. mke2fs -j ${DISKNAME}3 &> /dev/null  
  58. return 0  
  59. ;;  
  60. n|N)  
  61. return 1  
  62. ;;  
  63. *)  
  64. return 2  
  65. ;;  
  66. esac  
  67. }  
  68.    
  69. function MOUNT {  
  70.         if find /mnt/boot &> /dev/null ;then  
  71.         umount /mnt/boot &> /dev/null  
  72.         mount $1 /mnt/boot  
  73.         else  
  74.         mkdir /mnt/boot  
  75.         umount /mnt/boot &> /dev/null  
  76.         mount $1 /mnt/boot  
  77.         fi  
  78.         if find /mnt/sysroot &> /dev/null ;then  
  79.         umount /mnt/sysroot &> /dev/null  
  80.         mount $2 /mnt/sysroot  
  81.         else  
  82.         mkdir /mnt/sysroot  
  83.         umount /mnt/sysroot &> /dev/null  
  84.         mount $2 /mnt/sysroot  
  85.         fi  
  86. }  
  87. function INIT {  
  88. if find [/mnt/sysroot &> /dev/null || mount|grep "/mnt/sysroot" &> /dev/null];then  
  89.         cd /mnt/sysroot  
  90.         mkdir -p  {boot,proc,sys,dev,home,root,etc/{rc.d,sysconfig,init.d},bin,sbin,lib,usr/{bin,sbin,lib,include},var/{log,run},tmp,mnt,opt,media}  
  91.         chmod -R 1777 /mnt/sysroot/tmp  
  92.         touch /mnt/sysroot/etc/inittab  
  93.  
  94. cat > /mnt/sysroot/etc/inittab <<EOF 
  95. id:3:initdefault:  
  96. si::sysinit:/etc/rc.d/rc.sysinit          
  97. l0:0:wait:/etc/rc.d/rc.shutdown  
  98.  
  99. EOF  
  100.         touch /mnt/sysroot/etc/rc.d/rc.sysinit  
  101. cat > /mnt/sysroot/etc/rc.d/rc.sysinit << EOF 
  102. #!/bin/bash  
  103. echo -e "\t\tWelcome to \033[31;1mMyLinux\033[0m ..."  
  104.      
  105. swapon -a  
  106. mount -n -o remount,rw /  
  107. mount -n -a  
  108.      
  109. /bin/bash  
  110.    
  111. EOF  
  112. chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit  
  113.    
  114.         touch /mnt/sysroot/etc/fstab  
  115. cat > /mnt/sysroot/etc/fstab << EOF 
  116. /dev/sda2                /                      ext3    defaults        0 0  
  117. /dev/sda1               /boot                   ext3    defaults        0 0  
  118. /dev/sda3 swap swap defaults 0 0  
  119. sysfs                   /sys                    sysfs   defaults        0 0  
  120. proc                    /proc                   proc    defaults        0 0  
  121.  
  122. EOF  
  123.    
  124. cat > /mnt/sysroot/etc/rc.d/rc.shutdown << EOF 
  125. #!/bin/bash  
  126. #  
  127. sync  
  128. sleep 2  
  129. sync  
  130. sleep 1  
  131. umount /dev/sda1  
  132. umount /dev/sda2  
  133.  
  134. exec /sbin/halt -p  
  135. EOF  
  136. chmod +x /mnt/sysroot/etc/rc.d/rc.shutdown  
  137.  
  138.    
  139. else  
  140.         echo "error!"  
  141. fi  
  142. }  
  143. COPYCOMMAND() {  
  144. if which $B ;then  
  145.         COMMAND=`which $B | grep -o "/.*"`  
  146.         PTH=`which $B | grep -o "/.*" |sed "s@\(/[[:alpha:]]*\)/[[:alpha:]]*@\1@g"`  
  147.         if find /mnt/sysroot$PTH &> /dev/null;then  
  148.         cp $COMMAND /mnt/sysroot$PTH  
  149.         else  
  150.         mkdir -p /mnt/sysroot$PTH  
  151.         cp $COMMAND /mnt/sysroot$PTH  
  152.         fi  
  153. else  
  154. echo "wrong command"  
  155. fi  
  156.  
  157. LIBS=`ldd $COMMAND | grep -o "/lib.*" | awk '{print $1}'`  
  158. for I in $LIBS;do  
  159.         [ ! -e /mnt/sysroot$I ] && cp $I /mnt/sysroot$I  
  160. done  
  161. }  
  162. function KERNEL {  
  163. TMPDIR=`mktemp -d /tmp/mylinux`  
  164.  
  165. cd $TMPDIR  
  166. zcat /boot/initrd-`uname -r`.img | cpio -id  
  167.    
  168. sed -i 's@echo Scanning and configuring dmraid supported devices@#&@g' init  
  169. sed -i 's@echo Scanning logical volumes@#&@g' init  
  170. sed -i 's@lvm vgscan --ignorelockingfailure@#&@g' init  
  171. sed -i 's@echo Activating logical volumes@#&@g' init  
  172. sed -i 's@lvm vgchange -ay --ignorelockingfailure  vol0@#&@g' init  
  173. sed -i 's@resume LABEL=SWAP-sda3@#&@g' init  
  174.    
  175. sed -i "s@\(mkrootdev.* \)/.*@\1sda2@g" init  
  176. find . | cpio -H newc -o --quiet | gzip -9 > /mnt/boot/initrd.gz  
  177. cp /boot/vmlinuz-`uname -r` /mnt/boot/vmlinuz  
  178. }  
  179.  
  180. function GRUB {  
  181. MOUNTPOINT=`basename $2`  
  182. until [ "$MOUNTPOINT" == "boot" ];do  
  183.         read -p "please modify the mountpoint." MOUNTPOINT  
  184. done  
  185. grub-install --root-directory=/mnt $1  
  186. cat > $2/grub/grub.conf << EOF 
  187. default=0 
  188. timeout=10 
  189. title mylinux  
  190.                 root (hd0,0)  
  191.                 kernel /$3 ro root=/dev/sda2  
  192.                 initrd /$4  
  193. EOF  
  194. }  
  195. FRESH   
  196. MOUNT ${DISKNAME}1 ${DISKNAME}2  
  197. INIT  
  198.  
  199. for B in mingetty swapoff chmod sync sleep clear runlevel reboot sysctl swapon init bash mount umount halt poweroff shutdown ls vi cat; do  
  200. COPYCOMMAND  
  201. done   
  202.  
  203. #read -p "input the command,'c' for skip:" B  
  204. #until [ "$B" == "c" ];do  
  205.  
  206. #COPYCOMMAND  
  207. #read -p "input the command,'c' for skip:" B  
  208. #done  
  209.    
  210. KERNEL  
  211. GRUB $DISKNAME /mnt/boot vmlinuz initrd.gz  
  212. rm -rf $TMPDIR  
  213. sync  
  214. sync  
  215. sync 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章