Linux Operation學習------SVN/RPM打包
是一個自由/開源的版本控制系統(SVN)
多人協作文檔並跟蹤所做的修改
1.1基本概念:
版本庫:是版本控制的核心;任意數量客戶端;客戶端通過寫數據庫分享代碼
Subversion特點:記錄每一次改變
1.2版本模型
版本控制系統的核心任務是協作編輯和數據共享
1.3搭建subversion服務
[root@Web1 ~]# yum -y install subversion #裝包
[root@Web1 ~]# mkdir /var/svn
[root@Web1 ~]# svnadmin create /var/svn/project #創建共享目錄
conf db format hooks locks README.txt
[root@Web1 system]# cd /usr/lib/systemd/system
#導入數據(實驗以此路徑作為數據導入)
[root@Web1 system]# svn import . file:///var/svn/project/ -m "First Code"
#-m “註釋”
[root@Web1 ~]# svn list file:///var/svn/project #查看共享目錄內的內容
[root@Web1 ~]# cd /var/svn/project/ #這樣是看不到的
[root@Web1 ~]# vim /var/svn/project/conf/svnserve.conf
19 anon-access = none #匿名無任何權限
20 auth-access = write #輸入密碼的賬戶(有效賬戶)可讀寫
27 password-db = passwd #密碼文件
34 authz-db = authz #ACL訪問控制列表文件
[root@Web1 ~]# vim /var/svn/project/conf/passwd #用戶名,密碼文件
[root@Web1 ~]# vim /var/svn/project/conf/authz #針對每個文件做權限
[/test] #對/test定義 tom = rw #tom 可rw harry = r #harry可r
[/abc] = #所有人不可以
對於本案例:[/] tom = rw harry = rw
1.5啟動服務(2種方法)
[root@web1 ~]# svnserve -d -r /var/svn/project/ #指定一個目錄共享出去 -d放後臺
[root@web1 ~]# systemctl start svnserve #所有目錄都共享出去
1.6客戶端測試
[root@web2 ~]# cd /tmp
[root@web2 tmp]# svn co --username tom --password 123456 svn://192.168.2.100/
code #co : checkout(檢查下載) 用戶名 密碼 從哪下載 存的目錄(自動創建本地副本)
[root@web2 code]# vim user.slice #在目錄code下隨便修改一個文件
[root@web2 code]# svn ci -m "code2" #改完之後上傳 ci (comit)
此時服務器端所保存的文件有2個版本
1.7其他命令
[root@web2 code]#svn update #更新數據
[root@web2 ~]# svn info svn://192.168.2.100 #查看版本倉庫信息
[root@web2 ~]# svn log svn://192.168.2.100 #查看版本修改歷史
add命令
寫兩個腳本test.sh test1.sh
[root@web2 ~]# cd /tmp/code #需要在本地副本內操作
[root@web2 code]#svn add +文件名 #本地版本庫添加新文件
當前位置必須是下載文件的位置操作,新加的文件也需要放在該目錄下
[root@web2 code]# svn list svn://192.168.2.100 | grep test #添加的test.sh並沒有找到
[root@web2 code]# svn ci -m "add test"
[root@web2 code]# svn list svn://192.168.2.100 | grep test
test.sh
test1.sh
mkdir命令
[root@web2 ~]#svn mkdir +目錄
[root@web2 code]# svn mkdir test
[root@Web2 code]# cd test
[root@web2 test]# echo "add test file" > abc.txt
[root@Web2 test]# svn add abc.txt
[root@web2 test]# svn ci -m "mkdir and add file"
del命令
[root@web2 ~]#svn del +文件
#不會自動提交到版本庫,本地已刪除,服務器上還存在,需要svn ci -m
[root@web2 code]# svn ci -m "del test.sh" #真正在庫內刪除
list命令
[root@web2 ~]#svn list svn://192.168.2.100 #文件列表
[root@web2 ~]#svn mv/cp/rm
[root@web2 code]#svn diff #本地副本庫和服務器中文件對比
兩種修改副本情況
1、本地修改,未提交
[root@web2 code]# vim zram.service #本地刪除裏面數據
[root@web2 code]# svn revert zram.service #數據恢復
已恢復“zram.service”
revert 本地副本修改後,但未ci提交,可以數據恢復
2、本地修改,提交
[root@web2 code]# svn merge -r7:5 zram.service #將7版本還原為5版本
[root@web2 tmp]# svn -r1 co svn://192.168.2.100 code2
取出第一個版本放在code2中
1.8多人協同:
環境:在不同客戶端不同用戶登錄的操作
1、修改不同文件
[root@Web1 code]# svn update
[root@Web2 code]# svn update
#兩臺保持相同內容
Web1修改一個文件,並上傳 版本更新+1
Web2修改另一個文件,上傳,版本更新+2
此時web1修改的web2沒有修改,web2修改的web1沒有修改
分別svn update 兩邊版本相同,相對原來+2
2、修改相同文件的不同內容
Web1修改一個文件,並上傳 版本更新+1
Web2修改同一個文件,上傳,提示過期,svn update 版本更新+1(修改的地方沒有被覆蓋!!),並上傳 版本更新+1 (共+2)
Web1 svn update 版本更新+1
3、修改相同文件的相同內容(沖突,認為解決)
Web1修改一個文件,並上傳 版本更新+1
Web2修改同一個文件,上傳,提示過期,svn update,提示:在 “/tmp/code/user.slice”中發現沖突。
選擇: (p) 推遲,(df) 顯示全部差異,(e) 編輯,
(mc) 我的版本, (tc) 他人的版本,
(s) 顯示全部選項:
選p後會在目錄下多出好幾個版本,刪除不要的,然後再上傳
[root@Web1 code]# svnadmin dump /var/svn/project/ > my.bak #所有版本都進行了備份
[root@Web1 code]# svnadmin load /var/svn/project2/ < my.bak #還原
2、RPM包
1).rpm 是壓縮包(源碼安裝後的目錄)
2).rpm包含一些描述信息
2.1實現步驟:
1)安裝rpm-build軟件包
[root@web1 ~]# yum -y install rpm-build
2)生成rpmbuild目錄結構
[root@web1 ~]# rpmbuild -ba xx.spec #生成rpmbuild目錄以及子目錄
[root@web1 ~]# ls rpmbuild/
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
SOURCES:存放源碼包的目錄
SPECS:配置文件(基本信息,源碼安裝)
BUILDROOT:假根(對於rpmbuild這個軟件,裝包裝在這個根下,不影響真實根)
RPMS:成品的位置,RPM包
3)準備工作,將源碼軟件復制到SOURCES目錄
以nginx的源碼包為例:
[root@web1 ~]# cp lnmp_soft/nginx-1.8.0.tar.gz /root/rpmbuild/SOURCES/
4)創建並修改SPEC配置文件
[root@web1 ~]# vim rpmbuild/SPECS/nginx.spec
填寫軟件信息
License:GPL #此軟件定義為開源
%prep #源碼包解包,並cd進去
%setup -q
%build #配置編譯
%configure #模塊化配置,可替換為./configure --with-http_ssl_module
make %{?_smp_mflags}
%files
%doc
/usr/local/nginx/* #將該路徑下所有打包
5)安裝依賴關系以及打包
[root@Web1 ~]# yum -y install gcc pcre-devel zlib-devel
openssl-devel(http_ssl_module)需要裝這個
[root@web01 ~]# cd rpmbuild/
[root@web01 rpmbuild]# rpmbuild -ba SPECS/nginx.spec
[root@web01 ~]# ls rpmbuild/RPMS/x86_64/
nginx-1.8.0-40.x86_64.rpm nginx-debuginfo-1.8.0-40.x86_64.rpm
6)可以使用自定義yum倉庫安裝
Linux Operation學習------SVN/RPM打包