Centos-rpm包製作

Centos-rpm包製作


目標:把lsyncd-2.0.5.tar.gz製作成lsyncd-2.0.5.rpm

1.搭建好本地yum源:

a.cd /etc/yum.repo/

b.製作一個centos.repo,並把當前的其他倉庫文件移除到/root,目的是避免影響你的centos-yum源。

[root@teacher yum.repos.d]# cat centos.repo

[base]

name=CentOS-$releasever - Base - 163.com

baseurl=http://vault.centos.org/6.3/os/i386/  #官方yum源地址

gpgcheck=0


2.下載軟件源碼包   (也可以直接下載srpm包製作,安裝後會有做好的.spec文件)

RPM-GPG-KEY-CentOS-Security-6

RPM-GPG-KEY-CentOS-Testing-6

Packages/

Packages/389-ds-base-1.2.9.14-1.el6.i686.rpm

Packages/389-ds-base-devel-1.2.9.14-1.el6.i686.rpm

Packages/389-ds-base-libs-1.2.9.14-1.el6.i686.rpm

Packages/ConsoleKit-0.4.1-3.el6.i686.rpm

Packages/ConsoleKit-devel-0.4.1-3.el6.i686.rpm

Packages/ConsoleKit-docs-0.4.1-3.el6.i686.rpm

Packages/ConsoleKit-libs-0.4.1-3.el6.i686.rpm

...此處省略...

[server]

name=server

baseurl=ftp://192.168.0.254/centos6.2/

enabled=1

gpgcheck=1

gpgkey= ftp://192.168.0.254/centos6.2/RPM-GPG-KEY-CentOS-6

[root@server ~]# rsync -avz rsync://192.168.0.254/centos /var/ftp/centos


3.下載源碼軟件包:lsyncd-2.0.5.tar.gz     #可以在谷歌裏面搜索下載


a.首先檢查本地的編譯環境和 rpm 包製作軟件與相關目錄是否正常

[root@server ~]# rpm -qa | grep gcc //檢查系統編譯環境

gcc-java-4.4.6-3.el6.i686

libgcc-4.4.6-3.el6.i686

gcc-objc++-4.4.6-3.el6.i686

gcc-c++-4.4.6-3.el6.i686

gcc-gfortran-4.4.6-3.el6.i686

gcc-4.4.6-3.el6.i686

gcc-gnat-4.4.6-3.el6.i686

gcc-objc-4.4.6-3.el6.i686


[root@qingfeng ~]# rpm -qa |grep rpm-build    沒有提示,則說明沒有安裝rpmbuild命令

[root@qingfeng ~]# yum install -y rpm-build   //默認沒有安裝 rpm-build


rpmbuild lsyncd-2.0.5.tar.gz //可以生成/root/rpmbuild 目錄

error: File /root/lsyncd-2.0.5.tar.gz does not appear to be a specfile.

[root@qingfeng ~]# ls rpmbuild/

BUILD BUILDROOT RPMS SOURCES SPECS SRPMS


圖示:wKiom1NKVAuxiDBSAAGw8djmvkY392.jpg


b.拷貝源碼到 SOURCES 目錄

拷貝 lsyncd 源碼到/root/rpmbuild/SOURCES 目錄下

[root@qingfeng ~]# cp lsyncd-2.0.5.tar.gz /root/rpmbuild/SOURCES/

[root@qingfeng ~]# cd rpmbuild/

[root@qingfeng rpmbuild]# tree

.

├── BUILD

├── BUILDROOT

├── RPMS

├── SOURCES

│ └── lsyncd-2.0.5.tar.gz

├── SPECS

└── SRPMS

6 directories, 1 file


c.生成spec文件

wKioL1NKVIDzNONXAAFrnXJjGfI034.jpg

Name: //軟件名稱,如 lsyncd,後面可使用%{name}的方式引用

Version: //軟件版本號, 僅當軟件較以前有較大改變時才增加版本號。 如 2.0.5

Release: 1%{?dist} //軟件發佈序列號,標明第幾次打包。若軟件較以前改變較小,則

僅增加發布序列號,而不改變版本號

Summary: //概要,對軟件簡單的描述

Group: //軟件包所屬類別,具體類別參看 rpm 的幫助文件

/usr/share/doc/rpm-4.8.0/GROUPS,所有軟件必須屬於其中一種類型。

License: //許可類型,如:GPL(自由軟件) ,commercial(商業) ,Share(共享) ,

GNU 等

URL: //軟件下載地址(可以省略)

Source0: //源碼名稱

BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

//該參數非常重要,因爲在生成 rpm 的過程中,執行 make install 時就會把軟件安裝到上述

的路徑中,在打包的時候,同樣依賴“虛擬目錄”爲“根目錄”進行操作。

後面可使用$RPM_BUILD_ROOT 方式引用。

BuildRequires: //軟件依賴關係描述(可以省略)

Requires: //該 rpm 包所依賴的軟件包名稱

%description //對軟件的詳細描述,可以寫多行

%prep //這個段是預處理段,通常用來執行一些解開源程序包的命令,爲下一

步的編譯安裝作準備。

%setup -q //提取源碼到 BUILD 目錄; -q 指不顯示輸出(quietly)

%build //本段是建立段,所執行的命令爲生成軟件包服務,相當於./configure 和 make

%configure

make %{?_smp_mflags}

%install //這一節主要用於完成實際安裝軟件必須執行的命令,這一節一般是由

make install 指令構成,但是有時也會包含 cp、mv、install 等指令

rm -rf $RPM_BUILD_ROOT

make install DESTDIR=$RPM_BUILD_ROOT

%clean //這一節所描述的內容表示在完成包建立的工作之後,自動執行此節

下的腳本進行附加的清除工作,這一節的內容通常簡單地使用 rm -rf $RPM_BUILD_ROOT 命

令,不需要指定此節的其它內容

rm -rf $RPM_BUILD_ROOT

%files //這一節指定構成包的文件的列表,它是使用節前綴%files 表示的。

此外,它還包含一系列宏控制安裝後的文件屬性和配置信息。 ,分爲三類--說明文檔(doc) ,

配置文件 (config) 及執行程序, 也根據提示編寫。 %files 下列出應該捆綁到 RPM 中的文件,

並能夠可選地設置許可權和其它信息

%defattr(-,root,root,-) //指定包裝文件的屬性,分別是(mode,owner,group),-表示默認值,

對文本文件是 0644,可執行文件是 0755

%doc

%changelog //本段是修改日誌段。你可以將軟件的每次修改記錄到這裏,保存到發

布的軟件包中


d.解壓源碼:

[root@lsyncd ~]# tar xf lsyncd-2.0.5.tar.gz -C /usr/src

[root@lsyncd ~]# cd /usr/src/lsyncd-2.0.5/

[root@lsyncd lsyncd-2.0.5]# ./configure //看看配置時需要依賴哪些軟件包

checking for a BSD-compatible install... /usr/bin/install -c

...此處省略...

checking for pkg-config... /usr/bin/pkg-config

checking pkg-config is at least version 0.9.0... yes

checking for LUA... no

checking for LUA... no

checking for LUA... no

checking for LUA... configure: error: Package requirements (lua >= 5.1.3) were not met:

No package 'lua' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you

installed software in a non-standard prefix.

Alternatively, you may set the environment variables LUA_CFLAGS

and LUA_LIBS to avoid the need to call pkg-config.

See the pkg-config man page for more details.

//報錯顯示需要安裝 lua 軟件開發包

[root@server lsyncd-2.0.5]# rpm -ivh /root/2soft/lua-devel-5.1.4-4.1.el6.i686.rpm

warning: /root/2soft/lua-devel-5.1.4-4.1.el6.i686.rpm: Header V3 RSA/SHA256 Signature, key ID

c105b9de: NOKEY

Preparing... ########################################### [100%]

1:lua-devel ########################################### [100%]


[root@server lsyncd-2.0.5]# ./configure //再次配置一切正常

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

checking for a thread-safe mkdir -p... /bin/mkdir -p

//在配置過程中, 需要的軟件依賴包爲lua-devel-5.1.4-4.1.el6.i686.rpm, 那麼 lsyncd-2.0.5.spec

中,"BuildRequires: Requires:"軟件依賴配置就可以寫上 lua-devel。


[root@server lsyncd-2.0.5]# make //編譯

make all-am

make[1]: Entering directory `/usr/src/lsyncd-2.0.5'

gcc -DHAVE_CONFIG_H -I. -g -O2 -Wall -MT lsyncd.o -MD -MP -MF .deps/lsyncd.Tpo

...此處省略...

gcc -g -O2 -Wall -o lsyncd lsyncd.o inotify.o -llua -lm -ldl luac.o

make[1]: Leaving directory `/usr/src/lsyncd-2.0.5'


d. 執行 make install 命令,看安裝過程中,執行了那些操作

[root@server lsyncd-2.0.5]# make install

make[1]: Entering directory `/usr/src/lsyncd-2.0.5'

test -z "/usr/local/bin" || /bin/mkdir -p "/usr/local/bin"

/usr/bin/install -c 'lsyncd' '/usr/local/bin/lsyncd'

test -z "/usr/local/share/doc/lsyncd/" || /bin/mkdir -p "/usr/local/share/doc/lsyncd/"

/usr/bin/install -c -m 644 'examples/lbash.lua' '/usr/local/share/doc/lsyncd//lbash.lua'

/usr/bin/install -c -m 644 'examples/lecho.lua' '/usr/local/share/doc/lsyncd//lecho.lua'

/usr/bin/install -c -m 644 'examples/lgforce.lua' '/usr/local/share/doc/lsyncd//lgforce.lua'

/usr/bin/install -c -m 644 'examples/limagemagic.lua'

'/usr/local/share/doc/lsyncd//limagemagic.lua'

/usr/bin/install -c -m 644 'examples/lpostcmd.lua'

'/usr/local/share/doc/lsyncd//lpostcmd.lua'

/usr/bin/install -c -m 644 'examples/lrsync.lua' '/usr/local/share/doc/lsyncd//lrsync.lua'

/usr/bin/install -c -m 644 'examples/lrsyncssh.lua'

'/usr/local/share/doc/lsyncd//lrsyncssh.lua'

test -z "/usr/local/share/man/man1" || /bin/mkdir -p "/usr/local/share/man/man1"

/usr/bin/install -c -m 644 './doc/lsyncd.1' '/usr/local/share/man/man1/lsyncd.1'

test -z "" || /bin/mkdir -p ""

make[1]: Leaving directory `/usr/src/lsyncd-2.0.5'


這一段輸出中紅字部分就是 lsyncd-2.0.5.spec 文件中“%install”後面需要填寫的內容,表

示安裝哪些文件到哪些路徑下,但要修改格式。

1. 將這一段內容中所有的/usr/local 修改爲變量$RPM_BUILD_ROOT, 因爲製作 rpm 包時並

不需要將文件安裝到實際的路徑,所以暫時安裝在$RPM_BUILD_ROOT 中,其實就是

/root/rpmbuild/BUILDROOT/lsyncd-2.0.5-1.el6.i386 這個臨時目錄。

2. 將這一段內容中所有的單引號去掉或者換成雙引號,因爲要允許變量。

2.9 修改後的內容如下,將此部分填入 lsyncd-2.0.5.spec 文件中“%install”後面



[root@vmware1 SPECS]# rpmbuild -bb lsyncd-2.0.5.spec

...此處省略...

RPM build errors:

Installed (but unpackaged) file(s) found:

/usr/bin/lsyncd

/usr/share/doc/lbash.lua

/usr/share/doc/lecho.lua

/usr/share/doc/lgforce.lua

/usr/share/doc/limagemagic.lua

/usr/share/doc/lpostcmd.lua

/usr/share/doc/lrsync.lua

/usr/share/doc/lrsyncssh.lua

/usr/share/doc/lsyncd/lbash.lua

/usr/share/doc/lsyncd/lecho.lua

/usr/share/doc/lsyncd/lgforce.lua

/usr/share/doc/lsyncd/limagemagic.lua

/usr/share/doc/lsyncd/lpostcmd.lua

/usr/share/doc/lsyncd/lrsync.lua

/usr/share/doc/lsyncd/lrsyncssh.lua

/usr/share/man/lsyncd.1

/usr/share/man/man1/lsyncd.1.gz

在最後會有這一段關於這些文件的錯誤,這裏列出的所有文件,就是我們需要填寫入

lsyncd-2.0.5.spec 中%files 的內容。



完整的.spec文件如下:

Name: lsyncd

Version: 2.0.5

Release: 1%{?dist}

Summary: lsyncd is a soft of data sync.

Group: System Environmen/Base

License: GNU

URL: ftp://192.168.0.254

Source0: lsyncd-2.0.5.tar.gz

BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

BuildRequires: lua-devel

Requires: lua

%description

lsyncd 是一款數據同步軟件

use with rsyncd

%prep

%setup -q

%build

%configure

make %{?_smp_mflags}

%install

rm -rf $RPM_BUILD_ROOT

make install DESTDIR=$RPM_BUILD_ROOT

test -z "$RPM_BUILD_ROOT/bin" || /bin/mkdir -p "$RPM_BUILD_ROOT/bin"

/usr/bin/install -c "lsyncd" "$RPM_BUILD_ROOT/bin/lsyncd"

test -z "$RPM_BUILD_ROOT/share/doc/lsyncd/" || /bin/mkdir -p

"$RPM_BUILD_ROOT/share/doc/lsyncd/"

/usr/bin/install -c -m 644 "examples/lbash.lua" "$RPM_BUILD_ROOT/share/doc/lsyncd//lbash.lua"

/usr/bin/install -c -m 644 "examples/lecho.lua" "$RPM_BUILD_ROOT/share/doc/lsyncd//lecho.lua"

/usr/bin/install -c -m 644 "examples/lgforce.lua"

"$RPM_BUILD_ROOT/share/doc/lsyncd//lgforce.lua"

/usr/bin/install -c -m 644 "examples/limagemagic.lua"

"$RPM_BUILD_ROOT/share/doc/lsyncd//limagemagic.lua"

/usr/bin/install -c -m 644 "examples/lpostcmd.lua"

"$RPM_BUILD_ROOT/share/doc/lsyncd//lpostcmd.lua"

/usr/bin/install -c -m 644 "examples/lrsync.lua"

"$RPM_BUILD_ROOT/share/doc/lsyncd//lrsync.lua"

/usr/bin/install -c -m 644 "examples/lrsyncssh.lua"

"$RPM_BUILD_ROOT/share/doc/lsyncd//lrsyncssh.lua"

test -z "$RPM_BUILD_ROOT/share/man/man1" || /bin/mkdir -p

"$RPM_BUILD_ROOT/share/man/man1"

/usr/bin/install -c -m 644 "./doc/lsyncd.1" "$RPM_BUILD_ROOT/share/man/man1/lsyncd.1"

test -z "" || /bin/mkdir -p ""

%clean

rm -rf $RPM_BUILD_ROOT

%files

/bin/lsyncd

/share/doc/lsyncd/lbash.lua

/share/doc/lsyncd/lecho.lua

/share/doc/lsyncd/lgforce.lua

/share/doc/lsyncd/limagemagic.lua

/share/doc/lsyncd/lpostcmd.lua

/share/doc/lsyncd/lrsync.lua

/share/doc/lsyncd/lrsyncssh.lua

/share/man/man1/lsyncd.1

/usr/bin/lsyncd

/usr/share/doc/lsyncd/lbash.lua

/usr/share/doc/lsyncd/lecho.lua

/usr/share/doc/lsyncd/lgforce.lua

/usr/share/doc/lsyncd/limagemagic.lua

/usr/share/doc/lsyncd/lpostcmd.lua

/usr/share/doc/lsyncd/lrsync.lua

/usr/share/doc/lsyncd/lrsyncssh.lua

/usr/share/man/man1/lsyncd.1.gz

%defattr(-,root,root,-)

%doc

%changelog


3.spec文件無誤後

[root@vmware1 SPECS]#rpmbuild -ba lsyncd-2.0.5.spec

//順利通過編譯,使用-ba 生成 rpm 包和 srpm 包,查看生成的目標 rpm 包

[root@server rpmbuild]# tree *RPMS

RPMS

└── i386

└── lsyncd-2.0.5-1.el6.i386.rpm

SRPMS

└── lsyncd-2.0.5-1.el6.src.rpm

1 directory, 2 files

[root@server rpmbuild]# rpm -qpi RPMS/i386/lsyncd-2.0.5-1.el6.i386.rpm

Name : lsyncd Relocations: (not relocatable)

Version : 2.0.5 Vendor: (none)

Release : 1.el6 Build Date: 2012年05月14 日 星期一 11 時

51 分 31 秒

Install Date: (not installed) Build Host: server

Group : System Environmen/Base Source RPM: lsyncd-2.0.5-1.el6.src.rpm

Size : 166052 License: GNU

Signature : (none)

URL : ftp://192.168.0.254/soft/lsyncd-2.0.5.tar.gz

Summary : lsyncd is a soft of data sync.

Description :

lsyncd 是一款數據同步軟件

use with rsyncd

[root@server i386]# rpm -ivh lsyncd-2.0.5-1.el6.i386.rpm

Preparing... ########################################### [100%]

1:lsyncd ########################################### [100%]

[root@server i386]# rpm -e lsyncd


最後製作完成!

指導老師:雙星科技-馮老師

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章