日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux---- Linux ---安装软件之 srpm ,rpm

發布時間:2025/5/22 linux 71 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux---- Linux ---安装软件之 srpm ,rpm 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux ---安裝軟件之 srpm ,rpm

安裝包常識:

=========================================================================================

1. 用 rpm -ivh *.src.rpm 命令來安裝,不會像二進制的 rpm軟件包那樣安裝程序及其數據,而是向/usr/src/redhat(不同的發行版可能稍有不同)/下的SOURCE、SPECS等子目錄釋放同名的*.tar.gz源碼包。還得自己用它釋放出來的 *.tar.gz源碼包來編譯安裝才行。



2、如果用 rpmbuild --rebuild *.src.rpm 來進行編譯,編譯完成后會在 /usr/src/linux(不同的發行版可能稍有不同) 下的RPMS目錄下生成同名的*.rpm軟件包,這回你就可以安裝它了 rpm -ivh *.rpm .


*.tar.gz形式的源碼(請注意*.tar.gz不全是源碼!可用tar ztvf *.tar.gz列清單確定)是直接打包并壓縮了的目錄及文件,*.src.rpm除了包含這個同名的 tar.gz包外,還有方便將之編譯為同名rpm二進制包的描述文件(*.spec)。


=========================================================================================


SRPM的使用:rpmbuild

1、與RPM區別: www.2cto.com 檔案格式 檔名格式 直接安裝與否 內含程式類型 可否修改參數并編譯 RPM ? ? ? ? xxx.rpm ? ? ? ? 可 ? ? ? ? 已編譯 ? ? ? ? ? 不可 ? ? SRPM ? ? ? ?xxx.src.rpm ? ?不可 ? ? ? 未編譯之原始碼 ? ? 可 SRPM可理解為RPM的前期,它最終要變成RPM的,主要是因為它是原碼,故可以跨版本。新版的 rpm 已經將 RPM 與 SRPM 的指令分開了,SRPM 使用的是 rpmbuild 這個指令,而不是 rpm。 2、參數: --rebuild 進行‘編譯’與‘打包’的動作,最后會產生 RPM 的檔案,但是產生的 RPM 檔案并沒有安裝到系統上。最后通常會發現一行字體:Wrote: /usr/src/redhat/RPMS/i386/pkgname.i386.rpm --recompile rebuild 僅‘編譯并打包’而已,而 recompile 不但進行編譯跟打包,還同時進行‘安裝’了! 如:[root@www ~]# rpmbuild --rebuild rp-pppoe-3.5-32.1.src.rpm 3、SRPM--如何解開,修改后再打包回SRPM rpm -i rp-pppoe-3.5-32.1.src.rpm # 過程不會顯示任何東西,他只會將 SRPM 的檔案解開后,放置到 /usr/src/redhat/ find /usr/src/redhat/ -type f #找文件,以程序名加.spec后綴的就是打包成SRPM的配置文件 改里面的信息后,重打包: [root@www ~]# rpmbuild -ba rp-pppoe.spec ?<==編譯并同時產生 RPM 與 SRPM 檔案 ? ?[root@www ~]# rpmbuild -bb rp-pppoe.spec ?<==僅編譯成 RPM 檔案=========================================================================================

rpm與src.rpm區別及安裝

xxxxxxxxx.rpm ? <==RPM 的格式,已經經過編譯且包裝完成的 rpm 檔案;  

xxxxx.src.rpm ? <==SRPM的格式,包含未編譯的原始碼資訊。

   =========================================================================================


有些軟件包是以.src.rpm結尾的,這類軟件包是包含了源代碼的rpm包,在安裝時需要進行編譯。這類軟件包有兩種安裝方法:


方法一:1. 執行rpm -i your-package.src.rpm2. cd /usr/src/redhat/SPECS3. rpmbuild -bp your-package.specs 一個和你的軟件包同名的specs文件4. cd /usr/src/redhat/BUILD/your-package/ 一個和你的軟件包同名的目錄5. ./configure 這一步和編譯普通的源碼軟件一樣,可以加上參數6. make7. make install方法二:1. 執行rpm -i you-package.src.rpm2. cd /usr/src/redhat/SPECS (前兩步和方法一相同)3. rpmbuild -bb your-package.specs 一個和你的軟件包同名的specs文件這時,在/usr/src/redhat/RPM/i386/ (根據具體包的不同,也可能是i686,noarch等等) 在這個目錄下,有一個新的rpm包,這個是編譯好的二進制文件。執行:rpm -i new-package.rpm即可安裝完成。 rpm安裝方式:rpm -ivh *.rmp ========================================================================================= rpmbuild通過-t參數來構建打包過的源程序。-ta就是構建rpm包和srpm包,-tb就是只構建二進制rpm包,-tp是只構建打過補丁的包,-ts是只構建srpm包。


基于以上方法;我們就用lsyncd安裝為例來演示一下具體內容:

下載源碼軟件包:lsyncd-2.0.5.tar.gz
進入源碼軟件包所在目錄
[root@vmware1 ~]# cd 4soft/
[root@vmware1 4soft]# ls
lsyncd-2.0.5.tar.gz

=================================================================

2.2 首先檢查本地的編譯環境和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@server ~]# rpm -qa |grep rpm-build
[root@server ~]# yum install -y rpm-build //默認沒有安裝rpm-build
rhel6 下的rpm 包制作源碼所在目錄/root/rpmbuild,與rhel5 的/usr/src/redhat/有所不同。
[root@server ~]# pwd
/root
[root@server ~]# 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@server ~]# ls rpmbuild/
BUILD BUILDROOT RPMS SOURCES SPECS SRPMS
如果沒有/root/rpmbuild 目錄, 執行命令:rpmbuild lsyncd-2.0.5.tar.gz , 會自動生成
/root/rpmbuild 及其子目錄。

=========================================================================================
各目錄作用簡單介紹如下:
BUILD -> 編譯位置(忽略)
BUILDROOT -> 編譯位置(忽略)
RPMS -> 生成的二進制rpm 存放位置
SOURCES -> 存放源碼, 補丁文件
SPECS -> 存放編譯方案*.spec 規則文件
SRPMS -> 生成rpm 源碼包(src.rpm)存放位置

===============================================================================
2.3 拷貝源碼到SOURCES 目錄
拷貝lsyncd 源碼到/root/rpmbuild/SOURCES 目錄下
[root@server ~]# cp lsyncd-2.0.5.tar.gz /root/rpmbuild/SOURCES/
[root@server ~]# cd rpmbuild/
[root@server rpmbuild]# tree
.
├── BUILD
├── BUILDROOT
├── RPMS
├── SOURCES
│ └── lsyncd-2.0.5.tar.gz
├── SPECS
└── SRPMS
6 directories, 1 file
此時,所有子目錄下只有SOURCES 下有lsyncd-2.05.tar.gz 一個文件

=========================================================================================
2.4 生成spec 規則文件
進入SPECS 目錄
[root@server rpmbuild]# cd SPECS
[root@server SPECS]# vim lsyncd-2.05.spec
//編輯lsyncd 的spec 規則文件,文件名字必須與源碼一致,如:lsyncd-2.0.5.tar.gz 源碼,
規則文件就應該為lsyncd-2.0.5.spec。注意一定要用vim 編輯才會自動生成模板文件。


=========================================================================================
2.6 編輯lsyncd的spec 文件
編輯lsyncd-2.0.5.spec 文件,先填寫可以確定的部分。
Name: lsyncd
Version: 2.0.5
Release: 1%{?dist}
Summary: lsync is a soft of data sync.
Group: System Environment/Base
License: GNU
URL: ftp://192.168.0.254/soft/lsyncd-2.0.5.tar.gz
Source0: lsyncd-2.0.5.tar.gz //注意名稱要寫對
BuildRoot: %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)
BuildRequires: //此處還沒有填寫,后面根據提示再修改。
Requires:
%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 //此處沒有填寫完整,需根據“make install”的輸
出填寫。
%clean
rm -rf $RPM_BUILD_ROOT
%files //此處還沒有填寫,后面根據提示再修改。
%defattr(-,root,root,-)
%doc
%changelog
%changelog
//下面填寫編譯時間5 月22 日,日期格式為date +"%a %b %d %Y",必須以*開頭,以--end
結尾
* Tue May 22 2012 <root@localhost>
--end

=========================================================================================
2.7 如何確定其它的參數內容呢,可以根據一下步驟,一步步填寫
安裝源碼包
[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'

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

[root@server lsyncd-2.0.5]# make install

=========================================================================================
2.10 到現在,lsyncd-2.0.5.spec 文件中還有“%files”沒有填寫。%files 表示編譯完成的軟件到底
包括那些文件,可以執行rpmbuild -bb lsyncd-2.0.5.spec,根據提示可以得到%files 的內容。
[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/lp_w_picpathmagic.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/lp_w_picpathmagic.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 的內容。

=========================================================================================
2.11 到這里所有lsyncd-2.0.5.spec 中所有內容編寫完畢,再次執行rpmbuild 命令
[root@server 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
[root@server i386]# rpm -ivh lsyncd-2.0.5-1.el6.i386.rpm
Preparing... ########################################### [100%]
1:lsyncd ########################################### [100%]
[root@server i386]# rpm -qa | grep lsyncd
lsyncd-2.0.5-1.el6.i386
[root@server i386]# rpm -ql lsyncd
/usr/bin/lsyncd
/usr/share/doc/lbash.lua
/usr/share/doc/lecho.lua
/usr/share/doc/lgforce.lua
/usr/share/doc/lp_w_picpathmagic.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/lp_w_picpathmagic.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
通過rpm 的查詢命令發現lsyncd 的信息,都是我們之前配置的內容。
附:完整的lsyncd-2.0.5.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/lp_w_picpathmagic.lua"
"$RPM_BUILD_ROOT/share/doc/lsyncd//lp_w_picpathmagic.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/lp_w_picpathmagic.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/lp_w_picpathmagic.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


=========================================================================================

方法總結:

有些軟件包是以.src.rpm結尾的,這類軟件包是包含了源代碼的rpm包,在安裝時需要進行編譯。這類軟件包有兩種安裝方法

方法一:

1.執行rpm -i your-package.src.rpm

2. cd /usr/src/redhat/SPECS

3. rpmbuild -bp your-package.specs 一個和你的軟件包同名的specs文件

4. cd /usr/src/redhat/BUILD/your-package/ 一個和你的軟件包同名的目錄

5. ./configure 這一步和編譯普通的源碼軟件一樣,可以加上參數

6. make

7. make install

=======================================================================

方法二:

1.執行rpm -i you-package.src.rpm

2. cd /usr/src/redhat/SPECS

前兩步和方法一相同

3. rpmbuild -bb your-package.specs 一個和你的軟件包同名的specs文件

這時,在/usr/src/redhat/RPM/i386/ (根據具體包的不同,也可能是i686,noarch等等)

在這個目錄下,有一個新的rpm包,這個是編譯好的二進制文件。

執行rpm -i new-package.rpm即可安裝完成.


轉載于:https://blog.51cto.com/8598676/1398217

總結

以上是生活随笔為你收集整理的Linux---- Linux ---安装软件之 srpm ,rpm的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。