手机版
你好,游客 登录 注册
背景:
阅读新闻

一键安装Linux (附带各种命令,登录欢迎界面,用户登录模块。)

[日期:2011-08-10] 来源:Linux社区  作者:wei2856059 [字体: ]

根据http://www.linuxidc.com/Linux/2011-08/40389.htmhttp://www.linuxidc.com/Linux/2011-08/40390.htm整合,我们最终写好了一键制作Linux的脚本。这次真的是一键了,附带了常用的命令,以及欢迎界面,外加提示符等等。

明天加入网络模块,让其能够上网! 

宿主机:RedHat Enterprise 5 (2.6.18)

目标机器:256内存,8G硬盘。

 

 

 
 
  1. #!/bin/bash   
  2. #: Title: All_Mini_Linux.sh   
  3. #: Synopsis:   
  4. #: DateTime: 2011-08-04 12:33:02   
  5. #: Version: 0.2   
  6. #: Author: weiyan   
  7. #: Options:    
  8. #   
  9. #   
  10. read -p "The target disk: " DSK  
  11.   
  12. if fdisk -l $DSK | grep "^/dev" &> /dev/null ; then  
  13.   fdisk -l $DSK | grep "^/dev"  
  14.   PARTS=`fdisk -l $DSK | grep "^/dev" | awk '{print $1}'`  
  15.   
  16.   for I in $PARTS; do  
  17.     if mount | grep "$I" &> /dev/null; then  
  18.        mount | grep "$I"  
  19.     else  
  20.       echo "$I is not mounted."  
  21.     fi  
  22.   done  
  23. fi  
  24.   
  25. SPART() {  
  26.   read -p "Warning !!!!! Next you do it will wipe your disk !!!! Continue(y/N)?" CHOICE  
  27.   case $CHOICE in  
  28.   y|Y)  
  29.   for I in $PARTS; do  
  30.     if mount | grep "$I" &> /dev/null; then  
  31.       fuser -km $I  
  32.       umount $I  
  33.     fi  
  34.   done  
  35.   
  36.   dd if=/dev/zero of=$DSK bs=512 count=1 &> /dev/null  
  37.   
  38. echo '   
  39. n     
  40. p     
  41. 1  
  42.   
  43. +50M  
  44. n  
  45. p  
  46. 2  
  47.   
  48. +512M  
  49. n  
  50. p  
  51. 3  
  52.   
  53. +256M  
  54. t  
  55. 3  
  56. 82  
  57. w' | fdisk $DSK &> /dev/null  
  58.   sleep 1  
  59.   
  60.   mke2fs -j ${DSK}1 &> /dev/null  
  61.   mke2fs -j ${DSK}2 &> /dev/null  
  62.   mkswap ${DSK}3 &> /dev/null  
  63.   return 0  
  64.   ;;  
  65.   n|N)  
  66.     return 1  
  67.     ;;  
  68.   *)  
  69.     return 2  
  70.     ;;  
  71. esac  
  72. }  
  73. SPART  
  74. [ $? -eq 0 ] && echo "The Disk wipe success !!!!!!!" || echo "Failure"  
  75.   
  76. ## ==============2========================   
  77. function GUAZAI {  
  78.         [ -d /mnt/boot ] ||  mkdir -p /mnt/boot  
  79.         umount /mnt/boot &> /dev/null  
  80.         mount $1 /mnt/boot  
  81.         [ -d /mnt/sysroot ] || mkdir -p /mnt/boot  
  82.         umount /mnt/sysroot &> /dev/null  
  83.         mount $2 /mnt/sysroot  
  84. }  
  85.   
  86. GUAZAI ${DSK}1 ${DSK}2  
  87.   
  88. ## =============3=========================   
  89.   
  90. # firstblood ! rootfs  $1 = /mnt/sysroot   
  91. function ROOTFS {  
  92.         if [ -d $1 ];then  
  93.           if mount | grep "$1" &> /dev/null ; then  
  94.              cd $1  
  95.              chmod 1777 tmp/  
  96.   
  97. # create /etc/inittab   
  98. cat >>$1/etc/inittab<< EOF  
  99. id:3:initdefault:  
  100. si::sysinit:/etc/rc.d/rc.sysinit  
  101.   
  102. l0:0:wait:/etc/rc.d/rc.shutdown  
  103. l1:1:wait:/sbin/init -t1 S  
  104. l3:3:wait:/sbin/init -t1 3  
  105.   
  106. #mingetty   
  107. 1:2345:respawn:/sbin/mingetty tty1  
  108. 2:2345:respawn:/sbin/mingetty tty2  
  109. 3:2345:respawn:/sbin/mingetty tty3  
  110. 4:2345:respawn:/sbin/mingetty tty4  
  111. 5:2345:respawn:/sbin/mingetty tty5  
  112. 6:2345:respawn:/sbin/mingetty tty6  
  113. EOF  
  114.   
  115. # create /etc/rc.d/rc.shutdown   
  116. cat >>$1/etc/rc.d/rc.shutdown<< EOF  
  117. #!/bin/bash   
  118. sync  
  119. sleep 1  
  120. sync  
  121. sleep 1  
  122. umount /dev/sda1  
  123. umount /dev/sda2  
  124.   
  125. exec /sbin/halt -p  
  126. EOF  
  127.   
  128. # create rc.sysinit   
  129. cat >>$1/etc/rc.d/rc.sysinit<< EOF  
  130. #!/bin/bash   
  131. echo -e "\t\tWelcome to \033[031;1mLittle\033[0m Linux..."  
  132.   
  133. mount -n -o remount,rw /  
  134. mount -n -a  
  135.   
  136. # set HOSTNAME   
  137. [ -f /etc/sysconfig/network ] && source /etc/sysconfig/network  
  138. [ -z $HOSTNAME ] && HOSTNAME=localhost  
  139. echo $HOSTNAME > /proc/sys/kernel/hostname  
  140. EOF  
  141.   
  142.   
  143. # create /etc/sysconfig/network   
  144. cat >>$1/etc/sysconfig/network<< EOF  
  145. HOSTNAME=weiyan  
  146. EOF  
  147.   
  148. # create /etc/sysctl.conf   
  149. cat >>$1/etc/sysctl.conf<< EOF  
  150.   
  151. EOF  
  152.   
  153. # create /etc/issue   
  154. cat >>$1/etc/issue<< EOF  
  155. Welcome to Little.Linux.org  
  156. Username : root Password : NiCai?  
  157. EOF  
  158.   
  159. #create /root/.bash_profile   
  160. cat >>$1/root/.bash_profile<< EOF  
  161. PS1='[\u@\h \W]\  
  162. <pre class="cpp" name="code">EOF  
  163.   
  164.   
  165.                 chmod +x etc/rc.d/rc.shutdown  
  166. # create fstab   
  167. cat >>$1/etc/fstab<< EOF  
  168. /dev/sda2               /            ext3    defaults  0 0  
  169. /dev/sda1               /boot        ext3    defaults  0 0  
  170. sysfs                   /sys         sysfs   defaults  0 0  
  171. proc                    /proc        proc    defaults  0 0  
  172. EOF  
  173.           else  
  174.                 read -p "Error,the $1 still mount ! Contiune(y|N)?" MOT  
  175.                 case $MOT in  
  176.                 *)  
  177.                         echo "Exit......"  
  178.                         return 5  
  179.                         ;;  
  180.                 esac  
  181.           fi  
  182.         fi  
  183. }  
  184.   
  185. ROOTFS /mnt/sysroot  
  186.   
  187. ##====================4========================   
  188. # copy lib to your sys .  $1= COMMAND  $2 = /mnt/sysroot   
  189.   
  190. function COPYLIB {  
  191.   #copy command   
  192.   if which $1 &> /dev/null ;then  
  193.     AA=`which $1 | tail -1 | awk '{print $1}'`  
  194.     cp "$AA" $2"$AA"  
  195.   else  
  196.     echo "$1 is not exist"  
  197.   fi  
  198.   
  199.   #copy lib   
  200.     LIBPATH=`echo $LIB | sed 's@\(.*\)/[^[:space:]]\{1,\}@\1@g'`  
  201.     [ -d ${2}$LIBPATH ] || mkdir ${2}$LIBPATH  
  202.     [ ! -e $2/$LIB ] && cp -f $LIB ${2}$LIBPATH  
  203.   done  
  204.   
  205.   echo "$1 has cp done."  
  206. }  
  207. echo "=========================================================="  
  208.   
  209. # zhijie jia ru ming ling    
  210.   
  211.   COPYLIB $CMDD /mnt/sysroot  
  212. done  
  213.   
  214. #ln bash & sh !!!!!   
  215. ln -sv bash sh &> /dev/null  
  216.   
  217. # copy lib/libnss*. with nsswitch   
  218. cp /usr/lib/libnss3.so /mnt/sysroot/usr/lib/  
  219. cp /usr/lib/libnssckbi.so /mnt/sysroot/usr/lib/  
  220. cp /usr/lib/libnssutil3.so /mnt/sysroot/usr/lib/  
  221. cp -d /usr/lib/libnss_compat.so /mnt/sysroot/usr/lib/  
  222. cp -d /usr/lib/libnss_files.so /mnt/sysroot/usr/lib/  
  223.   
  224. cp -d /lib/libnss_files* /mnt/sysroot/lib/  
  225. cp -d /lib/libnss_compat* /mnt/sysroot/lib/  
  226.   
  227. ## copy login !   
  228. cd /mnt/sysroot/bin/  
  229. wget ftp://192.168.0.254/pub/login &> /dev/null   
  230. chmod +x login  
  231. cp /lib/libcrypt.so.1 /mnt/sysroot/lib/  
  232. cp /lib/libm.so.6 /mnt/sysroot/lib/  
  233. cd ~  
  234.   
  235. ## copy passwd .... nsswitch.conf   
  236. cp /etc/{passwd,shadow,group,gshadow} /mnt/sysroot/etc/  
  237. cp /etc/nsswitch.conf /mnt/sysroot/etc/  
  238.   
  239. #########until xunhuan let user input ##########################   
  240. #   
  241. #echo -e "Please input COMMAND with \033[31mbash\033[0m and \033[31minit\033[0m !!!!!"   
  242. #read -p "COMMAND you want?(Quit for 'q') :" CMD1     
  243. #until [ $CMD1 == 'q' ]; do   
  244. #  COPYLIB $CMD1 /mnt/sysroot   
  245. #  read -p "Which COMMAND you want use ?(Quit for 'q') :" CMD1     
  246. #done   
  247. ###############################################################   
  248.   
  249. echo "=========================================================="  
  250. ##==========================5===================================   
  251. # $1 = /mnt/sysroot   
  252. function YDFQ {  
  253. TMPDIR=`mktemp -d /tmp/little.XX`  
  254. cd $TMPDIR  
  255. zcat /boot/initrd-`uname -r`.img | cpio -id  &> /dev/null     ## zhankai bing songgei  
  256. sed -i 's@^echo Scanning and configuring dmraid supported devices@#&@g' init  
  257. sed -i 's@^echo Scanning logical volumes@#&@g' init  
  258. sed -i 's@^lvm vgscan --ignorelockingfailure@#&@g' init  
  259. sed -i 's@^echo Activating logical volumes@#&@g' init  
  260. sed -i 's@^lvm vgchange -ay --ignorelockingfailure  vol0@#&@g' init  
  261. sed -i 's@^resume LABEL=SWAP-sda3@#&@g' init  
  262.   
  263. sed -i "s@\(mkrootdev.*\) /.*@\1 sda2@" init  
  264. find . | cpio -H newc -o --quiet | gzip -9 > /mnt/boot/initrd.gz  
  265. cp /boot/vmlinuz-`uname -r` /mnt/boot/vmlinuz  
  266. }  
  267. YDFQ /mnt/sysroot  
  268.   
  269. ##==============================6================================   
  270.   
  271. ## $1 = /dev/sdc  $2=/mnt/boot $3=kernel'name  $4 initrd's name   
  272. function GRUB {  
  273. if [ `basename $2` == boot ];then  
  274.   grub-install --root-directory=/mnt $1  &> /dev/null  
  275.   cat >>$2/grub/grub.conf<< EOF  
  276. default=0  
  277. timeout=10  
  278. title Little Linux  
  279.         root (hd0,0)  
  280.         kernel /${3} ro root=/dev/sda2 quiet  
  281.         initrd /${4}  
  282. EOF  
  283.   
  284. else  
  285.   echo "It's not boot !Exit & Please set it again !"   
  286. fi  
  287. }  
  288.   
  289. GRUB $DSK /mnt/boot vmlinuz initrd.gz  
  290.   
  291.   
  292. sync  
  293. sync  
  294. sync  
  295. sync  
  296. sync  
  297.   
  298. sleep 10  
  299.   
  300. echo "Congratulation ! Your Mini Linux is install OK !"  

当所有都运行完之后~

OK,万事搞定!

linux
相关资讯       Linux教程 
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款