根据前几天的整合,我们最终写好了一键制作Linux的脚本。这次真的是一键了,附带了常用的命令,以及欢迎界面,外加提示符等等。
明天加入网络模块,让其能够上网!
宿主机:Redhat Enterprise 5 (2.6.18)
目标机器:256内存,8G硬盘。
#!/bin/bash #: Title: All_Mini_Linux.sh #: Synopsis: #: DateTime: 2011-08-04 12:33:02 #: Version: 0.2 #: Author: weiyan #: Options: # # read -p "The target disk: " DSK if fdisk -l $DSK | grep "^/dev" &> /dev/null ; then fdisk -l $DSK | grep "^/dev" PARTS=`fdisk -l $DSK | grep "^/dev" | awk '{print $1}'` for I in $PARTS; do if mount | grep "$I" &> /dev/null; then mount | grep "$I" else echo "$I is not mounted." fi done fi SPART() { read -p "Warning !!!!! Next you do it will wipe your disk !!!! Continue(y/N)?" CHOICE case $CHOICE in y|Y) for I in $PARTS; do if mount | grep "$I" &> /dev/null; then fuser -km $I umount $I fi done dd if=/dev/zero of=$DSK bs=512 count=1 &> /dev/null echo ' n p 1 +50M n p 2 +512M n p 3 +256M t 3 82 w' | fdisk $DSK &> /dev/null sleep 1 mke2fs -j ${DSK}1 &> /dev/null mke2fs -j ${DSK}2 &> /dev/null mkswap ${DSK}3 &> /dev/null return 0 ;; n|N) return 1 ;; *) return 2 ;; esac } SPART [ $? -eq 0 ] && echo "The Disk wipe success !!!!!!!" || echo "Failure" ## ==============2======================== function GUAZAI { [ -d /mnt/boot ] || mkdir -p /mnt/boot umount /mnt/boot &> /dev/null mount $1 /mnt/boot [ -d /mnt/sysroot ] || mkdir -p /mnt/boot umount /mnt/sysroot &> /dev/null mount $2 /mnt/sysroot } GUAZAI ${DSK}1 ${DSK}2 ## =============3========================= # firstblood ! rootfs $1 = /mnt/sysroot function ROOTFS { if [ -d $1 ];then if mount | grep "$1" &> /dev/null ; then cd $1 chmod 1777 tmp/ # create /etc/inittab cat >>$1/etc/inittab<< EOF id:3:initdefault: si::sysinit:/etc/rc.d/rc.sysinit l0:0:wait:/etc/rc.d/rc.shutdown l1:1:wait:/sbin/init -t1 S l3:3:wait:/sbin/init -t1 3 #mingetty 1:2345:respawn:/sbin/mingetty tty1 2:2345:respawn:/sbin/mingetty tty2 3:2345:respawn:/sbin/mingetty tty3 4:2345:respawn:/sbin/mingetty tty4 5:2345:respawn:/sbin/mingetty tty5 6:2345:respawn:/sbin/mingetty tty6 EOF # create /etc/rc.d/rc.shutdown cat >>$1/etc/rc.d/rc.shutdown<< EOF #!/bin/bash sync sleep 1 sync sleep 1 umount /dev/sda1 umount /dev/sda2 exec /sbin/halt -p EOF # create rc.sysinit cat >>$1/etc/rc.d/rc.sysinit<< EOF #!/bin/bash echo -e "\t\tWelcome to \033[031;1mLittle\033[0m Linux..." mount -n -o remount,rw / mount -n -a # set HOSTNAME [ -f /etc/sysconfig/network ] && source /etc/sysconfig/network [ -z $HOSTNAME ] && HOSTNAME=localhost echo $HOSTNAME > /proc/sys/kernel/hostname EOF # create /etc/sysconfig/network cat >>$1/etc/sysconfig/network<< EOF HOSTNAME=weiyan EOF # create /etc/sysctl.conf cat >>$1/etc/sysctl.conf<< EOF EOF # create /etc/issue cat >>$1/etc/issue<< EOF Welcome to Little.Linux.org Username : root Password : NiCai? EOF #create /root/.bash_profile cat >>$1/root/.bash_profile<< EOF PS1='[\u@\h \W]\
EOF chmod +x etc/rc.d/rc.shutdown # create fstab cat >>$1/etc/fstab<< EOF /dev/sda2 / ext3 defaults 0 0 /dev/sda1 /boot ext3 defaults 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 EOF else read -p "Error,the $1 still mount ! Contiune(y|N)?" MOT case $MOT in *) echo "Exit......" return 5 ;; esac fi fi } ROOTFS /mnt/sysroot ##====================4======================== # copy lib to your sys . $1= COMMAND $2 = /mnt/sysroot function COPYLIB { #copy command if which $1 &> /dev/null ;then AA=`which $1 | tail -1 | awk '{print $1}'` cp "$AA" $2"$AA" else echo "$1 is not exist" fi #copy lib LIBPATH=`echo $LIB | sed 's@\(.*\)/[^[:space:]]\{1,\}@\1@g'` [ -d ${2}$LIBPATH ] || mkdir ${2}$LIBPATH [ ! -e $2/$LIB ] && cp -f $LIB ${2}$LIBPATH done echo "$1 has cp done." } echo "==========================================================" # zhijie jia ru ming ling COPYLIB $CMDD /mnt/sysroot done #ln bash & sh !!!!! ln -sv bash sh &> /dev/null # copy lib/libnss*. with nsswitch cp /usr/lib/libnss3.so /mnt/sysroot/usr/lib/ cp /usr/lib/libnssckbi.so /mnt/sysroot/usr/lib/ cp /usr/lib/libnssutil3.so /mnt/sysroot/usr/lib/ cp -d /usr/lib/libnss_compat.so /mnt/sysroot/usr/lib/ cp -d /usr/lib/libnss_files.so /mnt/sysroot/usr/lib/ cp -d /lib/libnss_files* /mnt/sysroot/lib/ cp -d /lib/libnss_compat* /mnt/sysroot/lib/ ## copy login ! cd /mnt/sysroot/bin/ wget ftp://192.168.0.254/pub/login &> /dev/null chmod +x login cp /lib/libcrypt.so.1 /mnt/sysroot/lib/ cp /lib/libm.so.6 /mnt/sysroot/lib/ cd ~ ## copy passwd .... nsswitch.conf cp /etc/{passwd,shadow,group,gshadow} /mnt/sysroot/etc/ cp /etc/nsswitch.conf /mnt/sysroot/etc/ #########until xunhuan let user input ########################## # #echo -e "Please input COMMAND with \033[31mbash\033[0m and \033[31minit\033[0m !!!!!" #read -p "COMMAND you want?(Quit for 'q') :" CMD1 #until [ $CMD1 == 'q' ]; do # COPYLIB $CMD1 /mnt/sysroot # read -p "Which COMMAND you want use ?(Quit for 'q') :" CMD1 #done ############################################################### echo "==========================================================" ##==========================5=================================== # $1 = /mnt/sysroot function YDFQ { TMPDIR=`mktemp -d /tmp/little.XX` cd $TMPDIR zcat /boot/initrd-`uname -r`.img | cpio -id &> /dev/null ## zhankai bing songgei sed -i 's@^echo Scanning and configuring dmraid supported devices@#&@g' init sed -i 's@^echo Scanning logical volumes@#&@g' init sed -i 's@^lvm vgscan --ignorelockingfailure@#&@g' init sed -i 's@^echo Activating logical volumes@#&@g' init sed -i 's@^lvm vgchange -ay --ignorelockingfailure vol0@#&@g' init sed -i 's@^resume LABEL=SWAP-sda3@#&@g' init sed -i "s@\(mkrootdev.*\) /.*@\1 sda2@" init find . | cpio -H newc -o --quiet | gzip -9 > /mnt/boot/initrd.gz cp /boot/vmlinuz-`uname -r` /mnt/boot/vmlinuz } YDFQ /mnt/sysroot ##==============================6================================ ## $1 = /dev/sdc $2=/mnt/boot $3=kernel'name $4 initrd's name function GRUB { if [ `basename $2` == boot ];then grub-install --root-directory=/mnt $1 &> /dev/null cat >>$2/grub/grub.conf<< EOF default=0 timeout=10 title Little Linux root (hd0,0) kernel /${3} ro root=/dev/sda2 quiet initrd /${4} EOF else echo "It's not boot !Exit & Please set it again !" fi } GRUB $DSK /mnt/boot vmlinuz initrd.gz sync sync sync sync sync sleep 10 echo "Congratulation ! Your Mini Linux is install OK !"
当所有都运行完之后~
OK,万事搞定!