菜鸟笔记
提升您的技术认知

linux定制化rpm包-ag真人游戏

1.linux安装软件方法

  • 1- rpm/yum安装

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

  rpm redhat package manager(rpm软件包管理器)

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

  • 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    : 
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
网站地图