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

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