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

使用tar包转换rpm安装包

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2022-9-22 09:58:32 | 显示全部楼层 |阅读模式
1,准备工作:
) Y/ f. u9 A0 R! ~) H6 [3 Uncurses.tar.gz (有tar包之后,不要去编译安装,在spec里面编写)
: a, `6 W8 x- m! u4 l, n& O/ t1 q, ~( I) b8 K8 M$ V
yum -y install rpm-build  (rpmbuild命令包)( s  V3 }0 m4 H
7 L+ M' i& W- S. l% u7 _% k% ]
yum install -y rpm-build ' @! F6 k' z( {' d8 x
Loaded plugins: ulninfo
0 N( C) h7 R0 F4 C% xResolving Dependencies
" Y( ^* D% c* @! {  j/ p--> Running transaction check9 H4 a4 _- ]1 h1 b- m
---> Package rpm-build.x86_64 0:4.11.3-48.el7_9 will be installed
1 `( c1 V* j# {9 u& k......
, E/ {8 m6 Z4 u% g: k  D- gDependency Updated:9 B: m4 l" D$ q) C" g: G
  elfutils-libelf.x86_64 0:0.176-5.el7         elfutils-libs.x86_64 0:0.176-5.el7             $ e: y% B/ G  ~, f, d
  rpm.x86_64 0:4.11.3-48.el7_9                 rpm-build-libs.x86_64 0:4.11.3-48.el7_9        ( n) t& @1 n8 f0 V+ q
  rpm-libs.x86_64 0:4.11.3-48.el7_9            rpm-python.x86_64 0:4.11.3-48.el7_9            
. u/ m- H0 O/ L0 F* a0 X5 b; a- n8 z" p* w4 t
Complete!7 ~' k; U2 O& M" R$ [( l: }

! S. M' }7 h5 {" X$ F
! i% _0 F8 r2 A; ?3 E& W8 e* K# V- @  ^! U9 Z
yum -y install gcc pcre-devel openssl-devel  (安装依赖包)
# Q( o7 q0 \, V) g$ h0 d% s* F7 W$ Z. M8 z% t* I. U: b; w
[root@ceph1 src]# yum -y install gcc pcre-devel openssl-devel
6 P5 `7 }5 [4 i- B2 \( [4 HLoaded plugins: ulninfo) W. x# J$ Z$ R
Package gcc-4.8.5-44.0.3.el7.x86_64 already installed and latest version- S8 G, S, e  [* ]* A* B
Resolving Dependencies
$ S- @; P: S2 Z5 R4 ], W. w: M--> Running transaction check
+ q  H) G  P" f8 U( [3 T. j---> Package openssl-devel.x86_64 1:1.0.2k-25.el7_9 will be installed
& x; Q- @0 u3 J9 _5 A........
- y4 U% l( e' P& TDependencies Resolved
" v# `3 \* c3 W7 b" o2 J% U2 J
8 `' w9 i+ {. k: _8 q( l==============================================================================================
0 M& k. k% }6 a9 g9 ~0 L4 } Package                    Arch          Version                     Repository         Size
2 m0 @) k+ @, |/ r; Q# A; K==============================================================================================
6 Q1 L. Y+ f4 W" kInstalling:9 j7 }# I* q5 P* g
! \+ q5 B* K4 U) t" o) v$ D
zlib                       x86_64        1.2.7-20.el7_9              ol7_latest         89 k
) y+ E$ E2 X, `* k0 Q, f
' \* O9 `+ t$ Q, I  R# fTransaction Summary5 k7 T5 a" ]  t" r$ N
==============================================================================================
; F5 s7 J7 L% l/ Z2 T8 U- NInstall  2 Packages (+ 8 Dependent packages)
2 r1 ~7 |/ \+ f" {3 zUpgrade             ( 11 Dependent packages)
( ~) o3 c7 o: h2 u- l5 c) f
4 _. h, ]+ Q8 C* g  ^; YTotal size: 6.8 M
" r5 g( c/ R! {/ rDownloading packages:
+ v* D: T& `( ]# z: x5 qRunning transaction check7 v9 I3 z8 `9 S; Y% O  L
Running transaction test4 Q* |" a" w" G7 R- B$ p
Transaction test succeeded
* o! N% {/ y7 I9 I% ]9 U$ yRunning transaction
( m' n- i9 A9 x3 I7 V8 l' c$ w  Updating   : libcom_err-1.42.9-19.0.1.el7.x86_64                                       1/32
1 }' c7 b  _- r, ~' Y* ?' r; i  _, q  Updating   : libselinux-2.5-15.el7.x86_64                                              2/32 ( c; V2 W& C5 n3 ]
  Updating   : zlib-1.2.7-20.el7_9.x86_64                                                3/32
0 Z0 r9 C: ]+ b$ o" }% `  Updating   : 1:openssl-libs-1.0.2k-25.el7_9.x86_64                                     4/32 4 Z4 S, |: c6 z$ n% ~1 s
  Updating   : krb5-libs-1.15.1-54.0.1.el7_9.x86_64                                      5/32 , N+ V* b5 U" }6 J8 s
  Installing : libkadm5-1.15.1-54.0.1.el7_9.x86_64                                       6/32
/ R4 x+ ]4 [) ~+ n6 T! [2 S6 Q  Installing : zlib-devel-1.2.7-20.el7_9.x86_64                                          7/32 / Q7 Z9 c3 R. K6 @3 L
  Updating   : libss-1.42.9-19.0.1.el7.x86_64                                            8/32
. j: d! g; R# g1 I  Cleanup    : krb5-libs-1.15.1-34.el7.x86_64                                           24/32
$ U6 \7 ]1 H0 w  Cleanup    : 1:openssl-libs-1.0.2k-16.0.1.el7.x86_64                                  25/32
+ f3 y% _+ [# M  Cleanup    : e2fsprogs-libs-1.42.9-13.el7.x86_64                                      26/32 , f; \3 Z  U* M" z# C
  Cleanup    : libss-1.42.9-13.el7.x86_64                                               27/32
0 t4 G9 u6 X$ e( Z3 s6 C  Cleanup    : libselinux-python-2.5-14.1.el7.x86_64                                    28/32
( v! D. B" S5 Z7 @# J+ l  Cleanup    : libselinux-utils-2.5-14.1.el7.x86_64      
' j% b5 Z7 i# S7 t% b4 Z- m.......
6 N+ G& W- R3 \: }4 p; T: F7 qDependency Updated:: j" ?1 g  F% _# M- H
  e2fsprogs.x86_64 0:1.42.9-19.0.1.el7         e2fsprogs-libs.x86_64 0:1.42.9-19.0.1.el7      0 o. J# T8 R3 a! J: a, b
  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 o( m; a( x0 C' M( [3 Z
  libselinux.x86_64 0:2.5-15.el7               libselinux-python.x86_64 0:2.5-15.el7          3 S8 v. _; C5 V6 V
  libselinux-utils.x86_64 0:2.5-15.el7         libss.x86_64 0:1.42.9-19.0.1.el7               $ }# Y, C, W! j8 O
  openssl.x86_64 1:1.0.2k-25.el7_9             openssl-libs.x86_64 1:1.0.2k-25.el7_9          5 Q9 N/ n' G/ u2 i" |* y# ^
  zlib.x86_64 0:1.2.7-20.el7_9                2 h& H+ y: @+ v4 ]3 J* {
6 ^; Q  R/ x$ G
Complete!
! P0 \7 K7 }( G" M9 a3 }9 `; p) o2 Z

. K$ ~: v5 _. W, `$ k  h/ X' W
" S; g7 k& ^& Q' m3 |) ^' I" m2,准备完成后,初始化rpmbuild目录:' l& q& _2 \3 W5 f1 w, I& [
[root@ceph1 src]# mkdir rpmbulid1 `4 f8 Z3 O$ S  O0 Q7 C
+ ~' ]  [8 H: k( X6 {6 K  Q# S% \3 R
rpmbuild --ba   ncurses.spec (正常报错,但会生成/root/rpmbuild目录)3 F. t4 B& T! t" Y7 @. y

: ~0 h6 Z8 Q2 w: E[root@ceph1 ~]# cp /usr/src/ncurses.tar.gz /root/rpmbuild/SOURCES// s! Y8 w" M9 I9 Y  m
  Q3 }0 f3 I0 `2 i' k1 R/ L
# C+ M+ F; R. |- p6 M
3,编写spec文件(禁止有空行,不需要直接注释)( O2 P, M/ }) d5 b. `
+ q  c9 C5 h6 j# Y
vim /root/rpmbuild/SPECS/nginx.spec  #扩展名必须为spec2 I9 H0 @0 F. S9 N2 J( a* i
#填写软件的基本信息
+ ]) I* m+ }( P  Z+ {Name:nginx     #源码包软件名称
$ M8 c: L$ k+ h  o( c0 P3 HVersion:1.20.2     #源码包软件的版本号. v! _  m1 m! M4 }: ?' n
Release:        1%{?dist}   #制作的rpm包版本号
7 m( R( W5 w/ m1 ^Summary:This is web server               #rpm软件的情况' @6 o  }0 r* @% h& Y! b0 r
#Group:              #组包 一般都注释7 U" I7 F0 n3 L5 D# q* r
License:GPL                    #软件的协议& W4 u) x3 n8 H0 v8 ]
URL:www.nginx.com                       #网址" p5 Z) a! V' F7 ~2 ~
Source0:  nginx-1.20.2.tar.gz                       #源码包文件的全称
8 z! `" w8 {* y) M. L#BuildRequires: 因为nginx不需要依赖包,所以注释掉      #制作rpm时的依赖关系. g) D4 g' |- P- S
#Requires:                    #安装rpm时的依赖关系% l. ]$ Q( I9 G/ X; I
%description
4 x7 l  p0 {0 a' BThis is web server        #软件的描述
9 ^+ d& w# m& E6 f
& D* |6 ?7 {: h) M#源码的安装过程(源码转化为rpm的过程)
. u1 u6 ?6 E; p2 b' }2 F%post        #安装后脚本# b* ~" f' T& r' h0 w) k) U' @/ V3 {
useradd  nginx -s /sbin/nolongin  #添加nginx用户* z3 ^+ G* B! l6 _& p
ln -s /usr/local/nginx/sbin/nginx  /usr/bin/nginx  #建立nginx软连接* O: S# s" Y( X, Z; F! `0 }
ln -s /usr/local/nginx/sbin/nginx  /usr/bin/nginx , c0 h: f# h. y6 Y; y1 V& @

/ m+ T; d6 r* U; J%prep   #准备工作
, V' W# V- {: Q) W6 K%setup -q     #自动解开tar包,并cd进入目录. |7 t5 i' A, M( q0 p5 P7 [% J
%build        #编译安装0 O  Y' g. [2 \8 I! x0 x5 h
./configure --user=nginx
) q2 r6 \1 A" Hmake %{?_smp_mflags}5 N" t  K8 N% Q2 j' R
%install
* q0 d/ ?% B& G+ |+ l- }# V0 u. [%make_install
: q$ r- S0 Q  v& `! M%files& {9 S* K1 e# [3 J
%doc     #需要打包的文件+ B/ o: U$ z1 z( T, L
/usr/local/nginx/*- I. ~* K3 R( j; l' [1 x; h- c
%changelog% Y0 H+ s; r/ ^) s
+ s$ w% T. K1 v5 P/ h5 A" V

) }2 ]+ B$ S  x7 U! @接下来我们测试ncurses
  }* z2 u: L9 g: J- [3 A" U- r[root@ceph1 ~]# vim /root/rpmbuild/SPECS/ncurses.spec. `( g" P3 ~$ w" k5 l, }! Q
Name:ncurses                1 F5 G8 |$ y. K$ {5 o- E
Version:5.9       
, p) `  Z) h# _Release:        1%{?dist}
) k* _4 c) a6 A- a7 aSummary:mysql tools        , n5 Q7 F  S) t/ p+ `
2 l1 u; T1 S2 a+ C. g! w8 C& u6 w
#Group:                % [# n  x/ m5 q
License:GPL        % {9 u  x* V3 \1 [% v- C
URL:               
/ @4 _5 u. x# j* A5 j6 W8 wSource0:ncurses.tar.gz        0 C. W, F, r5 c8 ^' J4 Z$ T0 R# d3 \

2 ^1 a* D7 `4 A5 X8 L) a; JBuildRequires:       
* `9 G2 Y: C: z& O! X7 [  l; sRequires:       
, Q+ M  `- M3 A%post
& c0 s; }  a, {% \# p/ c& }5 q- C4 a+ r
%description
1 a" O5 O) m; g5 P8 d) m& v9 F" V! b- E  c9 |6 z4 {

8 K5 O# `: o# Z/ D+ L$ L. |; E%prep+ Y4 v2 T! T$ ^& z9 A1 @
%setup -q) j. h8 q; X8 g+ A
" r1 A- Z! v7 s  ~  C" V4 [
& Q% w9 @, j5 p( z2 u
%build
3 {& Y0 z! L/ L9 _%configure% }' j+ n, \. w; r! ~1 U
make %{?_smp_mflags}+ \. \* z, s; Q; \* Z& q

6 D. }- }9 I% J' Q2 p( x6 I! F: \
  l4 Z/ H! x' K3 s* t%install$ Y* a' l$ \  d
make install DESTDIR=%{buildroot}
) H' x* U; E5 ?# j) G& h0 g5 `- Q: R7 j8 ]; U
  H0 ~; l+ n) q2 s, N, h* @' d
%files; V5 ?2 S1 o" n/ K
%doc* y+ ^# B0 f7 G

% d. Q, A/ k8 U  d. y+ d; W9 H: L% V, v% a. V- F
% Q' p$ [/ I2 z/ x
%changelog& g" {" g9 @' Y6 G, U4 t3 z

5 S  A, d# b3 {( F1 a1 E
0 r8 O  z/ y/ T: P4,生成rpm包& T. C3 n8 A' y0 Q5 P- s- J5 i

( o2 |+ K8 S7 w, srpmbuild -ba /root/rpmbuild/SPECS/nginx.spec(显示编译过程)
7 [  Q" ^; d1 X' x  [) D1 i. F
' ^, O: S( T0 k. b! g; `[root@ceph1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/ncurses.spec# N9 {7 e/ q; K# S9 z
....5 f6 B& v1 H% _: |9 \6 L

( |5 |. S# `& f& P% }2 O8 }7 Y+ V8 B8 ~* D( Z
cd /root/rpmbuild/RPMS/x86_64/  && ls
8 a1 x) [% x# Qyum localinstall  nginx-1.20.2-1.el7.x86_64.rpm(测试)
" T4 E0 }. t4 X: y) c6 _3 y: Bid   nginx (用户是否存在). n# P$ X! F4 Z+ q. p: e. I; Z; Z
nginx
( w3 L: X6 U$ I! k2 T8 a* C/ K" m! _+ {2 L* h: }- J# S+ @: |5 A
0 S& T4 ^- ]$ Z) H. w/ n
5 ^6 b! Q4 w3 H7 ]5 T: a7 G' g

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


- V  `9 a$ [, A) F
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2026-6-12 04:09 , Processed in 0.021866 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

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