我是靠谱客的博主 安静煎饼,最近开发中收集的这篇文章主要介绍linux运维笔记:定制rpm包和搭建yum仓库,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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仓库所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部