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

使用tar包转换rpm安装包

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-9-22 09:58:32 | 显示全部楼层 |阅读模式
1,准备工作:" B3 k9 m0 ]& g4 ^* Y% }3 R
ncurses.tar.gz (有tar包之后,不要去编译安装,在spec里面编写)( {  Q4 u) l+ [9 _; _; l

1 @8 R1 x# `/ z$ E7 e% hyum -y install rpm-build  (rpmbuild命令包)
/ @) D# K* y' k+ F
* t" W2 h& C+ w" xyum install -y rpm-build
6 A8 o6 p: |7 Z2 X3 H# eLoaded plugins: ulninfo
! J, Q2 f) S5 h2 o9 eResolving Dependencies
0 d3 e! B+ v) h: i--> Running transaction check
/ j: |" ~/ Z8 B& Q( w. w---> Package rpm-build.x86_64 0:4.11.3-48.el7_9 will be installed2 h& Q* j# {. S; C" Z
......
1 w, x. p# S4 r5 y3 D2 z' SDependency Updated:/ S3 h9 z. P& e, k+ \5 Y
  elfutils-libelf.x86_64 0:0.176-5.el7         elfutils-libs.x86_64 0:0.176-5.el7             - z, \" F3 A" V; z  r# V6 P0 ~
  rpm.x86_64 0:4.11.3-48.el7_9                 rpm-build-libs.x86_64 0:4.11.3-48.el7_9        # x9 X$ I4 f, I$ c6 M
  rpm-libs.x86_64 0:4.11.3-48.el7_9            rpm-python.x86_64 0:4.11.3-48.el7_9            
. U, `+ r) M8 _, M: ^  C3 T0 e5 e0 e. R3 F6 q1 e
Complete!: Z, j0 E) m6 f0 N
5 w6 ?2 _. Y. @7 Q1 P0 h
8 H( u9 u& P0 M5 `4 }8 R

, Q% I$ p) c( n7 Pyum -y install gcc pcre-devel openssl-devel  (安装依赖包)
- E5 W: ?3 Q' H9 m+ i/ S8 V2 ]' n
; M/ \, X0 t6 ^9 \: J; x[root@ceph1 src]# yum -y install gcc pcre-devel openssl-devel 1 F0 Z9 B4 [. J/ C: ?1 V
Loaded plugins: ulninfo5 L8 H/ F; Q1 @0 Z
Package gcc-4.8.5-44.0.3.el7.x86_64 already installed and latest version
$ ]+ I6 }9 i/ T5 ?5 a3 iResolving Dependencies* _, }, C8 U% n5 g* B9 V
--> Running transaction check* E) y- a+ v8 D0 k" K
---> Package openssl-devel.x86_64 1:1.0.2k-25.el7_9 will be installed
8 r+ ?) |# n4 j2 z: u/ I6 }4 ]" R........
* g5 y" {* a5 UDependencies Resolved
6 r# L8 \- N4 Z/ i0 o$ a; Z4 j4 I3 i6 _2 R' P" @- F$ y, Y
==============================================================================================4 x# t% t2 D! A5 T7 n( P' s
Package                    Arch          Version                     Repository         Size2 q! J# a3 {' C: h7 L! a5 b
==============================================================================================
" D$ P* c  [' M# F4 G8 L  _Installing:( S& Q% b# m- G1 ~  g+ `

: R' r% S4 t/ S0 ^ zlib                       x86_64        1.2.7-20.el7_9              ol7_latest         89 k
( R, c! C6 Q' o1 M  a  g1 @6 Z5 X) Y1 W- C( v6 P  Z+ ?; M
Transaction Summary
+ v: V  _4 @. y% B. T9 D* i==============================================================================================
0 e4 H& _  \' ]8 o/ D; SInstall  2 Packages (+ 8 Dependent packages)% \5 x3 l" ~$ }, C2 p5 J3 e2 v
Upgrade             ( 11 Dependent packages)  y8 ?5 ^+ T& \4 W7 u$ K- U
. C8 S* S6 D9 g4 Y* j; q# r" G1 R
Total size: 6.8 M6 ^6 w% q( F7 s& c
Downloading packages:
6 \/ f; G6 R0 v& r/ ]! _Running transaction check! @. S7 s9 a$ f9 N3 V
Running transaction test) y+ P' V7 v5 {1 g% d  Q
Transaction test succeeded
+ Z! A0 Y1 G! Y* J+ i/ TRunning transaction
" u. q( b% L; y' W! h2 i7 @  Updating   : libcom_err-1.42.9-19.0.1.el7.x86_64                                       1/32 $ B  e4 K  b5 ~
  Updating   : libselinux-2.5-15.el7.x86_64                                              2/32 4 }; E  N: v) Z2 b1 |6 {. {, S
  Updating   : zlib-1.2.7-20.el7_9.x86_64                                                3/32 ! i6 |- L( o0 j0 V
  Updating   : 1:openssl-libs-1.0.2k-25.el7_9.x86_64                                     4/32
5 v4 @9 |/ p# _0 A0 ^1 t+ ?  Updating   : krb5-libs-1.15.1-54.0.1.el7_9.x86_64                                      5/32
( U4 o7 |6 n" O* ~$ x  Installing : libkadm5-1.15.1-54.0.1.el7_9.x86_64                                       6/32
! C5 p* n7 d8 E3 E! @( y  Installing : zlib-devel-1.2.7-20.el7_9.x86_64                                          7/32
0 W5 G! I" T% I  }8 M. J  f. I  Updating   : libss-1.42.9-19.0.1.el7.x86_64                                            8/32
: c* o+ V' l/ g) S  Cleanup    : krb5-libs-1.15.1-34.el7.x86_64                                           24/32   J) \5 ~" Z4 u- d4 d3 w
  Cleanup    : 1:openssl-libs-1.0.2k-16.0.1.el7.x86_64                                  25/32   t4 \+ b6 D6 U7 Y# _8 ]
  Cleanup    : e2fsprogs-libs-1.42.9-13.el7.x86_64                                      26/32 * _; t5 A$ j4 _
  Cleanup    : libss-1.42.9-13.el7.x86_64                                               27/32
6 p: y0 P' W' T( s. d- d9 Q; l  Cleanup    : libselinux-python-2.5-14.1.el7.x86_64                                    28/32
9 M) X  }' p! P& B4 h2 Y9 D  Cleanup    : libselinux-utils-2.5-14.1.el7.x86_64       1 I! p7 \+ r. ]
.......
  }1 v0 K) Y! CDependency Updated:
2 \% E0 L9 }, q9 P3 P  e2fsprogs.x86_64 0:1.42.9-19.0.1.el7         e2fsprogs-libs.x86_64 0:1.42.9-19.0.1.el7      
7 {0 D1 f; g7 E, `; t  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          ' J+ X+ Y4 [' V3 t4 b  n
  libselinux.x86_64 0:2.5-15.el7               libselinux-python.x86_64 0:2.5-15.el7          6 J6 Y2 R. y1 f5 w$ c
  libselinux-utils.x86_64 0:2.5-15.el7         libss.x86_64 0:1.42.9-19.0.1.el7               - Z4 e5 G) n% p/ P8 |1 f) g
  openssl.x86_64 1:1.0.2k-25.el7_9             openssl-libs.x86_64 1:1.0.2k-25.el7_9         
; x& X* B2 D$ F4 Q( U  zlib.x86_64 0:1.2.7-20.el7_9                ; |# i" `% l( X1 U/ y! [
2 F% J! E6 ~$ Z( N6 N3 x  L
Complete!" q2 V, S) f7 D; v6 O

* P1 a" D: ~4 \0 f- b/ F
) G+ h$ f+ C' s: `! z- X  c2 [6 Y& S% p0 L/ a
2,准备完成后,初始化rpmbuild目录:. w8 r4 H6 d) p
[root@ceph1 src]# mkdir rpmbulid
; e* i6 T: b# L; \. U
3 J9 i3 A# n  R+ R4 ]  o; Jrpmbuild --ba   ncurses.spec (正常报错,但会生成/root/rpmbuild目录)
- i; [% M$ g% W9 ], _8 b
$ n2 U9 q. [0 i7 ~6 g  }! @8 I1 x9 ~[root@ceph1 ~]# cp /usr/src/ncurses.tar.gz /root/rpmbuild/SOURCES/5 b, p2 r( x" P5 L

) P3 R' T' j" D/ b
+ _6 H# X7 z5 i1 C* x3,编写spec文件(禁止有空行,不需要直接注释)
: c$ a! Q5 ?, c# ~: l1 G! z$ w! i. O& Q' o3 Z5 ]
vim /root/rpmbuild/SPECS/nginx.spec  #扩展名必须为spec; N' v8 M+ M4 _
#填写软件的基本信息1 P  ]8 H$ d- Y! ~; r6 u
Name:nginx     #源码包软件名称* S8 D& A! p% N* I
Version:1.20.2     #源码包软件的版本号8 ~2 J* P& j! G' M( Q. N5 S
Release:        1%{?dist}   #制作的rpm包版本号9 V. W0 P* g( y1 h3 C8 t" y; g+ E
Summary:This is web server               #rpm软件的情况
0 C5 ~$ h% {6 b& ^5 C5 `#Group:              #组包 一般都注释- _0 a4 v  P. U0 U7 N
License:GPL                    #软件的协议7 [- q5 g, c: C, C. o
URL:www.nginx.com                       #网址
8 x5 g& T/ w% H) y' x! xSource0:  nginx-1.20.2.tar.gz                       #源码包文件的全称8 M/ Y8 @4 T9 J' j  m
#BuildRequires: 因为nginx不需要依赖包,所以注释掉      #制作rpm时的依赖关系
3 C/ B7 L0 _7 i* M3 ]0 T) f0 P# [#Requires:                    #安装rpm时的依赖关系
$ C7 A- w5 b2 J%description2 w* _8 x4 b; u& N; ?$ L3 L
This is web server        #软件的描述( D5 J8 f" ?/ V& z. m* F3 J

) X) B# X. o- K6 F#源码的安装过程(源码转化为rpm的过程)
% d9 {  D6 r& N: H2 u3 c%post        #安装后脚本
2 [" _3 R4 p9 t( e( z- `useradd  nginx -s /sbin/nolongin  #添加nginx用户
3 A2 a( w$ c" C" p! t" Nln -s /usr/local/nginx/sbin/nginx  /usr/bin/nginx  #建立nginx软连接- B9 C4 @. E0 [1 K6 s
ln -s /usr/local/nginx/sbin/nginx  /usr/bin/nginx
) M* W4 E9 \9 z3 e5 `$ X& X- |- Z% |7 \( Q. G6 X  u
%prep   #准备工作
) Y% t/ m! c$ ^* T7 f/ t) [" N%setup -q     #自动解开tar包,并cd进入目录5 W2 v& c6 `7 N. }3 A* @% V
%build        #编译安装. Q- v3 y4 i3 p& u
./configure --user=nginx/ Y, r) z0 N, S
make %{?_smp_mflags}% S. }/ M# l7 o6 j
%install5 |0 Y) m! @! w6 p! f$ O2 O. A
%make_install
2 t5 c$ \+ p- u%files
' L- b7 ~; i' `5 q3 E%doc     #需要打包的文件
! W( Y9 {% N: o8 E1 P/ }/usr/local/nginx/** N  U7 B. H" k, ]7 ~" [1 c, R8 h
%changelog
9 Y5 @' h3 i- T# \4 v" T! B1 D) D) C0 ?5 Y+ u9 M- ^
3 ?+ I/ k2 d1 I1 s; c% x
接下来我们测试ncurses, ]: X( e: c& U; I  D' h7 h8 y
[root@ceph1 ~]# vim /root/rpmbuild/SPECS/ncurses.spec
- n* s0 g. }0 t$ U0 s8 cName:ncurses               
3 D9 u8 @! k2 i& W6 m2 vVersion:5.9        2 ?+ Y5 e3 }2 h, a) k, a& h3 m
Release:        1%{?dist}
3 A3 E  b$ j# M) _3 Y6 vSummary:mysql tools        . J" L+ r4 Q3 S7 `3 N* i0 ^
: }# |* T+ p' s3 V! K% g. n2 i7 k
#Group:                " g- n2 Z8 e- k% v9 E
License:GPL       
! ?) {  y. Y+ O* Q! [; h0 LURL:               
2 _: [8 Q: S+ T2 G2 gSource0:ncurses.tar.gz       
3 r4 ~, ~9 l' Q: J
! B" a- C% f7 Y3 {' MBuildRequires:        / b' M8 }0 R; p. ?
Requires:       
" t, h+ I; H! N0 r: v%post6 E3 C2 [+ i4 x4 P+ c% ]* X

, N! R1 C9 Y# g& Z5 K%description
" \& k% l" W" h6 D$ ?. B$ A6 s2 k/ J8 y2 p! \
. L1 L7 @; d( d5 ^
%prep
% I+ q' V; k: l! K( ~%setup -q
8 h- t0 [' ?. q: H- s; M0 r* V$ x& [5 [. H' [+ m( {

5 A. v8 ^8 [- O- ]' V3 L4 R! z. l) @%build
" Z* Z' p7 F( R5 T& e. }2 W5 c%configure" {* g* Z* M% |/ L, K( B3 M
make %{?_smp_mflags}2 `& t3 L2 C3 P- `1 H: ]4 ]! ^. w
6 K, G. o# |! A3 w
# P1 C4 N% p( [+ b
%install: Q' ]1 R, b% V
make install DESTDIR=%{buildroot}! \: J4 n1 z4 Y2 ~" ?) a  j

2 B7 ~9 g' G% h+ j& s2 `1 i; e2 A4 \2 r8 B0 C+ u! v
%files
) n3 Z7 D. a" U%doc
0 n0 V& p" R& D2 p/ v8 F4 M
/ G( x) r4 s. C+ n4 a
$ K& O  h+ W$ Q6 w/ j( ?
: Y0 ?1 b7 m9 p' ^, Y/ n" S5 k5 K+ `%changelog
! }+ p& I; W$ H) \3 d: x7 D: j& X, N- `+ f5 o9 ?: @8 Y
  R# v8 m, q& `0 O( F
4,生成rpm包. _0 C& d! O; n/ {7 ^+ F
% s: Q5 b& n) q/ T8 B+ M5 S6 x0 p
rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec(显示编译过程)) t  j6 z/ B0 C: m
4 X8 _# s( g3 e1 G8 I6 @; S* C  S
[root@ceph1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/ncurses.spec
. N( ~" q6 y1 Z1 ?( @....4 C: O; z: t0 E5 u% U( f

2 r0 C$ f' X  _/ o/ G5 i' O9 [# ]6 g
" |* c+ L9 x3 i4 Z( Ecd /root/rpmbuild/RPMS/x86_64/  && ls# n: V. N5 V. I+ m. I
yum localinstall  nginx-1.20.2-1.el7.x86_64.rpm(测试)' P9 h  D$ A( n, k
id   nginx (用户是否存在)
0 ]4 `  h2 ^. Z" S5 Tnginx: _3 Q0 S5 U$ Z

' r2 r4 N0 W2 u
2 P+ M- A7 u5 ^2 l1 v" L# K0 Y* }: G; i' [- N0 J( Y* u

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


' f+ v1 p2 q: l
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 01:56 , Processed in 0.027788 second(s), 22 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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