概述
1-回顾下安装软件的三种方式:
1、编译安装软件,优点是可以定制化安装目录、按需开启功能等,缺点是需要查找并实验出适合的编译参数,诸如MySQL之类的软件编译耗时过长。
2、yum安装软件,优点是全自动化安装,不需要为依赖问题发愁了,缺点是自主性太差,软件的功能、存放位置都已经固定好了,不易变更。
===>如果你现在还为是使用编译安装软件还是使用yum安装软件发愁,那你就out了。
3、编译源码,根据自己的需求做成定制RPM包–>搭建内网yum仓库–yum安装。结合前两者的优点,暂未发现什么缺点。可能的缺点就是RPM包的通用性差,只能适用于本公司的环境。另外一般人不会定制RPM包。这是中大型互联网企业运维自动化的必要技能。
2-FPM打包工具。
FPM的作者是jordansissel
FPM的github:https://github.com/jordansissel/fpm
FPM功能简单说就是将一种类型的包转换成另一种类型。
1. 支持的源类型包
dir 将目录打包成所需要的类型,可以用于源码编译安装的软件包
rpm 对rpm进行转换
gem 对rubygem包进行转换
python 将python模块打包成相应的类型
2. 支持的目标类型包
rpm 转换为rpm包
deb 转换为deb包
solaris 转换为solaris包
puppet 转换为puppet模块
3-FPM安装。
fpm是ruby写的,因此系统环境需要ruby,且ruby版本号大于1.8.5。
1)安装ruby模块
yum -y install ruby rubygems ruby-devel
2)查看当前使用的rubygems仓库
gem sources list
3)添加阿里云的Rubygems仓库,外国的源慢,移除原生的Ruby仓库
gem sources -a http://mirrors.aliyun.com/rubygems/
gem sources --remove http://rubygems.org/
4)安装fpm,gem从rubygem仓库安装软件类似yum从yum仓库安装软件。
首先安装低版本的json,高版本的json需要ruby2.0以上,然后安装低版本的fpm,够用。
gem install json -v 1.8.3
gem install fpm -v 1.3.3
报错故障:
[root@m01 ~]# gem install fpm -v 1.3.3
ERROR: Error installing fpm:
ffi requires Ruby version >= 1.9.
解决方法:升级Ruby版本[root@m01 ~]# gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
[root@m01 ~]# curl -sSL https://get.rvm.io | bash -s stable
[root@m01 ~]# source /etc/profile.d/rvm.sh
[root@m01 ~]# rvm -v
rvm 1.29.3 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io]
[root@m01 ~]# rvm install 2.4.2
最后再执行:[root@m01 ~]# gem install fpm -v 1.3.3
5)上面的2步安装仅适合CentOS6系统,
CentOS7系统一步搞定,即gem install fpm。
4-FPM参数
详细使用见fpm –help
常用参数:
-s 指定源类型
-t 指定目标类型,即想要制作为什么包
-n 指定包的名字
-v 指定包的版本号
-C 指定打包的相对路径 Change directory to here before searching forfiles
-d 指定依赖于哪些包
-f 第二次打包时目录下如果有同名安装包存在,则覆盖它
-p 输出的安装包的目录,不想放在当前目录下就需要指定
--post-install 软件包安装完成之后所要运行的脚本;同--after-install
--pre-install 软件包安装完成之前所要运行的脚本;同--before-install
--post-uninstall 软件包卸载完成之后所要运行的脚本;同--after-remove
--pre-uninstall 软件包卸载完成之前所要运行的脚本;同--before-remove
5-环境准备
1-系统环境。
[root@m01 ~]# cat /etc/redhat-release
CentOS release 6.9 (Final)
[root@m01 ~]# uname -r
2.6.32-696.el6.x86_64
2-开启yum缓存。
[root@m01 ~]# sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
3-清空本机已有yum缓存。
[root@m01 ~]# find /var/cache/ -type f -name '*rpm'|xargs rm -f
4-创建软件存放目录,并上传nginx软件。
[root@m01 ~]# mkdir /application/tools -p
[root@m01 ~]# cd /application/tools/
[root@m01 tools]# ls
nginx-1.6.3.tar.gz
6实战定制nginx的RPM包
1-安装nginx
[root@m01 tools]# yum -y install pcre-devel openssl-devel
[root@m01 tools]# yum install gcc-c++ -y
注意:服务端和客户端环境要统一,否则会有bug。
[root@m01 tools]# find /var/cache/ -type f -name '*.rpm'|xargs cp -t /tmp/
[root@m01 tools]# cd /tmp/ && tar zcf nginx_yum.tar.gz *.rpm
通过winscp下载所有rpm包到本地。
[root@m01 tools]# useradd nginx -M -s /sbin/nologin
[root@m01 tools]# tar xf nginx-1.6.3.tar.gz
[root@m01 tools]# cd nginx-1.6.3
[root@m01 nginx-1.6.3]# ./configure --prefix=/application/nginx-1.6.3 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
[root@m01 nginx-1.6.3]# make && make install
[root@m01 nginx-1.6.3]# ln -s /application/nginx-1.6.3/ /application/nginx
2-编写脚本
[root@m01 ~]# mkdir /server/scripts/ -p
[root@m01 ~]# cd /server/scripts/
[root@m01 scripts]# vim nginx_rpm.sh # 这是安装完rpm包要执行的脚本
#!/bin/bash
useradd nginx -M -s /sbin/nologin
ln -s /application/nginx-1.6.3/ /application/nginx
3-打包
[root@m01 scripts]# fpm -s dir -t rpm -n nginx -v 1.6.3 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.6.3/
no value for epoch is set, defaulting to nil {:level=>:warn}
no value for epoch is set, defaulting to nil {:level=>:warn}
Created package {:path=>"nginx-1.6.3-1.x86_64.rpm"}
[root@m01 scripts]# ll -h
total 2.2M
-rw-r--r-- 1 root root 2.2M Apr 23 19:54 nginx-1.6.3-1.x86_64.rpm
-rw-r--r-- 1 root root 97 Apr 23 17:41 nginx_rpm.sh
通过winscp下载nginx-1.6.3-1.x86_64.rpm包到本地。
[root@m01 scripts]# rpm -qpi nginx-1.6.3-1.x86_64.rpm
Name : nginx Relocations: /
Version : 1.6.3 Vendor: root@m01
Release : 1 Build Date: Mon 23 Apr 2018 07:54:38 PM CST
Install Date: (not installed) Build Host: m01
Group : default Source RPM: nginx-1.6.3-1.src.rpm
Size : 5253627 License: unknown
Signature : (none)
Packager : <root@m01>
URL : http://example.com/no-uri-given
Summary : no description given
Description :
no description given
[root@m01 scripts]# rpm -qpl nginx-1.6.3-1.x86_64.rpm
/application/nginx-1.6.3/client_body_temp
/application/nginx-1.6.3/conf/fastcgi.conf
/application/nginx-1.6.3/conf/fastcgi.conf.default
/application/nginx-1.6.3/conf/fastcgi_params
/application/nginx-1.6.3/conf/fastcgi_params.default
/application/nginx-1.6.3/conf/koi-utf
/application/nginx-1.6.3/conf/koi-win
/application/nginx-1.6.3/conf/mime.types
/application/nginx-1.6.3/conf/mime.types.default
/application/nginx-1.6.3/conf/nginx.conf
/application/nginx-1.6.3/conf/nginx.conf.default
/application/nginx-1.6.3/conf/scgi_params
/application/nginx-1.6.3/conf/scgi_params.default
/application/nginx-1.6.3/conf/uwsgi_params
/application/nginx-1.6.3/conf/uwsgi_params.default
/application/nginx-1.6.3/conf/win-utf
/application/nginx-1.6.3/fastcgi_temp
/application/nginx-1.6.3/html/50x.html
/application/nginx-1.6.3/html/index.html
/application/nginx-1.6.3/logs/access.log
/application/nginx-1.6.3/logs/error.log
/application/nginx-1.6.3/proxy_temp
/application/nginx-1.6.3/sbin/nginx
/application/nginx-1.6.3/scgi_temp
/application/nginx-1.6.3/uwsgi_temp
7-创建yum仓库目录
mkdir -p /application/yum/centos6.9/x86_64/
cd /application/yum/centos6.9/x86_64/
上传所有刚才下载保存的rpm包到此目录
8-安装createrepo软件
yum -y install createrepo
9-初始化repodata索引文件
createrepo -pdo /application/yum/centos6.9/x86_64/ /application/yum/centos6.9/x86_64/
10-提供yum服务
可以用Apache或nginx提供web服务,但用Python的http模块更简单,适用于内网环境。
一定要切换目录:cd /application/yum/centos6.9/x86_64/
python -m SimpleHTTPServer 80 &>/dev/null &
可以通过浏览器输入本机IP查看:
11-添加新的rpm包
1)只下载软件不安装
yumdownloader pcre-devel openssl-devel
2)每加入一个rpm包就要更新一下,平时yum安装软件时不删除安装包
createrepo --update /application/yum/centos6.9/x86_64/
3)cat /etc/yum.conf
keepcache=1
4)安装包存储目录
cachedir=/var/cache/yum/$basearch/$releasever
/var/cache/yum/x86_64/6/base/packages
12-客户端配置
[root@nfs01 ~]# cd /etc/yum.repos.d
[root@nfs01 yum.repos.d]# mkdir yum_bak && mv *repo yum_bak
[root@nfs01 yum.repos.d]# vim oldboy.repo
[oldboy]
name=Server
baseurl=http://10.0.0.61
enable=1
gpgcheck=0
[root@nfs01 yum.repos.d]# yum clean all
[root@nfs01 yum.repos.d]# yum list
[root@nfs01 yum.repos.d]#
yum --enablerepo=oldboy --disablerepo=base,extras,updates,epel list
#指定使用oldboy库
13-大功告成,可以安装了。
[root@nfs01 yum.repos.d]# yum -y install nginx
最后
以上就是安静煎饼为你收集整理的linux运维笔记:定制rpm包和搭建yum仓库的全部内容,希望文章能够帮你解决linux运维笔记:定制rpm包和搭建yum仓库所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复