跳转到主内容
极星编程网:以代码为星,赴技术山海!

linux云服务器启动程序,国内某公有云 linux云主机开机初始化过程分析和他的镜像制作过程...

最近学习了国内某公有云的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啊。

相关文章