自动化搭建微型linux系统ftp服务器

 一、构思

在这里我们是通过在一台拥有两个盘的linux上运行自动化脚本(一个系统所在盘sda,一个空盘sdb),在其系统所在盘创建一个类linux根目录,和boot目录,并通过母linux系统,将其所需的grub,软件,服务等复制过去,然后将它挂载到sdb,最后新建一个linux用母系统的sdb盘作为系统盘.

二、所需文件

我的自动化脚本main.sh;另外我实现了用户登录验证,这里我是直接把login这个单独弄了出来,方便复制;还有一个名叫txt的文件,这里他是记录我们所需的命令,例如ls等,如果有其他需要可以在这里面继续添加,防止在给微型linux系统加命令是有不必要的麻烦

四、建立微型linux系统

将上述已经做好的盘,放到准备建立的新的linux系统下

启动服务/usr/local/sbin/vsftpd /etc/vsftpd/vsftpd.conf

main.sh

 

#!/bin/bash

#

alias rm=rm

SYSROOT=/mnt/sysroot

BOOT=/mnt/boot

read -p "please input which dev you want to run :" WHDEV

umountall()

{

  for PART in `fdisk -l $1 | grep -o "^${1}[0-9]\{1,\}"`;do

     fuser -km $PART &> /dev/null

     umount $PART

  done

}

umountall $WHDEV

sync

sync

sleep 2

sync

sync

fdinput()

{

  read -p "would you want to do this :y/n" PANDUAN

  if [ "$PANDUAN" = "y" ];then

  dd if=/dev/zero of=$1 bs=512 count=1 &> /dev/null

  sync

  sync

  sync

  sync

  sync

  sleep 20

  sync

  sync

  sync

  sync

  sync

  [ $? -eq 0 ] || return 67

  echo '

n

p

1

 

+100M

n

p

2

 

+1G

n

p

3

 

+128M

t

3

82

w ' | fdisk $1 &> /dev/null

[ $? -eq 0 ] || return 68

sync

partprobe $1

sync

echo "please wait 5 seconds"

sync

sync

sleep 5

sync

sync

mkfs -t ext3 ${1}1

[ $? -eq 0 ] || return 69

mkfs -t ext3 ${1}2

[ $? -eq 0 ] || return 69

mkswap ${1}3

[ $? -eq 0 ] || return 69

return 0

  else

    exit

fi

}

  fdinput $WHDEV

  case $? in

  67)

  echo "qingkong dev failed"

  ;;

  68)

  echo "create main dev failed"

  ;;

  69)

  echo "mkfs dev failed"

  ;;

  0)

  echo "successful"

  ;;

  *)

  echo "unknow fault"

  ;;

  esac

sync

sync

sleep 2

sync

sync

mountall()

{

[ -d $BOOT ] || mkdir -p $BOOT

[ -d $SYSROOT ] || mkdir -p $SYSROOT

 

mount ${1}1 $BOOT

mount ${1}2 $SYSROOT

 

}

mountall $WHDEV

sync

sync

sleep 2

sync

sync

installgrub()

{

  grub-install --root-directory=/mnt /dev/sdb $1 &> /dev/null

}

installgrub $WHDEV

sync

sync

sleep 2

sync

sync

mkrootfs()

 {

   mkdir -p $SYSROOT/{proc,boot,sys,dev,tmp,lib,bin,sbin,root,home.opt,mnt,media,misc}

   mkdir -p $SYSROOT/usr/{share/{man,doc},bin,sbin,local/sbin,src,lib}

   mkdir -p $SYSROOT/etc/{rc.d,sysconfig}

   mkdir -p $SYSROOT/var/{lock,tmp,spool,run,log}

 }

 mkrootfs

sync

sync

sleep 2

sync

sync

bcp()

{

  COMMAND=`which $1 | grep -o "/.*"`

  CMDPATH=${COMMAND%/*}

  [ -d $SYSROOT$CMDPATH ] || mkdir -p $SYSROOT$CMDPATHI

  [ -e $SYSROOT$COMMAND ] || cp $COMMAND $SYSROOT$CMDPATH

  for LIB in `ldd $COMMAND | grep -o "/.*lib[^[:space:]]*"`;do

     LIBPATH=${LIB%/*}

     [ -d $SYSROOT$LIBPATH ] || mkdir -p $SYSROOT$LIBPATH

     [ -e $SYSROOT$LIB ] || cp $LIB $SYSROOT$LIBPATH

  done

}

for COMD in `cat txt`;do 

  case $COMD in 

  q|Q)

  break

  ;;

  *)

  ! which $COMD &> /dev/null && echo "wrond command ,please input again." && continue

  bcp $COMD

  ;;

  esac

done

 

#copy kernel

sync

sync

sleep 2

sync

sync

cpker()

{

  cp /boot/vmlinuz-2.6.18-308.el5 $BOOT/vmlinuz

  cd /tmp

  mkdir myroot

  cd myroot/

  zcat /boot/initrd-2.6.18-308.el5.img | cpio -id

  sed -i '93,97d' init

  sed -i 's@/dev/vo10/root@/dev/sda2@' init

  find . | cpio -o -H newc --quiet | gzip -9 > $BOOT/initrd.gz

  cd /tmp

  rm -r myroot/

}

cpker

sync

sync

sleep 2

sync

sync

#conf

cconf()

{

  cd $BOOT

  cd grub

  touch grub.conf

 echo "

default=0

timeout=3

title MY Linux

        root (hd0,0)

        kernel /vmlinuz ro root=/dev/sda2 quiet

        initrd /initrd.gz

" > grub.conf

sync

sync

sync

cd $SYSROOT/bin

ln -s bash sh

cd $SYSROOT

cd etc/

touch inittab

echo "

id:3:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc.sysdone

l1:1:wait:/sbin/init -t 1 S

1:2345:respawn:/sbin/mingetty tty1

2:2345:respawn:/sbin/mingetty tty2

" > inittab

sync

sync

touch rc.d/rc.sysinit

chmod +x rc.d/rc.sysinit

echo "

#!/bin/bash

#

echo -e "\twelcome to \033[31mMY\033[0m Linux"

#set hostname

[ -f /etc/sysconfig/network ] && source /etc/sysconfig/network

if [ -z $HOSTNAME -o $HOSTNAME='(none)' ];then

  /bin/hostname localhost

else

  /bin/hostname $HOSTNAME

fi

if [ $? -eq 0 ];then

  echo -n "Set the hostname"

  echo -e "\033[60G[ \033[32mOK\033[0m ]"

fi

#initial net device

/sbin/insmod /lib/modules/mii.ko &> /dev/null

/sbin/insmod /lib/modules/pcnet32.ko &> /dev/null

if [ $? -eq 0 ];then

  echo -n "Initial nercard driver"

  echo -e "\033[60G[ \033[32mOK\033[0m ]"

fi

#set kernel para

/sbin/sysctl -p &>/dev/null

#remount rootfs

/bin/mount -n -o remount,rw /dev/sda2 / &> /dev/null

if [ $? -eq 0 ];then

  echo -n "Rmount rootfs"

  echo -e "\033[60G[ \033[32mOK\033[0m ]"

fi

# Set IPADDR

/sbin/ifconfig lo 127.0.0.1/8 &> /dev/null

/sbin/ifconfig eth0 172.16.128.1/16 &> /dev/null

if [ $? -eq 0 ];then

  echo -n "Set IPADDR"

  echo -e "\033[60G[ \033[32mOK\033[0m ]"

fi

" > rc.d/rc.sysinit

touch rc.d/rc.sysdone

chmod +x rc.d/rc.sysdone

echo "

#!/bin/bash

#

exec /sbin/halt -p

" > rc.d/rc.sysdone

touch sysconfig/network

echo "

HOSTNAME=qinqin

" > sysconfig/network 

}

cconf

sync

sync

sleep 2

sync

sync

 

#copy modules lib

cpmo()

{

   CPGREP=`modinfo $1 | grep "filename"`

   CPCOM=/${CPGREP#*/}

   CPMPATH=${CPCOM%/*}

   [ -d $SYSROOT$CPMPATH ] || mkdir -p $SYSROOT$CPMPATH

   [ -e $SYSROOT$CPCOM ] || cp $COMMAND $SYSROOT$CPCOM

}

while true;do

 read -p "please input the modules which you want to copy the lib:" CPMODU

 case $CPMODU in

 q|Q)

 echo "the system will be exit"

 break

 ;;

 *)

 modinfo $CPMODU &> /dev/null || echo "wrong words ."

 cpmo $CPMODU

 ;;

 esac

done

sync

sync

sleep 2

sync

sync

 

 

 

####

cd /mnt/sysroot

find . | cpio -o -H newc --quiet | gzip > /root/sysroot.1

touch /etc/profile

echo "

#!/bin/bash

#

export PS1='\[\u@\h\W\]\$'

" > /etc/profile

cd

#login

cp login /mnt/sysroot/bin/

chmod +x /mnt/sysroot/bin/login

cp -d /lib/libnss_* $SYSROOT/lib/

cp -d /usr/lib/libnss* $SYSROOT/usr/lib/

cp /etc/nsswitch.conf $SYSROOT/etc/

sed -i '39,$d' $SYSROOT/etc/nsswitch.conf

 

sync

sync

sleep 2

sync

sync

 

cp -p /etc/passwd /etc/shadow /etc/group $SYSROOT/etc/

sync

sync

sleep 2

sync

sync

 

tar xf vsftpd-2.3.5.tar.gz

cd vsftpd-2.3.5

sed -i 's/#define VSF_BUILD_PAM/#undef VSF_BUILD_PAM/g' builddefs.h

make

make install

sync

sleep 2

sync

cd

bcp vsftpd

mkdir $SYSROOT/usr/share/empty

mkdir $SYSROOT/etc/vsftpd

chmod 555 $SYSROOT/usr/share/empty

mkdir -pv $SYSROOT/var/ftp/pub

cd vsftpd-2.3.5

cp vsftpd.conf $SYSROOT/etc/vsftpd

sync

sync

sleep 2

sync

sync

cd

rm -r vsftpd-2.3.5

 

 

 

 

txt
mingetty
sync
sleep
reboot
init
bash
ifconfig
halt
hostname
netstat
ping
mkdir
mount
netstat
umount
vim
cat
touch
ls
rm
insmod
ps
kill
killall
chmod
cp
mv
grep
passwd
sysctl
q
 

 

 

你可能感兴趣的:(linux,ftp,服务器,微型linux)