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


根据前几天的整合,我们最终写好了一键制作Linux的脚本。这次真的是一键了,附带了常用的命令,以及欢迎界面,外加提示符等等。



宿主机:Redhat Enterprise 5 (2.6.18)

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

0_13125891458AgY.gif

0_1312603380B8tV.gif

#!/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 !"


当所有都运行完之后~

0_1312603514v3iI.gif


OK,万事搞定!