制作过程:
这种制作镜像的方法需要从CentOS软件源中安装系统的内核和必要的软件,[5]中从美国的一个公共CentOS软件源安装,以天朝的网速半天也做不出一个镜像,可以在本地做一个源,不但做镜像可以用,以后安装和更新软件也可以用。制作方法参考:
http://blog.csdn.net/bhq2010/article/details/9237727
http://blog.csdn.net/bhq2010/article/details/9318269
本文中本地base和updates软件源的地址分别是:
http://10.77.50.9/yum/centos-6.4和http://10.77.50.9/yum/centos-6.4-updates.
后续的所有操作都在root用户下做。
首先创建一个空的块文件并给文件创建ext4文件系统,这就是镜像文件了。bs和count相乘是文件大小,根据需要自己设,这里是2.5GB,如果只安装最小系统,1GB就绰绰有余了:
mkdir ~/centos-image dd if=/dev/zero of=~/centos-image/centos.img bs=8192 count=327680 mkfs.ext4 ~/centos-image/centos.img将块文件挂载到/mnt/centos-image目录下,初始化rpm数据库:
mkdir /mnt/centos-image mount -o loop ~/centos-image/centos.img /mnt/centos-image mkdir -p /mnt/centos-image/var/lib/rpm rpm --rebuilddb --root=/mnt/centos-image rpm -i --root=/mnt/centos-image --nodeps http://10.77.50.9/yum/centos-6.4/Packages/centos-release-6-4.el6.centos.10.x86_64.rpm
最后的那个包名centos-release-6-4.el6.centos.10.x86_64.rpm和现在用的centos系统版本(6.4)是对应的,装其他版本系统时需要使用相应的软件源并改成对应的文件名。
将软件源改到刚才搭建的本地软件源:
rm -rf /mnt/centos-image/etc/yum.repos.d/* vi /mnt/centos-image/etc/yum.repos.d/CentOS-Base.repo写入内容如下:
[base] name=CentOS-$releasever - Base baseurl=http://10.77.50.9/yum/centos-6.4 gpgcheck=1 gpgkey=http://10.77.50.9/yum/centos-6.4/RPM-GPG-KEY-CentOS-6 #released updates [updates] name=CentOS-$releasever - Updates baseurl=http://10.77.50.9/yum/centos-6.4-updates gpgcheck=0 enabled = 1
yum --installroot=/mnt/centos-image install -y rpm-build yum initscripts kernel passwd dhclient openssh-clients openssh-server vim sudo java-1.6.0-openjdk* java-1.7.0-openjdk*这里除了最基本的系统内核和软件外,还安装了vim、sudo、jdk1.6和jdk1.7,需要安装其他包的话,列在后面即可。
vi /mnt/centos-image/etc/fstab写入如下的内容:
/dev/vda / ext4 defaults 0 0 /dev/vdb /opt ext4 defaults 0 2修改默认hostname:
vi /mnt/centos-image/etc/sysconfig/network写入如下内容:
NETWORKING=yes HOSTNAME=ruc-xcloud如果需要dns,可以加上dns配置:
vi /mnt/centos-image/etc/resolv.conf写入dns服务器的地址,以google提供的免费dns为例,多个dns一行一个:
nameserver 8.8.8.8修改eth0的配置文件,去掉UUID和MAC地址:
vi /mnt/centos-image/etc/sysconfig/network-scripts/ifcfg-eth0配置后内容如下:
DEVICE=eth0 BOOTPROTO=dhcp NM_CONTROLLED=yes ONBOOT=yes TYPE=Ethernet DNS1=8.8.8.8后面的DNS1和之前配置的dns对应,如果有多个dns,依次为DNS2、DNS3……
vi /mnt/centos-image/etc/rc.local在#!/bin/sh和touch /var/lock/subsys/local之间加上如下的脚本:
if [ ! -d /root/.ssh ]; then mkdir -p /root/.ssh chmod 700 /root/.ssh fi # Fetch hostname using HTTP ATTEMPTS=30 FAILED=0 while [ ! -f /tmp/metadata-hostname ]; do curl -f http://169.254.169.254/latest/meta-data/hostname > /tmp/metadata-hostname 2>/dev/null if [ $? -eq 0 ]; then TEMP_HOST=`cat /tmp/metadata-hostname | awk -F '.novalocal' '{print $1}'` sed -i "s/^HOSTNAME=.*$/HOSTNAME=$TEMP_HOST/g" /etc/sysconfig/network /bin/hostname $TEMP_HOST echo "Successfully retrieved hostname from instance metadata" echo "*****************" echo "HOSTNAME CONFIG" echo "*****************" cat /etc/sysconfig/network echo "*****************" else echo "Failed to retrieve hostname from instance metadata. This is a soft error, so we'll continue" FAILED=$(($FAILED + 1)) if [ $FAILED -ge $ATTEMPTS ]; then echo "Failed to retrieve hostname from instance metadata after $FAILED attempts, quitting" break fi echo "Could not retrieve hostname from instance metadata (attempt #$FAILED/$ATTEMPTS), retrying in 5 seconds..." rm -f /tmp/metadata-hostname sleep 5 fi done rm -f /tmp/metadata-hostname然后配置系统的用户:
chroot /mnt/centos-image/ passwd adduser xc passwd xc chmod u+w /etc/sudoers vi /etc/sudoers chmod u-w /etc/sudoers mkinitrd --with virtio_pci --with virtio_ring --with virtio_blk --with virtio_net --with virtio_balloon --with virtio -f /boot/initramfs-$(ls /lib/modules/).img $(ls /lib/modules/) exit
准备好镜像:
cp /mnt/centos-image/boot/initramfs-$(ls /mnt/centos-image/lib/modules/).img ~/centos-image/ cp /mnt/centos-image/boot/vmlinuz* ~/centos-image/ umount /mnt/centos-image将做好的镜像文件(包含三个文件)拷贝到OpenStack Controller Node上:
scp -r ~/centos-image [email protected]:~/centos-image rm -rf ~/centos-image rm -rf /mnt/centos-image登录到OpenStack Controller Node上,将镜像上传到OpenStack中,上传之前要先设置glance的环境变量,这里不说了:
glance add name="CentOS 6.4 b52img kernel" is_public=true container_format=aki disk_format=aki < ~/centos-image/vmlinuz-2.6.32-358.11.1.el6.x86_64 glance add name="CentOS 6.4 b52img ramdisk" is_public=true container_format=ari disk_format=ari < ~/centos-image/initramfs-2.6.32-358.11.1.el6.x86_64.img glance add name="CentOS 6.4 b52img" is_public=true container_format=ami disk_format=ami kernel_id=xxx ramdisk_id=xxx < ~/centos-image/centos.img【引用请注明出处: http://blog.csdn.net/bhq2010/article/details/9319289 】