最近學習了國內某公有云的linux雲主機啓動之後,在鏡像內部的初始化過程,分享出來,僅供參看。
一、開機過程
可以看到開機時候按照數字順序執行了一連串的腳本,其中也提示的該公有云廠商的名字的ucloud,最後一條顯示做了清理工作。進系統一看 果然找不到這些腳本了。
二、進單用戶模式找出這些腳本
想讓開機的時候不讓最後一步 999-clwanup.sh執行的辦法很多,我採取的的辦法是單用戶模式,簡單上個圖,具體方法大家谷歌下。
成功進入單用戶模式,並複製他的初始化腳本
三 初始化過程分析
(一) 腳本執行的入口還是傳統的/etc/rc.local,主程序是bootstrap.sh
/ucloud_boot/bootstrap.sh
目錄如下圖(可恥的把uuid匿了,怕ucloud的人來砍我)
主程序代碼:註釋我加的
#!/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啊。