从源码编译

CloudStack官方总是以源代码形式发布。你可以找到 “方便的二进制文件”, 这些源都是规范的发布版本。在本节将包括获取和编译发行版源代码,使用Maven、创建Debian或rpm软件包来进行部署。

请注意,直接从源代码构建和部署一个IaaS通常不是最有效的方式。然而,我们仍将介绍这种方法,就像构建RPMs或Debian软件包来部署CloudStack一样。

本节中的指令仅限定于特定的版本。也就是说,从源码编译4.0.x系列和4.1.x系列的方法是不同的。

如果你正在使用一个非发行版的CloudStack,请查阅该版本主目录下的INSTALL.md文件。

获得发行版

下载CloudStack最新发行版,可以在 Apache CloudStack 项目下载页面:.

之前的版本同样可以通过archive.apache.org获得。请参阅下载页面上的存档版本的更多信息。

你会注意到在’最新发行版’下方有几个链接。一个链接以 tar.bz2 文件结尾,以及PGP/GPG签名,MD5和ShA512文件。

  • tar.bz2 文件包含使用Bzip2压缩的源代码。

  • The .asc file is a detached cryptographic signature that can be used to help verify the authenticity of the release.
  • The .md5 file is an MD5 hash of the release to aid in verify the validity of the release download.
  • The .sha file is a SHA512 hash of the release to aid in verify the validity of the release download.

验证下载的版本

有很多机制可以检查下载的发行版的真实性和有效性。

获取密钥

为了实现GPG签名验证,你需要下载 密钥 文件。

下一步需要导入这些密钥,你可以运行如下命令:

# gpg --import KEYS

GPG

CloudStack项目提供了发行版的分离GPG签名。运行如下命令检查签名:

$ gpg --verify apache-cloudstack-4.3.0-src.tar.bz2.asc

如果签名是有效的,你会看到一行包含“Good signature”的信息。

MD5

除了加密签名,CloudStack还提供了MD5校验和,用于验证下载的发行版。您可以通过执行下面的命令验证这个哈希值:

$ gpg --print-md MD5 apache-cloudstack-4.3.0-src.tar.bz2 | diff - apache-cloudstack-4.3.0-src.tar.bz2.md5

如果成功完成,你应该看不到任何输出。如果有任何输出,则说明你本地生成的哈希值与服务器上获取的是不同的。

SHA512

除了MD5校验和,CloudStack还提供了SHA512加密哈希,用于验证下载的发行版。您可以通过执行下面的命令验证这个哈希值:

$ gpg --print-md SHA512 apache-cloudstack-4.3.0-src.tar.bz2 | diff - apache-cloudstack-4.3.0-src.tar.bz2.sha

如果命令成功完成,你应该看不到任何输出。如果有任何输出,则说明你本地生成的哈希值与服务器上获取的不同。

编译Apache CloudStack的先决条件

编译CloudStack所需的先决条件很多,本文假定在Linux系统上编译,使用RPMs或DEBs包管理。

如下是编译CloudStack的最低需求:

  1. Maven (版本 3)

  2. Java (OpenJDK 1.6 或 Java 7/OpenJDK 1.7)

  3. Apache网页服务器常用工具(ws-commons-util)

  4. MySQL
  5. MySQLdb (提供python数据库API)

  6. Tomcat 6 (非 6.0.35)

  7. genisoimage
  8. rpmbuild 或 dpkg-dev

提取的源代码

提取CloudStack发行版源代码相对简单,使用如下命令:

$ tar -jxvf apache-cloudstack-4.3.0-src.tar.bz2

你现在可以进入该目录:

$ cd ./apache-cloudstack-4.3.0-src

编译DEB包

除了引导依赖项,还需要安装几个其他的依赖包。请注意,我们推荐使用的Maven 3,在Ubuntu 12.04.1 LTS目前不支持。所以,还需要添加一个包含Maven 3 的PPA库。运行命令“add-apt-repository”,系统将提示您继续添加GPG密钥后继续。

$ sudo apt-get update
$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:natecarlson/maven3
$ sudo apt-get update
$ sudo apt-get install ant debhelper openjdk-6-jdk tomcat6 libws-commons-util-java genisoimage python-mysqldb libcommons-codec-java libcommons-httpclient-java liblog4j1.2-java maven3

虽然我们做了一些定义,并且可能已经安装了引导的前提条件,但仍有一些在编译时需要解决的先决条件。CloudStack使用Maven进行依赖性解析。您可以通过运行以下命令,来解决编译CloudStack时的依赖性:

$ mvn3 -P deps

现在我们已经解决了依赖关系,可以使用如下命令编译CloudStack和创建DEB包:

$ dpkg-buildpackage -uc -us

该命令将创建如下debian软件包。应该有如下这些内容:

cloudstack-common-4.3.0.amd64.deb
cloudstack-management-4.3.0.amd64.deb
cloudstack-agent-4.3.0.amd64.deb
cloudstack-usage-4.3.0.amd64.deb
cloudstack-awsapi-4.3.0.amd64.deb
cloudstack-cli-4.3.0.amd64.deb
cloudstack-docs-4.3.0.amd64.deb

设置APT仓库

软件包创建完成后,你需要将软件包拷贝至可以提供HTTP服务的系统上。创建用于存放软件包的目录,并使用 dpkg-scanpackages 命令创建包含归档结构信息的 Packages.gz 文件。在系统中添加这个仓库源,最后使用该APT安装软件包。

第一步是确保你已经安装了 dpkg-dev 软件。一般在使用 debhelper 程序之前就已经安装了。如果你是在其他系统中生成的 Packages.gz 文件,请确保它已经被安装。

$ sudo apt-get install dpkg-dev

下一步是将DEB文件复制到提供HTTP服务的目录中。在示例中,我们使用 ``/var/www/cloudstack/repo``作为示例 ,你也可以更改为更适合你的目录。

sudo mkdir -p /var/www/cloudstack/repo/binary
sudo cp *.deb /var/www/cloudstack/repo/binary
sudo cd /var/www/cloudstack/repo/binary
sudo dpkg-scanpackages . /dev/null | tee Packages | gzip -9 > Packages.gz

注解

你可以忽略缺少覆盖文件的警告信息。

现在你应该可以通过HTTP访问 binary 目录中所有的DEB安装包和 Packages.gz 文件。(在进行下一步前,你需要使用 wgetcurl 命令测试。)

配置使用APT仓库源的主机

现在,我们已经创建了仓库,然后配置你的服务器来使用APT仓库源。你可以在 /etc/apt/sources.list.d 目录中添加仓库文件。使用你喜欢的编辑器来创建``/etc/apt/sources.list.d/cloudstack.list`` 文件并加入类似如下信息:

deb http://server.url/cloudstack/repo binary ./

现在,您已经准备好软件仓库,然后更新以下,使得APT知道从哪里找到CloudStack的软件包。

$ sudo apt-get update

现在可以翻到在Ubuntu上安装CloudStack的一章去了。

从源码编译RPM包

正如先前 `“编译Apache CloudStack的先决条件 <#prerequisites-for-building-apache-cloudstack>`_所说,在编译CloudStack之前需要安装一些先决条件。这里假设你使用的是64位的CentOS或Red Hat Enterprise Linux.

# yum groupinstall "Development Tools"
# yum install java-1.6.0-openjdk-devel.x86_64 genisoimage mysql mysql-server ws-commons-util MySQL-python tomcat6 createrepo

接下来,你将需要安装编译CloudStack时依赖的Maven。 使用 Maven 3, 所以你需要 提取 Maven 3 压缩包 并解压到你的主目录 (或任何你喜欢的目录):

$ tar zxvf apache-maven-3.0.4-bin.tar.gz
$ export PATH=/usr/local/apache-maven-3.0.4/bin:$PATH

Maven还需要知道Java程序路径,和JAVA_HOME环境变量输出的设置:

$ export JAVA_HOME=/usr/lib/jvm/jre-1.6.0-openjdk.x86_64/

验证Maven是否被正确安装:

$ mvn --version

如果想确保环境变量将在注销或重启后仍保留。一定要更新 ~/.bashrc 中的PATH和JAVA_HOME 变量。

编译CloudStack的RPM包相当简单。假设你已经下载了源码并解压压缩文件到一个本地目录中,你可以在几分钟之内完成编译。

注解

打包方式的变化。如果你之前创建过CloudStack软件包,你会意识到自从该项目开始使用Apache Maven,这个步骤发生了很大变化。请一定要密切关注本节中的步骤。

生成RPM包

现在我们已经满足先决条件和源码,然后进入 packaging/centos63/ 目录。

$ cd packaging/centos63

使用 package.sh 脚本生成RPM包:

$./package.sh

这会需要一些时间,生成的软件包会在 dist/rpmbuild/RPMS/x86_64/ 目录中。

你应该看到目录中的RPM包:

cloudstack-agent-4.3.0.el6.x86_64.rpm
cloudstack-awsapi-4.3.0.el6.x86_64.rpm
cloudstack-cli-4.3.0.el6.x86_64.rpm
cloudstack-common-4.3.0.el6.x86_64.rpm
cloudstack-docs-4.3.0.el6.x86_64.rpm
cloudstack-management-4.3.0.el6.x86_64.rpm
cloudstack-usage-4.3.0.el6.x86_64.rpm

创建yum仓库

RPMs是一个有用的包装格式 - 通过网络上YUM仓库来使用是非常简单的。下一步是使用这些软件包创建YUM仓库:

$ mkdir -p ~/tmp/repo
$ cp dist/rpmbuild/RPMS/x86_64/*rpm ~/tmp/repo/
$ createrepo ~/tmp/repo

~/tmp/repo 中的文件和目录现在可以上传到WEB服务器中作为YUM仓库。

配置你的系统使用新的yum仓库

现在你的yum仓库中拥有了RPM包和元数据,我们为需要安装CloudStack的机器创建一个名为``/etc/yum.repos.d/cloudstack.repo``的文件,内容如下:

[apache-cloudstack]
name=Apache CloudStack
baseurl=http://webserver.tld/path/to/repo
enabled=1
gpgcheck=0

完成这一步,您可以轻松地在整个网络中的机器上安装CloudStack。

编译 Non-OSS

如果你需要支持VMware,NetAPP,F5,NetScaler,SRX或其他非开源软件(nonoss)插件。你需要下载一些独立的组件并遵循从源代码构建稍微不同的过程。

警告

因为许可的问题,一些CloudStack支持的插件不能与CloudStack一起发行。一些原因是,所需要的一些库或JAR文件都有专用的许可。另外一些是因为所需要第三方产品库的许可证不能与Apache的许可相兼容,见`针对第三方产品的Apache许可指南 <http://www.apache.org/legal/resolved.html#category-x>`_.

  1. 为了编译NON-OSS插件,你需要安装必要的JAR在``deps`` 目录中。

    由于这些模块需要的依赖项不能和CloudStack一起发行,你需要自行下载。最新的依赖项都列在wiki页面中:*如何编译CloudStack*

  2. 你可能还需要下载`vhd-util <http://download.cloud.com.s3.amazonaws.com/tools/vhd-util>`_, 也是由于授权问题而被移除。 复制vhd-util到该目录: scripts/vm/hypervisor/xenserver/.

  3. 一旦你复制过来所有的依赖项,你就可以开始使用 noredist 选项编译CloudStack了。

$ mvn clean
$ mvn install -Dnoredist
  1. 一旦你创建了CloudStack的 noredist 配置文件,你可以使用 “从源码编译RPM包”“编译DEB包” 指令打包。