rpm重新打包

rpm重新打包


如需转载请标明出处:http://blog.csdn.net/itas109
QQ技术交流群:129518033

相关问题:
1.rpm打包
2.spec打包脚本文件
3.rpm提取spec
4.deb和rpm转化
5.rpm解包


前言

rpm是Red-Hat Package Manager(RPM软件包管理器)的缩写,类似于windows下的msi安装包等。

rpm重新打包的目的主要如下:

  • 安装包不完全符合用途
  • 将源码编译的结果快速生成安装包

1.所需工具

所需主要工具如下:

  • rpm-build (打包)
  • rpmrebuild (解包)

安装:

sudo yum install rpm-build rpmrebuild

2.解包

以下以redis-5.0.5-1.fc27.x86_64.rpm进行说明。

2.1 创建打包目录

rpmrebuild -p redis-5.0.5-1.fc27.x86_64.rpm

执行后会在增加~/rpmbuild目录

2.2 提取SPEC文件

rpmrebuild -s redis.spec -p redis-5.0.5-1.fc27.x86_64.rpm

将redis.spec文件放到~/rpmbuild/SPECS目录

cp redis.spec ~/rpmbuild/SPECS

2.3 提取rpm文件

  • 创建编译文件夹

查看redis.spec:

BuildArch:     x86_64
Name:          redis
Version:       5.0.5
Release:       1.fc27

~/rpmbuild/BUILDROOT/创建文件夹 Name-Version-Release.BuildArch即redis-5.0.5-1.fc27.x86_64

mkdir ~/rpmbuild/BUILDROOT/redis-5.0.5-1.fc27.x86_64
  • 提取rpm全部文件
rpm2cpio redis-5.0.5-1.fc27.x86_64.rpm | cpio -div
  • rpm提取文件复制到创建文件夹

将解压的文件复制到~/rpmbuild/BUILDROOT/redis-5.0.5-1.fc27.x86_64目录

文件结构图:

$ tree

.
├── BUILD
├── BUILDROOT
│   └── redis-5.0.5-1.fc27.x86_64
│       └── usr
│           └── local
│               └── bin
│                   ├── redis-benchmark
│                   ├── redis-check-aof -> redis-server
│                   ├── redis-check-rdb -> redis-server
│                   ├── redis-cli
│                   ├── redis-sentinel -> redis-server
│                   └── redis-server
├── RPMS
│   └── x86_64
│       └── redis-5.0.5-1.fc27.x86_64.rpm
├── SOURCES
├── SPECS
│   └── redis.spec
└── SRPMS

3.自定义修改spec文件

以下为redis.spec的主要内容:

# rpmrebuild autogenerated specfile

%define defaultbuildroot /
AutoProv: no
%undefine __find_provides
AutoReq: no
%undefine __find_requires
# Do not try autogenerate prereq/conflicts/obsoletes and check files
%undefine __check_files
%undefine __find_prereq
%undefine __find_conflicts
%undefine __find_obsoletes
# Be sure buildpolicy set to do nothing
%define __spec_install_post %{nil}
# Something that need for rpm-4.1
%define _missing_doc_files_terminate_build 0

#OS:           linux
#SIZE:           3250168
#ARCHIVESIZE:           3251180
#ARCH:         x86_64
BuildArch:     x86_64
Name:          redis
Version:       5.0.5
Release:       1.fc27
License:       BSD 
Group:         Applications/Databases
Summary:       A persistent key-value database

Provides:      bundled(hiredis)  
Provides:      bundled(jemalloc) = 5.1.0
Provides:      bundled(linenoise)  
Provides:      bundled(lua-libs)  
Provides:      bundled(lzf)  
Provides:      config(redis) = 5.0.5-1.fc27
Provides:      redis = 5.0.5-1.fc27
Provides:      redis(modules_abi)(x86-64) = 1
Provides:      redis(x86-64) = 5.0.5-1.fc27
Requires:      /bin/awk  
Requires:      /bin/bash  
Requires:      /bin/sh  
Requires:      config(redis) = 5.0.5-1.fc27
Requires:      ld-linux-x86-64.so.2()(64bit)  
Requires:      ld-linux-x86-64.so.2(GLIBC_2.3)(64bit)  
Requires:      libc.so.6()(64bit)  
Requires:      libc.so.6(GLIBC_2.11)(64bit)  
Requires:      libc.so.6(GLIBC_2.14)(64bit)  
Requires:      libc.so.6(GLIBC_2.17)(64bit)  
Requires:      libc.so.6(GLIBC_2.2.5)(64bit)  
Requires:      libc.so.6(GLIBC_2.3)(64bit)  
Requires:      libc.so.6(GLIBC_2.3.2)(64bit)  
Requires:      libc.so.6(GLIBC_2.3.4)(64bit)  
Requires:      libc.so.6(GLIBC_2.4)(64bit)  
Requires:      libc.so.6(GLIBC_2.6)(64bit)  
Requires:      libc.so.6(GLIBC_2.7)(64bit)  
Requires:      libdl.so.2()(64bit)  
Requires:      libdl.so.2(GLIBC_2.2.5)(64bit)  
Requires:      libm.so.6()(64bit)  
Requires:      libm.so.6(GLIBC_2.2.5)(64bit)  
Requires:      libpthread.so.0()(64bit)  
Requires:      libpthread.so.0(GLIBC_2.12)(64bit)  
Requires:      libpthread.so.0(GLIBC_2.2.5)(64bit)  
Requires:      libpthread.so.0(GLIBC_2.3.2)(64bit)  
Requires:      librt.so.1()(64bit)  
Requires:      librt.so.1(GLIBC_2.2.5)(64bit)  
Requires:      logrotate  
Requires:      rtld(GNU_HASH)  
Requires:      shadow-utils  
Requires:      systemd  
#Requires:      rpmlib(FileDigests) <= 4.6.0-1
#Requires:      rpmlib(PayloadFilesHavePrefix) <= 4.0-1
#Requires:      rpmlib(CompressedFileNames) <= 3.0.4-1
#Requires:      rpmlib(PayloadIsXz) <= 5.2-1
#suggest
#enhance

%description
...

%files
%attr(0755, root, root) "/usr/local/bin/redis-benchmark"
%attr(0777, root, root) "/usr/local/bin/redis-check-aof"
%attr(0777, root, root) "/usr/local/bin/redis-check-rdb"
%attr(0755, root, root) "/usr/local/bin/redis-cli"
%attr(0777, root, root) "/usr/local/bin/redis-sentinel"
%attr(0755, root, root) "/usr/local/bin/redis-server"

%changelog
...

主要需要修改

  • Requires
  • %files
  • 脚本(安装前脚本%pre 安装后脚本%post 卸载前脚本%preun 卸载后脚本%postun)

4.打包

rpmbuild常用参数:

  • -bb 只编译二进制rpm包
  • -bs 只编译源码rpm包
  • -ba 同时编译二进制和源码rpm包
cd ~/rpmbuild/SPECS

rpmbuild -ba redis.spec

安装

sudo rpm -ivh redis-5.0.5-1.fc27.x86_64.rpm

5.其他

5.1 rpm和deb的转换

安装alien

https://sourceforge.net/projects/alien-pkg-convert/files/release/
http://ftp.de.debian.org/debian/pool/main/a/alien/

tar xvf alien_8.95.tar.xz
perl Makefile.PL
make
sudo make instal

rpm转deb

# alien redis-server-5.0.7-2.x86_64.rpm 
redis-server_5.0.7-3_amd64.deb generated

安装

dpkg -i redis-server_5.0.7-3_amd64.deb

deb转rpm

# alien -r redis-server_5.0.7-1_amd64.deb 

Warning: Skipping conversion of scripts in package redis-server: postinst postrm preinst prerm
Warning: Use the --scripts parameter to include the scripts.
redis-server-5.0.7-2.x86_64.rpm generated

安装

rpm -ivh redis-server-5.0.7-2.x86_64.rpm

问题:

Q: Can’t locate ExtUtils/MakeMaker.pm

A:sudo yum install perl-ExtUtils-MakeMaker


License

License under CC BY-NC-ND 4.0: 署名-非商业使用-禁止演绎


Reference:
NULL

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章