首页 电脑 电脑学堂 查看内容

脚本自动创建一个小于10M的Linux系统

2011-9-29 22:29 716 25

摘要:   脚本使用说明:需要在宿主机上装两个硬盘,在测试的时候,只需要把第二块硬盘放到新的虚拟机中,然后启动就行了。  #!/bin/bash  #:Title:  #:Synopsis:  #:Data:...
关键词: nbsp sysroot mnt lib echo etc MOUNT kernel dev choice

  脚本使用说明:需要在宿主机上装两个硬盘,在测试的时候,只需要把第二块硬盘放到新的虚拟机中,然后启动就行了。  #!/bin/bash  #:Title:  #:Synopsis:  #:Data:  #:Version:1.0  #:Author:ro  #:Options:  #fdisk and fail the device  DISK(){                        //封装磁盘分区格式化的函数  read -p "choice a disk[/dev/sdb]:" CHOICE  NUM=`fdisk  -l | grep $CHOICE |wc -l &>/dev/null`  if [ "$NUM" -gt '0' ];then  fdisk -l $CHOICE  MOUNT=`mount -l | grep "^$CHOICE" &>/dev/null`  MOUNTDISK=`echo $MOUNT`  for I  in  $MOUNTDISK ;do  if mount | grep "$I" &>/dev/null ;then  mount | grep "$I"  else  echo "$I is not mounted."  fi  done  fi  }  FAILDISK() {  dd if=/dev/zero of=/dev/sdb bs=512 count=1  sleep .1  return 1  }  #create partions  CREATEDISK() {  echo '  n  p  1  +50M  n  p  2  +512M  n  p  3  +256M  t  3  82  w' | fdisk $CHOICE &>/dev/null  partprobe $CHOICE  sleep .1  mkfs.ext3  ${CHOICE}1 &>/dev/null  mkfs.ext3  ${CHOICE}2 &>/dev/null  mkswap -f   ${CHOICE}3 &>/dev/null  #mkfs  }  #mount the fdisk                //挂载磁盘分区  MOUNT(){  if [ -d /mnt/$1 ];then  if mount | grep "/mnt/$1";then  umount /mnt/$1  mount $CHOICE$2 /mnt/$1  else  mount $CHOICE$2 /mnt/$1  fi  else  mkdir /mnt/$1  mount $CHOICE$2 /mnt/$1  fi  }  # make the root and make directories in sysboot //创建root目录和sysboot目录  ROOTFS(){  cd /mnt/$1  mkdir {boot,proc,sys,dev,home,root,etc/{rc.d,sysconfig,init.d},bin,sbin,lib,usr/{bin,sbin,lib,include},var/{log,run},tmp,mnt,opt,media} -pv &>/dev/null    //创建基本的目录  chmod 777 tmp  #the script for  init 0  to shutdown the system  cd /mnt/$1/etc/rc.d  touch shutdown.sh  cat >>shutdown.sh《EOF  #!/bin/bash  sync  sleep 2  sync  sync  umount /dev/sda1  umount /dev/sda2  exec /sbin/halt -p  EOF  chmod +x shutdown.sh  #the /sysroot/etc/inittab file and creat it  touch /mnt/$1/etc/inittab  cd /mnt/$1/etc  cat >>inittab《EOF  #default level.  id:3:initdefault:  #--->rc.sysinit.  si::sysinit:/etc/rc.d/rc.sysinit  #----->init 0 to shutdown.  l0:0:wait:/etc/rc.d/shutdown.sh  #----->single user mode.  l1:1:wait:/sbin/init -t1 S  #----->the terminals of the minilinux  1:2345:respawn:/sbin/mingetty tty1  2:2345:respawn:/sbin/mingetty tty2  EOF  #cp the INTERNET CARD module to the minilinux  cd /mnt/$1/lib  mkdir  -p modules  cd modules  cp /lib/modules/2.6.18-164.el5/kernel/drivers/net/mii.ko ./  cp /lib/modules/2.6.18-164.el5/kernel/drivers/net/pcnet32.ko   ./  #the /etc/sysctl.conf file  cd /mnt/$1/etc  touch  sysctl.conf  cat >>sysctl.conf《EOF  net.ipv4.ip_forward = 0  net.ipv4.ip_forward = 1  net.ipv4.conf.default.rp_filter = 1  net.ipv4.conf.default.accept_source_route = 0  kernel.sysrq = 0  kernel.core_uses_pid = 1  net.ipv4.tcp_syncookies = 1  kernel.msgmnb = 65536  kernel.msgmax = 65536  kernel.shmmax = 4294967295  kernel.shmall = 268435456  EOF  #the /etc/rc.d/rc.sysinit file  cd /mnt/$1/etc/rc.d  touch rc.sysinit  cat >>rc.sysinit《EOF  #!/bin/bash  echo -e "\t\tWelcome to \033[31;1mLittle\033[0m Linux…"  ##the network modules an set IP address to the minilinux##  if [[ -x /sbin/sysctl && -r /etc/syctl.conf ]];then  echo $"configuring kernel paremeters"  /sbin/sysctl -p /etc/sysctl.conf  echo $"…kernel parameters done."  fi  [ -e /lib/modules/mii.ko ] && /sbin/insmod /lib/modules/mii.ko  [ -e /lib/modules/pcnet32.ko ] && /sbin/insmod /lib/modules/pcnet32.ko  echo "load the eth cart drivers ok"  echo "set ip "  /sbin/ifconfig lo 127.0.0.1/8  /sbin/ifconfig eth0 192.168.0.133/24  ##the network modules an set IP address to the minilinux##  ###########The hostname for the minilinux  [ -f /etc/sysconfig/network ] && source /etc/sysconfig/network  [ -z $HOSTNAME ] && HOSTNAME=RoQi  echo $HOSTNAME > /proc/sys/kernel/hostname  ##########hostname for the systerm  mount -n -o remount,rw /  mount -n -a  EOF  chmod +x rc.sysinit  #the fstab file  cd /mnt/$1/etc/  touch fstab  echo "/dev/sda2      /         ext3    defaults        0 0" >fstab  echo "/dev/sda1      /boot     ext3    defaults        0 0" 》fstab  echo "sysfs          /sys      sysfs   defaults        0 0" 》fstab  echo "proc           /proc     proc    defaults        0 0" 》fstab  #the issue file to show the login infomation  cd /mnt/$1/etc/  touch issue  cat >>issue《EOF  Red Hat Enterprise Linux Server release 5.4 (Tikanga)  Kernel on an \m  *************************  *welcome to Ro's minilinux*  *login:root;passwd: redhat*  *************************  EOF  ##the /proc/sys/kernel file  mkdir -p /mnt/sysroot/proc/sys/kernel/  touch hostname  cat >>hostname《EOF  Ro.minilinux.org  EOF  #the yum.conf files  mkdir -p  /mnt/$1/etc/yum.repos.d/  touch yum.repo  cat >>yum.repo《EOF  [base]  name=Instructor Server Repository  baseurl=ftp://192.168.0.254/pub/Server  gpgcheck=0  [VT]  name=Instructor VT Repository  baseurl=ftp://192.168.0.254/pub/VT  gpgcheck=0  [Cluster]  name=Instructor Cluster Repository  baseurl=ftp://192.168.0.254/pub/Cluster  gpgcheck=0  [ClusterStorage]  name=Instructor ClusterStorage Repository  baseurl=ftp://192.168.0.254/pub/ClusterStorage  gpgcheck=0  EOF  cd  /mnt/$1/root/  touch .bash_profile  echo "PS1='[\u@\h \W]\$'">.bash_profile  }  #this function use to cp files from normal machine to the minilinux  CPLIB(){  #cp the "login" file  cp /tmp/myscript/login /mnt/sysroot/bin  chmod +x /mnt/sysroot/bin/login  #CP libnss files  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/bin/  cp -d /usr/lib/libnss_files.so /mnt/sysroot/usr/lib/  cp -d /usr/lib/libnss_compat.so /mnt/sysroot/usr/lib/  cp -d  /lib/libnss_files* /mnt/sysroot/lib/  cp -d  /lib/libnss_compat* /mnt/sysroot/lib/  #cp login files  cp -d /lib/libcrypt.so.1 /mnt/sysroot/lib/  cp -d /lib/libcrypt-2.5.so /mnt/sysroot/lib/  cp  /lib/libm.so.6 /mnt/sysroot/lib/  #cp -d /lib/libcrypt-2.5.so /mnt/sysroot/lib/  #cp user and passwd files  cp /etc/passwd /mnt/sysroot/etc/  cp /etc/shadow /mnt/sysroot/etc/  cp /etc/group /mnt/sysroot/etc/  cp /etc/gshadow /mnt/sysroot/etc/  #cp nsswitch.conf file  cp /etc/nsswitch.conf   /mnt/sysroot/etc/  }  #the script use to cp the /bin to /mnt/sysroot/bin  BINCP(){  if which $1 &>/dev/null;then  DR=`which $1 | grep -o "/.*" | sed -n 's/\(.*\)\/.*/\1/p'`  FR=`which $1 | grep -o "/.*"`  [ -d ${2}$DR ] || mkdir -pv ${2}$DR &> /dev/null  [ -e ${2}$FR ]|| cp $FR ${2}$DR  LIB=`ldd $FR | sed -n 's/.*\/lib\/\(.*\)/\1/gp' | awk '{print $1}'`  for I in $LIB;do  LDR=`ldd $FR | grep -o '/.*' | awk '{print $1}' | sed -n 's@\(/.*\)/'"$I"'@\1@gp'`  [ -d ${2}$LDR ] || mkdir -pv ${2}$LDR &> /dev/null  [ ! -e ${2}"$LDR"/"$LIB" ] && cp -f "$LDR"/"$I" ${2}$LDR  done  else  echo "$1 is not exit."  fi  }  #change the  initrd. file  INIT(){  TMPDIR=`mktemp -d /tmp/little.XX`  cd $TMPDIR  zcat /boot/initrd-2.6.18-164.el5.img | cpio -id  sed -i 's/echo Scanning and configuring dmraid supported devices/#&/g' $TMPDIR/init  sed -i 's/echo Scanning logical volumes/#&/g' $TMPDIR/init  sed -i 's/lvm vgscan --ignorelockingfailure/#&/g'  $TMPDIR/init  sed -i 's/echo Activating logical volumes/#&/g'  $TMPDIR/init  sed -i 's/lvm vgchange -ay --ignorelockingfailure  vol0/#&/g'  $TMPDIR/init  sed -i 's/resume LABEL=SWAP-sda3/#&/g'  $TMPDIR/init  sed -i 's@mkrootdev -t ext3 -o defaults,ro /dev/vol0/root/@mkrootdev -t ext3 -o defaults,ro  sda2@g'  $TMPDIR/init  find . | cpio -H newc -o --quiet | gzip -9 > $1/initrd.gz  #  cp /boot/vmlinuz-2.6.18-164.el5 $1/vmlinuz  cp /boot/vmlinuz-2.6.28.10-myminilinux  /mnt/boot/vmlinuz-2.6.28.10-myminilinux  }  ###the grub file  GRUB(){  # install grub  grub-install --root-directory=/mnt $CHOICE &>/dev/null  #the context of grub file  cd /mnt/boot/grub  touch grub.conf  cat >>grub.conf《EOF  default=0  timeout=10  title Welcome to Ro_Qi  minilinux  root (hd0,0)  kernel /vmlinuz-2.6.28.10-myminilinux  ro root=/dev/sda2  initrd /initrd.gz  EOF  }  #the main function  HELPWORD(){  echo "./mknewlinux.sh -a:make a new linux."  echo "./mknewlinux.sh -d DEVICE_NAME:make a new fdisk."  echo "./mknewlinux.sh -m:mount the filesystem."  echo "./mknewlinux.sh -r:Initialize the rootfs."  echo "./mknewlinux.sh -b:copy the lib and command."  echo "./mknewlinux.sh -k:edit the interd file."  echo "./mknewlinux.sh -g:make grub.conf."  echo "./mknewlinux.sh -h:help files."  }  while getopts "ad:mrbkgh" OPTS;do  case $OPTS in  a)  DISK  FAILDISK  CREATEDISK  MOUNT boot 1  MOUNT sysroot 2  ROOTFS sysroot  CPLIB  for I in ls ifconfig ping vim  useradd userdel usermod  yum  lsmod modprobe touch insmod mkdir mingetty hostname mv rm vi runlevel sync halt chmod swapoff swapon sysctl umount cp cat init bash ;do  BINCP $I /mnt/sysroot  done  ln -sv bash sh &>/dev/null  INIT /mnt/boot  rm -rf $TMPDIR  GRUB  sync  sync  sleep 2  ;;  d)  DISK $OPTARG  FAILDISK $OPTARG  CREATEDISK $OPTARG  ;;  m)  MOUNT boot 1  MOUNT sysroot 2  ;;  r)  ROOTFS sysroot  ;;  b)  CPLIB  for I in pwd  ls ifconfig ping useradd userdel usermod  yum  lsmod modprobe touch insmod mkdir mingetty hostname mv rm vi runlevel sync halt chmod swapoff swapon sysctl umount cp cat init bash ;do  BINCP $I /mnt/sysroot  done  ln -sv bash sh &>/dev/null  ;;  k)  NIT /mnt/boot  rm -rf $TMPDIR  ;;  g)  GRUB  sync  sync  sleep 2  ;;  h)  HELPWORD  ;;  *)  HELPWORD  ;;  esac  done  #cp -d /lib/libcrypt-2.5.so /mnt/sysroot/lib/  #ln -s bash sh
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除

路过

雷人

握手

鲜花

鸡蛋

返回顶部