感谢支持
我们一直在努力

bash自动化 定制Linux属于自己的CentOS 系统

bash自动化 定制Linux属于自己的CentOS 系统,直接上图

1、首先在宿主机创建目录,/mnt/boot /mnt/sysroot,格式化磁盘将其挂载

bash自动化 定制Linux属于自己的CentOS 系统

1、相对应的函数:

mkdevice () {

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

    [ $? -ne 0 ] && return 67

    echo ‘

        n

        p

        1

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

        +500M

        n

        p

        2

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

        +9G

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

    [ $? -ne 0 ] && return 68

    sync

    sleep 2

    mkfs.ext4 ${1}1 &> /dev/null

    PAPT1=$?

    mkfs.ext4 ${1}2 &> /dev/null

    PAPT2=$?

    [ $PAPT1 -ne 0 -o $PAPT2 -ne 0 ] && return 69

}

 

 

umountall () {

    for PAPT in `fdisk -l $1 | grep -o “${1}[0-9]\{1,\}”`; do

        fuser -km $PAPT &> /dev/null

        umount $PAPT &> /dev/null

    done

}

 

mountall () {

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

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

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

    mount  ${1}1 $BOOT

    mount  ${1}2 $SYSROOT

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

}

2、安装grub程序,我们这里是安装到/mnt/boot

bash自动化 定制Linux属于自己的CentOS 系统

2、相对应的函数:

instgrub () {

    GRUBROOT=`dirname $BOOT`

    grub-install –root-directory=$GRUBROOT $1

}

3、创建系统所需的目录

bash自动化 定制Linux属于自己的CentOS 系统

3与其对应的函数

mkrootfs () {

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

mkdir -p $SYSROOT/usr{share/{man,doc},bin,sbin,local,src,lib,lib64} &> /dev/null

mkdir -p $SYSROOT/var/{log,run,lock,spool,tmp} &> /dev/null

mkdir -p $SYSROOT/lib/{modules,module} &> /dev/null

mkdir -p $SYSROOT/lib64/{modues,module} &> /dev/null

cp /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/e1000/e1000.ko  $SYSROOT/lib/modules/

cp  /boot/vmlinuz-2.6.32-431.el6.x86_64  $BOOT/vmlinuz

cp /boot/initramfs-2.6.32-431.el6.x86_64.img $BOOT/initramfs.img

echo -e  “default=0 \ntimeout=5 \ntitle MyCentos root (hd0,0) \nkernel /vmlinuz ro  root=/dev/sda2 quiet selinux=0 init=/sbin/init

initrd /initramfs.img ” > $BOOT/grub/grub.conf

touch $SYSROOT/sbin/init && cat /root/init > $SYSROOT/sbin/init && chmod +x $SYSROOT/sbin/init

}

4复制kernel 到目标主机

4、与其对应的函数

mkrootfs () {

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

mkdir -p $SYSROOT/usr{share/{man,doc},bin,sbin,local,src,lib,lib64} &> /dev/null

mkdir -p $SYSROOT/var/{log,run,lock,spool,tmp} &> /dev/null

mkdir -p $SYSROOT/lib/{modules,module} &> /dev/null

mkdir -p $SYSROOT/lib64/{modues,module} &> /dev/null

cp /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/e1000/e1000.ko  $SYSROOT/lib/modules/

cp  /boot/vmlinuz-2.6.32-431.el6.x86_64  $BOOT/vmlinuz

cp /boot/initramfs-2.6.32-431.el6.x86_64.img $BOOT/initramfs.img

echo -e  “default=0 \ntimeout=5 \ntitle MyCentos root (hd0,0) \nkernel /vmlinuz ro  root=/dev/sda2 quiet selinux=0 init=/sbin/init

initrd /initramfs.img ” > $BOOT/grub/grub.conf

touch $SYSROOT/sbin/init && cat /root/init > $SYSROOT/sbin/init && chmod +x $SYSROOT/sbin/init

}

5从宿主机复制/boot/initramfs.img 到目标主机

bash自动化 定制Linux属于自己的CentOS 系统

5、与其对应的函数

mkrootfs () {

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

mkdir -p $SYSROOT/usr{share/{man,doc},bin,sbin,local,src,lib,lib64} &> /dev/null

mkdir -p $SYSROOT/var/{log,run,lock,spool,tmp} &> /dev/null

mkdir -p $SYSROOT/lib/{modules,module} &> /dev/null

mkdir -p $SYSROOT/lib64/{modues,module} &> /dev/null

cp /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/e1000/e1000.ko  $SYSROOT/lib/modules/

cp  /boot/vmlinuz-2.6.32-431.el6.x86_64  $BOOT/vmlinuz

cp /boot/initramfs-2.6.32-431.el6.x86_64.img $BOOT/initramfs.img

echo -e  “default=0 \ntimeout=5 \ntitle MyCentOS root (hd0,0) \nkernel /vmlinuz ro  root=/dev/sda2 quiet selinux=0 init=/sbin/init

initrd /initramfs.img ” > $BOOT/grub/grub.conf

touch $SYSROOT/sbin/init && cat /root/init > $SYSROOT/sbin/init && chmod +x $SYSROOT/sbin/init

}

6、创建grub.conf配置文件,是系统能够正常引导

bash自动化 定制Linux属于自己的CentOS 系统

6、与其对应的函数

mkrootfs () {

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

mkdir -p $SYSROOT/usr{share/{man,doc},bin,sbin,local,src,lib,lib64} &> /dev/null

mkdir -p $SYSROOT/var/{log,run,lock,spool,tmp} &> /dev/null

mkdir -p $SYSROOT/lib/{modules,module} &> /dev/null

mkdir -p $SYSROOT/lib64/{modues,module} &> /dev/null

cp /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/e1000/e1000.ko  $SYSROOT/lib/modules/

cp  /boot/vmlinuz-2.6.32-431.el6.x86_64  $BOOT/vmlinuz

cp /boot/initramfs-2.6.32-431.el6.x86_64.img $BOOT/initramfs.img

echo -e  “default=0 \ntimeout=5 \ntitle MyCentos root (hd0,0) \nkernel /vmlinuz ro  root=/dev/sda2 quiet selinux=0 init=/sbin/init

initrd /initramfs.img ” > $BOOT/grub/grub.conf

touch $SYSROOT/sbin/init && cat /root/init > $SYSROOT/sbin/init && chmod +x $SYSROOT/sbin/init

}

7、复制宿主机中的程序到目标主机

bash自动化 定制Linux属于自己的CentOS 系统

7、与其对应的函数,需要cp的程序有:其实当中也有些不是那么重要的程序,不过在init中使用到的命令就必须提供,不然会导致内核恐慌的…其它命令可以随添加之! 

bash  chmod  chown  cp  dd  echo  ls  mkdir  mount  ping  touch  umount  vi chkconfig  halt  ifconfig  init  insmod  reboot  rmmod  route

Bcp () {

    COMMAND=`which  –skip-alias $1`

    #echo COMMAND

    COMPATH=`dirname $COMMAND`

    #echo $COMPATH

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

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

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

    LIBPATH=`dirname $lib`

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

    [ -e $SYSROOT$lib ] || cp $lib $SYSROOT${LIBPATH}

    done

}

8、复制宿主机的网卡模块到宿主机

bash自动化 定制Linux属于自己的CentOS 系统

 

8、与其对应的命令也在mkrootfs中

#!/bin/bash

#

##function fdisk

BOOT=/mnt/boot  #在宿主机中创建目标主机的工作目录

SYSROOT=/mnt/sysroot #在宿主机创建目标主机的工作目录

mkdevice () {

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

    [ $? -ne 0 ] && return 67

    echo ‘

        n

        p

        1

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

        +500M

        n

        p

        2

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             

        +9G

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

    [ $? -ne 0 ] && return 68

    sync

    sleep 2

    mkfs.ext4 ${1}1 &> /dev/null

    PAPT1=$?

    mkfs.ext4 ${1}2 &> /dev/null

    PAPT2=$?

    [ $PAPT1 -ne 0 -o $PAPT2 -ne 0 ] && return 69

}

# 如上脚本格式化磁盘,将目标主机的磁盘拿到宿主机进行格式化

#umount for disk directory

umountall () {

    for PAPT in `fdisk -l $1 | grep -o “${1}[0-9]\{1,\}”`; do

        fuser -km $PAPT &> /dev/null

        umount $PAPT &> /dev/null

    done

}

#mount for disk directory # 如果此之前,在构建目标主机的目录中有数据一定先将其卸载

mountall () {

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

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

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

    mount  ${1}1 $BOOT

    mount  ${1}2 $SYSROOT

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         

}

#grub install for directory

instgrub () {

    GRUBROOT=`dirname $BOOT`

    grub-install –root-directory=$GRUBROOT $1

}

# 安装能够引导系统的grub程序,如果没有改程序,系统将无法启动啦! 注意呀

#mkdir for directory and file system

mkrootfs () {

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

mkdir -p $SYSROOT/usr{share/{man,doc},bin,sbin,local,src,lib,lib64} &> /dev/null

mkdir -p $SYSROOT/var/{log,run,lock,spool,tmp} &> /dev/null

mkdir -p $SYSROOT/lib/{modules,module} &> /dev/null

mkdir -p $SYSROOT/lib64/{modues,module} &> /dev/null

cp /lib/modules/2.6.32-431.el6.x86_64/kernel/drivers/net/e1000/e1000.ko  $SYSROOT/lib/modules/

cp  /boot/vmlinuz-2.6.32-431.el6.x86_64  $BOOT/vmlinuz

cp /boot/initramfs-2.6.32-431.el6.x86_64.img $BOOT/initramfs.img

echo -e  “default=0 \ntimeout=5 \ntitle MyCentos root (hd0,0) \nkernel /vmlinuz ro  root=/dev/sda2 quiet selinux=0 init=/sbin/init

initrd /initramfs.img ” > $BOOT/grub/grub.conf

touch $SYSROOT/sbin/init && cat /root/init > $SYSROOT/sbin/init && chmod +x $SYSROOT/sbin/init

}

# 创建系统所需的目录

# 并将宿主机的内核程序复制到目标主机,有了内核,目标主机就所想披靡啦,不过要想系统能够正常启动还要将宿主机中的initramfs.img,要想拥有属于自己私人定制的系统initramfs.img是必须的.

Bcp () {

    COMMAND=`which  –skip-alias $1`

    #echo COMMAND

    COMPATH=`dirname $COMMAND`

    #echo $COMPATH

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

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

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

    LIBPATH=`dirname $lib`

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

    [ -e $SYSROOT$lib ] || cp $lib $SYSROOT${LIBPATH}

    done

}

# 这个函数的作用是:原因:创建系统完成了,系统还需要些程序吧,不然内核太无聊了…. 这个函数的目的是能够将宿主机的应用程序复制到目标主机,以及这些程序所依赖的库呀,什么的。

main () {

    umountall $IDISK

    mkdevice $IDISK

    mountall $IDISK

    instgrub $IDISK

    mkrootfs

  while true; do

read -p “A CommanD : ” CMD

case $CMD in

q|Q|quit|exit)

    echo “Finished.”

    exit 0

;;

*)

 ! which $CMD &> /dev/null && echo “Wrong Command.” && continue

    Bcp $CMD

    ;;

esac

done

}

# 这个是主函数,main() 作用就是调用这个脚本中的其它函数啦…

read -p “A disk : ” IDISK      # 然用户选择块磁盘000

if ! fdisk -l | grep “^Disk $IDISK” &> /dev/null; then

    echo “$IDISK is not a disk.”

    exit 5

fi

read -p “Destroy all date on $IDISK, contine (y/n) : ” ANSWER

case $ANSWER in

y)

main

;;

n)

exit

;;

*)

echo “Wrong option.”

;;

esac

# 语句判断啦,如果选择y就进行下去,如果选项N就退出脚本啦,以此类推啦!

cat/root/init> $SYSROOT/sbin/init&& chmod+x $SYSROOT/sbin/init

/root/init的内容是:

 

#!/bin/bash

#

echo -e “\tWelcome to \033[34m MyCentos\033[0m Linux “

mount -n -t proc porc /proc

mount -n -t sysfs sysfs /sys

insmod /lib/modules/e1000.ko

[ $? -eq 0 ] && echo -e “Load e1000 module succeeded                    [ \033[32mOK\033[0m ]”

ifconfig lo 127.0.0.1/8

ifconfig eth0 172.16.251.111/16

mount -n -o remount,rw /dev/sda2 /

/bin/bash

这里另外提供cp命令的脚本.想用什么命令就cp什么命令!你懂的

#!/bin/bash

                #copy order and it’s libs of depend

                noorder(){

                        if ! which $cmd &> /dev/null;then

                                echo “No such command!”

                                return 3

                        fi

                        orderpath=`which –skip-alias $cmd`

                }

                cporder(){

                        [ -d /mnt/sysroot`dirname $orderpath` ] || mkdir -p /mnt/sysroot`dirname $orderpath`

                        [ -f /mnt/sysroot$orderpath ] || cp -r $orderpath /mnt/sysroot$orderpath

                }

                cplib(){

                        for lib in `ldd $orderpath | grep -o “/[^[:space:]]\{1,\}”`;do

                                [ -d /mnt/sysroot`dirname $lib` ] || mkdir -p /mnt/sysroot`dirname $lib`

                                [ -f /mnt/sysroot`basename $lib` ] || cp -r $lib /mnt/sysroot$lib

                        done

                }

                while true;do

                        read -p “Please enter a command:” cmd

                        if [[ “$cmd” = “q” || “$cmd” = “Q” ]];then

                                echo “You choice quit,now quit!”

                                exit 0

                        else

                                noorder

                                [ $? == 3 ] && continue

                                cporder

                                cplib

                        fi

                done

更多CentOS相关信息见CentOS 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=14

赞(0) 打赏
转载请注明出处:服务器评测 » bash自动化 定制Linux属于自己的CentOS 系统
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏