从源码编译¶
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¶
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的最低需求:
Maven (版本 3)
Java (OpenJDK 1.6 或 Java 7/OpenJDK 1.7)
Apache网页服务器常用工具(ws-commons-util)
- MySQL
MySQLdb (提供python数据库API)
Tomcat 6 (非 6.0.35)
- genisoimage
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
文件。(在进行下一步前,你需要使用 wget
或 curl
命令测试。)
配置使用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>`_.
为了编译NON-OSS插件,你需要安装必要的JAR在``deps`` 目录中。
由于这些模块需要的依赖项不能和CloudStack一起发行,你需要自行下载。最新的依赖项都列在wiki页面中:*如何编译CloudStack*
你可能还需要下载`vhd-util <http://download.cloud.com.s3.amazonaws.com/tools/vhd-util>`_, 也是由于授权问题而被移除。 复制vhd-util到该目录:
scripts/vm/hypervisor/xenserver/
.一旦你复制过来所有的依赖项,你就可以开始使用
noredist
选项编译CloudStack了。
$ mvn clean
$ mvn install -Dnoredist
一旦你创建了CloudStack的
noredist
配置文件,你可以使用 “从源码编译RPM包” 或 “编译DEB包” 指令打包。