國內某公有云 linux雲主機開機初始化過程分析和他的鏡像製作過程

最近學習了國內某公有云的linux雲主機啓動之後,在鏡像內部的初始化過程,分享出來,僅供參看。

一、開機過程

wKioL1f-C0nT_SB6AAFFuVSazf8353.jpg-wh_50

wKioL1f-C6vyzSvEAAFZ0kHZfpA247.jpg-wh_50 

可以看到開機時候按照數字順序執行了一連串的腳本,其中也提示的該公有云廠商的名字的ucloud,最後一條顯示做了清理工作。進系統一看 果然找不到這些腳本了。

二、進單用戶模式找出這些腳本

  想讓開機的時候不讓最後一步 999-clwanup.sh執行的辦法很多,我採取的的辦法是單用戶模式,簡單上個圖,具體方法大家谷歌下。

成功進入單用戶模式,並複製他的初始化腳本

wKiom1f-FaOhlhzTAACnclo2Ryw774.jpg-wh_50


三 初始化過程分析

 (一) 腳本執行的入口還是傳統的/etc/rc.local,主程序是bootstrap.sh

    /ucloud_boot/bootstrap.sh

    目錄如下圖(可恥的把uuid匿了,怕ucloud的人來砍我)

   wKiom1f-GGGRgI91AAD56aTwdm8781.jpg-wh_50

 

主程序代碼:註釋我加的

#!/bin/bash

script_abs=$(readlink -m "$0")  
script_dir=$(dirname $script_abs)  #這兩行是獲取執行目錄,之所以搞得複雜我覺得可能有些鏡像用了軟連接)
cd $script_dir            


. lib/utils.sh  #導入幾個函數

for module in $(ls modules/*.sh | sort)   #按照數字排列執行 modules目錄下sh文件 
do
    $(. $module)

    if [[ $? != 0 ]]; then
        echo "[$module] failed"
    else
        echo "[$module] succeed"
    fi
done         

if [[ -d "$BOOTSTRAP_DIR" ]]; then #估計是老的寫法代碼沒刪掉
        rm -rf $BOOTSTRAP_DIR
fi

每個模塊 解釋

050-sysprep.sh  (刪除系統存在過的網卡mac信息)

100-interface.sh   (寫入新的網卡信息到 ifcfg文件)

101-cleanup-ethX-bak.sh (清楚舊網卡備份)

110-dns.sh (設置dns)

120-hostname.sh(設置hostname)

150-fix-epel-key.sh (修改epel源配置)

200-password-root.sh (設置密碼)

300-disk.sh (如果有新的硬盤 掛在到 /data)

700-add-rpmforge-repo.sh

701-add-remi-repo.sh

703-add-10gen-repo.sh

749-exclude-kernel-update.sh (更新yum設置)

750-localize-repo.sh 設置yum源

760-lock-minor-version.sh 設置yum源版本

799-clear-yum-repos.sh  清理yum目錄

800-skip-fstab-check.sh 強制開機時候不檢查硬盤

801-update-ntp-server.sh 設置ntp

803-disable-service.sh 如果沒有裝docker的話禁用iptables

810-disable-GSSAPIAuth.sh 修改sshd的配置

850-optimize-sysctl.sh 調整網絡參數 ulimit

855-cp-syslog.sh 設置日誌輪轉

860-install-updates.sh 更新bash 和glibc

880-cp-set-irq-affinity.sh 

996-install-sysstat.sh.disabled

997-install-kdump.sh.disabled

998-cleanup-last.sh 清理現場

999-cleanup.sh 清理歷史記錄

腳本文件展示到此結束,然後還發現了一點,history 和  bash_history 竟然沒有清理

四 部分鏡像製作過程

  下面展示了ucloud虛擬機制作過程,概括起來有這麼幾件事情:改用他內核(不知道是不是他自己定製的);禁用防火牆;禁用常規服務以節約內存,修改串口日誌輸出,設置yum源

    1  2016-07-21 12:52:26 ls

    2  2016-07-21 13:14:33 ll /etc/grub.conf

    3  2016-07-21 13:16:22 rm -f /etc/grub.conf ;ln -s /boot/grub/grub.conf /etc/grub.conf

    4  2016-07-21 13:16:27 ll /etc/grub.conf

    5  2016-07-21 13:16:43 rz

    6  2016-07-21 13:19:11 ll /etc/grub.conf

    7  2016-07-21 13:21:20 wget http://static.ucloud.cn/kernel/2.6.32-431.11.25.el6.ucloud.x86_64.tar.gz 

    8  2016-07-21 13:22:53 tar -zxvf 2.6.32-431.11.25.el6.ucloud.x86_64.tar.gz

    9  2016-07-21 13:23:02 ls

   10  2016-07-21 13:25:19 cd 2.6.32-431.11.25.el6.ucloud.x86_64

   11  2016-07-21 13:25:28 ls

   12  2016-07-21 13:31:00 /sbin/iptables -P INPUT ACCEPT && /sbin/iptables -F ; service iptables stop 

   13  2016-07-21 13:31:18 ls

   14  2016-07-21 13:31:25 bash install.sh

   15  2016-07-21 13:48:17 ls

   16  2016-07-21 13:50:04 yum -y install lsof iotop sysstat

   17  2016-07-21 13:51:34 chkconfi --list

   18  2016-07-21 13:51:39 chkconfig --list

   19  2016-07-21 13:53:43 getenforce

   20  2016-07-21 13:59:06 chkconfig --level auditd          123456 0ff 

   21  2016-07-21 13:59:26 chkconfig --level auditd  123456 0ff 

   22  2016-07-21 14:00:18 chkconfig auditd           --level  123456 0ff 

   23  2016-07-21 14:01:05 chkconfig auditd           --level  123456  off 

   24  2016-07-21 14:04:23 chkconfig blk-availability --level  123456  off 

   25  2016-07-21 14:04:23 chkconfig cgconfig       --level  123456 off   

   26  2016-07-21 14:04:23 chkconfig cgred          --level  123456 off         

   27  2016-07-21 14:04:23 chkconfig dnsmasq        --level  123456 off 

   28  2016-07-21 14:04:23 chkconfig fcoe           --level  123456 off 

   29  2016-07-21 14:04:23 chkconfig ip6tables      --level  123456 off 

   30  2016-07-21 14:04:23 chkconfig iptables       --level  123456 off 

   31  2016-07-21 14:04:23 chkconfig iscsi          --level  123456 off 

   32  2016-07-21 14:04:23 chkconfig iscsid         --level  123456 off 

   33  2016-07-21 14:04:23 chkconfig kdump          --level  123456 off 

   34  2016-07-21 14:04:23 chkconfig lldpad         --level  123456 off 

   35  2016-07-21 14:04:23 chkconfig lvm2-monitor   --level  123456 off 

   36  2016-07-21 14:04:23 chkconfig mdmonitor      --level  123456 off 

   37  2016-07-21 14:04:23 chkconfig multipathd     --level  123456 off 

   38  2016-07-21 14:04:23 chkconfig netconsole     --level  123456 off 

   39  2016-07-21 14:04:23 chkconfig netfs          --level  123456 off 

   40  2016-07-21 14:04:23 chkconfig nfs            --level  123456 off 

   41  2016-07-21 14:04:23 chkconfig nfslock        --level  123456 off                 

   42  2016-07-21 14:04:23 chkconfig pppoe-server   --level  123456 off 

   43  2016-07-21 14:04:23 chkconfig rdisc          --level  123456 off 

   44  2016-07-21 14:04:23 chkconfig restorecond    --level  123456 off 

   45  2016-07-21 14:04:23 chkconfig rpcbind        --level  123456 off 

   46  2016-07-21 14:04:23 chkconfig rpcgssd        --level  123456 off 

   47  2016-07-21 14:04:23 chkconfig rpcidmapd      --level  123456 off 

   48  2016-07-21 14:04:23 chkconfig rpcsvcgssd     --level  123456 off       

   49  2016-07-21 14:04:23 chkconfig saslauthd      --level  123456 off 

   50  2016-07-21 14:04:23 chkconfig sendmail       --level  123456 off                 

   51  2016-07-21 14:04:23 chkconfig udev-post      --level  123456 off 

   52  2016-07-21 14:04:24 chkconfig wpa_supplicant --level  123456 off

   53  2016-07-21 14:04:49 chkconfig --list | grep ":on"

   54  2016-07-21 14:05:50 cd

   55  2016-07-21 14:06:02 ll /etc/grub.conf

   56  2016-07-21 14:07:17 rm -rfv /root/.ssh/*  /tmp/*     ;  rm -fv /root/*

   57  2016-07-21 14:07:31 ls

   58  2016-07-21 14:07:48 rpm -qa | grep kernel 

   59  2016-07-21 14:26:35 rpm -e kernel-firmware-2.6.32-431.11.21.el6.ucloud.x86_64

   60  2016-07-21 14:26:36 rpm -e kernel-headers-2.6.32-431.11.21.el6.ucloud.x86_64

   61  2016-07-21 14:26:36 rpm -e kernel-2.6.32-431.11.22.el6.ucloud.x86_64

   62  2016-07-21 14:26:37 rpm -e kernel-devel-2.6.32-431.11.22.el6.ucloud.x86_64

   63  2016-07-21 14:26:39 rpm -e kernel-2.6.32-431.11.15.el6.ucloud.x86_64

   64  2016-07-21 14:26:39 rpm -e kernel-devel-2.6.32-431.11.15.el6.ucloud.x86_64

   65  2016-07-21 14:26:41 rpm -e kernel-firmware-2.6.32-431.11.22.el6.ucloud.x86_64

   66  2016-07-21 14:26:41 rpm -e kernel-headers-2.6.32-431.11.22.el6.ucloud.x86_64

   67  2016-07-21 14:26:41 rpm -e kernel-firmware-2.6.32-431.11.15.el6.ucloud.x86_64

   68  2016-07-21 14:26:42 rpm -e kernel-headers-2.6.32-431.11.15.el6.ucloud.x86_64

   69  2016-07-21 14:26:42 rpm -e kernel-2.6.32-431.11.21.el6.ucloud.x86_64

   70  2016-07-21 14:26:45 rpm -e kernel-devel-2.6.32-431.11.21.el6.ucloud.x86_64

   71  2016-07-21 14:26:52 rpm -qa | grep kernel 

   72  2016-07-21 14:27:48 rpm -qa | grep kernel |grep 431 | wc -l

   73  2016-07-21 14:29:00 rm -f /etc/grub.conf ;ln -s /boot/grub/grub.conf /etc/grub.conf

   74  2016-07-21 14:29:11 ll /etc/grub.conf

   75  2016-07-21 14:30:05 rm -rfv /root/.ssh/*  /tmp/*     ;  rm -fv /root/*

   76  2016-07-21 14:30:19 ls

   77  2016-07-21 14:31:18 yum check all

   78  2016-07-21 14:31:54 yum -y install yum-utils

   79  2016-07-21 14:33:26 yum-complete-transaction

   80  2016-07-21 14:33:59 cd

   81  2016-07-21 14:34:01 ls

   82  2016-07-21 14:34:14 package-cleanup --dupes (清理yum安裝軟件剩餘的緩存)

   83  2016-07-21 14:34:32 package-cleanup --cleandupes  

   84  2016-07-21 14:42:13 cd /etc/yum.repos.d/

   85  2016-07-21 14:42:14 ls

   86  2016-07-21 14:43:37 chkconfig --list | grep ":on" | wc -l

   87  2016-07-21 14:43:47 chkconfig --list | grep ":on" 

   88  2016-07-21 14:45:11 ll

   89  2016-07-21 14:46:42 ll /etc/yum.repos.d/

   90  2016-07-21 14:46:47 ll /etc/yum.repos.d/ | wc -l

   91  2016-07-21 14:49:00 more CentOS-Base.repo

   92  2016-07-21 14:50:01   sed -i 's/centos.mirror.ucloud.cn/mirrors.ucloud.cn/g' /etc/yum.repos.d/CentOS-Base.repo   設置yum源

   93  2016-07-21 14:50:33 sed -i 's/centos.mirrors.ucloud.cn/mirrors.ucloud.cn/g' /etc/yum.repos.d/CentOS-Base.repo

   94  2016-07-21 14:50:51 more CentOS-Base.repo

   95  2016-07-21 14:51:57   more epel.repo

   96  2016-07-21 14:53:13 sed -i 's/epel.mirror.ucloud.cn/mirrors.ucloud.cn/g' /etc/yum.repos.d/epel.repo  設置epel源

   97  2016-07-21 14:53:27 more epel.repo

   98  2016-07-21 15:00:16 more /boot/grub/grub.conf

   99  2016-07-21 15:03:50 cat /boot/grub/grub.conf | grep title  | wc -l

  100  2016-07-21 15:07:25 cat /boot/grub/grub.conf | grep 'console=tty1 console=ttyS0,115200n8' | wc -l  

  101  2016-07-21 15:07:55 cd

  102  2016-07-21 15:08:36 cat /etc/securetty  | grep ttyS0  | wc -l

  103  2016-07-21 15:10:35 ls /

  104  2016-07-21 15:10:54 rm -rf /boot_ucloud/

  105  2016-07-21 15:10:58 ls /

  106  2016-07-21 15:12:02 reboot

  107  2016-07-21 15:41:22 poweroff

  108  2016-09-13 15:03:31 ll

  109  2016-09-13 15:03:41 tail /var/log/secure 

  110  2016-09-13 15:04:49 cat /root/.bash_history

  111  2016-09-13 15:05:01 vim /root/.bash_history

  112  2016-09-13 15:06:32 sz /root/.bash_history

  113  2016-09-13 15:07:13 history 

  114  2016-09-13 15:07:52 history >history.txt

五 總結:

  從表面看,ucloud的鏡像啓動過程和製作鏡像過程做的比較粗糙,腳本寫的比較亂,前後風格完全不一致,基本沒有對centos本身調優。附件爲本文中所有提到的文件,ucloud的朋友要是看到了別來砍我哦。另外windows沒有單用戶模式,安全模式也是要密碼的,其實也是有辦法的,等有空了我來搞一把。題外話,連aws現在都採用cloud-init來初始化虛擬機了,再用傳統的腳本是不是有點low啊。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章