国内某公有云 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啊。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端杂货铺

node模块加载层级优化

模块加载痛点 大家也或多或少的了解node模块的加载机制,最为粗浅的表述就是依次从当前目录向上级查询node_modules目录,若发现依赖则加载。但是随着应用...

3708
来自专栏xingoo, 一个梦想做发明家的程序员

Volatile的作用

众所周知,volatile关键字可以让线程的修改立刻通知其他的线程,从而达到数据一致的作用。那么它具体涉及到哪些内容呢? 关于缓存 计算机最大的存储空间就...

2158
来自专栏Golang语言社区

如何优化服务器的性能

一、通常服务器的性能会卡在三个地方: cpu 网络IO 磁盘IO 二、在优化性能的时候,首先要判断性能的瓶颈在上述的哪个地方。然后对症下药,按照下面的方法来优化...

5266
来自专栏信安之路

绕过内容安全策略总结

今年的 0CTF 预选赛 6 道 web 题,其中三道都涉及 CSP 的知识点,简直可怕。。。这次趁着空闲时间就稍稍总结一下 CSP 绕过方面的知识,无论是对以...

2170
来自专栏Java后端技术栈

分布式锁简单入门以及三种实现方式介绍

很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多...

1071
来自专栏GopherCoder

『Ansible 上手指南:2』

2094
来自专栏我就是马云飞

JJEvent 一个可靠的Android端数据埋点SDK

注:代码已经经过线上项目验证, 横向Google统计对比,统计数据无丢失,性能稳定.

4114
来自专栏Golang语言社区

如何优化服务器的性能

一、通常服务器的性能会卡在三个地方: cpu 网络IO 磁盘IO 二、在优化性能的时候,首先要判断性能的瓶颈在上述的哪个地方。然后对症下药,按照下面的方法来优化...

4229
来自专栏Android开发实战

HTTP1.0、HTTP1.1和HTTP2.0的区别

早在HTTP建立之初,主要就是为了将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器。也是说对于前端来说,我们所写的HTML页面将要放在我们的w...

1973
来自专栏代码世界

Python之IO模型

IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞     同步(synchronous) IO和异步(asynchronous...

43811

扫码关注云+社区

领取腾讯云代金券