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 :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