三分钟手操rpm包

简介: 三分钟手操rpm包

每每开发完一个程序,对于开发人员来说 commit 完代码就万事大吉了,实施和运维就只能骂一句仆街,然后硬着头皮去部署。




559177110bf017f52d7e4f2bc6f459d9.png


把程序安装到哪里、处理程序用到的各种依赖安装包、编译程序等等的操作,直接就能把人整死好吗?


然后有一群红帽公司的同学就开始意淫,如果能有一个东西,自动安装依赖包、自动创建目录、自动安装、卸载的时候还能把自己卸载的干干净净是如么爽的一件事情!于是 Red-Hat Package Manager (RPM软件包管理器)诞生了。


其他人看到感觉不错啊就全给抄过来,所以 rpm 包可以适应各种 linux 系统,成为业界公认的行业标准,就是 Debian 不太服气,自己搞了一个 deb 包,其实效果是一样一样的。


准备rpm打包环境


我搞了一台 CentOS6.8 的系统来演示这个骚操作, redhat 系的其它发行版应该也类似。

sudo  
yum 
 install -y gcc make rpm-build redhat-rpm-config vim lrzsz

这个时候会有小朋友问了,无网络的情况下怎么办!! 只要加个参数下载到本地再去安装 rpm包就可以啦,如

sudo yum  
 install -y   
--downloadonly --downloaddir=<目录>   
 gcc make rpm-build redhat-rpm-config vim lrzsz

image.gif


创建打包必须的目录


1. mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
2. echo '%\_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros


57eb687758a86643bf3a895b8699f4f2.png



上传源码包


7807fc532ab10b0be58c26a7a7906851.png


我创建了一个 coding3min的文件夹,里面名为run.sh的脚本,作用是输出一句话。


把自己的源码打成一个tar.gz的包(随便什么压缩格式),然后放到rpmbuild的源码包所在位置。

sudo tar czf coding3min.tar.gz coding3min
sudo cp coding3min.tar.gz rpmbuild/SOURCES/


编写rpm描述文件spce


image.png

要想写一个自己的 spce文件,不如抄一个下来改改,一通操作过后,我制作了一个精简的spec文件


sudo vim rpmbuild/SPECS/coding3min.spec


vim在编辑的时候会自动生成 spec 文件的模板, coding3min.spec 的内容如下(请上下滚动查看):


# 定义了一个变量install_dir


%define install_dir /data/coding3min


# 包名


Name: coding3min


# 版本号


Version: 0.0.1


# release版本号


Release: 1%{?dist}


#软件包的内容概要描述


Summary: coding3min print ok
License: ASL 2.0

# 主页网址


URL: https://t.zsxq.com/rvBMzRv


# 源码包名


Source0: coding3min.tar.gz


#编译过程中需要的软件


# 此处没有,所以注释掉了


# BuildRequires: gcc-c++, ncurses-devel, zlib-devel


#依赖的软件, 安装的时候需要检查的


Requires: bash


# 软件包描述


%description
coding3min is a funny Official Accounts


# 编译前预处理。如: 1.打补丁; 2. 解压源码等

%prep
%setup -q

# 编译


%build


# rpm安装前执行的动作


%pre
echo install begin...


# 安装, 即把一些可执行文件和配置复制到目标目录中。


%install
rm -rf %{buildroot}%{install_dir}
mkdir -p %{buildroot}%{install_dir}
cp -R * -v %{buildroot}%{install_dir}

# rpm安装后执行的动作


%post
echo install ok baby!


# 清理一些暂存文件


%clean
rm -rf $RPM_BUILD_ROOT
rm -rf $RPM_BUILD_DIR


# 定义哪些文件或者目录会放入rpm中


%files
%defattr(-, root, root, 0755)
%{install_dir}


# 变更日志


%changelog
cd rpmbuild
rpmbuild -bb --target x86_64 SPECS/coding3min.spec > rpmbuild.log &


输出

+ umask 022
+ cd /home/vagrant/rpmbuild/BUILD
+ cd /home/vagrant/rpmbuild/BUILD
+ rm -rf coding3min-0.0.1
+ /usr/bin/gzip -dc /home/vagrant/rpmbuild/SOURCES/coding3min.tar.gz
+ /usr/bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd coding3min-0.0.1
+ /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
+ umask 022
+ cd /home/vagrant/rpmbuild/BUILD
+ cd coding3min-0.0.1
+ exit 0
+ umask 022
+ cd /home/vagrant/rpmbuild/BUILD
+ '[' /home/vagrant/rpmbuild/BUILDROOT/coding3min-0.0.1-1.el7.x86_64 '!=' / ']'
+ rm -rf /home/vagrant/rpmbuild/BUILDROOT/coding3min-0.0.1-1.el7.x86_64
++ dirname /home/vagrant/rpmbuild/BUILDROOT/coding3min-0.0.1-1.el7.x86_64
+ mkdir -p /home/vagrant/rpmbuild/BUILDROOT
+ mkdir /home/vagrant/rpmbuild/BUILDROOT/coding3min-0.0.1-1.el7.x86_64
+ cd coding3min-0.0.1
+ rm -rf /home/vagrant/rpmbuild/BUILDROOT/coding3min-0.0.1-1.el7.x86_64/data/coding3min
+ mkdir -p /home/vagrant/rpmbuild/BUILDROOT/coding3min-0.0.1-1.el7.x86_64/data/coding3min
+ cp -R run.sh -v /home/vagrant/rpmbuild/BUILDROOT/coding3min-0.0.1-1.el7.x86_64/data/coding3min
+ /usr/lib/rpm/find-debuginfo.sh --strict-build-id -m --run-dwz --dwz-low-mem-die-limit 10000000 --dwz-max-die-limit 110000000 /home/vagrant/rpmbuild/BUILD/coding3min-0.0.1
+ /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1
+ /usr/lib/rpm/redhat/brp-python-hardlink
+ /usr/lib/rpm/redhat/brp-java-repack-jars
+ umask 022
+ cd /home/vagrant/rpmbuild/BUILD
+ cd coding3min-0.0.1
+ rm -rf /home/vagrant/rpmbuild/BUILDROOT/coding3min-0.0.1-1.el7.x86_64
+ rm -rf /home/vagrant/rpmbuild/BUILD
+ rm -rf /var/tmp/coding3min
+ exit 0

生成结束以后出现了我们自己rpm包!!  


308d8a0ace546b7b351e50df08e0ba1c.png


安装一下

image.gif


然后放到yum源里就可以用啦,参考“三分钟手操yum源”

相关文章
|
NoSQL Redis
如何查看yum 安装的软件路径(不要再忘了)
如何查看yum 安装的软件路径 今天使用yum 安装了一个软件,后来没有找到路径 1、首先安装一个redis [root@iZbp1eem925ojwyx17ao9kZ ~]# yum install redis 2...
1994 0
|
1月前
|
缓存 JavaScript 前端开发
拿下奇怪的前端报错(三):npm install卡住了一个钟- 从原理搞定安装的全链路问题
本文详细分析了 `npm install` 过程中可能出现的卡顿问题及解决方法,包括网络问题、Node.js 版本不兼容、缓存问题、权限问题、包冲突、过时的 npm 版本、系统资源不足和脚本问题等,并提供了相应的解决策略。同时,还介绍了开启全部日志、使用替代工具和使用 Docker 提供 Node 环境等其他处理方法。
428 0
|
5月前
|
Linux 应用服务中间件 编译器
50. 【Linux教程】源码安装软件
50. 【Linux教程】源码安装软件
42 0
|
6月前
|
开发工具
彻底卸载GitLab并重装
彻底卸载GitLab并重装
1018 0
|
6月前
|
安全 Linux 网络安全
猿创征文|centos7升级openssh服务(再也不怕漏扫啦)
猿创征文|centos7升级openssh服务(再也不怕漏扫啦)
382 0
|
存储 测试技术
三分钟手操自己的yum源
三分钟手操自己的yum源
三分钟手操自己的yum源
|
NoSQL Linux 开发工具
【Linux操作系统】yum三板斧和yum源的配置
【Linux操作系统】yum三板斧和yum源的配置
512 0
【Linux操作系统】yum三板斧和yum源的配置
|
Linux Apache Windows
Linux安装及管理程序:rpm软件包、源代码安装( 时间最美的地方,就是让你我成为了我们)(二)
Linux安装及管理程序:rpm软件包、源代码安装( 时间最美的地方,就是让你我成为了我们)(二)
145 0
Linux安装及管理程序:rpm软件包、源代码安装( 时间最美的地方,就是让你我成为了我们)(二)
|
Ubuntu Linux Shell
Linux安装及管理程序:rpm软件包、源代码安装( 时间最美的地方,就是让你我成为了我们)(一)
Linux安装及管理程序:rpm软件包、源代码安装( 时间最美的地方,就是让你我成为了我们)(一)
419 0
Linux安装及管理程序:rpm软件包、源代码安装( 时间最美的地方,就是让你我成为了我们)(一)
|
Ubuntu
Ubuntu安装时,下载太慢怎么办
Ubuntu安装时,下载太慢怎么办
288 0