#!/bin/bash
#
read -p "请选择要分区的磁盘:(默认/dev/hda) " DISK
[ -z $DISK ] && DISK=/dev/hda
echo $DISK
#分区
echo '
n
p
1
+90M
n
p
2
+300M
w' | fdisk $DISK
partprobe $DISK
sync
sync
sync
sleep 3
#格式化
mkfs.ext3 ${DISK}1 &>/dev/null
mkfs.ext3 ${DISK}2 &>/dev/null
echo "Formating ${DISK}1 ${DISK}2 finished"
mkdir /mnt/boot
mkdir /mnt/sysroot
mount ${DISK}1 /mnt/boot
mount ${DISK}2 /mnt/sysroot
for DIR in `ls /` ;do mkdir /mnt/sysroot/$DIR;done
grub-install --root-directory=/mnt $DISK
cp  /boot/vmlinuz* /mnt/boot/vmlinuz
mkdir -pv /tmp/test
cd /tmp/test
zcat /boot/init*.img | cpio -id
cat init | sed -e '/resume.*$/d' -i init
cat init | sed -e 's/mkrootdev.*$/mkrootdev -t ext3 -o defaults,ro hda2/' -i init
find . | cpio -H newc --quiet -o | gzip -9 >/mnt/boot/initrd.gz
cat > /mnt/boot/grub/grub.conf <<END
default=0
timeout=5
hiddenmenu
title Red Hat Enterprise Linux Server (2.6.18-53.el5)
        root (hd0,0)
        kernel /vmlinuz root=${DISK}2
        initrd /initrd.gz
END
mkdir -pv /mnt/sysroot/etc/rc.d /mnt/sysroot/usr/{bin,sbin} /mnt/sysroot/var/log
mkdir -pv /mnt/sysroot/etc/sysconfig
cp /sbin/init /mnt/sysroot/sbin/
cp /bin/bash /mnt/sysroot/bin/
echo "HOSTNAME=mylinux" >/mnt/sysroot/etc/sysconfig/network
cat > /mnt/sysroot/etc/rc.d/rc.sysinit <<END
#!/bin/bash
echo -e "\tWelcome to \033[31mMy\033[0m linux"
echo "Remount rootfs..."
mount -n -o remount,rw /
echo "SET the Hostname"
[ -f /etc/sysconfig/network ] && . /etc/sysconfig/network
[ -r \$HOSTNAME  -o "\$HOSTNAME" == '(none)' ] && \$HOSTNAME=localhost
/bin/hostname \$HOSTNAME
END
cat > /mnt/sysroot/etc/inittab <<END
id:3:initdefault:
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l3:3:wait:/etc/rc.d/rc 3
l6:6:wait:/etc/rc.d/rc 6
1:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty1
2:2345:respawn:/sbin/agetty -n -l /bin/bash 38400 tty2
#1:2345:respawn:/sbin/mingetty --loginprog=/bin/bash tty1
#2:2345:respawn:/sbin/mingetty --loginprog=/bin/bash tty2
END
chmod +x /mnt/sysroot/etc/rc.d/rc.sysinit
sync
sync
sleep 3
#库移植
DEST=/mnt/sysroot
libcp() {
  LIBPATH=${1%/*}
  [ ! -d $DEST$LIBPATH ] && mkdir -p $DEST$LIBPATH
  [ ! -e $DEST${1} ] && cp $1 $DEST$LIBPATH && echo "copy lib $1 finished."
}
bincp() {
  CMDPATH=${1%/*}
  [ ! -d $DEST$CMDPATH ] && mkdir -p $DEST$CMDPATH
  [ ! -e $DEST${1} ] && cp $1 $DEST$CMDPATH
  for LIB in  `ldd $1 | grep -o "/.*lib\(64\)\{0,1\}/[^[:space:]]\{1,\}"`; do
    libcp $LIB
  done
}
read -p "Your command: " CMD
until [ $CMD == 'q' ]; do
   ! which $CMD &> /dev/null && echo "Wrong command" && read -p "Input again:" CMD && continue
  COMMAND=` which $CMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
  bincp $COMMAND
  echo "copy $COMMAND finished."
  read -p "Continue: " CMD
done
#基本命令移植
for BASCCMD in ls pwd cat echo bash init agetty halt shutdown reboot du hostname basename mount;do
        BASCCMD=` which $BASCCMD | grep -v "^alias" | grep -o "[^[:space:]]\{1,\}"`
    bincp $BASCCMD && libcp $BASCCMD
done
#增加关机和重启的功能
mkdir /mnt/sysroot/etc/rc.d/init.d
mkdir /mnt/sysroot/etc/rc.d/rc{0,1,2,3,4,5,6}.d
cat > /mnt/sysroot/etc/rc.d/init.d/halt <<END
#!/bin/bash
case \$0 in
     *reboot)
        COMMAND='/sbin/reboot'
             ;;
     *halt)
        COMMAND='/sbin/halt -p'
             ;;
     *)
        echo "Only call this script by *boot OR *halt"
             ;;
esac
case \$1 in
     start)
           
             ;;
     stop)
           
             ;;
     *)
        echo "Usage: `basename \$0` {start|stop}"
        ;;
esac
exec \$COMMAND
END
chmod +x /mnt/sysroot/etc/rc.d/init.d/halt
cd /mnt/sysroot/etc/rc.d/rc0.d
ln -sv  ../init.d/halt K99halt
cd /mnt/sysroot/etc/rc.d/rc6.d
ln -sv  ../init.d/halt K99reboot
cd /mnt/sysroot/bin/
ln -sv bash sh
cat > /mnt/sysroot/etc/rc.d/rc <<END
#!/bin/bash
RUNLEVEL=\$1
for I in /etc/rc.d/rc\$RUNLEVEL.d/K* ;do
    \$I stop
done
for I in /etc/rc.d/rc\$RUNLEVEL.d/S* ;do
    \$I start
done
END
chmod +x /mnt/sysroot/etc/rc.d/rc
#重新挂在根目录配置文件
cat > /mnt/sysroot/etc/fstab <<END
${DISK}2    /   ext3    defaults    0 0
${DISK}1    /boot   ext3    defaults    0 0
proc        /proc   proc    defaults    0 0
sysfs       /sys    sysfs   defaults    0 0
END