1. 程式人生 > >subversion(版本控制),RPM打包

subversion(版本控制),RPM打包

subversionrpm打包


##########################################################################################

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打包