OPERATION-06 版本控制 SVN基础 实战案例、RPM打包

 OPERATION DAY06

案例1:Subversion基本操作
案例2:使用Subversion协同工作
案例3:制作nginx的RPM包

1 案例1:Subversion基本操作

1.1 问题

本案例要求先快速搭建好一台Subversion服务器,并测试该版本控制软件:

  • 创建版本库
  • 导入初始化数据
  • 检出数据至用户本地副本
  • 对本地副本进行增删改查等操作

1.2 方案

使用YUM安装subversion软件,使用svn客户端工具连接svnserver服务器并测试版本控制软件。

1.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装Subversion服务器

1)YUM安装subversion软件

       [root@web1 ~]# yum -y install subversion

  1. [root@web1 ~]# rpm -q subversion

2)创建版本库

      [root@web1 ~]# mkdir /var/svn/

  1. [root@web1 ~]# svnadmin create /var/svn/project
  2. [root@web1 ~]# ls /var/svn/project/
  3. conf/ db/ format hooks/ locks/ README.txt

3)本地导入初始化数据

       [root@web1 ~]# cd /usr/lib/systemd/system/

  1. [root@web1 ~]# svn import . file:///var/svn/project/ -m "Init Data"

4)修改配置文件,创建账户与密码

       [root@web1 ~]# vim /var/svn/project/conf/svnserve.conf

  1. [general]        (要顶格写)
  2. anon-access = none         //19行,匿名无任何权限
  3. auth-access = write           //20行,有效账户可写
  4. password-db = passwd      //27行,密码文件
  5. authz-db = authz               //34行,ACL访问控制列表文件
  6.  
  7.  
  8. [root@web1 ~]# vim /var/svn/project/conf/passwd
  9. .... ...
  10. [users]
  11. harry = pass
  12. //用户名和密码
  13. tom = pass
  14. //用户名和密码
  15.  
  16.  
  17. [root@web1 ~]# cat /var/svn/project/conf/authz
  18. 所有权限自动继承根的权限
  19. [/]                                //定义ACL访问控制
  20. harry = rw                        //用户对项目根路径可读可写
  21. tom = rw
  22. * = r                            //其他人只读

5)启动服务

       [root@web1 ~]# svnserve -d -r /var/svn/project1  (d: deamon r:root 指定svn的根目录)

  1. [root@web1 ~]# netstat -nutlp |  grep svnserve
  2. tcp 0 0 0.0.0.0:3690    0.0.0.0:*    LISTEN 4043/svnserve

步骤二:客户端测试(192.168.2.200)

1)将服务器上的代码下载到本地

       [root@web2 ~]# cd /tmp

             默认下载服务器上最新版本

  1. [root@web2 ~]# svn --username harry --password pass \
  2. co svn://192.168.2.100/   code        
  3.       将服务器上的第五个版本下载下来
  4. [root@web2 ~]# svn  -r 5  --username harry --password pass \
    co svn://192.168.2.100/   code  
         
  5. //建立本地副本,从服务器192.168.2.100上co下载代码到本地code目录
  6. //用户名harry,密码pass
  7. -----------------------------------------------------------------------
  8. Store password unencrypted (yes/no)? yes            //提示是否保存密码
  9.  
  10. [root@web2 ~]# cd /tmp/code
  11. [root@web2 code]# ls
  12. [root@web2 code]# vim user.slice                 //挑选任意文件修改其内容
  13. [root@web2 code]# svn ci -m "modify user"        //将本地修改的数据同步到服务器
  14.  
  15. [root@web2 code]# svn update                    //将服务器上新的数据同步到本地
  16. [root@web2 code]# svn info     svn://192.168.2.100    //查看版本仓库基本信息
  17. [root@web2 code]# svn log     svn://192.168.2.100    //查看版本仓库的日志
  18.  
  19. [root@web2 code]# echo "test" > test.sh        //本地新建一个文件
  20. [root@web2 code]# svn ci -m "new file"            //提交失败,该文件不被svn管理
  21. [root@web2 code]# svn add test.sh                //将文件或目录加入版本控制
  22. [root@web2 code]# svn ci -m "new file"            //再次提交,成功
  23.  
  24. [root@web2 code]# svn mkdir subdir                //创建子目录
  25. [root@web2 code]# svn rm timers.target            //使用svn删除文件
  26. [root@web2 code]# svn ci -m "xxx"                //提交一次代码
  27.  
  28. [root@web2 code]# vim umount.target            //任意修改本地的一个文件
  29. [root@web2 code]# svn diff                     //查看所有文件的差异
  30. [root@web2 code]# svn diff umount.target        //仅查看某一个文件的差异
  31. [root@web2 code]# svn cat svn://192.168.2.100/reboot.target    //查看服务器文件的内容
  32.  
  33. [root@web2 code]# sed -i 'd' tmp.mount            
  34. //删除文件所有内容,但未提交
  35. [root@web2 code]# svn revert tmp.mount            
  36. //还原tmp.mount文件
  37.  
  38. [root@web2 code]# rm -rf *.target                
  39. //任意删除若干文件
  40. [root@web2 code]# svn update                    
  41. //还原文件
  42.  
  43. [root@web2 code]# sed -i '1a #test###' tuned.service
  44. //修改本地副本中的代码文件
  45. [root@web2 code]# svn ci -m "xxx"
  46. //提交代码
  47. [root@web2 code]# svn merge -r7:2    tuned.service    
  48. //将文件从版本7还原到版本2

使用svn命令测试svnserver服务时可以使用的命令列表如表-1所示。

                                            

表-1 svn命令列表

 

2 案例2:使用Subversion协同工作

2.1 问题

沿用练习一,通过svn工具,对subversion版本库进行多人协同工作测试,要求如下:

  • 该版本库支持多个账户同时协作编辑文件
  • 测试演示多人协作编辑的具体操作
  • 手动解决版本冲突问题
  • 备份版本库数据

2.2 方案

使用svn客户端工具连接subversion服务器并测试多人协同工作以及如何手动解决冲突问题,账户名称分别为harry和tom,最后使用svnadmin dump指令对版本库进行备份工作。

2.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:多人协同工作

1)远程连接两个终端,每个人下载代码本地副本,注意web1(192.168.2.100)和web2(192.168.2.200)代表了两个不同的主机,看清楚操作是在哪一台计算机上执行!

       [root@web1 ~]# cd /tmp

  1. [root@web1 ~]# svn --username harry --password pass \
  2. > co svn://192.168.2.100/project mycode
  3. [root@web2 ~]# cd /tmp
  4. [root@web2 ~]# svn --username tom --password pass \
  5. > co svn://192.168.2.100/project mycode
  6. [root@web1 ~]# cd mycode
  7. [root@web2 ~]# cd mycode

2) harry和tom修改不同的文件

       [root@web1 mycode]# sed -i "3a ###harry modify#####" tmp.mount

  1. [root@web1 mycode]# svn ci -m "has modified"
  2. [root@web2 mycode]# sed -i "3a ###tom modify#####" umount.target
  3. [root@web2 mycode]# svn ci -m "has modified"
  4. [root@web2 mycode]# svn update
  5. [root@web1 mycode]# svn update

3)harry和tom修改相同文件的不同行

       [root@srv5 ~]# cd harry

  1. [root@web1 mycode]# sed -i "3a ###harry modify#####" user.slice
  2. [root@web1 mycode]# svn ci -m "modified"
  3. [root@web2 mycode]# sed -i "6a ###tom modify#####" user.slice
  4. [root@web2 mycode]# svn ci -m "modified"        //提交失败
  5. Sending svnserve
  6. Transmitting file data .svn: Commit failed (details follow):
  7. svn: File '/user.slice' is out of date(过期)
  8. [root@web2 mycode]# svn update                    //提示失败后,先更新再提交即可
  9. [root@web2 mycode]# svn ci -m "modified"        //提交成功
  10. Sending user.slice
  11. Transmitting file data .

4) harry和tom修改相同文件的相同行

       [root@web1 mycode]# sed -i '1c [UNIT]' tuned.service

  1. [root@web1 mycode]# svn ci -m "modified"
  2. [root@web2 mycode]# sed -i '1c [unit]' tuned.service
  3. [root@web2 mycode]# svn ci -m "modified"
  4. Sending tuned.service
  5. Transmitting file data .svn: Commit failed (details follow):
  6. svn: File '/tuned.service' is out of date(过期)
  7. [root@web2 mycode]# svn update                    //出现冲突,需要解决
  8. Conflict discovered in 'tuned.service'.
  9. Select: (p) postpone, (df) diff-full, (e) edit,
  10. (mc) mine-conflict, (tc) theirs-conflict,
  11. (s) show all options:p                    //选择先标记p,随后解决
  12. [root@web2 mycode]# ls
  13. tuned.service tuned.service.mine        tuned.service.r10    tuned.service.r9
  14. [root@web2 mycode]# mv tuned.service.mine tuned.service
  15. [root@web2 mycode]# rm -rf tuned.service.r10 tuned.service.r9
  16. [root@web2 mycode]# svn ci -m "modified"    //解决冲突

步骤二:使用dump指令备份版本库数据

    [root@web1 ~]# svnadmin dump /var/svn/project > project.bak //备份

  1. * Dumped revision 0.
  2. .....
  3. * Dumped revision 11.
  4. [root@web1 ~]# svnadmin load /var/svn/project2 < project.bak     //还原

3 案例3:制作nginx的RPM包

3.1 问题

    rpm:

        压缩安装后的结果

        rpm 装包其实是在解压文件

本案例使用nginx-1.12.2版本的源码软件,生产对应的RPM包软件,具体要求如下:

  • 软件名称为nginx
  • 软件版本为1.12.2
  • RPM软件包可以查询描述信息
  • RPM软件包可以安装及卸载

3.2 方案

安装rpm-build软件包,编写SPEC配置文件,创建新的RPM软件包。

配置文件中的描述信息如表-2:

                                                    

         

表-2 SPEC描述信息

3.3 步骤

实现此案例需要按照如下步骤进行。

步骤一:安装rpm-build软件

1)安装rpm-build软件包

      [root@web1 ~]# yum -y install rpm-build

      补充:    install -m 000 a.txt b.txt   : install 就是cp 

2)生成rpmbuild目录结构

      [root@web1 ~]# rpmbuild -ba nginx.spec                //会报错,没有文件或目录

  1. [root@web1 ~]# ls /root/rpmbuild                    //自动生成的目录结构
  2. BUILD BUILDROOT RPMS SOURCES SPECS SRPMS

3)准备工作,将源码软件复制到SOURCES目录

      [root@web1 ~]# cp nginx-1.12.2.tar.gz /root/rpmbuild/SOURCES/

4)创建并修改SPEC配置文件

      [root@web1 ~]# vim /root/rpmbuild/SPECS/nginx.spec

Name:nginx        
Version:1.12.2
Release:    10
Summary: Nginx is a web server software.    

License:GPL    
URL:    www.test.com    
Source0:nginx-1.12.2.tar.gz

#BuildRequires:    
#Requires:    

%description
nginx [engine x] is an HTTP and reverse proxy server.
#post
#... 存放安装后的脚本
#useradd -s /sbin/nologin nginx

%prep
%setup –q                            //自动解压源码包,并cd进入目录

%build
./configure
make %{?_smp_mflags}


%install
make install DESTDIR=%{buildroot}

cp /root/rpmbuild/SPECS/nginx.sh %{buildroot}/usr/local/nginx/##注意,cp非必须操作,注意,这里是将一个脚本拷贝到安装目录,必须提前准备该文件

%files
%doc
/usr/local/nginx/*            //对哪些文件与目录打包   (这里的 / 对应计算机中的目录为 /root/rpmbuild/BUILDROOT )

%changelog
  1.  

步骤二:使用配置文件创建RPM包

1)安装依赖软件包

      [root@web1 ~]# yum -y install gcc pcre-devel zlib-devel openssl-devel

2)rpmbuild创建RPM软件包

      [root@web1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec

  1. [root@web1 ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
  2. [root@web1 ~]# rpm -qpi RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
  3. Name : nginx        Relocations: (not relocatable)
  4. Version : 1.12.2        Vendor: (none)
  5. Release : 10            Build Date: Mon 02 May 2016 02:30:53 AM PDT
  6. Install Date: (not installed)            Build Host: localhost
  7. Group : Applications/Internet        Source RPM: nginx-1.8.0-1.src.rpm
  8. Size : 721243                    License: GPL
  9. Signature : (none)
  10. URL : www.nginx.org
  11. Summary : Nginx is a web server software.
  12. Description :
  13. nginx [engine x] is an HTTP and reverse proxy server.
  14. [root@web1 ~]# rpm -qpl nginx-1.12.2-10.x86_64.rpm
  15. /usr
  16. ......
  17. /usr/local/nginx/sbin/nginx

步骤三:安装、卸载软件

       [root@web1 ~]# rpm -ivh RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm

  1. [root@web1 ~]# rpm -qa |grep nginx
  2. [root@web1 ~]# /usr/local/nginx/sbin/nginx
  3. [root@web1 ~]# curl http://127.0.0.1/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值