众说周知Amazon EC2是一个公共的云计算平台,属于IaaS(基础设施即服务)这类.

现在有一款开源的项目Eucalyptus(Elastic Utility Computing Architecture for Linking Your Programs To Useful Systems),同样实现了Amazon EC2的功能和接口,由于其开源性,注定了搭建一个私有的云计算平台成为可能. 更方便的是Ubuntu9.10服务器版已经集成了Eucalyptus这个开源软件,使的搭建企业私有的云计算平台变得方便而简单.

下面我们将一步步来搭建这个私有的云计算平台.

一 相关资源

1) 至少准备两台机器, 当然我这里是用虚拟机软件(Sun VirtualBox)来虚拟出两台实际的机器

(如果你也采用Sun VirtualBox,有些注意事项,可以参见后面的附录一)

2) 底层操作系统: Ubuntu9.10 服务器版 (http://www.ubuntu.com/cloud)

3) 云服务环境 : Eucalyptus , ( Ubuntu9.10 服务器版 内置) http://eucalyptus.com/

4) Eucalyptus 命令行客户端(Euca2ools)

5) Eucalyptus客户端: Elastic Fox ,这是一个firefox插件 :http://developer.amazonwebservices.com/connect/entry.jspa?externalID=609

————————————————————————–

二 云计算服务的搭建(使用Ubuntu自带的向导,十分简单的哦)

1) 一台机器, 作为Cluster(Front End) , 命名为: ubuntu-cluster , 它包含了如下部分

Cloud Controller (clc) 
 Cluster Controller (cc) 
 Walrus (the S3-like storage service) 
 Storage Controller (sc)

2) 至少一台机器作为Node, 命名为: ubuntu-node1,它包含了如下部分

Node Controller (nc)

3) 在作为Cluster的机器上 ,安装基本系统: Ubuntu9.10 服务器版

1.安装引导时,要选择 “Install Ubuntu Enterprise Cloud” 
2. 安装过程中,如果提示”Cluster” 还是”Node”,一定要选择Cluster 
3.安装过程中,提示”Configure postfix” 时 选择 internetSite
4. 安装过程中,提示”Name your cluster” 时 ,请取一个合适的名字,比如我取之为: cluster1 
5. 安装过程中,提示”a list of available IP addresses on your network”, 一定要选择一个可用的公共IP段.

4) 在作为Node的机器上 ,也安装基本系统: Ubuntu9.10 服务器版

1.安装引导时,要选择 “Install Ubuntu Enterprise Cloud” 
2. 安装过程中,如果提示”Cluster” 还是”Node”,一定要选择Node, (如果Cluster正在运行,这一步可能不会出现,自动会选择Node 
3.安装完一个节点后,,后续的节点可以采用克隆方法,参见后面的 附录二

5) 在Cloud Controller(位于ubuntu-cluster)上注册所有的Node机器: 在ubuntu-cluster上执行:

sudo euca_conf –no-rsync –discover-nodes

至此,一个私有的云计算平台的服务端已经搭建好了,下面就开始说如何管理了,很简单吧!

三 云计算平台管理之命令行工具(Euca2ools)

1)在 https://YourIP:8443 中注册个人信息然后登录下载 证书 euca2-yourname-x509 .zip

2) 在客户端机器上执行

$ mkdir ~/.euca 
 $ cd ~/.euca 
 $ unzip euca2-yourname-x509 .zip 
 $ chmod 0700 ~/.euca 
 $ chmod 0600 ~/.euca/*

3) 在客户端机器上执行, 安裝 Euca2ools 和 EC2-API-Tools

. ~/.euca/eucarc 
 echo “[ -r ~/.euca/eucarc ] && . ~/.euca/eucarc” >> ~/.bashrc 
 sudo apt-get install euca2ools 
 sudo apt-get install ec2-api-tools 
 sudo reboot

4)在客户端机器,使用 Euca2ools 上传 Kernel / Ramdisk / FS Image (使用者可注册 Image,但只有管理者才可注册 kernel/ramdisks)

1. 目前 Eucalyptus 系統上没有 Kernel、Ramdisk 和 FS Image,所以我們使用官方提供的 Image (上传需要用到三个指令)

euca-bundle-image – 打包好將要上传的档案 
euca-upload-bundle – 上传到 Eucalyptus 
euca-register – 注册上传的档案

2. 上传Kernel,如(以我客户端机器的vmlinuz为例):

euca-bundle-image -i /boot/vmlinuz-2.6.31-14-generic-pae –kernel true 
 euca-upload-bundle -b kernel -m /tmp/vmlinuz-2.6.31-14-generic-pae.manifest.xml 
 euca-register kernel/vmlinuz-2.6.31-14-generic-pae.manifest.xml

3.上传 Ramdisk, 如(以我客户端机器的initrd.img为例)

euca-bundle-image -i /boot/initrd.img-2.6.31-14-generic-pae –ramdisk true 
 euca-upload-bundle -b ramdisks -m /tmp/initrd.img-2.6.31-14-generic-pae.manifest.xml
 euca-register ramdisks/initrd.img-2.6.31-14-generic-pae.manifest.xml

4. 查看已上传到档案:

方法一: https://YourIP:8443/#images

方法二: euca-describe-images

5. 根据查看的结果,上传FS Images:(分配 Kernel 和 Ramdisks 給 VMs 有三种方法,见附录三) 
如(以我从Ubuntu官网上下载的Images:karmic-server-uec-i386.tar.gz为例 ):

tar zxvf karmic-server-uec-i386.tar.gz 
 euca-bundle-image -i karmic-server-uec-i386.img –kernel eki-977213C6 –ramdisk eri-0CBA157D 
 euca-upload-bundle -b images -m /tmp/karmic-server-uec-i386.img.manifest.xml 
 euca-register images/karmic-server-uec-i386.img.manifest.xml

5) 申請 key pair,以便 ssh 登入 instance

ec2-add-keypair mykey >mykey.private 
 chmod 0600 mykey.private

6) 在客户端机器,开启虚拟机.

1.查看 euca-describe-images ,获得希望启动Image的emi

2.启动一个虚拟机:

euca-run-instances -k mykey -n 1 <emi-XXXX>

3.查看这个虚拟机的基本信息,比如IP地址,和 此实例id

euca-describe-instances

4.登录这个新启动的虚拟机

ssh -i mykey.private root@192.168.100.X

5.终止这个虚拟机实例

euca-describe-instances(获得instance-id) 
 euca-terminate-instances <instance-id>

—————————————————————————————————-

附录一:

虚拟测试环境的搭建:

1.虚拟机软件: Sun VirtualBox

2.管理 -> 全局设定 -> 网络 中 选择 “Host-Only” 点编辑,然后选择 “DHCP服务器”, 禁用”启用服务器”

3建立两台虚拟机, Linux/Ubuntu ,网络选择Host-Only方式

4在宿主机器上,将可以联互联网的 网卡设置为 针对 Host-Only 网卡的共享

说明,这里之所以采用 , Host-Only + 通过宿主机器共享上网 ,而不采用Bridged的联网方式,是前者可以在离开网络支持的情况下, 依然可以保证虚拟机的IP在局部可用并且不变.

附录二: VirtualBox 系统克隆及其可能后续操作:

1) VirtualBox 的虚拟硬盘的克隆命令: VBoxManage clonevdi old.vdi new.vdi

2) Ubuntu 修改主机名:

1. 启用root用户: sudo passwd root 
2. .以root用户身份登录 
3. pico /etc/hosts : 修改对应的旧的主机名 
4. pico /etc/hostname : 删除该文件的所有内容,添加新的主机名 
5. 执行命令: hostname <新的主机名> 
6. logout 
7. 禁用root用户: sudo passwd -l root

3)如果找不到网卡,不妨,查看一下: ifconfig –a ,然后配置 /etc/network/interfaces ,然后重启网卡

附录三: 分配 Kernel 和 Ramdisks 給 VMs 有三种方法

1) 在 ‘ec2-bundle-image’ 步骤指定

ec2-bundle-image -i <path/to/my/>vmimage.img –kernel <eki-XXXXXXXX> –ramdisk <eri-XXXXXXXX>

2)在 ‘ec2-run-instances’ 步骤指定

ec2-run-instances <emi-XXXXXXXX> –kernel <eki-XXXXXXXX> –ramdisk <eri-XXXXXXXX>

3) 在 https://YourIP:8443 选择 ‘Configuration’ 标签,新增 <eki-xxxxxxxx> 和 <eri-xxxxxxxx> 作为预设的 kernel 和 ramdisk

附录四: 如何删除Image

1) 先取消注册

ec2-deregister <emi-XXXXXXXX>

2) 移除位于 bucke 的档案

ec2-delete-bundle -a $EC2_ACCESS_KEY -s $EC2_SECRET_KEY –url $S3_URL -b <bucket> -p <file prefix>

3) 移除 image 和 bucke (—clear)

ec2-delete-bundle -a $EC2_ACCESS_KEY -s $EC2_SECRET_KEY –url $S3_URL -b <bucket> -p <file prefix> –clear


附录五: Euca2ools常用命令:

euca-describe-availability-zones verbose 察看可用的资源

euca-describe-instances 察看目前正在執行的 虚拟机(VM)

euca-bundle-image 打包好将要上传到档案

euca-upload-bundle 上传档案到 Eucalyptus

euca-register 组成已经上传到档案

euca-describe-images 查看可用的 images











CentOS6下安装基于Xen的Eucalyptus 2.0.3

Eucalyptus

  • Cloud controller(CLC),控制调度云的资源,同时提供web界面以及兼容EC2的SOAP服务
  • Walrus,实现了基于桶的存储,同时提供兼容S3的SOAP服务以及REST接口
  • Cluster controller(CC),实现以集群为单位的调度
  • Storage controller(SC),基于块的存储控制器,EBS-style
  • Node controller(NC),虚拟节点,运行xen及虚拟机的机器

版本

准备工作


 1. 下载各个软件包


 2. 除了NC以外的服务器安装CentOS 6 Minimal方式


 3. NC服务器按照参考文档安装配置Xen环境,注意在Xen的内核配置里面添加一项  max_loop=256


 4. 配置好所有机器的NTP,使它们时钟保持同步


安装过程


 1. 创建 /etc/yum.repos.d/euca.repo 

[plain]  view plain copy



    1. [euca]  
    2. name=Eucalyptus  
    3. baseurl=http://www.eucalyptussoftware.com/downloads/repo/eucalyptus/2.0.3/yum/centos/x86_64  
    4. gpgcheck=0


     2. 通过yum安装必须的软件包 (所有机器上)

    [plain]  view plain copy


    1. yum -y install perl-Convert-ASN1.noarch scsi-target-utils httpd java-1.6.0-openjdk-devel ant ant-nodeps libvirt-devel curl-devel httpd-devel apr-devel openssl-devel libxml2 libxml2-devel gnutls gnutls-devel libgcrypt-devel zlib-devel perl-Convert-ASN1 perl-Crypt-OpenSSL-RSA perl-Crypt-OpenSSL-Random chkfontpath fuse-libs swig gcc make patch compat-expat1 compat-db43 lzo2 vblade m2crypto lvm2 rsync ntp vconfig groff rpm-build

     3. 安装之前编译好的Xen的rpm包(给控制服务器,节点服务器已经装过xen的就不需要了)

    [plain]  view plain copy


    1. rpm -Uvh xen-licenses-*.x86_64.rpm xen-devel-*.x86_64.rpm xen-libs-*.x86_64.rpm

     4. 安装dhcpd

    [plain]  view plain copy


    1. wget http://ftp.redhat.com/redhat/linux/enterprise/5Server/en/os/SRPMS/dhcp-3.0.5-29.el5_7.1.src.rpm  
    2.     
    3. rpm -i dhcp-3.0.5-29.el5_7.1.src.rpm  
    4.     
    5. cd ~/rpmbuild/SPECS/  
    6. rpmbuild -bb dhcp.spec  # 如果编译不过去,可能需要手动去掉-Werror编译选项  
    7.     
    8. cd ~/rpmbuild/RPMS/x86_64/  
    9. rpm -Uvh dhcp-3.0.5-29.el6.1.x86_64.rpm # 如果已经装了dhcp,先手动删除掉原来的

     5. 安装Eucalyptus的依赖软件(eucalyptus-2.0.3-src-deps.tar.gz)

    [plain]  view plain copy



      1. export EUCALYPTUS=/home/public/eucalyptus-2.0.3  
      2. export APACHE_INCLUDES=/usr/include/httpd/  
      3. export APR_INCLUDES=/usr/include/apr-1/  
      4. export AXIS2C_HOME=${EUCALYPTUS}/packages/axis2c-1.6.0  
      5.   
      6. mkdir -p ${EUCALYPTUS}/packages/  
      7.   
      8. tar xzf eucalyptus-2.0.3-src-deps.tar.gz  
      9. cd eucalyptus-src-deps  
      10.   
      11. tar xzf axis2-1.4.tgz -C ${EUCALYPTUS}/packages/  
      12. cd ${EUCALYPTUS}/packages/  
      13. ln -sf axis2-1.4 axis2  
      14. cd -  
      15.   
      16. tar xzf axis2c-src-1.6.0.tar.gz  
      17. cd axis2c-src-1.6.0  
      18. CFLAGS="-w" ./configure --prefix=${AXIS2C_HOME} -with-apache2=${APACHE_INCLUDES} --with-apr=${APR_INCLUDES} --enable-multi-thread=no  
      19. make  
      20. make install  
      21. cd -  
      22. rm -rf axis2c-src-1.6.0  
      23.   
      24. export LD_LIBRARY_PATH=${AXIS2C_HOME}/lib  
      25. tar xzf rampartc-src-1.3.0-0euca2.tar.gz  
      26. cd rampartc-src-1.3.0  
      27. ./configure --prefix=${AXIS2C_HOME} --enable-static=no --with-axis2=${AXIS2C_HOME}/include/axis2-1.6.0/  
      28. make  
      29. make install  
      30. rm -rf rampartc-src-1.3.0  
      31.   
      32. cd ${EUCALYPTUS}/packages  
      33. ln -sf axis2c-1.6.0 axis2c  
      34. cd -  
      35. sed -i "s;<\!--phase name=\"Security\"/-->;<phase name=\"Security\"/>;g" ${AXIS2C_HOME}/axis2.xml  
      36.   
      37. cd ..  
      38. rm -rf eucalyptus-src-deps


       6. 安装Eucalyptus (eucalyptus-2.0.3-src-offline.tar.gz)

      [plain]  view plain copy


      1. export EUCALYPTUS=/home/public/eucalyptus-2.0.3  
      2. export AXIS2_HOME=${EUCALYPTUS}/packages/axis2  
      3. export AXIS2C_HOME=${EUCALYPTUS}/packages/axis2c  
      4. export JAVA_HOME="/usr/lib/jvm/java-openjdk/"  
      5. export JAVA="$JAVA_HOME/JRE/bin/java"  
      6.   
      7. tar xzf eucalyptus-2.0.3-src-offline.tar.gz  
      8. cd eucalyptus-2.0.3-src-offline  
      9. ./configure --with-axis2=${AXIS2_HOME} --with-axis2c=${AXIS2C_HOME} --enable-debug --prefix=${EUCALYPTUS}  
      10. make  
      11. make install  
      12. cd -  
      13. rm -rf eucalyptus-2.0.3-src-offline  
      14.   
      15. cd /home/public/  
      16. ln -sf eucalyptus-2.0.3 eucalyptus  
      17.   
      18. export EUCALYPTUS=/home/public/eucalyptus  
      19. ln -sf $EUCALYPTUS/etc/init.d/eucalyptus-cloud /etc/init.d/eucalyptus-cloud  
      20. ln -sf $EUCALYPTUS/etc/init.d/eucalyptus-cc /etc/init.d/eucalyptus-cc  
      21. ln -sf $EUCALYPTUS/etc/init.d/eucalyptus-nc /etc/init.d/eucalyptus-nc  
      22.   
      23. chkconfig eucalyptus-cloud off  
      24. chkconfig eucalyptus-cc off  
      25. chkconfig eucalyptus-nc off

       7. 安装工具(euca2ools-1.3.1-fedora-x86_64.tar.gz)

      [plain]  view plain copy


      1. tar xzf euca2ools-1.3.1-fedora-x86_64.tar.gz  
      2. cd euca2ools-1.3.1-fedora-x86_64  
      3.   
      4. rpm -Uvh euca2ools-1.3.1-1.x86_64.rpm  
      5.   
      6. cd -  
      7. rm -rf euca2ools-1.3.1-fedora-x86_64

        


      配置


       1. 创建一个专属用户 

      [plain]  view plain copy


      1. adduser eucalyptus

       2. 初始化

      [plain]  view plain copy



      1. export EUCALYPTUS=/home/public/eucalyptus  
      2. $EUCALYPTUS/usr/sbin/euca_conf \  
      3.  -d $EUCALYPTUS \  
      4.  --hypervisor xen \  
      5.  --instances /home/eucalyptus/instances \  
      6.  --user eucalyptus \  
      7.  --setup  
      8. # -d: Eucalyptus路径  
      9. # --hypervisor: 使用的hypervisor类型,可以是kvm或xen  
      10. # --instances: instance存储路径  
      11. # --user: 服务使用的用户  
      12. # --setup: 初始化  
      13.   
      14. service eucalyptus-nc start  
      15. chkconfig eucalyptus-nc on


       3. 编辑 /home/public/eucalyptus/etc/eucalyptus/eucalyptus.conf,按自己的需求修改,其中 VNET_BRIDGE 是xen要使用的bridge名字,其余的VNET_MODE等请参考配置文件的说明,里面写的很详细。


       4. 复制eucalyptus安装目录到所有机器上,建立init.d的链接,添加service的服务,然后还需要运行一次初始化


       5. 启动NC

      [plain]  view plain copy

      1. service eucalyptus-nc start # NC的Web service默认端口8775  
      2. chkconfig eucalyptus-nc on

       6. 启动CC

      [plain]  view plain copy


      1. service eucalyptus-cc start # CC的Web service默认端口8774  
      2. chkconfig eucalyptus-cc on


       7. 启动相关服务,不同的服务可以部署在不同机器上面

      [plain]  view plain copy



      1. export EUCALYPTUS=/home/public/eucalyptus  
      2. $EUCALYPTUS/usr/sbin/euca_conf -d $EUCALYPTUS --enable cloud  
      3. $EUCALYPTUS/usr/sbin/euca_conf -d $EUCALYPTUS --enable walrus  
      4. $EUCALYPTUS/usr/sbin/euca_conf -d $EUCALYPTUS --enable sc  
      5.   
      6. service eucalyptus-cloud start # 三个服务都通过这个脚本启动,http端口8080,https端口8443,Web service端口8773  
      7. chkconfig eucalyptus-cloud on


       8. 注册服务

      [plain]  view plain copy


      1. $EUCALYPTUS/usr/sbin/euca_conf --register-walrus $IP  
      2. $EUCALYPTUS/usr/sbin/euca_conf --register-cluster OurCloud $IP # 注册一个Cluster,名字叫OurCloud,默认端口8774  
      3. $EUCALYPTUS/usr/sbin/euca_conf --register-sc OurCloud $IP # 给Cluster添加一个SC

       9. 注册节点

      [plain]  view plain copy


      1. $EUCALYPTUS/usr/sbin/euca_conf --register-nodes $IP
      1.  


       10. 访问Cloud(CLC)所在IP的https://$IP:8443,用户名admin,密码admin,第一次登陆成功后会要求马上修改密码


       11. 在管理界面的导航栏找到Credentials,进入,点击按钮"Download Credentials",会下载一个zip文件


       12. 把zip文件传到安装了euca2ools的服务器上,建一个目录解压进去,以后每次使用euca2ools前需要执行一次下面的命令

      [plain]  view plain copy


      1. source eucarc


       13. 安装完成

      实例1: 使用官网提供的Ubuntu image


       1. 下载地址  http://open.eucalyptus.com/wiki/EucalyptusUserImageCreatorGuide

       2. 添加 (euca-ubuntu-9.04-x86_64.tar.gz) 

      [plain]  view plain copy


      1. tar xzf euca-ubuntu-9.04-x86_64.tar.gz  
      2. cd euca-ubuntu-9.04-x86_64  
      3.   
      4. # 进入运行环境  
      5. source ~/.euca/eucarc  
      6.   
      7. # 上传内核,得到一个eki-XXXXXXXX  
      8. euca-bundle-image -d ./tmp/ -i xen-kernel/vmlinuz-2.6.27.21-0.1-xen --kernel true  
      9. euca-upload-bundle -b ubuntu9-bucket -m ./tmp/vmlinuz-2.6.27.21-0.1-xen.manifest.xml  
      10. euca-register ubuntu9-bucket/vmlinuz-2.6.27.21-0.1-xen.manifest.xml  
      11.   
      12. # 上传ramdisk,得到一个eri-XXXXXXXX  
      13. euca-bundle-image -d ./tmp/ -i xen-kernel/initrd-2.6.27.21-0.1-xen --ramdisk true  
      14. euca-upload-bundle -b ubuntu9-bucket -m ./tmp/initrd-2.6.27.21-0.1-xen.manifest.xml  
      15. euca-register ubuntu9-bucket/initrd-2.6.27.21-0.1-xen.manifest.xml  
      16.   
      17. # 上传根分区,用上面两个命令得到的数字执行  
      18. euca-bundle-image -d ./tmp/ -i ubuntu.9-04.x86-64.img --kernel eki-XXXXXXXX --ramdisk eri-XXXXXXXX  
      19. euca-upload-bundle -b ubuntu9-bucket -m ./tmp/ubuntu.9-04.x86-64.img.manifest.xml  
      20. euca-register ubuntu9-bucket/ubuntu.9-04.x86-64.img.manifest.xml

       3. 创建一个登录虚拟机用的key

      [plain]  view plain copy


      1. euca-add-keypair euca-key > ~/euca-key.private  
      2. chmod 0600 ~/euca-key.private

       4. 使用刚才上传虚拟机时候得到的emi值启动一个虚拟机实例

      [plain]  view plain copy


      1. euca-run-instances -k euca-key -n 1 emi-XXXXXXXX


       5. 查看运行状态,没有dhcpd的话,这时拿不到IP

      [plain]  view plain copy


      1. >euca-describe-instances  
      2.   
      3. RESERVATION r-4F030A57 admin default  
      4. INSTANCE i-35C505C3 emi-XXXXXXXX 0.0.0.0 0.0.0.0 running euca-key 0 m1.small 2011-11-01T10:48:56.831Z OurCloud eki-XXXXXXXX eri-XXXXXXXX


      实例2: 使用dhcpd分配IP


       0. CC服务器, IP eth3 192.168.11.3/24; NC服务器, IP eth3 192.168.11.4/24, Xen的bridge xenbr0; 实现从NC上面运行的虚拟机可以通过CC访问到外面的网络


       1. 配置CC的/home/public/eucalyptus/etc/eucalyptus/eucalyptus.conf

      [plain]  view plain copy



        1. VNET_PUBINTERFACE="eth3"  
        2. VNET_PRIVINTERFACE="eth3"  
        3.   
        4. VNET_DHCPDAEMON="/usr/sbin/dhcpd"  
        5. VNET_DHCPUSER="eucalyptus"  
        6.   
        7. VNET_MODE="MANAGED-NOVLAN"  
        8. VNET_SUBNET="192.168.101.0"  
        9. VNET_NETMASK="255.255.255.0"  
        10. VNET_DNS="192.168.11.2"  
        11. VNET_ADDRSPERNET="16"   # 这个数字如果太大会无法创建虚拟机  
        12. VNET_PUBLICIPS="192.168.11.80-192.168.11.120"  
        13. VNET_CLOUDIP="192.168.11.3"  
        14. #VNET_MODE="SYSTEM"


         2. 配置NC的/home/public/eucalyptus/etc/eucalyptus/eucalyptus.conf

        [plain]  view plain copy


        1. VNET_PUBINTERFACE="xenbr0"  
        2. VNET_PRIVINTERFACE="xenbr0"  
        3. VNET_BRIDGE="xenbr0"  
        4. VNET_MODE="MANAGED_NOVLAN"  
        5. #VNET_MODE="SYSTEM"


         3. 重新启动CC

        [plain]  view plain copy

        1. service eucalyptus-cc cleanrestart


         4. 创建一个虚拟机看看 

        [plain]  view plain copy



        1. >euca-run-instances -k euca-key -n 1 emi-XXXXXXXX   
        2. RESERVATION r-502007DA admin admin-default  
        3. INSTANCE i-440907AE emi-XXXXXXXX 0.0.0.0 0.0.0.0 pending euca-key 2011-11-04T11:01:17.656Z eki-XXXXXXXX eri-XXXXXXXX  
        4.   
        5. >euca-describe-instances   
        6. RESERVATION r-502007DA admin default  
        7. INSTANCE i-440907AE emi-XXXXXXXX 192.168.11.101 192.168.101.131 running euca-key 0 m1.small 2011-11-04T11:01:17.656Z OurCloud eki-XXXXXXXX eri-XXXXXXXX  
        8.   
        9. >ssh -i ~/euca-key.private 192.168.11.101  
        10. root@ubuntu:~#  
        11.   
        12. >ip addr show eth0  
        13. UNKNOWN qlen 1000  
        14.     link/ether d0:0d:44:09:07:ae brd ff:ff:ff:ff:ff:ff  
        15.     inet 192.168.101.131/28 brd 192.168.101.143 scope global eth0  
        16.     inet6 fe80::d20d:44ff:fe09:7ae/64 scope link   
        17.        valid_lft forever preferred_lft forever  
        18.   
        19. >ping -c 1 192.168.11.2   
        20. PING 192.168.11.2 (192.168.11.2) 56(84) bytes of data.  
        21. 64 bytes from 192.168.11.2: icmp_seq=1 ttl=63 time=1.26 ms  
        22.   
        23. --- 192.168.11.2 ping statistics ---  
        24. 1 packets transmitted, 1 received, 0% packet loss, time 0ms  
        25. rtt min/avg/max/mdev = 1.264/1.264/1.264/0.000 ms


        实例3: 自己建立CentOS6虚拟机


         1. 使用virtinst以minimal模式安装一个CentOS6虚拟机,硬盘弄一个分区就行了,其他分区都可省,在虚拟机里面安装配置好需要的软件,关掉虚拟机(安装参数可参考 )


         2. 提取虚拟机 / 分区,假设硬盘文件名为sda.img,2GB


        [plain]  view plain copy



        1. > parted sda.img  
        2. GNU Parted 2.1  
        3. Using /home/vms/centos6/sda.img  
        4. Welcome to GNU Parted! Type 'help' to view a list of commands.  
        5. (parted) U  
        6. Unit?  [compact]? <span style="color:#ff0000;">b</span>                                                         
        7. (parted) p  
        8. Model:  (file)  
        9. Disk /home/vms/centos6/sda.img: 2147483648B  
        10. Sector size (logical/physical): 512B/512B  
        11. Partition Table: msdos  
        12.   
        13. Number  Start     End          Size         Type     File system  Flags  
        14.  1      1048576B  2147483647B  2146435072B  primary  ext3         boot  
        15.   
        16. (parted) quit  
        17. > dd if=sda.img of=rootfs.img bs=1M skip=1 count=2047  
        18. 2047+0 records in  
        19. 2047+0 records out  
        20. 2146435072 bytes (2.1 GB) copied, 37.3425 s, 57.5 MB/s


        [plain]  view plain copy

        1. # 加载根分区  
        2. mkdir /mnt/rootfs  
        3. mount -o loop rootfs.img /mnt/rootfs/  
        4.   
        5. # 复制出来kernel和initramfs  
        6. cp /mnt/rootfs/boot/vmlinuz-* ./kernel  
        7. cp /mnt/rootfs/boot/initramfs-* ./ramdisk  
        8.   
        9. # 配置网卡  
        10. rm udev/rules.d/70-persistent-net.rules  
        11. vi /mnt/rootfs/etc/udev/rules.d/60-net.rules  
        12. ACTION=="add", SUBSYSTEM=="net", IMPORT{program}="/lib/udev/rename_device"  
        13. SUBSYSTEM=="net", RUN+="/etc/sysconfig/network-scripts/net.hotplug"  
        14.   
        15. vi /mnt/rootfs/etc/sysconfig/network-scripts/ifcfg-eth0  
        16. DEVICE=eth0  
        17. BOOTPROTO=dhcp  
        18. ONBOOT=yes  
        19. TYPE=Ethernet  
        20.   
        21. # 关闭selinux  
        22. vi /mnt/rootfs/etc/sysconfig/selinux   
        23. SELINUX=disabled  
        24.   
        25. # 修改fstab,去掉所有的UUID方式  
        26. vi /mnt/rootfs/etc/fstab  
        27. /dev/xvda1         /             ext3     defaults,errors=remount-ro 0 0  
        28. /dev/xvda2         /mnt          ext3     defaults                   0 0  
        29. /dev/xvda3         swap          swap     defaults                   0 0  
        30. tmpfs                   /dev/shm                tmpfs   defaults        0 0  
        31. devpts                  /dev/pts                devpts  gid=5,mode=620  0 0  
        32. sysfs                   /sys                    sysfs   defaults        0 0  
        33. proc                    /proc                   proc    defaults        0 0  
        34.   
        35. vi /mnt/rootfs/etc/mtab  
        36. /dev/sda1 / ext3 rw,errors=remount-ro 0 0  
        37. proc /proc proc rw 0 0  
        38. sysfs /sys sysfs rw 0 0  
        39.   
        40. # 启动时自动下载可登录的ssh-rsa的public key  
        41. vi /mnt/rootfs/etc/rc.local   
        42. # simple attempt to get the user ssh key using the meta-data service  
        43. mkdir -p /root/.ssh  
        44. echo >> /root/.ssh/authorized_keys  
        45. curl -m 10 -s http://169.254.169.254/latest/meta-data/public-keys/0/openssh-key | grep 'ssh-rsa' >> /root/.ssh/authorized_keys  
        46. echo "AUTHORIZED_KEYS:"  
        47. echo "************************"  
        48. cat /root/.ssh/authorized_keys  
        49. echo "************************"  
        50.   
        51. # 删除密码  
        52. vi /mnt/rootfs/etc/shadow  
        53. root:!:15280:0:99999:7:::  
        54.   
        55. # 卸载  
        56. umount /mnt/rootfs


         4. 修改NC上面的 /home/public/eucalyptus/usr/share/eucalyptus/gen_libvirt_xml, 把所有的sda改为xvda, 这个修改后,目前官网提供的image将不能使用


         5. 最后, 上传


        [plain]  view plain copy


        1. source ~/.euca/eucarc  
        2. # 上传内核,得到一个eki-KKKKKKKK  
        3. euca-bundle-image -d ./tmp/ -i ./kernel --kernel true  
        4. euca-upload-bundle -b centos6-bucket -m ./tmp/kernel.manifest.xml   
        5. euca-register centos6-bucket/kernel.manifest.xml  
        6. # 上传ramdisk,得到一个eri-RRRRRRRR  
        7. euca-bundle-image -d ./tmp/ -i ./ramdisk --ramdisk true  
        8. euca-upload-bundle -b centos6-bucket -m ./tmp/ramdisk.manifest.xml  
        9. euca-register centos6-bucket/ramdisk.manifest.xml  
        10. # 上传根分区  
        11. euca-bundle-image -d ./tmp/ -i ./rootfs.img --kernel  eki-KKKKKKKK --ramdisk eri-RRRRRRRR  
        12. euca-upload-bundle -b centos6-bucket -m ./tmp/rootfs.img.manifest.xml   
        13. euca-register centos6-bucket/rootfs.img.manifest.xml