警告

NOTICE: THIS DOCUMENTATION SITE HAS BEEN SUPERSEDED.

For the current documentation site goto: http://docs.cloudstack.apache.org

从源码编译

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

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

The instructions here are likely version-specific. That is, the method for building from source for the 4.7.x series is different from the 4.2.x series.

如果你正在使用一个非发行版的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签名验证,你需要下载 密钥 文件。

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

$ wget http://www.apache.org/dist/cloudstack/KEYS
$ gpg --import KEYS

GPG

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

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

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

MD5

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

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

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

SHA512

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

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

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

编译Apache CloudStack的先决条件

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

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

  1. Maven (版本 3)
  2. Java (Java 8/OpenJDK 1.8)
  3. Apache网页服务器常用工具(ws-commons-util)
  4. MySQL
  5. MySQLdb (提供python数据库API)
  6. genisoimage
  7. rpmbuild 或 dpkg-dev

提取的源代码

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

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

你现在可以进入该目录:

$ cd ./apache-cloudstack-4.11.0.0-src

Install new MySQL connector

Install Python MySQL connector using the official MySQL packages repository.

MySQL connector APT repository

Install the following package provided by MySQL to enable official repositories:

wget http://dev.mysql.com/get/mysql-apt-config_0.7.3-1_all.deb
sudo dpkg -i mysql-apt-config_0.7.3-1_all.deb

Make sure to activate the repository for MySQL connectors.

sudo apt-get update
sudo apt-get install mysql-connector-python

MySQL connector RPM repository

Add a new yum repo /etc/yum.repos.d/mysql.repo:

[mysql-community]
name=MySQL Community connectors
baseurl=http://repo.mysql.com/yum/mysql-connectors-community/el/$releasever/$basearch/
enabled=1
gpgcheck=1

Import GPG public key from MySQL:

rpm --import http://repo.mysql.com/RPM-GPG-KEY-mysql

Install mysql-connector

yum install mysql-connector-python

编译DEB包

In addition to the bootstrap dependencies, you’ll also need to install several other dependencies. Note that we recommend using Maven 3.

$ sudo apt-get update
$ sudo apt-get install python-software-properties
$ sudo apt-get update
$ sudo apt-get install debhelper openjdk-8-jdk libws-commons-util-java genisoimage libcommons-codec-java libcommons-httpclient-java liblog4j1.2-java maven

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

$ mvn -P deps

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

$ dpkg-buildpackage -uc -us

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

cloudstack-common-4.11.0.0.amd64.deb
cloudstack-management-4.11.0.0.amd64.deb
cloudstack-agent-4.11.0.0.amd64.deb
cloudstack-usage-4.11.0.0.amd64.deb
cloudstack-cli-4.11.0.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
$ cd /var/www/cloudstack/repo/binary
$ sudo sh -c '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.8.0-openjdk-devel.x86_64 genisoimage mysql mysql-server ws-commons-util MySQL-python createrepo

Next, you’ll need to install build-time dependencies for CloudStack with Maven. We’re using Maven 3, so you’ll want to grab Maven 3.0.5 (Binary tar.gz) and uncompress it in your home directory (or whatever location you prefer):

$ cd ~
$ tar zxvf apache-maven-3.0.5-bin.tar.gz
$ export PATH=~/apache-maven-3.0.5/bin:$PATH

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

$ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk.x86_64

验证Maven是否被正确安装:

$ mvn --version

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

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

注解

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

生成RPM包

Now that we have the prerequisites and source, you will cd to the packaging/ directory.

$ cd packaging/

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

$ ./package.sh -d centos63

For other supported options(like centos7), run ./package.sh --help

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

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

cloudstack-agent-4.11.0.0.el6.x86_64.rpm
cloudstack-cli-4.11.0.0.el6.x86_64.rpm
cloudstack-common-4.11.0.0.el6.x86_64.rpm
cloudstack-management-4.11.0.0.el6.x86_64.rpm
cloudstack-usage-4.11.0.0.el6.x86_64.rpm

创建yum仓库

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

$ mkdir -p ~/tmp/repo
$ cd ../..
$ 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包” 指令打包。