#!/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
iffdisk -l $DSK | grep"^/dev"&> /dev/null ; then
fdisk -l $DSK | grep"^/dev"
PARTS=`fdisk -l $DSK | grep"^/dev"| awk'{print $1}'`
forI in $PARTS;do
ifmount | 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)
forI in $PARTS;do
ifmount | grep"$I"&> /dev/null; then
fuser -km $I
umount $I
fi
done
ddif=/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
return0
;;
n|N)
return1
;;
*)
return2
;;
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
ifmount | grep"$1"&> /dev/null ; then
cd $1
chmod 1777 tmp/
# create /etc/inittab
cat >>$1/etc/inittab<
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<
#!/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<
#!/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<
HOSTNAME=weiyan
EOF
# create /etc/sysctl.conf
cat >>$1/etc/sysctl.conf<
EOF
# create /etc/issue
cat >>$1/etc/issue<
Welcome to Little.Linux.org
Username : root Password : NiCai?
EOF
#create /root/.bash_profile
cat >>$1/root/.bash_profile<
PS1='[\u@\h \W]\
EOF
chmod +x etc/rc.d/rc.shutdown
# create fstab
cat >>$1/etc/fstab<
/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......"
return5
;;
esac
fi
fi
}
ROOTFS /mnt/sysroot
##====================4========================
# copy lib to your sys . $1= COMMAND $2 = /mnt/sysroot
function COPYLIB {
#copy command
ifwhich $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<
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 !"