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