找回密码
 注册
查看: 490|回复: 1

使用tar包转换rpm安装包

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-9-22 09:58:32 | 显示全部楼层 |阅读模式
1,准备工作:
' R4 V. \: N, b7 V% [6 kncurses.tar.gz (有tar包之后,不要去编译安装,在spec里面编写)
7 h6 o! `3 t$ B  v8 M4 O7 u- C( I& ~* H5 j* b; t% _# I
yum -y install rpm-build  (rpmbuild命令包)
6 j2 b7 B& x& Z; k4 w: x/ J  o- r. _' w( a" v, C- a: j$ }
yum install -y rpm-build : ~2 a9 Q# `, D; X( F' O% D# h. g& x
Loaded plugins: ulninfo2 R* i3 v# O, W) N: }
Resolving Dependencies, f, j: Z  s' \; j; i' h
--> Running transaction check
" [6 u, m1 _4 z0 r. h0 r8 q---> Package rpm-build.x86_64 0:4.11.3-48.el7_9 will be installed7 m; s% y7 e; f0 R9 R. p
......
/ [" ?+ Y6 F. {! W9 H2 aDependency Updated:
7 O6 G3 b! C$ B: G5 @# M8 r  elfutils-libelf.x86_64 0:0.176-5.el7         elfutils-libs.x86_64 0:0.176-5.el7            
, E' m, M# W* T% Y0 L, t0 W( |  rpm.x86_64 0:4.11.3-48.el7_9                 rpm-build-libs.x86_64 0:4.11.3-48.el7_9        
5 O) M4 z; T: C$ o6 c  rpm-libs.x86_64 0:4.11.3-48.el7_9            rpm-python.x86_64 0:4.11.3-48.el7_9            
8 U2 t! d$ K- v7 H9 ^# k, a" i, N
- N5 z% ~; ~# E1 dComplete!
; p: R& Y( R5 N( _
7 M  ^: ?& C/ P  g# o9 W6 b7 I0 E1 \
# y+ z# Y; V" t% R% d( P
yum -y install gcc pcre-devel openssl-devel  (安装依赖包)5 s4 D- J# g- G3 i% s
2 o! o! ~, T% o- r& A( R
[root@ceph1 src]# yum -y install gcc pcre-devel openssl-devel ; V. o( p- [4 j4 K# @7 S7 `
Loaded plugins: ulninfo# g/ ?, `5 D& ~- ?9 m
Package gcc-4.8.5-44.0.3.el7.x86_64 already installed and latest version, {  P" |& D, A, r7 ?. }
Resolving Dependencies
; k) s3 A, [! Q5 J, d* r8 t; \% C--> Running transaction check4 b  b; l3 V9 D7 R
---> Package openssl-devel.x86_64 1:1.0.2k-25.el7_9 will be installed) t# a1 p1 d4 o' o: b9 G& Q
........, o# b, A+ n, R5 q! K9 u
Dependencies Resolved* p6 s, F" X: o. O. I7 E) K

9 G4 [/ d  T9 ~9 K==============================================================================================5 d& \( Q+ h: S. Y$ N
Package                    Arch          Version                     Repository         Size: ]- U; N3 R: Z' T4 T3 [
==============================================================================================4 C0 ]; b- Y" U+ M4 i$ b
Installing:
! F# v- I: r* t" B+ h  r4 p7 s% w& a/ F; ^" X
zlib                       x86_64        1.2.7-20.el7_9              ol7_latest         89 k! |/ h! C0 N& e8 p* p  p

6 M! X* m  k1 p3 k3 Q/ E6 WTransaction Summary4 C6 U+ ]- m6 w
==============================================================================================5 }7 F4 W" |+ d  u/ k
Install  2 Packages (+ 8 Dependent packages)  G  c5 s/ b: L. V4 Z2 n
Upgrade             ( 11 Dependent packages)
. Q1 P5 }. b8 v1 t( R% v
9 j* r! N" Y1 ATotal size: 6.8 M
8 w& X$ N3 B* X7 R. J" UDownloading packages:/ h( n! P5 D. z! ~2 T1 f; g* z7 U5 |
Running transaction check
5 I; @8 Z3 q  U/ [Running transaction test
2 P2 S# [8 w  OTransaction test succeeded; s) }/ B: k! q8 v
Running transaction  C8 H) C9 `" X7 {6 C! H# d4 s8 t
  Updating   : libcom_err-1.42.9-19.0.1.el7.x86_64                                       1/32 0 c$ n3 H+ p) A
  Updating   : libselinux-2.5-15.el7.x86_64                                              2/32 9 ^4 r6 C  c: a# ?
  Updating   : zlib-1.2.7-20.el7_9.x86_64                                                3/32
4 A- f! i4 ^# ?- w  }  Updating   : 1:openssl-libs-1.0.2k-25.el7_9.x86_64                                     4/32
# f: G9 f4 d4 p4 y; `  Updating   : krb5-libs-1.15.1-54.0.1.el7_9.x86_64                                      5/32
8 [, }! S$ i7 S2 |7 O% b4 r& J& v; p  Installing : libkadm5-1.15.1-54.0.1.el7_9.x86_64                                       6/32 " H# p# Q" C; b  d. @
  Installing : zlib-devel-1.2.7-20.el7_9.x86_64                                          7/32 , Q2 `7 A) q* S) Y* Z
  Updating   : libss-1.42.9-19.0.1.el7.x86_64                                            8/32 3 R: o. X+ v5 O3 R0 t9 U$ s
  Cleanup    : krb5-libs-1.15.1-34.el7.x86_64                                           24/32 9 E$ e# F( t& ?, v" K
  Cleanup    : 1:openssl-libs-1.0.2k-16.0.1.el7.x86_64                                  25/32 1 h& d% P' x; @0 J& z
  Cleanup    : e2fsprogs-libs-1.42.9-13.el7.x86_64                                      26/32
. f; e& ]. M* u( g- B* o) \  Cleanup    : libss-1.42.9-13.el7.x86_64                                               27/32   r& j5 F# W" u" d/ v
  Cleanup    : libselinux-python-2.5-14.1.el7.x86_64                                    28/32
: _& M& \" M' f  Cleanup    : libselinux-utils-2.5-14.1.el7.x86_64       # B" `9 o9 Q: j% r/ ^" K0 }/ x5 N
.......7 K* x6 Z% x1 T( ]
Dependency Updated:' W/ F  H3 [) v
  e2fsprogs.x86_64 0:1.42.9-19.0.1.el7         e2fsprogs-libs.x86_64 0:1.42.9-19.0.1.el7        c. i8 B% K- a
  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          5 v. E& }$ k4 x( P
  libselinux.x86_64 0:2.5-15.el7               libselinux-python.x86_64 0:2.5-15.el7         
. [, @" l( H4 x% H0 H/ X& t8 D9 j% M  libselinux-utils.x86_64 0:2.5-15.el7         libss.x86_64 0:1.42.9-19.0.1.el7               
" _- U& I7 C! S7 d' B# g3 l2 t% |  openssl.x86_64 1:1.0.2k-25.el7_9             openssl-libs.x86_64 1:1.0.2k-25.el7_9         
$ y  S! W( H. A, {1 w  zlib.x86_64 0:1.2.7-20.el7_9                9 S/ ^: r) L4 |$ w0 B2 r
: s, o. l, [  |# A& e: A
Complete!
8 n. ]2 g5 _5 F; s2 s+ |" X% P+ }" S- Q  ~& I

( N4 m- h0 r" @  G# G. L7 ]: L* y3 H# e! C% B1 q
2,准备完成后,初始化rpmbuild目录:: b) G' h, q+ X
[root@ceph1 src]# mkdir rpmbulid
  g% H4 f$ u2 I3 S- _8 q
4 _3 r* i- Y6 \( Irpmbuild --ba   ncurses.spec (正常报错,但会生成/root/rpmbuild目录)1 z6 \6 |+ M6 Y& z1 t# d  S/ f# u

# M) S* f# J! a! H  P& q[root@ceph1 ~]# cp /usr/src/ncurses.tar.gz /root/rpmbuild/SOURCES/
0 r2 {7 }  z- h! `4 X( F
, J! m# l+ r) [& K, h4 R* n6 }
/ i9 D1 w6 G0 H- J# ?$ k0 v3,编写spec文件(禁止有空行,不需要直接注释)- T) q' [( u/ g, n) p* O

; f* L! s- ~7 a/ E# hvim /root/rpmbuild/SPECS/nginx.spec  #扩展名必须为spec9 t+ U& D3 l4 `- i/ C
#填写软件的基本信息& r9 R$ F& m1 z' w7 g2 x
Name:nginx     #源码包软件名称/ @7 R7 T, d1 u" a& Q+ T3 d) A
Version:1.20.2     #源码包软件的版本号
# |, n% t* ^% x* IRelease:        1%{?dist}   #制作的rpm包版本号! ^( H( I* \+ P4 g
Summary:This is web server               #rpm软件的情况
4 E1 ?/ t9 o. j, H: {$ T#Group:              #组包 一般都注释
) T" k  l* U2 T5 x- BLicense:GPL                    #软件的协议
3 C$ E5 N4 P! \3 J7 Z+ z5 {URL:www.nginx.com                       #网址
/ z) y) }" j, q" B8 E$ ISource0:  nginx-1.20.2.tar.gz                       #源码包文件的全称6 @4 A2 t7 B3 C" {7 X
#BuildRequires: 因为nginx不需要依赖包,所以注释掉      #制作rpm时的依赖关系; z7 r: y# E( h: o6 X% ?) l
#Requires:                    #安装rpm时的依赖关系
# ?) O" u: X8 W* I1 p. b%description. [- }' S8 T, ]' ^& e: U1 a6 D, R
This is web server        #软件的描述
  O7 O0 x' k8 F: r0 b( |, ?" a5 b6 h! z
#源码的安装过程(源码转化为rpm的过程)
/ `/ S' o, i, C% z3 _2 C%post        #安装后脚本8 H" a0 I) B) N  R5 l! r4 |1 {/ [4 s
useradd  nginx -s /sbin/nolongin  #添加nginx用户4 ~( g' ^2 S) [, U7 r5 O& p
ln -s /usr/local/nginx/sbin/nginx  /usr/bin/nginx  #建立nginx软连接: d3 y) t$ C. o6 \1 T! P$ V
ln -s /usr/local/nginx/sbin/nginx  /usr/bin/nginx
) n. n1 {8 f7 o7 |4 t# j
, `+ g* J7 y+ W9 X%prep   #准备工作5 w# h/ S1 m  a" {  h. M7 t" C
%setup -q     #自动解开tar包,并cd进入目录- M( a- p& F( O* y- v
%build        #编译安装: E8 c: S9 d7 W( Z( y1 w+ v: D& D
./configure --user=nginx* n/ V) N) v# d# S* e
make %{?_smp_mflags}5 D9 M) |4 N; Q1 K& `$ }$ c
%install
% L- k, [0 p" `8 T/ Z4 ^%make_install
( H$ b0 c# N) A" T/ \% X$ B3 Z%files# e- y. N. ]% }( Q  A* {7 i
%doc     #需要打包的文件+ _. ?; Z0 V2 m/ M: Q
/usr/local/nginx/*
! s7 T4 f( e. y0 Q8 h%changelog. x! l  Z; V6 F" f& p
9 G, [/ W! S8 z  j" y4 ]7 K+ ]

# @9 F# j; z% l& o+ E6 u: I接下来我们测试ncurses3 j( [3 Q2 j3 D+ r8 E# K
[root@ceph1 ~]# vim /root/rpmbuild/SPECS/ncurses.spec
- ~$ r9 ~4 c: `Name:ncurses                # N6 F" x6 i! g. v/ [; ?$ x
Version:5.9       
% ~3 v1 j/ X2 }2 P+ \$ G$ mRelease:        1%{?dist}: Y& m$ h* D$ v: E& Z, ?
Summary:mysql tools       
+ R8 ]- X$ n0 u' h- v* u
4 S+ F/ [7 |0 f5 D& J: n2 E" x#Group:               
% f% a0 i' ~  ?# `, DLicense:GPL       
- \* o1 R! X2 r/ c5 m' |" qURL:                8 C5 @, ~9 ^" l2 o' A9 T. |
Source0:ncurses.tar.gz       
" U/ U) w; ]2 D: L  e; A; N5 }! K. C) T% V" u3 R  n* \; \
BuildRequires:        4 I% X* S) P2 f& K
Requires:        + {/ M, {/ W/ _) M3 X7 d+ k- X
%post
' K2 z- V& ?$ r$ J% E' G) a6 u* Y7 _  @8 k
%description
0 N7 y9 T) s2 j+ ?5 `1 w
7 R2 S  z. g+ B1 t* _' x6 E$ P7 X% W1 X6 I
%prep/ B$ l2 |( D; R  j
%setup -q
  ?  r! r/ l0 E4 o' }. @' C+ }! V  ^+ ~

1 U1 W1 a2 P! j) l%build+ b8 W! |; u* k- i
%configure) B! E, T# c) R1 H& f; i) ^
make %{?_smp_mflags}, c1 H/ m1 \( S9 s$ A; l- C& r
' A& G' ~* G( K/ D8 H, g6 }; Z
2 ]$ u. o8 Z5 W) O7 i% L: R
%install
4 R* l9 m  d- n! f0 ]2 hmake install DESTDIR=%{buildroot}
: F7 ]% N  n! x7 R9 ]) n9 u, z' G2 r5 V+ ]+ o3 C4 P1 n
0 y0 [) h* K5 W5 S
%files2 p8 M8 ]; z% h8 F$ D5 m
%doc
' d: W: l( B) C. z9 f$ R' a9 R% H; W% K

* a8 K4 D0 L. b$ A& P( B! B; ~  n
* \& d1 p5 k+ E$ r%changelog
# t4 I3 @% z6 a! i+ b+ S! b/ |& S, j6 d0 I, \

8 c8 @% b9 M: X: g* a! R: P4,生成rpm包" s( S% I: l& Z' m9 U% {/ Y

6 e! Y% V& _) |9 p# W9 a1 `rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec(显示编译过程)
- a. p! J; `  f6 w# m( y0 j' @0 ]
) ~$ A9 S! c! r& _/ f[root@ceph1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/ncurses.spec
8 V  M, k8 ]* g# ~....
# G6 O$ [5 s: S  A5 _( g5 N
3 p1 f; l5 L( s( C$ i: R6 t, `8 m# ?) s2 c$ V7 A" m
cd /root/rpmbuild/RPMS/x86_64/  && ls& ]5 w. D/ H( z& P& q/ @
yum localinstall  nginx-1.20.2-1.el7.x86_64.rpm(测试)0 u5 _* J; u3 n7 J+ @
id   nginx (用户是否存在)8 B- G- I  E  Z7 Z
nginx
5 O/ r- O' B$ r# T4 t( u8 p# G6 D" ~. \
7 f2 J3 l/ G( c3 Q4 M& N  U
5 M* G) r! _+ K+ D5 B

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 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 的信息,都是我们之前配置的内容。


/ {; i% r# l- q9 o9 A7 Z
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 02:00 , Processed in 0.017287 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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