本节书摘来自华章计算机《Puppet权威指南》一书中的第3章,第3.2节,作者:王冬生著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。
3.2 版本控制工具安装与配置
Puppet是一款配置管理工具,其优势不仅在于配置和管理线上系统文件,还可以利用版本控制工具对线上系统和配置文件进行版本控制,如图3-6所示。这样,当线上系统出现问题时可以根据版本控制工具进行及时回滚,而回滚的功能可以将配置文件回退到上一版本或历史的某一版本,快速的回滚可以让我们将故障时间降到最低。目前流行的版本控制工具有很多,在这里推荐两款版本控制工具——Subversion和Git,这两款工具各有优势,都可以与Puppet结合使用,本书中案例主要使用Subversion版本控制工具。以下讲解Subversion和Git的基本安装和两款配置工具的区别,以便读者选用适合自己的版本控制工具。
3.2.1 Subversion安装与配置
Subversion(简称SVN)是近年来崛起的版本管理工具,也是CVS的“接班人”。目前绝大多数开源软件都使用SVN作为代码版本管理软件。SVN服务器有两种运行方式,即独立服务器运行方式和借助Apache运行的方式。借助Apache运行方式更灵活一些,而且Apache有丰富的扩展功能,所以在这里介绍借助Apache方式运行SVN,这种方式比较方便快捷,容易上手。
1 . Apache下载与安装
首先需要下载Apache(中文译名“阿帕奇”),它是一款流行的Web Server,目前很多互联网网站均有使用。这里以Apache 2.2.27为例,结合SVN介绍配置、编译和安装的过程。具体实现命令如下:
# tar xzvf httpd-2.2.27.tar.gz
# cd httpd-2.2.27
#"./configure" "--prefix=/usr/local/apache2" "--with-included-apr" "--enable-so"
"--enable-deflate=shared" "--enable-expires=shared" "--enable-rewrite=shared"
"--enable-static-support" "--disable-userdir""--enable-dav" "--enable-dav-fs"
# make && make install
2 . SVN安装
安装SVN前首先需要安装两个SVN的辅助工具——Sqlite和Neon,否则在使用SVN时会不支持一些功能。安装好Sqlite和Neon后再来安装SVN。具体的安装命令如下:
#tar xzvf sqlite-autoconf-3071300.tar.gz
#cd sqlite-autoconf-3071300
#./configure && make && make install
#tar xzvf neon-0.29.6.tar.gz
#cd neon-0.29.6
#./configure && make && make install
#tar xzvf subversion-1.7.5.tar.gz
#cd subversion-1.7.5
#./configure --with-neon
#make && make install
3 . Apache配置
借助Apache可以管理SVN的Httpd.conf文件,所以需要对Apache进行简单配置。主要的配置信息如下。
1)加载SVN的模块。
#添加如下模块支持
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
2)统一SVN和Apache的权限。
#修改用户,保证访问权限
User puppet
Group puppet
3)设置SVN发布目录和权限。
# 设置SVN目录的访问
<Location /svn>
Order allow,deny
Allow from all
Dav svn
SvnParentPath /data1/svn
SvnListParentPath On
SvnAutoversioning On
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /usr/local/apache2/conf/authfile
Require valid-user
</Location>
上述提到的/usr/local/apache2/conf/authfile包含了访问SVN的账户和密码信息,可以通过以下方式设置SVN管理账户的信息和密码。
#/usr/local/apache2/bin/htpasswd -c /usr/local/apache2/conf/authfile USRNAME
4 . 启动Apache
修改完配置文件后,不要忘记重启Apache后才会生效。启动命令如下:
# /usr/local/apache2/bin/apachectl restart
5 . 确认安装
启动Apache后可以在IE浏览器输入Apache的IP地址,即配置文件中的192.168.1.1。输入IP地址后,IE会提示用户输入用户名和密码,如图3-7所示。这里的用户名就是httpd.conf配置文件中设置的认证文件地址(/usr/local/apache2/conf/authfile)中的用户名,密码是通过htpasswd命令设置的密码,如果登录成功表示已经成功地安装了Apache和SVN。
3.2.2 Git安装与配置
Git是Linus Torvalds(Linux内核主要开发和创建人之一)为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。很多著名的软件都使用Git进行版本控制,其中包括Linux内核、X.Org服务器和OLPC内核等项目的开发流程。Git是强大的版本控制工具,与常用的版本控制工具 CVS、Subversion 等不同,它采用了分布式版本库的方式而不需要服务器端软件支持。开发者从服务器上克隆数据库(包括代码和版本信息)到单机上,在没有网络的条件下,开发者就可以在单机上创建分支、修改代码,并在单机上进行提交,联网后可以与服务器上的版本进行合并。Git就是如此方便快捷。更多信息请参考官方网站http://git-scm.com/
。
Git目前支持UNIX/Linux系列操作系统,同时也支持Windows系列操作系统。下面以CentOS系统为例来讲解安装Git的过程。在安装Git前需要安装一些Git需要的依赖包,具体如下。
1 . Git依赖包
安装Git前首先通过yum安装它所需要的依赖包和库文件。具体安装命令如下:
# yum install curl
# yum install curl-devel
# yum install zlib-devel
# yum install openssl-devel
# yum install perl
# yum install cpio
# yum install expat-devel
# yum install gettext-devel
2 . Git安装
下载Git,确认依赖包和库文件安装完没有问题后,解压Git安装包直接配置、编译和安装它。具体命令如下:
# tar xzvf git-latest.tar.gz
# ./configure
# make
# make install
3.2.3 SVN与Git的4点区别
SVN和Git作为两款比较有代表性的版本控制工具,在功能和应用方面可谓各有千秋。两者的区别有以下几点。
1)Git可以分布式管理版本库,而SVN不行。Git和SVN一样都有自己的集中版本管理服务器。但是Git更倾向于分布式管理版本库,也就是说每个开发人员通过Git可以从中心服务器版本库上迁出(check out)一份代码到自己机器的版本库中,并且在没有网络的情况下仍然可以继续开发,并在本地提交相应数据。而SVN却做不到这一点。
2)Git把内容按元数据方式存储,而SVN是按文件方式存储。在使用SVN和Git时会发现两个版本控制工具分别有.svn目录和.git目录。SVN把文件的元信息隐藏在.svn文件夹里。而Git的目录体积要比SVN大很多,因为Git目录是处于机器上的一个克隆版的版本库,它拥有中心版本库上所有的东西,例如标签、分支、版本记录等。
3)Git分支和SVN分支的不同。SVN中的分支一点也不特别,它就是版本库中另外的一个目录。如果我们想知道是否合并了一个分支,需要手工运行像svn propget svn:mergeinfo这样的命令来确认代码是否被合并。然而处理Git的分支却是相当的简单和有趣。我们可以从同一个工作目录下快速地在几个分支间切换。我们可以很容易发现未被合并的分支,而通过Git也可以简单而快捷地合并这些文件分支。
4)Git的内容完整性要优于SVN。因为Git的内容存储使用的是SHA-1哈希算法,能保证代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
在这里我们总结了SVN和Git的4点不同,读者可以根据自己的需要来选用Git或SVN版本控制工具。