subversion(版本控制),RPM打包
##########################################################################################
subversion:
簡介:
subversion是一個自由/開源的版本控制系統
-->subversion允許你的數據恢復到早期版本
-->或者是檢查數據修改的歷史
架構:
客戶端—命令行,圖形
通信方式—本地訪問,svn服務器,web服務器
倉庫存儲—文件系統(FSFS),數據庫(Berkeley DB)
基本概念:
典型的客戶/服務器系統
--》版本庫是版本控制的核心
--》任意數量的客戶端
--》客戶端通過寫數據庫分享代碼
subversion特點
--》記錄每一次改變
版本模型:
版本控制系統的核心任務是協作編輯和數據共享
文件共享的問題
--》如何允許用戶共享信息
--》防止版本庫數據被別人意外覆蓋
############################################################################################
服務端(192.168.4.1):
安裝:
#yum -y install subversion
創建版本庫:
#mkdir /var/svn
#svnadmin create /var/svn/project1
導入項目代碼:
#svn import /etc/rc.d/init.d/ file:///var/svn/project1/ -m 'Init Data' //-m 添加說明性字符串(相當於日誌)
認證與授權:
#vim /var/svn/project1/conf/svnserver.conf
anon-access = none
//設置拒絕匿名訪問,此處可以設置為none、read、write
auth-access = write
//經過認證的用戶為可寫權限
passwd-db = passwd
//賬戶名稱與密碼的存放文件民,在conf目錄下
authz-db = authz
//基於路徑的訪問控制文件名(可以對文件或者目錄設置權限)
在passwd文件中設置賬戶信息:
#vim /var/svn/project1/conf/passwd
[users]
tom = tom123
jerry = jerry123 //用戶名jerry密碼jerry123
在authz文件在中設置訪問控制權限:
#vim /var/svn/project1/conf/authz
[groups]
tom_and_jerry=tom,jerry //定義組賬戶,組成員tom和jerry
[/]
@tom_and_jerry = rw
* = r
//tom和jerry由讀寫權限,其他人只有讀權限
啟動服務:
#systemctl start svnserver
#systemctl enable svnserver
#netstat -lnpt | grep :3690
############################################################################################
客戶端測試:
1、客戶端下載svn服務器上的項目文件
#cd /opt
#svn --username tom --password tom123 checkout svn://192.168.4.1/project1 code1
//以tom身份下載服務端版本庫文件到本地,命名為code1
#cd code1/
#svn log //查看日誌信息
2、更新本地工作副本
#svn update
3.新建文件測試:
vim foo.sh
#!/bin/bash
if [ "$1" == "foo" ]; then
echo "bar"
elif [ "$1" == "bar" ]; then
echo "foo"
else
echo "$0 foo|bar"
fi
#svn add foo.sh //將foo.sh加入svn本地管理
#svn diff //顯示服務器與本地的區別
將本地工作副本同步到服務器:
#svn commit -m "Add foo.sh to project1"
4、新建目錄
# svn mkdir subdir
# svn status #查看狀態
5、刪除文件
# rm cups.service # 本地刪除
# svn update # cups.service將重新下載
# svn delete cups.service # 在svn中刪除文件
# svn status
# svn move foo.sh bar.sh # 在svn中改名
# svn commit -m "rename foo.sh, del cups.service, mkdir subdir"
6、練習
# sed -i '1a###test###' sshd.service
# sed -i '2a###mytest###' sshd.service
# svn diff sshd.service //僅查看sshd.service中改變的內容
# svn diff
# svn log svn://192.168.4.1/project
# svn commit -m "modify sshd.service"
7、將sshd.service回退到增加兩行之前的狀態
# svn merge -r4:2 sshd.service //4指當前版本,2指要回到的版本
# vim sshd.service 第六步新增的兩行消失
8、將svn的第2版本的文件全部下載下來,叫做code2
# svn co -r2 svn://192.168.4.1/project code2
多人協作
1、tom和jerry分別下載了svn上面的項目
# cd /opt/
# svn co --username tom --password tom123 svn://192.168.4.1/project tom
# svn ls --username tom --password tom123 svn://192.168.4.1/project
# cd /var/tmp/
# svn co --username jerry --password jerry123 svn://192.168.4.1/project jerry
2、不同用戶修改不同文件
# cd tom/
# sed -i '3a#####my test####' vmtoolsd.service
# svn commit -m "tom modify vmtoolsd.service"
# cd jerry/
# sed -i '3a#####jerry test####' sshd.service
# svn commit -m "jerry modify sshd.service"
# svn update #tom修改的vmtoolsd.service同步到本地
# svn update
//修改完只需要同步到服務器
3、不同用戶改變相同文件的不同行
# sed -i '1a####tom modify###' user.slice
# svn commit -m "tom modify slice.user"
# sed -i '$a###jerry modify###' user.slice
# svn commit -m "jerry modify user.slice" #失敗,因為文件過時了(本地版本號低於服務器上的版本號)
# svn update #更新到最新版本
# svn commit -m "jerry modify user.slice" #重新提交
# vim user.slice # tom和jerry的修改全部存在
//後修改需要先svn update與服務器版本號一致,才可上傳
4、不同用戶改變相同文件的相同行
# sed -i '8c#####tom tom tom####' zram.service
# svn commit -m "tom modify zram.service"
# sed -i '8c####jerry jerry####' zram.service
# svn commit -m "jerry modify zram.service"
# svn update //選擇p
//postpone 標記沖突,稍後解決
//df 對比不同
//edit 直接修改文件,修改後選擇r
//mine-conflict 沖突以本地為主
//theirs-conflict 沖突以服務器為準
# ls zram.service*
# mv zram.service.mine zram.service //將自己的版本設置為服務器的版本
# ls zram.service*
# rm -f zram.service.r*
# ls zram.service*
# svn commit -m "jerry modify zram.service"
//需要通過選擇手動解決沖突
5、svn服務器端備份
# svnadmin dump /var/svn/project/ > /var/tmp/project.bak
6、還原
# rm -rf /var/svn/project/
# ls /var/svn/
# svnadmin create /var/svn/project/
# svnadmin load /var/svn/project/ < /var/tmp/project.bak
##########################################################################################
RPM打包:
流程:
--》準備源碼包
--》安裝rpm-build
--》編寫編譯配置文件
--》編譯RPM包
1.源碼包
nginx-1.8.0.tar.gz
2.安裝編譯打包RPM的工具:
#yum -y install rpm-build
3.生成工作目錄:
#vim nginx.spec //直接存盤退出
#rpmbuild -ba nginx.spec //出現任何錯誤,忽略,運行完後,生成了rpmbuild目錄
4、把素材放到正確目錄
# mv nginx-1.8.0.tar.gz rpmbuild/SOURCES/
# mv nginx.s* rpmbuild/SPECS/
5、修改說明文件
# vim rpmbuild/SPECS/nginx.spec
Name: nginx //軟件名稱
Version: 1.8.0 //版本信息
Release: 1%{?dist} //RPM版本
Summary: nginx high performance web server //描述
Group: application/web server //軟件組
License: GPL //協議
URL: http://www.tedu.cn //網址
Source0:nginx-1.8.0.tar.gz //源碼文件
BuildRequires: gcc pcre-devel openssl-devel zlib-devel //編譯時的依賴包
Requires: pcre openssl zlib //安裝時的依賴包
%description
nginx high performance web server compiled by dcc //詳細描述
%prep //安裝前準備,解壓
%setup -q //系統使用setup-q,安靜模式
%build //編譯時需要執行的命令
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module
make %{?_smp_mflags}
%install //安裝是需要執行的指令
make install DESTDIR=%{buildroot} //實現systemctl啟動
mkdir -p %{buildroot}/usr/lib/systemd/system
install /root/rpmbuild/SPECS/nginx.service %{buildroot}/usr/lib/systemd/system
%files //定義打包文件列表
%doc
/usr/local/nginx/*
/usr/lib/systemd/system/nginx.service
%pre //預先創建普通用戶nginx
useradd -s /sbin/nologin nginx
%changelog //軟件修改歷史
6、安裝依賴包
# yum install -y gcc openssl-devel zlib-devel pcre-devel
7、生成rpm包
# rpmbuild -ba rpmbuild/SPECS/nginx.spec
8、驗證
# ls rpmbuild/RPMS/x86_64/
# rpm -q nginx
# rpm -ihv rpmbuild/RPMS/x86_64/nginx-1.8.0-1.el7.x86_64.rpm
# rpm -q nginx
# yum info nginx
# systemctl start nginx.service
# systemctl status nginx.service
subversion(版本控制),RPM打包