定制化RPM包

1.Linux安装软件方法

  • 1- rpm/yum安装

  简单、速度快,但是不能定制安装

  RPM RedHat Package Manager(RPM软件包管理器)

  • 2- 二进制安装

  解压软件,简单配置后就可以使用,不用安装,速度较快

  • 3- 源码编译安装

  可以定制安装,但是安装时间长

  • 4- 源码软件结合yum/rpm安装

  把源码软件制作成符合要求的rpm,放到yum仓库里,然后通过yum来安装
  特点:安装快速,可以任意制定参数,但是有些难度

2.FPM工具介绍

  fpm作者:jordansissel

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

  功能:快速构建安装包

  • 支持的源类型包 说明

    • dir        将目录打包成所需要的类型,可以用于源码编译安装的软件包
    • rpm      对rpm进行转换
    • gem     对rubygem包进行转换
    • python    将python模块打包成相应的类型
  • 支持的目标类型包    说明

    • rpm        转换为rpm包
    • deb        转换为deb包
    • solaris    转换为solaris包
    • puppet    转换为puppet模块

3. 安装FPM工具

3.1 安装依赖关系

  fpm是使用ruby编写的,依赖安装ruby,fpm依赖rpm-build,否则定制包的时候会出现错误

yum -y install ruby rubygems ruby-devel

       注意:如果使用本地镜像,需要上传everything的镜像,否则ruby-devel不能正确安装,使用gem安装的时候会出现如下错误

[root@nginx home]# gem install fpm
Building native extensions. This could take a while...
ERROR: Error installing fpm:
ERROR: Failed to build gem native extension. /usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h Gem files will remain installed in /usr/local/share/gems/gems/ffi-1.11.2 for inspection.
Results logged to /usr/local/share/gems/gems/ffi-1.11.2/ext/ffi_c/gem_make.out

3.2 安装fpm

安装fpm使用gem安装工具

Gem是一个管理Ruby库和程序的标准包,它通过Ruby Gem(如 http://rubygems.org/ )源来查找、安装、升级和卸载软件包,非常的便捷。

Ruby 1.9.2版本默认已安装Ruby Gem,如果你使用其它发行版本,请参考“如何安装Ruby Gem”。

Ruby gem包的安装方式:

所有的gem包,会被安装到 /[Ruby root]/lib/ruby/gems/[ver]/ 目录下,这其中包括了Cache、doc、gems、specifications 4个目录,cache下放置下载的原生gem包,gems下则放置的是解压过的gem包。

当安装过程中遇到问题时,可以进入这些目录,手动删除有问题的gem包,然后重新运行 gem install [gemname] 命令即可。

[root@nginx home]# gem install fpm
Successfully installed fpm-1.11.0
Parsing documentation for fpm-1.11.0
1 gem installed
[root@nginx home]# gem list |grep fpm
fpm (1.11.0)

3.3 gem常用参数

// 更新Gem自身
// 注意:在某些linux发行版中为了系统稳定性此命令禁止执行
gem update --system // 从Gem源安装gem包
gem install [gemname] // 从本机安装gem包
gem install -l [gemname].gem // 安装指定版本的gem包
gem install [gemname] --version=[ver] // 更新所有已安装的gem包
gem update // 更新指定的gem包
// 注意:gem update [gemname]不会升级旧版本的包,此时你可以使用 gem install [gemname] --version=[ver]代替
gem update [gemname] // 删除指定的gem包,注意此命令将删除所有已安装的版本
gem uninstall [gemname] // 删除某指定版本gem
gem uninstall [gemname] --version=[ver] // 查看本机已安装的所有gem包
gem list [--local] // gem sources镜像管理
// 查看镜像
gem sources list
// 添加镜像
gem sources -a http://mirrors.aliyun.com/rubygems/
// 删除镜像
gem sources -r https://rubygems.org/ // gem sources 相关参数
[root@Docker01 tools]# gem sources --help
Usage: gem sources [options] Options:
-a, --add SOURCE_URI Add source
-l, --list List sources
-r, --remove SOURCE_URI Remove source
-c, --clear-all Remove all sources (clear the cache)
-u, --update Update source cache Local/Remote Options:
-p, --[no-]http-proxy [URL] Use HTTP proxy for remote operations Common Options:
-h, --help Get help on this command
-V, --[no-]verbose Set the verbose level of output
-q, --quiet Silence commands
--config-file FILE Use this config file instead of default
--backtrace Show stack backtrace on errors
--debug Turn on Ruby debugging Summary:
Manage the sources and cache file RubyGems uses to search for gems Defaults:
--list

4. FPM常用参数

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

5. 定制RPM包

5.1 程序路径

[root@nginx home]# find create_rpm | xargs ls -l
-rwxr-xr-x 1 user01 user01 0 Dec 11 15:07 create_rpm/bin/start
-rw-r--r-- 1 user01 user01 0 Dec 11 15:08 create_rpm/data/datafile
-rw-r--r-- 1 user01 user01 0 Dec 11 15:07 create_rpm/log/logfile create_rpm:
total 0
drwxr-xr-x 2 user01 user01 19 Dec 11 15:07 bin
drwxr-xr-x 2 user01 user01 22 Dec 11 15:08 data
drwxr-xr-x 2 user01 user01 21 Dec 11 15:07 log create_rpm/bin:
total 0
-rwxr-xr-x 1 user01 user01 0 Dec 11 15:07 start create_rpm/data:
total 0
-rw-r--r-- 1 user01 user01 0 Dec 11 15:08 datafile create_rpm/log:
total 0
-rw-r--r-- 1 user01 user01 0 Dec 11 15:07 logfile

5.2 安装前运行的脚本

[root@nginx home]# cat create_rpm_before.sh
#!/bin/bash
id user01 || useradd -M user01 -s /sbin/nologin

5.3 安装后运行的脚本

[root@nginx home]# cat create_rpm_after.sh
#!/bin/bash
find /home/create_rpm

5.4 定制rpm包

[root@nginx home]# fpm -s dir -t rpm -n create_rpm -v 1.2.3.4 -d 'openssh' --pre-install create_rpm_before.sh --post-install create_rpm_after.sh -f /home/create_rpm
Created package {:path=>"create_rpm-1.2.3.4-1.x86_64.rpm"}
[root@nginx home]# ls create_rpm-1.2.3.4-1.x86_64.rpm
create_rpm-1.2.3.4-1.x86_64.rpm
# 最后可以接程序的多个文件存放路径

5.5 使用

rpm:会因依赖关系提示报错

yum:hui解决依赖关系问题

6. rpm常见查看包内容的参数

# 查看安装包的信息
[root@nginx home]# rpm -qpi create_rpm-1.2.3.4-1.x86_64.rpm
Name : create_rpm
Version : 1.2.3.4
Release : 1
Architecture: x86_64
Install Date: (not installed)
Group : default
Size : 0
License : unknown
Signature : (none)
Source RPM : create_rpm-1.2.3.4-1.src.rpm
Build Date : Wed 11 Dec 2019 03:25:10 PM CST
Build Host : nginx
Relocations : /
Packager : <root@nginx>
Vendor : root@nginx
URL : http://example.com/no-uri-given
Summary : no description given
Description :
no description given # 查看安装包的内容
[root@nginx home]# rpm -qpl create_rpm-1.2.3.4-1.x86_64.rpm
/home/create_rpm/bin/start
/home/create_rpm/data/datafile
/home/create_rpm/log/logfile # 查看安装包的依赖
[root@nginx home]# rpm -qpR create_rpm-1.2.3.4-1.x86_64.rpm
openssh
/bin/sh
/bin/sh
rpmlib(PayloadFilesHavePrefix) <= 4.0-1
rpmlib(CompressedFileNames) <= 3.0.4-1

 参考:https://blog.oldboyedu.com/autodeploy-rpm

Linux定制化RPM包的更多相关文章

  1. fpm定制化RPM包之nginx rpm包的制作

    fpm定制化RPM包之nginx rpm包的制作 1.安装ruby模块 # yum -y install ruby rubygems ruby-devel 2.添加阿里云的Rubygems仓库,国外资 ...

  2. 自动化部署必备技能—定制化RPM包[转载]

    回顾下安装软件的三种方式: 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安装软件,优点是全自动化 ...

  3. 自动化部署必备技能—定制化RPM包

    回顾下安装软件的三种方式: 1.编译安装软件,优点是可以定制化安装目录.按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长. 2.yum安装软件,优点是全自动化 ...

  4. 定制化rpm包及本地yum仓库搭建

    为方便本地yum的管理,一般都是在公司局域网内搭建本地yum仓库,实现公司内部快速安装常用软件. 步骤如下: 1.搭建要实现本地yum管理的软件,测试该软件搭建成功与否: 2.定制rpm包及其相关依赖 ...

  5. Linux学习之RPM包管理-yum管理(十七)

    Linux学习之RPM包管理-yum管理 目录 IP地址配置 网络yum源 yum命令 光盘yum源搭建 IP地址配置 IP+子网掩码就可以在局域网(内网)使用. IP+子网掩码+网关+DNS就可以访 ...

  6. Linux学习之RPM包管理-rpm命令管理(十六)

    Linux学习之RPM包管理-rpm命令管理 目录 简介 RPM包依赖性 包全名与包名 rpm软件包安装 rpm软件包卸载 升级降级rpm软件包 rpm软件包的查询 rpm软件包校验 简介 RPM是R ...

  7. Linux 强制安装rpm 包

    Linux 强制安装rpm 包 2014年12月12日 10:21 [root@ilearndb1 Server]# rpm -ivh  unixODBC-devel-2.*  --nodeps -- ...

  8. 在Linux下下载RPM包

    在Linux下下载RPM包,但是不安装 在工作中经常会遇到离线安装RPM包的情况,下面是下载RPM包的方法 # 使用yum下载RPM包 yum -y install --downloadonly &l ...

  9. Linux服务器管理: RPM包

    服务安装类型主要分两种: RPM安装和源码包编译安装: 1.RPM包查看: rpm -qa | grep 包名 用chkconfig --list 查看服务自启动命令    只对RPM包安装的服务生效 ...

随机推荐

  1. 虚拟机apache启动

    /usr/local/apache2/bin/apachectl restart 重启 当启动也行 尝试过进入目录运行,比较奇怪,www目录竟然不一致,直接使用 server httpd start ...

  2. 数据库连接中断-spring-springBoot

    问题:据库和应用在同一台机,数据库用mysql5.6.20,已经升级druid到最新的1.0.7版本,访问的是localhost的mysql,放一个晚上不访问,第二天访问就报错了,重启服务正常,错误提 ...

  3. Oracle 11g 静默安装过程(centos7)

    开启机器,本次实例分配的ip是:192.168.3.197(Xshell ssh连接) 2 安装unzip 工具.vim编辑器(个人习惯,vi也可以) 3 在/etc/hosts文件中添加本机IP跟主 ...

  4. jmeter常用定时器以及事物控制器

    定时器(并发):Synchronizing Timer 事物控制器: 勾选Generate parent sample当单看主要数据和页面数据性能测试结果还是有比较大的差异的,因而在进行页面性能测试的 ...

  5. Go语言如何实现单例模式

    单例模式是常见的设计模式,被广泛用于创建数据库,redis等单实例.作用在于可以控制实例个数节省系统资源 特点: 保证调用多次,只会产生单个实例 全局访问 单例的分类 单例模式大致分为2大类: 懒汉式 ...

  6. MOOC(1)-使用pycharm新建Django项目、开发post接口

    https://www.cnblogs.com/liqu/p/9308966.html 1.安装Django的两种方式: > 1) pip install django 2)下载离线安装包,进入 ...

  7. Time Machine 备份mac系统

    USB外接移动硬盘的方式来熟悉Time Machine,体会它带给我们的便利.O(∩_∩)O~~通过USB连接移动硬盘到MacBook Pro,如图所示 2 将移动硬盘连接到 Mac 时,系统有时会询 ...

  8. 云服务器——之Linux下安装nginx

    第一步:下载 Nginx,下载地址:http://nginx.org/download/nginx-1.6.2.tar.gz 第二步:安装nginx需要安装的一些环境: 1.例如: yum insta ...

  9. python 面向对象静态方法、类方法、属性方法、类的特殊成员方法

    静态方法:只是名义上归类管理,实际上在静态方法里访问不了类或实例中的任何属性. 在类中方法定义前添加@staticmethod,该方法就与类中的其他(属性,方法)没有关系,不能通过实例化类调用方法使用 ...

  10. android逆向---charles抓包

    手机与电脑处于同一网络环境,且正确设置代理后,charles显示CONNECT失败,提示信息SSL handshake with client failed: An unknown issue occ ...