专栏首页jeremy的技术点滴制作CentOS6基础镜像

制作CentOS6基础镜像

搭建私有云时需要制作一些操作系统的基础镜像,这里也有一些持巧,在这里记录下来以备忘。

安装CentOS6操作系统

这里没有太多好说的,我是从这里下载最小安装ISO进行安装的,安装的硬盘大小为20G。安装时大部分选项都是默认的,只有分区采用了自定义分区方案,200M的boot分区,其它全部作为根分区。如果需要交换分区,以后可以使用文件分区,使用文件分区的操作方法如下:

dd if=/dev/zero of=/swapfile bs=1G count=2
chmod 600 /swapfile
mkswap -f /swapfile
swapon /swapfile
echo "/swapfile none swap defaults 0 0" >> /etc/fstab
mount -a

操作系统的一些基础设置

安装好操作系统后,使用root帐户登入系统做一些基础设置

#关闭selinux
setenforce 0
sed -i -e 's/^SELINUX=.*$/SELINUX=disabled/' /etc/sysconfig/selinux

#由于公司没有搭建centos的私有源,这里我都换用aliyun的centos源
rpm --import http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-6
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
rpm --import http://mirrors.aliyun.com/epel/RPM-GPG-KEY-EPEL-6
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo

#安装平时经常用到的vim wget等软件
yum install -y vim wget

#配置ntp服务,指向私有云中的时间服务器
yum install -y ntp
echo "
#在与上级时间服务器联系时所花费的时间,记录在driftfile参数后面的文件
driftfile /var/lib/ntp/drift
#默认关闭所有的 NTP 联机服务
restrict default ignore
restrict -6 default ignore
#如从loopback网口请求,则允许NTP的所有操作
restrict 127.0.0.1
restrict -6 ::1
#使用指定的时间服务器
server ${inner_ntp_server_ip}
#允许指定的时间服务器查询本时间服务器的信息
restrict ${inner_ntp_server_ip} nomodify notrap nopeer noquery
#其它认证信息
includefile /etc/ntp/crypto/pw
keys /etc/ntp/keys
" > /etc/ntp.conf
service ntpd start
chkconfig ntpd on

#禁用sshd服务的UseDNS、GSSAPIAuthentication两项特性
sed -i -e 's/^#UseDNS.*$/UseDNS no/' /etc/ssh/sshd_config
sed -e 's/^GSSAPIAuthentication.*$/GSSAPIAuthentication no/' /etc/ssh/sshd_config

#升级系统
yum update -y && yum clean all

#更改系统网络接口配置文件,设置该网络接口随系统启动而开启
sed -i -e '/^HWADDR=/d' -e '/^UUID=/d' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i -e 's/^ONBOOT.*$/ONBOOT=yes/' /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i -e 's/^NM_CONTROLLED.*$/NM_CONTROLLED=no/' /etc/sysconfig/network-scripts/ifcfg-eth0

#删除已存在的网络接口udev规则定义
sed -i -e  '/PCI device/d' -e '/^SUBSYSTEM/d' /etc/udev/rules.d/70-persistent-net.rules

#关闭系统
halt

最近精简一下生成的镜像文件

qemu-img convert -f qcow2 -O qcow2 centos6.img centos6_c.img
mv centos6_c.img centos6.img

对镜像文件预处理

使用虚拟机平台基于上述centos6基础镜像文件创建虚拟机后,在虚拟机启动前需对镜像文件进行预处理,我这里写个脚本处理这件事

执行脚本前需安装libguestfs-tools

yum install -y libguestfs-tools
#以后可能还要修改windows镜像文件,顺便把libguestfs-winsupport也安装一下
yum install -y libguestfs-winsupport

preprocess_img.sh脚本内容:

#!/bin/bash

domain_name=$1
ip_fetch_method=$2
static_ip=$3
static_netmask=$4
static_gateway=$5
static_dns1=$6
static_dns2=$7

TMP_CONFIG_DIR="$(mktemp -d /tmp/$$_config_XXXX)"
trap "[ -d "$TMP_CONFIG_DIR" ] && rm -rf $TMP_CONFIG_DIR" HUP INT QUIT TERM EXIT

echo "
NETWORKING=yes
HOSTNAME=$domain_name
" > $TMP_CONFIG_DIR/network
virt-copy-in -d $domain_name $TMP_CONFIG_DIR/network /etc/sysconfig

if [ $ip_fetch_method == "static" ] ; then
    echo "
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
NM_CONTROLLED=no
BOOTPROTO=static
IPADDR=$static_ip
NETMASK=$static_netmask
GATEWAY=$static_gateway
DNS1=$static_dns1
DNS2=$static_dns2
" > $TMP_CONFIG_DIR/ifcfg-eth0
    virt-copy-in -d $domain_name $TMP_CONFIG_DIR/ifcfg-eth0 /etc/sysconfig/network-scripts
fi

执行脚本

# 设置主机名为test,且eth0网络接口动态获取IP地址
./preprocess_img.sh test dhcp
# 设置主机名为test,且eth0网络接口配置静态IP地址
./preprocess_img.sh test static 188.188.100.137 255.255.255.0 188.188.100.1 202.96.134.133 202.96.128.86

镜像文件预处理完毕后,再启动虚拟机,可以看到虚拟机的主机名及IP地址均已设置OK

待改进的地方

  • 目前的preprocess_img.sh脚本还比较原始,只能处理centos6操作系统,接下来会对这个脚本进行加强,以支持其它linux操作系统及windows系统
  • 要是能扩展虚拟化管理平台WebVirtMgr,能在首次启动时执行指定的脚本对镜像进行预处理就好了。可惜我对python不是太熟。

参考

  • 深度实践KVM/第16章 虚拟机镜像制作、配置与测试/16.2 Linux镜像制作方法
  • http://www.361way.com/kvm-libguestfs-tools/3175.html

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 完善cni的ipam方案

    上两周,为了优化k8s的网络性能,最终选择了macvlan+ptp方案,最终性能也达到标准了。但其实存在一个问题,macvlan的pod的IP其实不太好分配。

    jeremyxu
  • 数据库事务备忘

    jeremyxu
  • Posgresql高可用集群实践

    工作中一个第三方软件使用了Posgresql数据库,而在我们的场景里,我们需要保证Posgresql数据库的高可用,网上查找了一下,发现stolon这个高可用,...

    jeremyxu
  • Linux快速入门03-系统管理

    这部分将涉及常用的各类linux命令和一些系统高级管理特性,尤其是shell script的创建,这部分在系统自动化运维时会很有作用。 ? 在进入bash介绍...

    用户1216676
  • OBS推流按钮堆栈信息

    xiny120
  • Docker centos7 with sshd (sshd centos7 常用镜像)

    FROM centos:7 MAINTAINER huangat RUN yum -y update&&yum -y install passwd ope...

    用户5760343
  • 【flink training】 打车热点区域实时统计PopularPlaces

    http://training.data-artisans.com/是Apache Flink商业公司DataArtisans提供的一个flink学习平台,主要...

    sanmutongzi
  • .net core abp 项目在腾迅云centos7部署实例

    1.本文记录.net core abp项目实战经验,将围绕.net core abp,mysql分布式部署,基于微服务技术,一步步搭建.net core项目,分...

    用户2398907
  • JAVA之Collection(一):关于RandomAccess的讨论

    在阅读Collectios类源码时,发现一些方法常常出现list instanceof RandomAccess的字样,下面以binarySearch为例:

    Charles-LZ
  • js引擎v8源码分析之MemoryAllocator(基于v8 0.1.5)

    MemoryAllocator是负责内存的管理和分配的。MemoryAllocator可以直接申请内存,也可以初始化时申请一块内存。然后把这些内存,分成多个ch...

    theanarkh

扫码关注云+社区

领取腾讯云代金券