编译源码, 根据自己的需求做成定制 RPM 包 -> 搭建内网 yum 仓库 - yum 安装.
- [root@www ~]# uname -a
- Linux www 2.6.32-642.6.2.el6.x86_64 #1 SMP Wed Oct 26 06:52:09 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
- [root@www ~]# cat /etc/RedHat-release
- CentOS release 6.8 (Final)
================= 定制化 RPM 包 ==========================
fpm 工具是 rpm-bulid 的封装工具, 使用更方便, 用于打包文件为 rpm 格式.
FPM 功能简单说就是将一种类型的包转换成另一种类型.
Fpm 之 工具安装
1, 安装 Ruby 模块
fpm 是 Ruby 写的, 因此系统环境需要 Ruby
yum -y install Ruby RubyGems Ruby-devel
2, 把当前的 RubyGems 仓库, 改为淘宝的 RubyGems 仓库
Gem sources --add https://ruby.taobao.org/ --remove http://rubygems.org/
3, 升级 Ruby 版本到 2.3
- [root@Linux_Test ~]# curl -L get.rvm.io | bash -s stable
- [root@localhost ~]# curl -sSL https://rvm.io/mpapis.asc | gpg2 --import
- [root@Linux_Test ~]# curl -L get.rvm.io | bash -s stable
- [root@Linux_Test rvm]# source /etc/profile.d/rvm.sh
- [root@Linux_Test rvm]# rvm -v
- rvm 1.29.3 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin[ https://rvm.io/ ]
- [root@Linux_Test rvm]# rvm install 2.3.0
4, 开始安装 fpm
- yum -y install rpm-build
- Gem install JSON -v 1.8.3
- Gem install fpm -v 1.3.3
仅适合 CentOS6 系统, CentOS7 系统一步搞定, 即 Gem install fpm
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
使用实例 - 实战定制 nginx 的 RPM 包
安装 nginx
- yum -y install pcre-devel openssl-devel
- useradd nginx -M -s /sbin/nologin
- tar xf nginx-1.6.2.tar.gz
- cd nginx-1.6.2
- ./configure --prefix=/application/nginx-1.6.2 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module
- make && make install
- ln -s /application/nginx-1.6.2/ /application/nginx
编写脚本
- [root@oldboy ~]# cd /server/scripts/
- [root@oldboy scripts]# VIM nginx_rpm.sh # 这是安装完 rpm 包要执行的脚本
- #!/bin/bash
- useradd nginx -M -s /sbin/nologin
- ln -s /application/nginx-1.6.2/ /application/nginx
打包
- [root@oldboy ~]# fpm -s dir -t rpm -n nginx -v 1.6.2 -d 'pcre-devel,openssl-devel' --post-install /server/scripts/nginx_rpm.sh -f /application/nginx-1.6.2/
- 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.2-1.x86_64.rpm"
- }
- [root@oldboy ~]# ll -h nginx-1.6.2-1.x86_64.rpm
- -rw-r--r-- 1 root root 6.7M Nov 1 10:02 nginx-1.6.2-1.x86_64.rpm
安装 rpm 包
安装 rpm 包的三种方法:
1,rpm 命令安装
- [root@LB-nginx-01 ~]# rpm -ivh nginx-1.6.2-1.x86_64.rpm
- error: Failed dependencies:
- pcre-devel is needed by nginx-1.6.2-1.x86_64
- openssl-devel is needed by nginx-1.6.2-1.x86_64
但会报如上依赖错误, 需要先 yum 安装依赖才能安装 rpm 包.
2,yum 命令安装 rpm 包
yum -y localinstall nginx-1.6.2-1.x86_64.rpm
这个命令会自动先安装 rpm 包的依赖, 然后再安装 rpm 包.
3, 搭建内网 yum 仓库
注意事项:
1. 必须使用绝对路径打包
使用 rpm -qpl 命令可以查看 rpm 包的内容.
注: fpm 类似 tar 打包一样, 只是 fpm 打的包能够被 yum 命令识别而已.
2. 打包时, 软链接必须要加 //application/nginx/
================== 搭建 YUM 仓库 ==========================
创建 yum 仓库目录
- mkdir -p /application/yum/centos6.6/x86_64/
- cd /application/yum/centos6.6/x86_64/
- rz # 上传 rpm 包到此目录, 此目录下面还可以包括文件夹
安装 createrepo 软件
yum -y install createrepo
初始化 repodata 索引文件
createrepo -pdo /application/yum/centos6.6/x86_64/ /application/yum/centos6.6/x86_64/
提供 yum 服务
可以用 Apache 或 nginx 提供 web 服务, 但用 Python 的 http 模块更简单, 适用于内网环境
- cd /application/yum/centos6.6/x86_64/
- python -m SimpleHTTPServer 80 &>/dev/null &
可以通过浏览器输入本机 IP 查看.
添加新的 rpm 包
只下载软件不安装
- yumdownloader pcre-devel openssl-devel
- createrepo --update /application/yum/centos6.6/x86_64/
每加入一个 rpm 包就要更新一下.
平时 yum 安装软件时不删除安装包
- cat /etc/yum.conf
- keepcache=1
安装包存储目录
- cachedir=/var/cache/yum/$basearch/$releasever
- /var/cache/yum/x86_64/6/base/packages
开启 yum 缓存
sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
查找是否有 rpm 包了:
find /var/cache/yum/ -name "*.rpm"
客户端配置
- cd /etc/yum.repos.d
- [root@B yum.repos.d]# VIM oldboy.repo
- [oldboy]
- name=Server
- baseurl= http://10.0.0.5/
- enable=1
- gpgcheck=0
- [root@YUM ~]# yum --enablerepo=oldboy --disablerepo=base,extras,updates,epel list
指定使用 oldboy 库
上面是临时使用内网 yum 源, 想永久并简单使用 yum -y install lrzsz 命令, 就需要修改配置文件将默认的 repo 文件关闭.
- [root@oldboy ~]# cd /etc/yum.repos.d/
- [root@oldboy yum.repos.d]# VIM CentOS-Base.repo
在每一个启动的源加上
- enabled=0 #改为 1 就启用, 没有此参数也是启用.
- [base]
- ............
- enabled=0
- [updates]
- ............
- enabled=0
- [extras]
- ............
- enabled=0
还有其他开启的仓库就使用这个办法关闭.
镜像 yum 源
镜像同步公网 yum 源
上游 yum 源必须要支持 rsync 协议, 否则不能使用 rsync 进行同步.
http://mirrors.ustc.edu.cn/status/
同步 base 源, 小技巧, 我们安装系统的光盘镜像含有部分 rpm 包, 大概 3G, 这些就不用重新下载.
- /usr/bin/rsync -av rsync://mirrors.ustc.edu.cn/CentOS/6/os/x86_64/ /data/yum_data/CentOS/6/os/x86_64/
- /usr/bin/rsync -av rsync://mirrors.ustc.edu.cn/CentOS/6/extras/x86_64/ /data/yum_data/CentOS/6/extras/x86_64/
- /usr/bin/rsync -av rsync://mirrors.ustc.edu.cn/CentOS/6/updates/x86_64/ /data/yum_data/CentOS/6/updates/x86_64/
epel 源
/usr/bin/rsync -av --exclude=debug rsync://mirrors.ustc.edu.cn/epel/6/x86_64/ /data/yum_data/epel/6/x86_64/
来源: http://www.bubuko.com/infodetail-2963723.html