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
- [root@web1 ~]# rpm -q subversion
2)创建版本库
[root@web1 ~]# mkdir /var/svn/
- [root@web1 ~]# svnadmin create /var/svn/project
- [root@web1 ~]# ls /var/svn/project/
- conf/ db/ format hooks/ locks/ README.txt
3)本地导入初始化数据
[root@web1 ~]# cd /usr/lib/systemd/system/
- [root@web1 ~]# svn import . file:///var/svn/project/ -m “Init Data”
4)修改配置文件,创建账户与密码
[root@web1 ~]# vim /var/svn/project/conf/svnserve.conf
- [general] (要顶格写)
- anon-access = none //19行,匿名无任何权限
- auth-access = write //20行,有效账户可写
- password-db = passwd //27行,密码文件
- authz-db = authz //34行,ACL访问控制列表文件
- [root@web1 ~]# vim /var/svn/project/conf/passwd
- …. …
- [users]
- harry = pass
- //用户名和密码
- tom = pass
- //用户名和密码
- [root@web1 ~]# cat /var/svn/project/conf/authz
- 所有权限自动继承根的权限
- [/] //定义ACL访问控制
- harry = rw //用户对项目根路径可读可写
- tom = rw
- * = r //其他人只读
5)启动服务
[root@web1 ~]# svnserve -d -r /var/svn/project1 (d: deamon r:root 指定svn的根目录)
- [root@web1 ~]# netstat -nutlp | grep svnserve
- tcp 0 0 0.0.0.0:3690 0.0.0.0:* LISTEN 4043/svnserve
步骤二:客户端测试(192.168.2.200)
1)将服务器上的代码下载到本地
[root@web2 ~]# cd /tmp
默认下载服务器上最新版本
- [root@web2 ~]# svn –username harry –password pass \
- co svn://192.168.2.100/ code
- 将服务器上的第五个版本下载下来
- [root@web2 ~]# svn -r 5 –username harry –password pass \
co svn://192.168.2.100/ code - //建立本地副本,从服务器192.168.2.100上co下载代码到本地code目录
- //用户名harry,密码pass
- ———————————————————————–
- Store password unencrypted (yes/no)? yes //提示是否保存密码
- [root@web2 ~]# cd /tmp/code
- [root@web2 code]# ls
- [root@web2 code]# vim user.slice //挑选任意文件修改其内容
- [root@web2 code]# svn ci -m “modify user” //将本地修改的数据同步到服务器
- [root@web2 code]# svn update //将服务器上新的数据同步到本地
- [root@web2 code]# svn info svn://192.168.2.100 //查看版本仓库基本信息
- [root@web2 code]# svn log svn://192.168.2.100 //查看版本仓库的日志
- [root@web2 code]# echo “test” > test.sh //本地新建一个文件
- [root@web2 code]# svn ci -m “new file” //提交失败,该文件不被svn管理
- [root@web2 code]# svn add test.sh //将文件或目录加入版本控制
- [root@web2 code]# svn ci -m “new file” //再次提交,成功
- [root@web2 code]# svn mkdir subdir //创建子目录
- [root@web2 code]# svn rm timers.target //使用svn删除文件
- [root@web2 code]# svn ci -m “xxx” //提交一次代码
- [root@web2 code]# vim umount.target //任意修改本地的一个文件
- [root@web2 code]# svn diff //查看所有文件的差异
- [root@web2 code]# svn diff umount.target //仅查看某一个文件的差异
- [root@web2 code]# svn cat svn://192.168.2.100/reboot.target //查看服务器文件的内容
- [root@web2 code]# sed -i ‘d’ tmp.mount
- //删除文件所有内容,但未提交
- [root@web2 code]# svn revert tmp.mount
- //还原tmp.mount文件
- [root@web2 code]# rm -rf *.target
- //任意删除若干文件
- [root@web2 code]# svn update
- //还原文件
- [root@web2 code]# sed -i ‘1a #test###’ tuned.service
- //修改本地副本中的代码文件
- [root@web2 code]# svn ci -m “xxx”
- //提交代码
- [root@web2 code]# svn merge -r7:2 tuned.service
- //将文件从版本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
- [root@web1 ~]# svn –username harry –password pass \
- > co svn://192.168.2.100/project mycode
- [root@web2 ~]# cd /tmp
- [root@web2 ~]# svn –username tom –password pass \
- > co svn://192.168.2.100/project mycode
- [root@web1 ~]# cd mycode
- [root@web2 ~]# cd mycode
2) harry和tom修改不同的文件
[root@web1 mycode]# sed -i “3a ###harry modify#####” tmp.mount
- [root@web1 mycode]# svn ci -m “has modified”
- [root@web2 mycode]# sed -i “3a ###tom modify#####” umount.target
- [root@web2 mycode]# svn ci -m “has modified”
- [root@web2 mycode]# svn update
- [root@web1 mycode]# svn update
3)harry和tom修改相同文件的不同行
[root@srv5 ~]# cd harry
- [root@web1 mycode]# sed -i “3a ###harry modify#####” user.slice
- [root@web1 mycode]# svn ci -m “modified”
- [root@web2 mycode]# sed -i “6a ###tom modify#####” user.slice
- [root@web2 mycode]# svn ci -m “modified” //提交失败
- Sending svnserve
- Transmitting file data .svn: Commit failed (details follow):
- svn: File ‘/user.slice’ is out of date(过期)
- [root@web2 mycode]# svn update //提示失败后,先更新再提交即可
- [root@web2 mycode]# svn ci -m “modified” //提交成功
- Sending user.slice
- Transmitting file data .
4) harry和tom修改相同文件的相同行
[root@web1 mycode]# sed -i ‘1c [UNIT]’ tuned.service
- [root@web1 mycode]# svn ci -m “modified”
- [root@web2 mycode]# sed -i ‘1c [unit]’ tuned.service
- [root@web2 mycode]# svn ci -m “modified”
- Sending tuned.service
- Transmitting file data .svn: Commit failed (details follow):
- svn: File ‘/tuned.service’ is out of date(过期)
- [root@web2 mycode]# svn update //出现冲突,需要解决
- Conflict discovered in ‘tuned.service’.
- Select: (p) postpone, (df) diff-full, (e) edit,
- (mc) mine-conflict, (tc) theirs-conflict,
- (s) show all options:p //选择先标记p,随后解决
- [root@web2 mycode]# ls
- tuned.service tuned.service.mine tuned.service.r10 tuned.service.r9
- [root@web2 mycode]# mv tuned.service.mine tuned.service
- [root@web2 mycode]# rm -rf tuned.service.r10 tuned.service.r9
- [root@web2 mycode]# svn ci -m “modified” //解决冲突
步骤二:使用dump指令备份版本库数据
[root@web1 ~]# svnadmin dump /var/svn/project > project.bak //备份
- * Dumped revision 0.
- …..
- * Dumped revision 11.
- [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 //会报错,没有文件或目录
- [root@web1 ~]# ls /root/rpmbuild //自动生成的目录结构
- 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
-
Source
0: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
步骤二:使用配置文件创建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
- [root@web1 ~]# ls /root/rpmbuild/RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
- [root@web1 ~]# rpm -qpi RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
- Name : nginx Relocations: (not relocatable)
- Version : 1.12.2 Vendor: (none)
- Release : 10 Build Date: Mon 02 May 2016 02:30:53 AM PDT
- Install Date: (not installed) Build Host: localhost
- Group : Applications/Internet Source RPM: nginx-1.8.0-1.src.rpm
- Size : 721243 License: GPL
- Signature : (none)
- URL : www.nginx.org
- Summary : Nginx is a web server software.
- Description :
- nginx [engine x] is an HTTP and reverse proxy server.
- [root@web1 ~]# rpm -qpl nginx-1.12.2-10.x86_64.rpm
- /usr
- ……
- /usr/local/nginx/sbin/nginx
步骤三:安装、卸载软件
[root@web1 ~]# rpm -ivh RPMS/x86_64/nginx-1.12.2-10.x86_64.rpm
- [root@web1 ~]# rpm -qa |grep nginx
- [root@web1 ~]# /usr/local/nginx/sbin/nginx
- [root@web1 ~]# curl http://127.0.0.1/