RPM包制作

rpm包的制作是通过fpm软件来生成的,所以首先要安装fpm软件。又因为fpm的软件是ruby开发的,所以安装fpm的话首先要安装ruby等包

FPM功能简单说就是将一种类型的包转换成另一种类型。

FPM的github:https://github.com/jordansissel/fpm

支持的源类型包:

dir: 将目录打包成所需要的类型,可以用于源码编译安装的软件包

rpm: 对rpm进行转换

gem: 对rubygem包进行转换

python: 将Python模块打包成相应的类型

1、安装fpm

 fpm 是 ruby写的,因此系统环境需要ruby,且版本必须大于1.8.5

yum  install ruby rubygems ruby-devel -y

 查看当前ruby源:

[root@lnmp01 ~]# gem source -l
*** CURRENT SOURCES ***
http://rubygems.org/

 添加国内源

gem sources -a http://mirrors.aliyun.com/rubygems/

 移除国外源

gem sources --remove http://rubygems.org/

 安装制作rpm包的fpm工具

[root@lnmp01 ~]# gem install fpm
Building native extensions.  This could take a while...
Building native extensions.  This could take a while...
ERROR:  Error installing fpm:ruby-xz requires Ruby version >= 1.9.3.

 安装fpm工具的时候报错,解决办法为:

#安装旧版本的fpm
[root@lnmp01 ~]# gem install fpm -v 1.4.0
Successfully installed clamp-0.6.5
Successfully installed fpm-1.4.0
2 gems installed
Installing ri documentation for clamp-0.6.5...
Installing ri documentation for fpm-1.4.0...
Installing RDoc documentation for clamp-0.6.5...
Installing RDoc documentation for fpm-1.4.0...

 到此fpm工具安装完成

FPM的常用参数:

-s:指定源类型
-t:指定目标类型,即想要制作为什么包
-n:指定包的名字
-v:指定包的版本号
-C:指定打包的相对路径
-d:指定依赖于哪些包
-f:第二次包时目录下如果有同名安装包存在,则覆盖它
-p:输出的安装包的目录,不想放在当前目录下就需要指定
--post-install:软件包安装完成之后所要运行的脚本;同--offer-install
--pre-install:软件包安装完成之前所要运行的脚本;同--before-install
--post-uninstall:软件包卸载完成之后所要运行的脚本;同--offer-remove
--pre-uninstall:软件包卸载完成之前所要运行的脚本;同—before-remove

2、制作rpm包

比如对nginx的编译安装打包成rpm

创建一个脚本nginx-rpm.sh

[root@lnmp01 ~]# vim  /server/scripts/nginx-rpm.sh#!/bin/bash
useradd  nginx  -s /sbin/nologin  -M
ln  -s /application/nginx-1.6.3/   /application/nginx
/application/nginx/sbin/nginx
lsof -i :80

 生成rpm包

fpm  -s  dir -t rpm -n nginx -v 1.6.2 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx-rpm.sh -p /tmp/ -f /application/nginx-1.6.3/

 说明:所有参数都要放在-f /application/nginx-1.6.3/之前,否则会报错,这里的nginx-rpm.sh脚本也要提前做好,在生成的rpm包中会包含这个脚本;-p指定生成的rpm包输出的路径,-d为指定客户端安装这个rpm包时要先安装这些依赖包,-f为在指定的rpm包输出路径中相同的rpm包名做覆盖,不然没有-f参数在相同路径下生成相同名字的rpm包会报错。还有在制作rpm包时最好不要对相对路径打包,因为对相对路径打包生成的rpm包是从根路径开始的,所以生产上都要用绝对路径打包。

相对路径打包的错误:所以不推荐使用相对路径打包

[root@lnmp01 nginx]# fpm  -s  dir -t rpm -n nginx -v 1.6.2 .

[root@lnmp01 nginx]# rpm -qpl nginx-1.6.2-1.x86_64.rpm /client_body_temp
/conf/extra/bbs.conf
/conf/extra/blog.conf
/conf/extra/status.conf
/conf/extra/www.conf
/conf/fastcgi.conf
/conf/fastcgi.conf.default
/conf/fastcgi_params
/conf/fastcgi_params.default
/conf/koi-utf
/conf/koi-win
/conf/mime.types
/conf/mime.types.default
/conf/nginx.conf
/conf/nginx.conf.default
/conf/nginx.conf.ori1
/conf/scgi_params
/conf/scgi_params.default
/conf/uwsgi_params
/conf/uwsgi_params.default
/conf/win-utf
/fastcgi_temp
/html/50x.html
/html/bbs/admin.php
/html/bbs/api.php
/html/bbs/api/addons/channel.htm
/html/bbs/api/addons/index.htm
/html/bbs/api/addons/zendcheck.php
/html/bbs/api/addons/zendcheck52.php
/html/bbs/api/addons/zendcheck53.php
/html/bbs/api/connect/index.htm
/html/bbs/api/connect/like.php
/html/bbs/api/db/dbbak.php
/html/bbs/api/db/index.htm
/html/bbs/api/google/google.php
/html/bbs/api/google/index.htm
/html/bbs/api/index.htm

相对路径打包rpm

在其他服务器上安装这个制作的nginx的rpm包

[root@lnmp01 ~]# scp  /tmp/nginx-1.6.2-1.x86_64.rpm  192.168.1.104:~ [root@backup ~]# rpm -ivh nginx-1.6.2-1.x86_64.rpm
error: Failed dependencies:pcre-devel is needed by nginx-1.6.2-1.x86_64openssl-devel is needed by nginx-1.6.2-1.x86_64[root@backup ~]# yum  localinstall -y nginx-1.6.2-1.x86_64.rpm [root@backup ~]# id nginx
uid=503(nginx) gid=503(nginx) groups=503(nginx)[root@backup ~]# ll /application/
total 4
lrwxrwxrwx  1 root root   25 Sep  8 21:00 nginx -> /application/nginx-1.6.3/
drwxr-xr-x 11 root root 4096 Sep  8 21:00 nginx-1.6.3[root@backup ~]# lsof  -i  :80
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   4043  root    9u  IPv4  28773      0t0  TCP *:http (LISTEN)
nginx   4045 nginx    9u  IPv4  28773      0t0  TCP *:http (LISTEN)

 这样在其他服务器上安装nginx的rpm包成功部署完成。。。

YUM仓库搭建

1、创建 yum仓库的目录

mkdir  -p /application/yum/centos6.6/x86_64
cd  /application/yum/centos6.6/x86_64

2、安装createrepo软件(创建存储库)

yum -y install createrepo

3、初始化yum仓库

createrepo -pdo /application/yum/centos6.6/x86_64/  /application/yum/centos6.6/x86_64/

 初始化完会生成一个repodata目录,代表初始化yum仓库成功

4、当有新的rpm放到/application/yum/centos6.6/x86_64/里时,执行更新

createrepo --update  /application/yum/centos6.6/x86_64/

5、将上面生成的rpm包放在yum仓库指定的目录中,并下载这个nginx的rpm的依赖包

cd  /application/yum/centos6.6/x86_64/
cp  /server/scripts/nginx-1.6.3-1.x86_64.rpm  .
yumdownloader   openssl-devel  pcre-devel

6、关掉nginx,因为下面要用python来做web服务,当然也可以用nginx自带的web服务提供浏览器打开yum仓库

 用python提供web服务做客户端访问yum源的url路径

/application/nginx/sbin/nginx  -s  stop
cd  /application/yum/centos6.6/x86_64/
python -m SimpleHTTPServer 80 &>/dev/null &

 如果用nginx提供web服务做客户端访问yum源的url路径的话,做如下配置

cat  >/application/nginx/conf/nginx.conf<<EOF
worker_processes  1;
events {worker_connections  1024;
}
http {include       mime.types;default_type  application/octet-stream;sendfile        on;keepalive_timeout  65;server {listen       80;server_name  localhost;location / {root   html/yumcache;autoindex on;         ##开启目录index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}
}
EOF/application/nginx/sbin/nginx -s stop
/application/nginx/sbin/nginx

7、修改yum的配置文件,让平时yum安装的软件rpm包都要保存下载

vim  /etc/yum.conf
keepcache=1

8、客户端部署

 创建本地的yum源文件

cd  /etc/yum.repos.d/
vim  goser.repo
[goser]
name=Server
baseurl=http://192.168.182.143
enabled=1
gpgcheck=0

清空之前的缓存
yum clean all

 在客户端运行如下命令,让客户端yum安装的时候只查找新建的yum源文件goser.repo

yum --enablerepo=goser --disablerepo=base,extras,updates list

 或者直接将旧的yum源放到其他的目录,在/etc/yum.repos.d/目录下只有新建的yum源goser.repo

cp  CentOS-Base.repo  CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo CentOS-fasttrack.repo epel.repo repobak/

 不需要的源放到其他目录了,那么客户端直接运行yum  install  nginx -y就行了,而不需要--disablerepo,--enalberepo参数了

9、错误排查

 当客户端直接进行yum安装的时候报如下错误:

yum install  nginx  -y
Error: Package: pcre-devel-7.8-7.el6.x86_64 (goser)Requires: pcre = 7.8-7.el6Installed: pcre-7.8-6.el6.x86_64 (@anaconda-CentOS-201410241409.x86_64/6.6)pcre = 7.8-6.el6You could try using --skip-broken to work around the problemYou could try running: rpm -Va --nofiles --nodigest

 这个错误说明yum仓库缺少pcre = 7.8-7.e16这个包,所以应该在yum仓库中添加这个包,步骤如下:

#添加缺少的包
yumdownloader  pcre
#服务端yum仓库更新
createrepo --update  /application/yum/centos6.6/x86_64/

 客户端重新缓存yum源

yum clean  all
yum  makecache
#这时候用list查看就有缺少的包了
yum list
Available Packages
nginx.x86_64            1.6.3-1         goser
openssl-devel.i686      1.0.1e-57.el6   goser
pcre.i686               7.8-7.el6       goser
pcre.x86_64             7.8-7.el6       goser
pcre-devel.i686         7.8-7.el6       goser
pcre-devel.x86_64       7.8-7.el6       goser

 这时候再直接安装就没问题了 yum  install  nginx -y

转载于:https://www.cnblogs.com/goser/p/7684244.html

RPM包制作及yum仓库搭建相关推荐

  1. linux yum仓库制作,yum仓库搭建之RPM包制作

    常见的软件安装方式有以下几种 1.yum安装,可自动解决依赖,但不能自定义软件安装位置 2.编译安装,可指定安装路径,指定装模块,但编译参数冗长,且耗时较长,不能解决依赖问题. 3.rpm安装,安装速 ...

  2. 内网环境下使用rpm包制作yum数据源及使用

    内网环境下使用rpm包制作yum数据源及使用 在实际生产环境中,绝大多数服务器处于内网环境.基于最小化安装.光盘镜像挂载不方便(缺少)等原因,无法使用yum服务,本实验基于生产环境中出现的上述现象进行 ...

  3. 使用rpm包制作本地镜像仓库和使用httpd发布镜像服务实现内网使用yum命令

    记录:313 场景:在CentOS 7.9操作系统,使用reposync命令下载rpm包:使用createrepo把rpm包制作成本地镜像仓库:使用httpd发布本地镜像服务:实现内网环境使用yum命 ...

  4. linux rpm 包制作详解

    一.RPM介绍 RPM 前是Red Hat Package Manager 的缩写,本意是Red Hat 软件包管理,顾名思义是Red Hat 贡献出来的软件包管理:现在应为RPM Package M ...

  5. linux怎么制作运行包,简单 RPM 包制作

    今天为了测试搭建自己的yum仓库并安装升级软件包,因此需要一个rpm包来做测试,所以就想到了自己来做一个最简单rpm,因为仅仅就是做一个测试所以没有添加需要编译的文件,而是只使用了一个shell文件来 ...

  6. rpm包制作之openssh8.7升级

    rpm包制作之openssh8.7升级 一.RPM包制作 以openssh为例,将源码包转换为二进制包,从openssh6.4升级至8.7. 源码下载地址: https://www.linuxfrom ...

  7. OpenSSH升级8.5版本rpm包制作过程及安装。OpenSSH 命令注入漏洞

    OpenSSH升级8.5版本 3月3日OpenSSH官方发布最新版OpenSSH8.5,此次更新修复了之前版本存在的注入漏洞.用源码编译的方式比较慢 而且需要相关的依赖特别的多,而且公司一般都是内网环 ...

  8. rpm包制作介绍及实战操作讲解01(学生分享)

    说明:本文来自老男孩linux运维实战培训-高级架构师班学生分享内容,本文分为两部分,此为第一部分. 第一次观看本视频前,建议博友先观看:人人都是讲师的教学培训体系介绍 http://oldboy.b ...

  9. Openssh rpm 包制作

    0X01 下载openssh 源文件 rpm包制作的前期各种文件略过,我选择在http://mirror.aarnet.edu.au/pub/OpenBSD/OpenSSH/portable/ 下载合 ...

最新文章

  1. Quzrtz.net 示例
  2. 应用分类练手项目计划
  3. C语言、嵌入式位操作精华技巧大汇总
  4. 真实诠释程序员日常的二十四张图【你中了几个】
  5. P4449 于神之怒加强版
  6. java读取src xml文件路径_Java获取路径方法相对路径读取xml文件方法
  7. 语法错误: leftparen 应在 colon 之前
  8. 淘宝双十一火爆下的暗礁?
  9. JavaScriptJquery 练习 扫雷
  10. html按钮美好,崛起中的九大HTML5开发工具
  11. linux访问mdio接口函数,MII 接口解析(三)GPIO 模拟 MDIO 接口使用代码
  12. 省级期刊发表价格具体分析
  13. 记录一下关于三角函数交换积分次序的一道题
  14. 英语语法:词法之动名词
  15. 【IoT】产品三问:什么是产品?什么是产品管理?产品经理职责是什么?
  16. 关闭惠普计算机通电启动注册表,惠普电脑总是自动重启如何解决
  17. 视觉SLAM十四讲 第9讲 后端1 贝叶斯法则 式9.5推导
  18. Archlinuxarm / AUR的国内镜像源(for Banana Pi / Raspberry Pi , etc)(更新)
  19. vue从服务器获取csv文件,前端 VUE 解析 CSV 文件
  20. 3.韦东山嵌入式学习笔记-烧写工具

热门文章

  1. 微信朋友圈内容能删除吗?
  2. 自驾游,遇陌生夫妻搭车坐了一千多公里,执意要给钱,我能收吗?
  3. 女性一辈子不结婚,会怎么样?
  4. 越是糟心时,越要用起写作这个武器
  5. 第一家店开始要做品牌吗?
  6. 很多人在网络上创业看不到本质
  7. 算法的基本控制结构之选择结构
  8. SQL Server中的快照隔离
  9. sql 表变量 临时表_SQL表变量概述
  10. alwayson高可用组_AlwaysOn可用性组–简化工作的好奇心–第1部分