易陆发现互联网技术论坛

 找回密码
 开始注册
查看: 488|回复: 1
收起左侧

使用tar包转换rpm安装包

[复制链接]
发表于 2022-9-22 09:58:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?开始注册

x
1,准备工作:! y, _( M0 f5 }0 c2 x
ncurses.tar.gz (有tar包之后,不要去编译安装,在spec里面编写)
6 |7 P  m  a' ]$ J$ i" N7 G3 {& R; H( P: V. k3 ]" ?! V
yum -y install rpm-build  (rpmbuild命令包)7 L, [2 q, f6 d7 ]; m1 F$ {

0 D5 ], P& t* a5 M) {yum install -y rpm-build ( q& E8 V8 h7 F0 b/ e. }! x- A  X
Loaded plugins: ulninfo
, g+ ^4 D( Y1 D& y7 i+ j. ~Resolving Dependencies/ D6 d  p* l" s( ?# o1 {8 ], Z
--> Running transaction check  S, ?3 k* O0 _& t5 q" n
---> Package rpm-build.x86_64 0:4.11.3-48.el7_9 will be installed
# J, @# \% i% [: y2 N1 d......$ m$ ?% y7 Z5 U; F9 l. J0 h
Dependency Updated:
! j5 m" b/ p3 ?7 Z/ d8 a  elfutils-libelf.x86_64 0:0.176-5.el7         elfutils-libs.x86_64 0:0.176-5.el7             & ^# J7 F: j# d: k! F1 B/ [
  rpm.x86_64 0:4.11.3-48.el7_9                 rpm-build-libs.x86_64 0:4.11.3-48.el7_9        , y% Y' n+ p' y6 g
  rpm-libs.x86_64 0:4.11.3-48.el7_9            rpm-python.x86_64 0:4.11.3-48.el7_9            
$ V+ x; H) I8 Q' a5 g. t; u5 Z8 L, [% R* m/ _1 ]3 g4 F% W% A
Complete!6 d. u& U" c" ]+ X" j* M( r3 ^
8 f- }3 x( j# @- f

6 x! W( u# _' |+ c- U
0 n  H: e* K4 F/ C' p! A( ryum -y install gcc pcre-devel openssl-devel  (安装依赖包)$ ]6 M8 G: M3 s2 f

8 q9 B+ g' s0 W5 W' r+ b8 Q% L[root@ceph1 src]# yum -y install gcc pcre-devel openssl-devel
' v5 T/ P: f2 O/ I3 p/ `7 l2 ALoaded plugins: ulninfo4 x# H3 [5 k1 c( L; J0 k
Package gcc-4.8.5-44.0.3.el7.x86_64 already installed and latest version; G8 X5 ]; E; P, {
Resolving Dependencies. u* c! ?: [! F% u& k5 j
--> Running transaction check# ^/ R9 C! x8 D( L
---> Package openssl-devel.x86_64 1:1.0.2k-25.el7_9 will be installed
; o2 H. W5 e& f( h. `........6 y+ X! c" M* J; C/ A
Dependencies Resolved
" J) \$ h" [1 s( `6 |9 _9 I% E5 j
/ ^1 a( }0 T1 j& S==============================================================================================/ l. d5 ]4 Q' }9 L
Package                    Arch          Version                     Repository         Size
: G7 X5 [* Q- R( K  s  P==============================================================================================9 {; l# Q6 T& @3 M+ b
Installing:0 R4 {4 s7 n5 s

' {% E6 R3 e1 U' A4 C5 f5 I zlib                       x86_64        1.2.7-20.el7_9              ol7_latest         89 k
( U3 ~7 j3 u" n; {$ I) F4 d$ O
7 ?: C7 K; n+ d8 j. tTransaction Summary
7 G. S$ p1 X% N9 P: P2 o==============================================================================================4 M) c1 N+ t  y) ~7 A
Install  2 Packages (+ 8 Dependent packages)( \2 ~" [. t' }
Upgrade             ( 11 Dependent packages)  ], j5 p: ~# L* E, l- J0 c% P
& `( @" M. c1 d& s1 v
Total size: 6.8 M& L8 K8 a- ?2 \, i
Downloading packages:! z/ u' r' \6 D' @
Running transaction check& A" s5 t. [" P0 V  i+ u. D
Running transaction test0 K* r/ Q0 m* j2 u' u
Transaction test succeeded9 D0 A. c" D+ V( }  ]# g8 ]
Running transaction
: j# l7 Q! G9 `' H7 \/ h- s  Updating   : libcom_err-1.42.9-19.0.1.el7.x86_64                                       1/32
1 x* i4 W; Q6 W  Q8 e$ E& R- ]! V# a  Updating   : libselinux-2.5-15.el7.x86_64                                              2/32
$ m: c2 K9 s( |  Updating   : zlib-1.2.7-20.el7_9.x86_64                                                3/32 % B% H3 {# u, H2 l8 x1 r8 l
  Updating   : 1:openssl-libs-1.0.2k-25.el7_9.x86_64                                     4/32
7 }4 v0 X' }( M0 [$ F" T9 H  Updating   : krb5-libs-1.15.1-54.0.1.el7_9.x86_64                                      5/32 / e9 A! d3 x: _) j
  Installing : libkadm5-1.15.1-54.0.1.el7_9.x86_64                                       6/32
! d) Q, n/ }9 B  Installing : zlib-devel-1.2.7-20.el7_9.x86_64                                          7/32
- X8 ?4 g/ P  i2 `( }+ T9 a* Y  Updating   : libss-1.42.9-19.0.1.el7.x86_64                                            8/32 ! n7 u. b" E. I+ w* R
  Cleanup    : krb5-libs-1.15.1-34.el7.x86_64                                           24/32
/ s, ~' L2 [, |8 y: u  Cleanup    : 1:openssl-libs-1.0.2k-16.0.1.el7.x86_64                                  25/32 $ I3 p8 u7 J+ u2 b. c! f( w/ z
  Cleanup    : e2fsprogs-libs-1.42.9-13.el7.x86_64                                      26/32 * m3 }% |0 M$ ]( ?. m# n6 N
  Cleanup    : libss-1.42.9-13.el7.x86_64                                               27/32
# F: Q* [8 w+ N" k) _1 b3 @  Cleanup    : libselinux-python-2.5-14.1.el7.x86_64                                    28/32
0 X6 K: j2 {+ Y# A  Cleanup    : libselinux-utils-2.5-14.1.el7.x86_64       8 r! I/ n5 v: j4 e( V) ?. v* n
.......( J! \9 J" X7 Y' ?, O
Dependency Updated:
/ y3 T) Q0 f- ^: Y0 ~  e2fsprogs.x86_64 0:1.42.9-19.0.1.el7         e2fsprogs-libs.x86_64 0:1.42.9-19.0.1.el7      
  v/ @1 \, k, r9 ^" y$ C  krb5-libs.x86_64 0:1.15.1-54.0.1.el7_9       libcom_err.x86_64 0:1.42.9-19.0.1.el7          # {% X0 s! o! y' V6 z( ^: P4 {/ m
  libselinux.x86_64 0:2.5-15.el7               libselinux-python.x86_64 0:2.5-15.el7          - n! i/ z. l6 r3 ~
  libselinux-utils.x86_64 0:2.5-15.el7         libss.x86_64 0:1.42.9-19.0.1.el7               
7 n( p) P1 q$ M  openssl.x86_64 1:1.0.2k-25.el7_9             openssl-libs.x86_64 1:1.0.2k-25.el7_9         
, m6 `5 s' W( E8 A+ Q2 v  zlib.x86_64 0:1.2.7-20.el7_9                1 Y  F' Z/ _; n; L" n
$ b! r& i, Q) |" r) g! q
Complete!
' f. f7 X( s5 n- D' r& c& Z  N/ b% @# r; ^1 t

" Z) s) j( k1 `$ P+ T3 ]0 w6 J1 v7 n
2,准备完成后,初始化rpmbuild目录:
# H* t* T8 R2 L2 }. L( }$ J[root@ceph1 src]# mkdir rpmbulid3 `6 q/ |$ m" _' ~5 U' s

  w! E8 ], @3 o) W$ h6 U0 n5 g' r. p6 Qrpmbuild --ba   ncurses.spec (正常报错,但会生成/root/rpmbuild目录)
5 s0 Y! v( q  T' w" Q1 L8 M( y8 ~/ f2 S+ E; z0 W3 f
[root@ceph1 ~]# cp /usr/src/ncurses.tar.gz /root/rpmbuild/SOURCES/
7 w6 \2 u- B" o) ?
0 Z7 t' S* j4 L
  ]  u2 ~, \  T# r% j3,编写spec文件(禁止有空行,不需要直接注释)
, ~: [: [) A8 F- D+ d8 U& v, Z" a$ {3 T/ W* X$ Y2 P" s
vim /root/rpmbuild/SPECS/nginx.spec  #扩展名必须为spec
& L# A! K* s: _5 M1 B" O( K#填写软件的基本信息
. S5 d2 p3 \( a. GName:nginx     #源码包软件名称$ k' M4 d& I, x/ R( D3 \
Version:1.20.2     #源码包软件的版本号
6 a$ W# d3 s+ P6 wRelease:        1%{?dist}   #制作的rpm包版本号- j: q7 l/ F" o) S2 Q! j) k
Summary:This is web server               #rpm软件的情况
* C9 n% E2 X; \/ _+ ?#Group:              #组包 一般都注释
- u" ]% }' k4 j2 y9 j" PLicense:GPL                    #软件的协议# T' b& e) Z3 F8 P' z8 s- K
URL:www.nginx.com                       #网址9 s* a% H/ i$ G1 a+ P
Source0:  nginx-1.20.2.tar.gz                       #源码包文件的全称; E9 u9 H" R4 m# \7 m. \3 g
#BuildRequires: 因为nginx不需要依赖包,所以注释掉      #制作rpm时的依赖关系4 Y6 v/ E3 i+ I3 b: {
#Requires:                    #安装rpm时的依赖关系
# E6 R( P6 T- t& q%description
! P! Z- U$ Q+ Y) |# L  |3 D/ x1 X! h& kThis is web server        #软件的描述% `' t0 V& J, e+ {
- Z% l9 X4 E; m" m" f% l
#源码的安装过程(源码转化为rpm的过程)+ V# N% M! l  b! _$ M( |5 Z( D. M
%post        #安装后脚本
3 j7 d8 Z3 m# Z6 e1 q# |useradd  nginx -s /sbin/nolongin  #添加nginx用户
/ z9 T, o% X4 n' Jln -s /usr/local/nginx/sbin/nginx  /usr/bin/nginx  #建立nginx软连接
% O* A! U) e8 Wln -s /usr/local/nginx/sbin/nginx  /usr/bin/nginx 5 F8 x  r# x* n8 e/ q' I0 `

. D3 I. m! C. p5 {+ ]4 v%prep   #准备工作& n+ _* l! x5 G9 F& ]8 \
%setup -q     #自动解开tar包,并cd进入目录
, I' Z/ {9 b3 O% _6 I# x/ M%build        #编译安装: L6 X2 n6 n) u6 l4 \
./configure --user=nginx+ [8 ~* s+ x$ r* e
make %{?_smp_mflags}- W$ S( X+ b, ]- o0 n( g0 {1 E) o; k- y
%install
+ h- R4 J3 h9 t. k( l%make_install
1 G6 O/ Z, J( j; Y- ~( ?) S1 f$ Q%files) w5 U7 J; U1 j- Y  B6 ^
%doc     #需要打包的文件- g0 a+ Z# K! R$ V
/usr/local/nginx/*
7 Y' u  J9 l6 O6 X2 o%changelog7 s1 m4 `2 V$ `( V" V- F! e3 d# x1 j
% W# W  b) f! M3 u$ }

. d: X! h0 Y# I: L8 {) {接下来我们测试ncurses
- z6 }, r" ?/ a, M, c; e4 _; H[root@ceph1 ~]# vim /root/rpmbuild/SPECS/ncurses.spec
! ~; V0 i* _2 u  {( w/ T% g& }Name:ncurses                ! i& A6 ?+ h5 U  p$ ]( P  \
Version:5.9       
- {( P( n+ A& QRelease:        1%{?dist}, v3 h4 Y. Z) y: l2 u! L
Summary:mysql tools        5 }8 ]* ~2 n' q  P$ A+ l  J/ I" h

1 A& U  Y+ `. G, ]* ?& F#Group:               
% J9 B9 x5 r+ Z! W+ y3 S" A2 tLicense:GPL       
5 T: _& t: ~' K% r# g: rURL:               
# }( r0 L. v. bSource0:ncurses.tar.gz        1 Q" E- m1 c$ a% k& b
0 b, s5 q: v, I- j% f0 e
BuildRequires:       
! w* K4 f/ W9 Y' KRequires:        5 X. m. ~9 e+ ~5 s2 |: Z
%post
& j6 i$ u* y; I! W' {# Z6 S& M6 P5 T% M& |8 v1 x/ z& k3 F' L1 y5 X* L& N
%description1 h& {- y0 m9 P& F, ]
- d/ p0 P# a( D1 \+ M- y
# d8 U' C2 J) v6 T# F
%prep. ?+ c5 T9 Y( P
%setup -q
0 V" n2 Y% B3 N& T  u4 n8 ]% e5 }3 K: V) R# Z1 s( x6 P

- K; ]4 r. y# ^: c; T4 x%build
4 n" \, l! Q; X. k1 F3 Y%configure
( l" b/ o! q# n  J9 L8 Q* S" O+ Y6 }make %{?_smp_mflags}
- p' C: m0 ^1 x" n8 F' Y5 n/ r3 Y. ~$ M, F9 _2 w

6 }, [7 W9 F5 O%install7 ^- W7 b3 y" d( y% M4 w! v5 P5 g
make install DESTDIR=%{buildroot}
' {# o2 q/ p' A! E- x: p( x
$ r( w0 s& L! C+ e' z3 e' ~9 x) W1 M5 w3 t
%files2 E3 X$ O' ?7 t  h+ ?+ D+ g
%doc
; t" `$ Q( L6 T& U, n$ v, P* s, E: \

: C+ `9 Q4 D, E0 Z- x5 t% r; s
( |& K6 @$ d2 T: `' f: M+ K6 H%changelog
/ A" M2 t$ h: g/ n2 f8 _
4 u. H7 G5 a7 ~. ~" a) J6 @, D& ?& @
4,生成rpm包
" v6 X  R- B' E, p% h1 g5 E6 M
8 _2 g2 H8 ^2 e& E0 drpmbuild -ba /root/rpmbuild/SPECS/nginx.spec(显示编译过程)2 _; k8 H2 O& e/ v. D1 Q( F4 {

8 D! W' ^8 ^; ^1 p  T2 X' _[root@ceph1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/ncurses.spec
1 `+ n3 ~; s- ?$ z* k3 L..... N% F5 y4 A& E& _4 P
3 v3 Z/ `. F8 p5 Z! G
7 N; r% K& f  F" j
cd /root/rpmbuild/RPMS/x86_64/  && ls
) G, B  N1 K$ P- G& U7 s" V: jyum localinstall  nginx-1.20.2-1.el7.x86_64.rpm(测试)4 n/ w3 s( A1 |7 X! t5 c! E1 j
id   nginx (用户是否存在)2 \8 M! C; r# a% A% j0 T
nginx) c' X) z0 S% W3 a) N  x+ ]
9 @" f/ \: c1 r
7 [- |/ ~/ @: w* ?

7 \3 [9 r* n# O. E1 f. M  W8 p5 _/ @
 楼主| 发表于 2022-9-22 13:40:34 | 显示全部楼层

[root@linuxidc ~]# rpmbuild lsyncd-2.0.5.tar.gz //可以生成/root/rpmbuild 目录

如 果 没 有 /root/rpmbuild 目 录 , 执 行 命 令 :rpmbuild lsyncd-2.0.5.tar.gz , 会 自 动 生 成

4.拷贝 lsyncd 源码到/root/rpmbuild/SOURCES 目录下,此时,所有子目录下只有 SOURCES 下有 lsyncd-2.0.5.tar.gz 一个文件

[root@linuxidc rpmbuild]# tree

二、生成 spec 规则文件 (rpm -qpi 查看的内容来源于此文件)

[root@linuxidc rpmbuild]# cd SPECS

[root@linuxidc SPECS]# vim lsyncd-2.0.5.spec

注意一定要用 vim 编辑才会自动生成模板文件。 该文件内容为自动生成的模板,待会根据需要手工修改,暂时保存退出即可。

1.重要部分解释

Source0: //源码名称

BuildRequires: //软件依赖关系描述(可以省略)

Requires: //该 rpm 包所依赖的软件包名称

%build //本段是建立段,所执行的命令为生成软件包服务,相当于./configure 和 make

%install //这一节主要用于完成实际安装软件必须执行的命令,这一节一般是由make install 指令构成,但是有时也会包含 cp、mv、install 等指令

%clean //这一节所描述的内容表示在完成包建立的工作之后,自动执行此节下的脚本进行附加的清除工作,这一节的内容通常简单地使用 rm -rf $RPM_BUILD_ROOT 命令,

不需要指定此节的其它内容

%files //这一节指定构成包的文件的列表,它是使用节前缀%files 表示的。此外,它还包含一系列宏控制安装后的文件属性和配置信息。,分为三类--说明文档(doc),

配置文件(config)及执行程序,也根据提示编写。%files 下列出应该捆绑到 RPM 中的文件,并能够可选地设置许可权和其它信息

2.编辑 lsyncd 的 spec 规则文件 (编辑 lsyncd-2.0.5.spec 文件,先填写可以确定的部分)

Source0: lsyncd-2.0.5.tar.gz //注意名称要写对,文件名字必须与源码一致

%install

rm -rf $RPM_BUILD_ROOT

make install DESTDIR=$RPM_BUILD_ROOT //此处没有填写完整,需根据“make install”的输出填写。

%files //此处还没有填写,后面根据提示再修改。

%changelog

//下面填写编译时间 5 月 22 日,日期格式为 date +"%a %b %d %Y",必须以*开头,以--end结尾

* Tue May 22 2012

--end

如何确定其它的参数内容呢,可以根据一下步骤,一步步填写

3.安装源码包

[root@lsyncd lsyncd-2.0.5]# ./configure //看看配置时需要依赖哪些软件包

//在配置过程中,需要的软件依赖包为 lua-devel-5.1.4-4.1.el6.i686.rpm,那么 lsyncd-2.0.5.spec

中,"BuildRequires: Requires:"软件依赖配置就可以写上 lua-devel。

[root@linuxidc lsyncd-2.0.5]# make

[root@linuxidc lsyncd-2.0.5]# make install

输出的内容就是 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.将这一段内容中所有的单引号去掉或者换成双引号,因为要允许变量。

到现在,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

在最后会有这一段关于这些文件的错误,这里列出的所有文件,就是我们需要填写入

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

三、到这里所有 lsyncd-2.0.5.spec 中所有内容编写完毕,再次执行 rpmbuild 命令

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

//顺利通过编译,使用-ba 生成 rpm 包和 srpm 包,查看生成的目标 rpm 包

[root@linuxidc rpmbuild]# tree *RPMS

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

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

[root@linuxidc i386]# rpm -qa | grep lsyncd

[root@linuxidc i386]# rpm -ql lsyncd

通过 rpm 的查询命令发现 lsyncd 的信息,都是我们之前配置的内容。


# T; _0 @: R- I  H2 a1 r' Y
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

北京云银创陇科技有限公司以云计算运维,代码开发

QQ|返回首页|Archiver|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )点击这里给我发消息

GMT+8, 2026-4-8 21:39 , Processed in 0.061784 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2012-2025 Discuz! Team.

快速回复 返回顶部 返回列表