将设为首页浏览此站
开启辅助访问 天气与日历 收藏本站联系我们切换到窄版

易陆发现论坛

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

使用tar包转换rpm安装包

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

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

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

x
1,准备工作:/ L# Q4 k0 o$ p* ]- n: T$ h  @
ncurses.tar.gz (有tar包之后,不要去编译安装,在spec里面编写)' ?5 m/ q# J' c) ]' P
" t& R- ?* q9 ]' M5 x7 k
yum -y install rpm-build  (rpmbuild命令包)0 `: H9 q# c: H8 ~, G; w, \: A

- R0 Q+ H+ l4 w0 D5 D/ i# ], Eyum install -y rpm-build : A  f- n  x. ?- f% R
Loaded plugins: ulninfo6 L0 b+ x3 K' n5 h% P
Resolving Dependencies- b( {( ~; R# U/ D; Z& a
--> Running transaction check' i& z) P' Y7 K
---> Package rpm-build.x86_64 0:4.11.3-48.el7_9 will be installed
# S% j( R2 S' I4 c& x5 D% k- c8 D& Q......1 f+ s4 j4 b- M% E
Dependency Updated:5 |7 d$ x: l3 A# q
  elfutils-libelf.x86_64 0:0.176-5.el7         elfutils-libs.x86_64 0:0.176-5.el7            
  A4 w  @3 H/ v1 S# Y$ Z  rpm.x86_64 0:4.11.3-48.el7_9                 rpm-build-libs.x86_64 0:4.11.3-48.el7_9        
: _0 ]; t9 K5 t. }  rpm-libs.x86_64 0:4.11.3-48.el7_9            rpm-python.x86_64 0:4.11.3-48.el7_9            8 W1 J0 I& W/ g' ?; u7 u" a  U
9 E4 ?' l& ~4 u) l, i
Complete!
5 z; \( m' D3 e4 P3 n' ~2 n& Z% e* O* B4 N( f

. \+ J& e( z  @# w/ D2 X% l7 C! l* \, h5 r9 \* \
yum -y install gcc pcre-devel openssl-devel  (安装依赖包)) r) {1 R3 {4 G3 t

6 o8 @& P6 u, L- r: ~" `[root@ceph1 src]# yum -y install gcc pcre-devel openssl-devel # E# w; l: ^) S1 x$ S( [
Loaded plugins: ulninfo
6 ?/ m5 M' ]& S) N% x+ {Package gcc-4.8.5-44.0.3.el7.x86_64 already installed and latest version4 p5 {6 F* ~% ?) d* W" }* \" \
Resolving Dependencies
! G# ]4 V% d" M  e) g2 z--> Running transaction check- ^5 c. m, e1 R
---> Package openssl-devel.x86_64 1:1.0.2k-25.el7_9 will be installed$ E  S9 P) N* I# k6 V0 l% F
........
! _  g' V# w0 `) c: H' R6 FDependencies Resolved
8 j+ k+ p, z# C& _& k) b& W2 y! F3 C
==============================================================================================
. M& [  ^$ E# m# A/ `/ _ Package                    Arch          Version                     Repository         Size
8 f5 Y1 s7 I! Z) k5 Q* J! t==============================================================================================" ?1 f7 _- x3 x( d/ W* \8 q1 L
Installing:8 v/ N- ^9 ~- O! o, Y6 Z, a! {

& g1 B6 z- w' J$ u# z/ ~2 i zlib                       x86_64        1.2.7-20.el7_9              ol7_latest         89 k
4 E, ~* t, `, L5 Y
9 h) A8 @& K. h- HTransaction Summary
  |, L: y- a6 _5 Z' G==============================================================================================
- ^$ B6 _. S3 y2 T' ~% N3 DInstall  2 Packages (+ 8 Dependent packages)
2 O. R; n6 B! d. q: s! n3 KUpgrade             ( 11 Dependent packages)
$ x! B- X$ b. ^" }0 s- e4 _, E2 J5 n
Total size: 6.8 M
2 ^- m+ K( K6 {' v* KDownloading packages:  g! r7 j# T9 A, O% v9 q0 \! c  N" w
Running transaction check
( T, A, B  Y  V. S# f( ~Running transaction test, b1 [+ O2 x6 w0 i  D0 a4 O
Transaction test succeeded
, V! p# O6 c- N1 TRunning transaction& B8 i) B8 ~- y9 b* b$ g
  Updating   : libcom_err-1.42.9-19.0.1.el7.x86_64                                       1/32 . [4 r1 ~0 |5 ~! Q! @7 j! E
  Updating   : libselinux-2.5-15.el7.x86_64                                              2/32 $ O3 G" _4 m8 y% V, Q
  Updating   : zlib-1.2.7-20.el7_9.x86_64                                                3/32 ! N% ]  p% G: I0 |
  Updating   : 1:openssl-libs-1.0.2k-25.el7_9.x86_64                                     4/32 , x! u1 \7 N- P* S
  Updating   : krb5-libs-1.15.1-54.0.1.el7_9.x86_64                                      5/32 9 p7 b/ C6 J; q8 w
  Installing : libkadm5-1.15.1-54.0.1.el7_9.x86_64                                       6/32
1 H" `) W& I/ L  I: C$ P+ c  Installing : zlib-devel-1.2.7-20.el7_9.x86_64                                          7/32 # Q, n. C; l) S7 @) b* e
  Updating   : libss-1.42.9-19.0.1.el7.x86_64                                            8/32 ; [' o$ N5 h2 Y+ {. H7 d+ `% P5 f
  Cleanup    : krb5-libs-1.15.1-34.el7.x86_64                                           24/32 0 \/ e+ X, k" r& Q7 z" u7 c
  Cleanup    : 1:openssl-libs-1.0.2k-16.0.1.el7.x86_64                                  25/32
" y' f4 a1 x  e8 q1 ?8 \  Cleanup    : e2fsprogs-libs-1.42.9-13.el7.x86_64                                      26/32 ) l" F( g/ L8 W8 w$ U2 B( ~
  Cleanup    : libss-1.42.9-13.el7.x86_64                                               27/32 ; K  x# L+ f  s1 V( [& C* }
  Cleanup    : libselinux-python-2.5-14.1.el7.x86_64                                    28/32 % u( u1 y0 A: L6 e' J
  Cleanup    : libselinux-utils-2.5-14.1.el7.x86_64      
7 w3 j! a; f9 o1 x: x......." B/ H3 _, l! h4 W& }& E$ `
Dependency Updated:. X" N/ Z6 k$ V
  e2fsprogs.x86_64 0:1.42.9-19.0.1.el7         e2fsprogs-libs.x86_64 0:1.42.9-19.0.1.el7      2 o0 o* F- H( }) u; H
  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          % @3 M4 ~: B0 o/ Q" u7 m5 s  d
  libselinux.x86_64 0:2.5-15.el7               libselinux-python.x86_64 0:2.5-15.el7         
3 l/ f5 h/ ]) X1 b  o* A9 \7 l  libselinux-utils.x86_64 0:2.5-15.el7         libss.x86_64 0:1.42.9-19.0.1.el7               : [- b2 t1 d1 {9 X6 A, D5 G
  openssl.x86_64 1:1.0.2k-25.el7_9             openssl-libs.x86_64 1:1.0.2k-25.el7_9            l" k( K7 P& J$ t6 j
  zlib.x86_64 0:1.2.7-20.el7_9               
: W4 O/ A! H2 K1 R% l4 E; [; W
5 n! H- t5 X7 s2 F  yComplete!
$ \+ V4 P  S( q' X
0 w+ t6 b4 u$ g/ P, u5 e" v% M1 {6 t5 K* n) A0 M1 C5 Z/ \( p
1 Q+ G3 u, Z( }9 o6 u9 v  i. g
2,准备完成后,初始化rpmbuild目录:
/ f5 a1 y* R9 n7 G  a3 W# _[root@ceph1 src]# mkdir rpmbulid$ I/ L$ ~3 ?( {+ a6 r7 C/ @

7 e; h  ^( R; H! hrpmbuild --ba   ncurses.spec (正常报错,但会生成/root/rpmbuild目录)! r: c- V* x4 u  }
+ z7 p2 n0 g' ^& l! o2 W
[root@ceph1 ~]# cp /usr/src/ncurses.tar.gz /root/rpmbuild/SOURCES/8 h4 |7 m5 q" T! Q* v* o( Z8 B3 e

  G5 r3 x. U4 l. G* G9 \! k
, f3 j6 ]7 z# d2 w3,编写spec文件(禁止有空行,不需要直接注释)( d) {9 }$ y2 b, g$ N- {
8 T% D/ n7 f( }: H3 g
vim /root/rpmbuild/SPECS/nginx.spec  #扩展名必须为spec! {2 m' X0 R3 b
#填写软件的基本信息1 N5 c' W* c: U0 I# P7 {
Name:nginx     #源码包软件名称4 g5 C( ?" _8 S$ _: f& Q- t1 O
Version:1.20.2     #源码包软件的版本号& U9 F( Y$ C0 y9 J  |6 O7 F+ w& ~
Release:        1%{?dist}   #制作的rpm包版本号
& u% n- @+ ?. n4 F# [: \Summary:This is web server               #rpm软件的情况: n) }- W. J9 X/ }/ c' c) _# O* y" z# I
#Group:              #组包 一般都注释6 D* @  J4 k3 I* @
License:GPL                    #软件的协议
5 o- g5 Q0 `5 ^8 ~) [URL:www.nginx.com                       #网址$ F- s0 x3 U; |& r0 v  O1 w& H% a
Source0:  nginx-1.20.2.tar.gz                       #源码包文件的全称$ ~, v- N( B: O7 S+ T  _
#BuildRequires: 因为nginx不需要依赖包,所以注释掉      #制作rpm时的依赖关系
- |* ?. x+ P4 {9 g. e" K0 O#Requires:                    #安装rpm时的依赖关系
" _7 \  k7 e7 i4 @) J! J& D3 v%description1 i; G- H  O- A' \* m
This is web server        #软件的描述
" N  I! A9 _- L
& [* j  b4 o) l4 V7 Q3 S#源码的安装过程(源码转化为rpm的过程)5 a% [+ F3 R$ x; t8 H/ j( i) {+ Z& C9 L
%post        #安装后脚本
. O0 f+ b) Z3 S; zuseradd  nginx -s /sbin/nolongin  #添加nginx用户
2 j! S) S; |+ h, h' w( Lln -s /usr/local/nginx/sbin/nginx  /usr/bin/nginx  #建立nginx软连接. k5 |# ?: `5 M1 ~! P* m/ P/ B5 l
ln -s /usr/local/nginx/sbin/nginx  /usr/bin/nginx
4 r8 d4 E/ N$ B) B  V' b. j" l9 X6 W2 ]/ K
%prep   #准备工作
% ~, ]# _* u4 q%setup -q     #自动解开tar包,并cd进入目录
' F4 W0 W# o6 g, ]%build        #编译安装6 F# `% T9 ^# a- g( V6 h5 p
./configure --user=nginx
% F- T; w- H; Z" b! wmake %{?_smp_mflags}
7 f, z: ^- Y3 B5 I  P0 ?: [%install
9 `( C+ v2 c* x( e: a) c%make_install8 k- q; C4 `, R
%files
; P* I# B% |% Y%doc     #需要打包的文件4 F1 B' |( T) m' D+ m" ~
/usr/local/nginx/*) i* G) b- E; N# [' j& m# e4 r3 p
%changelog/ D, v* R/ \! e3 l/ {$ }4 U6 T* {

! D% F* j  C, G) q; g- i$ r4 w5 ]9 U2 t" o# `
接下来我们测试ncurses
6 r' x; g3 m7 W4 u/ |* G[root@ceph1 ~]# vim /root/rpmbuild/SPECS/ncurses.spec
" v- Z+ I8 e, a( ?Name:ncurses               
2 G3 e  a* a9 g. NVersion:5.9       
6 f, O- b/ v: g2 Q* \" RRelease:        1%{?dist}
: C3 W6 K: ]4 TSummary:mysql tools       
* G4 c, i8 ]2 u: U! {' {4 \
6 {# D, p9 u1 M* K" _; W- N2 f1 e#Group:               
) j: t2 e/ e* o7 O9 g% ~4 Q- SLicense:GPL       
4 N* A# r9 O' c. G6 }% ]URL:               
5 I+ n7 S( c  x$ [Source0:ncurses.tar.gz       
0 G( Z5 U! x' N+ B
- i+ o# s5 R* i+ V9 KBuildRequires:        & M% @1 J, n" x! l
Requires:        3 {5 s! H/ l1 t8 q9 K* d
%post9 n' L' P9 P- C# ^
8 ^4 y" T+ T* L. z* {9 e
%description
2 z5 u+ S  H) {  O. e+ d) R* l
0 W  n$ g# L6 w
7 c! N/ k9 U+ y9 h  _: L%prep
" ~( a: v1 \. K& j  z6 v%setup -q
& A5 ^1 ~" @- J; `3 Q) c  u  k
. {; U4 q2 m3 p/ y" S3 s- ]/ f- ~7 N: I% P$ s( o
%build
: G' X- s; |) Q8 g! h! x%configure
8 p" c: o& N9 R0 Hmake %{?_smp_mflags}
- I' \% U/ J/ T: a6 _
& b) j% |5 Z* l4 x" H* R6 \! j; \' I" n" M
%install
8 P( s  l& v) H" x: i5 R3 X0 h4 pmake install DESTDIR=%{buildroot}
3 g7 L1 d, N5 |
8 D" N7 E3 E2 V/ K  Y* |
% z( [! j- F, k2 _& M7 W( C%files
! Y: R4 p; p/ L2 Z) S2 z%doc
" {; s9 b- W- _5 Y( I; I: Y; f3 `. D: s  i
* H9 y! n) Q1 o1 Y: Z( n& k% X- B9 l% o6 z/ N9 M1 J

7 k0 _" r) m: @7 p9 l4 C%changelog
0 h# W6 r& N+ j, V/ o4 k. \- ]& e
8 O, z* L6 }1 Z. S
" B7 v+ G* |8 d* s' v4,生成rpm包
/ ~- d4 q( c6 x. `) Q
, B% P; ]+ Z: a0 G: ?rpmbuild -ba /root/rpmbuild/SPECS/nginx.spec(显示编译过程)0 P* x  T5 q$ k# @

# E$ G" g: @. `[root@ceph1 ~]# rpmbuild -ba /root/rpmbuild/SPECS/ncurses.spec
' {  T) V6 d- J" C( l, Q2 [) K" U..../ |$ H; u7 e$ J; Y2 K4 k' z

" Y* _, p' j( Y
# l, Z' V/ _% j- l' vcd /root/rpmbuild/RPMS/x86_64/  && ls
2 I$ C2 O) l3 k3 Z+ [: Ayum localinstall  nginx-1.20.2-1.el7.x86_64.rpm(测试)
% s, j3 f( a9 }" F" `% cid   nginx (用户是否存在)2 B/ C3 h; @" G! ]5 b! R/ S" F3 n
nginx
2 z, y) A' H& U2 S/ k! x' h! R6 X) v9 n! p& A1 y" R
. d- g/ j- r, @
: w  ^& Q' E9 B% @: s2 ~2 G6 d
 楼主| 发表于 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 的信息,都是我们之前配置的内容。

7 o( m: O0 C" o) U: p& S1 \- I
您需要登录后才可以回帖 登录 | 开始注册

本版积分规则

关闭

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

如有购买积分卡请联系497906712

QQ|返回首页|Archiver|手机版|小黑屋|易陆发现 点击这里给我发消息

GMT+8, 2022-10-4 06:24 , Processed in 0.047511 second(s), 22 queries .

Powered by LR.LINUX.cloud bbs168x X3.2 Licensed

© 2012-2022 Comsenz Inc.

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