最近学习了国内某公有云的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没有单用户模式,安全模式也是要密码的,其实也是有办法的,等有空了我来搞一把。