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

使用tar包转换rpm安装包

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-9-22 09:58:32 | 显示全部楼层 |阅读模式
1,准备工作:* b$ F3 {! |& q0 {! T  ~
ncurses.tar.gz (有tar包之后,不要去编译安装,在spec里面编写)
; E" W9 l& t" \( U  E# L* }8 N8 I3 S' s+ a/ `* M3 Y  Y  N: F2 N
yum -y install rpm-build  (rpmbuild命令包)
/ y3 Q4 M" d6 C: x4 {
( e4 Z) f7 Q" X3 b) kyum install -y rpm-build - U* X, w7 ~3 s% z0 ?
Loaded plugins: ulninfo. o+ d! T) t7 z% `+ p" M' S. x
Resolving Dependencies
- N, ?* X% O/ O--> Running transaction check" b: A9 w/ p" h7 c, L7 w
---> Package rpm-build.x86_64 0:4.11.3-48.el7_9 will be installed
5 g0 P7 r$ _" m! Q# o......( Y$ C; m% {1 X
Dependency Updated:
, [( [. D( K' o1 b2 j* Z9 I& h$ m  elfutils-libelf.x86_64 0:0.176-5.el7         elfutils-libs.x86_64 0:0.176-5.el7             " ?3 `4 p5 B3 e
  rpm.x86_64 0:4.11.3-48.el7_9                 rpm-build-libs.x86_64 0:4.11.3-48.el7_9        - j+ c2 g' A' T
  rpm-libs.x86_64 0:4.11.3-48.el7_9            rpm-python.x86_64 0:4.11.3-48.el7_9            
, v+ o3 r- Y5 k2 [8 N! q3 {1 E- S4 r7 y4 K9 z& t
Complete!9 B1 E- s7 W( o5 ?4 ~5 g! S

' Z* N7 _+ ^# v9 \' o: l  ]# p( n! E7 X1 d. K3 D% ?9 H. b  W+ @

/ ?- o4 \) k0 p7 [- B) d% J1 n/ |( jyum -y install gcc pcre-devel openssl-devel  (安装依赖包): f+ f  M& B( P# Z- X; {' G4 p6 @

5 ]+ @) t4 x3 c4 S7 T[root@ceph1 src]# yum -y install gcc pcre-devel openssl-devel
1 B2 l1 t0 B/ d) z. O. Y1 M( L& fLoaded plugins: ulninfo" f* M# o) P5 T9 j9 Y
Package gcc-4.8.5-44.0.3.el7.x86_64 already installed and latest version+ d/ `) R9 c5 Z8 C' T, H9 j
Resolving Dependencies. c8 K1 h2 `  b/ |( @: `# S
--> Running transaction check% W  a0 H9 _! N/ L( y9 U3 c
---> Package openssl-devel.x86_64 1:1.0.2k-25.el7_9 will be installed
: N  l0 {: ?' K5 P+ ~9 {........
# E3 y% Y4 ~4 ?, h& {0 ?Dependencies Resolved
9 i& v, J% k+ _' L' R
  U( t& P9 l" ?9 k( b==============================================================================================
8 T6 n0 `" F& y) L" \ Package                    Arch          Version                     Repository         Size
) B1 i# r$ k% s==============================================================================================
7 d( V; R& K9 F+ U3 TInstalling:
+ S: j  Z8 q$ W( c% K9 y( P8 s- J8 W. ^; M
zlib                       x86_64        1.2.7-20.el7_9              ol7_latest         89 k
8 b" R- W( ]& f$ t9 z4 Z" O" @6 X) Y3 O. O# K$ I
Transaction Summary0 H/ D' h$ m9 p& W) z; n  m8 U5 ^
==============================================================================================- J4 [% x! c: f* x& c: H
Install  2 Packages (+ 8 Dependent packages)
) W6 g8 U+ Y! D( U+ r! Q8 F" qUpgrade             ( 11 Dependent packages)
4 J1 R3 Q* h! D9 P2 v; g5 h9 a$ I# [* z' I8 C2 ]2 T+ ~0 P5 I
Total size: 6.8 M8 W5 B  f( C5 Z/ D
Downloading packages:
( e+ a3 `" `+ a" P/ V2 E8 SRunning transaction check7 e% v4 M. K" `! Q/ D
Running transaction test3 |" t1 ?- U1 ~& C6 ^+ E# G& a! q
Transaction test succeeded' Y9 D( m+ C2 i8 l! u. j+ v
Running transaction
& B' z1 i/ W* q; z+ j  Updating   : libcom_err-1.42.9-19.0.1.el7.x86_64                                       1/32
2 E  X8 E: r. ?, e; N  Updating   : libselinux-2.5-15.el7.x86_64                                              2/32 / U7 l' a: E$ A- A5 B) R
  Updating   : zlib-1.2.7-20.el7_9.x86_64                                                3/32 ) l7 @. d) z" M% Q6 g: y* ]( K
  Updating   : 1:openssl-libs-1.0.2k-25.el7_9.x86_64                                     4/32 # f! Y' E% J0 z5 E! [, _/ S
  Updating   : krb5-libs-1.15.1-54.0.1.el7_9.x86_64                                      5/32 ) |. q' [& A+ x# M7 c
  Installing : libkadm5-1.15.1-54.0.1.el7_9.x86_64                                       6/32 . m5 a( X6 v2 Q7 w, N
  Installing : zlib-devel-1.2.7-20.el7_9.x86_64                                          7/32
" @5 k- i  R) Q5 d/ d  Updating   : libss-1.42.9-19.0.1.el7.x86_64                                            8/32 1 E9 U7 Y0 f# A" P7 `( v. t
  Cleanup    : krb5-libs-1.15.1-34.el7.x86_64                                           24/32
( }$ E+ j* y3 Q4 f4 ]  Cleanup    : 1:openssl-libs-1.0.2k-16.0.1.el7.x86_64                                  25/32 " [7 v( h' ^) \- f& \! p
  Cleanup    : e2fsprogs-libs-1.42.9-13.el7.x86_64                                      26/32
7 F/ H9 M' [% B- {) Q5 G; P, d  Cleanup    : libss-1.42.9-13.el7.x86_64                                               27/32
# L) q% q: r2 Z3 p, h4 o3 p  Cleanup    : libselinux-python-2.5-14.1.el7.x86_64                                    28/32
4 j4 Y4 p' n4 F( B  Cleanup    : libselinux-utils-2.5-14.1.el7.x86_64       / ?' N2 [; g( T
.......
: A. X% U' Z$ q  X5 FDependency Updated:
3 w1 }9 i$ D+ }0 Q1 r8 a  e2fsprogs.x86_64 0:1.42.9-19.0.1.el7         e2fsprogs-libs.x86_64 0:1.42.9-19.0.1.el7      
* z' Z# U, K+ z) P9 l$ p0 T+ R  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         
9 d( E: h+ _  L  z  libselinux.x86_64 0:2.5-15.el7               libselinux-python.x86_64 0:2.5-15.el7          , B* T& m1 P# @4 K5 y
  libselinux-utils.x86_64 0:2.5-15.el7         libss.x86_64 0:1.42.9-19.0.1.el7               . h" \* w: |/ G4 _5 w1 y: g$ F& z
  openssl.x86_64 1:1.0.2k-25.el7_9             openssl-libs.x86_64 1:1.0.2k-25.el7_9          1 |/ D6 I6 b) e
  zlib.x86_64 0:1.2.7-20.el7_9               
* k  _; z9 {, n, n* G3 l0 D6 o9 N# r) @+ l
Complete!
& Q3 f, V. }6 t9 `( {; H& U+ w: Q; r+ ^

( M% {8 @) r& Y9 P; N
8 d! ]5 x* S7 K2 b# C: a; h; T, l2,准备完成后,初始化rpmbuild目录:. g: }% Y" S& n1 j4 G) Q6 Y
[root@ceph1 src]# mkdir rpmbulid
/ `% ~  W/ B( W& r0 q6 M/ F: }3 Z  u& H8 C4 C
rpmbuild --ba   ncurses.spec (正常报错,但会生成/root/rpmbuild目录)
0 @* c- q" \( d2 U, h) n. i; j! H7 D6 A8 J9 ?
[root@ceph1 ~]# cp /usr/src/ncurses.tar.gz /root/rpmbuild/SOURCES/
! x- f$ a- e& i9 v
$ N" h2 e2 |9 J: [
: R9 _, R7 z8 S* y3 l& c3,编写spec文件(禁止有空行,不需要直接注释)
! u1 O: X1 y, w+ K* n
( @& v# t2 a- u: c3 Rvim /root/rpmbuild/SPECS/nginx.spec  #扩展名必须为spec
) u2 ^! V) @6 B1 r2 _  m' x* W! B#填写软件的基本信息
, _; K* x9 {. E- R2 ?Name:nginx     #源码包软件名称
3 S$ W$ Q2 R' U( }Version:1.20.2     #源码包软件的版本号- A( e. [5 @5 @) @; M
Release:        1%{?dist}   #制作的rpm包版本号: G9 @/ ?2 \# y" [3 J4 f' c
Summary:This is web server               #rpm软件的情况: j# }4 Y( z( [, i
#Group:              #组包 一般都注释$ i6 G, q2 r( o. W' @  C
License:GPL                    #软件的协议
7 u9 s- D& s; P0 gURL:www.nginx.com                       #网址4 d7 t/ ^- \7 C# o4 c
Source0:  nginx-1.20.2.tar.gz                       #源码包文件的全称
' E# p. O: V( F8 R  w8 m#BuildRequires: 因为nginx不需要依赖包,所以注释掉      #制作rpm时的依赖关系
% f* ]8 @$ m1 z$ f5 Y#Requires:                    #安装rpm时的依赖关系
* i5 y: j0 O3 }' D% Y7 I%description9 g) s& w7 D; D8 X
This is web server        #软件的描述
1 y  d% u2 M& ?3 D3 p% I) O& x7 _. V0 b4 q6 V9 R9 o' `
#源码的安装过程(源码转化为rpm的过程)0 Z. U" N& I, d- a3 J" D
%post        #安装后脚本
$ G! P) D% j/ D5 }: yuseradd  nginx -s /sbin/nolongin  #添加nginx用户2 `0 O$ K+ S' l! {- G% S
ln -s /usr/local/nginx/sbin/nginx  /usr/bin/nginx  #建立nginx软连接
3 T  ?* s& I" m  u0 Dln -s /usr/local/nginx/sbin/nginx  /usr/bin/nginx
4 \+ v1 w% h/ |* ]" w* a) q) o: r5 ~2 K. C- w( T
%prep   #准备工作6 B( D1 g1 q$ o" o1 |: T
%setup -q     #自动解开tar包,并cd进入目录) g: s8 R5 @9 w: U9 }
%build        #编译安装
/ c9 J+ i! d7 _$ V./configure --user=nginx
$ o8 R5 I& _% U7 e4 i5 u# }make %{?_smp_mflags}
  O5 p/ e- }; v" }%install6 w' M) a- q9 f3 i) j+ w
%make_install
9 x9 M- l$ `4 p) R% N% I+ ~%files. d9 [; V0 k7 R+ C- z
%doc     #需要打包的文件
: l, m; J; D& U/usr/local/nginx/*1 ^4 [7 s' m8 c3 X
%changelog& P4 D, b0 r1 ?- b

/ s9 ]# z4 m3 l8 F; A
& I7 g+ {& x1 P& W' h接下来我们测试ncurses+ \- z6 i  M- F/ N; ^
[root@ceph1 ~]# vim /root/rpmbuild/SPECS/ncurses.spec  g9 f, P5 i- t0 f1 e8 d
Name:ncurses               
  F% F# a9 Y. aVersion:5.9        ; q8 x% N  ^- C% N$ b" P9 Q
Release:        1%{?dist}* K2 n/ C! `. `. Z# I6 K1 W
Summary:mysql tools        & i9 p/ N' L; {5 [" i$ E1 u6 A# U. D

* v0 E  z4 v+ d. A( E  i# u+ n5 r#Group:                ' m7 x9 }1 j; d6 u8 f: {
License:GPL       
) q+ l4 e. ]3 p, u. G) M6 [URL:               
, @) r2 C; a0 T' b$ }Source0:ncurses.tar.gz       
  Z5 p* A) w: w' @7 C1 l8 H3 n2 z' |
BuildRequires:        ( E) z6 l0 F# L, z" s* g" P
Requires:        7 ]% Z  x0 P/ d: l
%post$ Q3 D; Q+ s- H* Z+ n: O
( U5 m" Q! }) l% }  W( D& ^2 ~3 r
%description' K" }9 p1 f0 d$ h( }( `* G/ T; q$ q
: {$ k* H" Y; E9 x

* k2 A! ~1 g5 P1 U%prep8 M0 I3 j- |$ h5 Q7 K+ ?
%setup -q1 F. }. k* L2 ]1 {3 @/ M4 }
6 m7 }1 N5 j, O) K
2 h5 A- x( p/ k2 v8 ^' r: T' s$ Y
%build
+ \* K0 z4 k! A9 J%configure
! s% \* v- \1 m1 \( f/ wmake %{?_smp_mflags}
0 U& O2 u6 L; u8 ]1 b+ H( e
7 P* |) ]5 y' |* @
' k1 d8 |2 B$ ~" u6 ^%install
6 Z6 w% E' C) B8 S2 i/ pmake install DESTDIR=%{buildroot}* I5 B5 X9 w) |) D

% L# |6 P4 K: _5 D3 X. o) i( q; L
%files
2 n2 k7 C/ O- c% I. j%doc
" Z: b$ O7 [) p: g
/ k$ X, F' h1 P
9 g; |" Q5 `3 p- O9 W( q
2 {* B- B6 w5 ~%changelog
; ~( b) E2 v2 p2 L  a; d, |2 R  S& }! k0 `8 Q

" j6 S& j6 x( q0 P5 a4,生成rpm包
/ R1 M6 J$ I' ~( `7 M; g! e4 ~: Z
! q! q- C! @& r6 Erpmbuild -ba /root/rpmbuild/SPECS/nginx.spec(显示编译过程)  k8 }" j$ u' x3 ~8 }8 l1 R: P7 n
* j4 S2 f  ?8 p% t4 q) K3 X
[root@ceph1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/ncurses.spec& [" k. R! j4 f+ H$ r& h# U0 G; _
....
. U4 a8 j& _8 ~7 j
2 y3 ^. A. L8 H; C
1 e- ]3 X% x3 m" }0 |& h) kcd /root/rpmbuild/RPMS/x86_64/  && ls6 Q3 T! m% |' A6 m. d7 {4 u9 h
yum localinstall  nginx-1.20.2-1.el7.x86_64.rpm(测试)
) m2 a0 q) d4 W3 G9 ^id   nginx (用户是否存在)1 }+ S% I5 h9 D" j
nginx
" M' u+ x9 Q6 d+ C1 o1 K5 B, R" G/ U9 m# k+ N) k! \* K  Z
1 ]3 c2 `0 ^7 @( F( q0 q- ~- d
* U" g% q; w" m& e( w$ {

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 的信息,都是我们之前配置的内容。


# g" F' F/ s( r  o
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 03:02 , Processed in 0.016322 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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