前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >国内某公有云 linux云主机开机初始化过程分析和他的镜像制作过程

国内某公有云 linux云主机开机初始化过程分析和他的镜像制作过程

作者头像
用户1057912
发布2018-07-06 18:24:25
1.6K0
发布2018-07-06 18:24:25
举报
文章被收录于专栏:老安的博客老安的博客

最近学习了国内某公有云的linux云主机启动之后,在镜像内部的初始化过程,分享出来,仅供参看。

一、开机过程

wKioL1f-C0nT_SB6AAFFuVSazf8353.jpg-wh_50
wKioL1f-C0nT_SB6AAFFuVSazf8353.jpg-wh_50
wKioL1f-C6vyzSvEAAFZ0kHZfpA247.jpg-wh_50
wKioL1f-C6vyzSvEAAFZ0kHZfpA247.jpg-wh_50

可以看到开机时候按照数字顺序执行了一连串的脚本,其中也提示的该公有云厂商的名字的ucloud,最后一条显示做了清理工作。进系统一看 果然找不到这些脚本了。

二、进单用户模式找出这些脚本

  想让开机的时候不让最后一步 999-clwanup.sh执行的办法很多,我采取的的办法是单用户模式,简单上个图,具体方法大家谷歌下。

成功进入单用户模式,并复制他的初始化脚本

wKiom1f-FaOhlhzTAACnclo2Ryw774.jpg-wh_50
wKiom1f-FaOhlhzTAACnclo2Ryw774.jpg-wh_50

三 初始化过程分析

 (一) 脚本执行的入口还是传统的/etc/rc.local,主程序是bootstrap.sh

    /ucloud_boot/bootstrap.sh

    目录如下图(可耻的把uuid匿了,怕ucloud的人来砍我)

wKiom1f-GGGRgI91AAD56aTwdm8781.jpg-wh_50
wKiom1f-GGGRgI91AAD56aTwdm8781.jpg-wh_50

主程序代码:注释我加的

代码语言:javascript
复制
#!/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啊。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-10-12 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云服务器
云服务器(Cloud Virtual Machine,CVM)提供安全可靠的弹性计算服务。 您可以实时扩展或缩减计算资源,适应变化的业务需求,并只需按实际使用的资源计费。使用 CVM 可以极大降低您的软硬件采购成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档