搭建本地yum仓库及自制rpm包(无需镜像)

搭建本地yum仓库及自制rpm包(无需镜像)

0、专属图床

点此快速打开文章搭建本地yum仓库及自制rpm包(无需镜像)

1、实验目的

为方便本地 yum 的管理,建本地 yum 仓库,实现局域网内部快速安装常用软件

2、实验环境

物理机系统:

Windows 10 企业版

使用软件的版本:

VMware 12 Pro

虚拟机配置:

CentOS 7.6

网络配置:

  • 主机名:MineGi;外网 IP:10.0.0.99;内网 IP :172.16.1.99
  • 主机名:TrueLv;外网 IP:10.0.0.199;内网 IP :172.16.1.199

3、实验过程

3.1 服务端 MineGi 主机操作

3.1.1 安装nginx

3.1.1.1 设置保留下载的包
sed -i 's#keepcache=0#keepcache=1#g' /etc/yum.conf
grep keepcache /etc/yum.conf

这样当我们yum安装软件的时候,文件就是被保存到/var/cache/yum/

3.1.1.2 安装环境依赖的包
yum install -y pcre-devel openssl-devel &>/dev/null
echo $?

rpm -qa pcre-devel openssl-devel
3.1.1.3 创建所存放的目录
mkdir -p /server/tools
cd /server/tools
3.1.1.4 下载实验所需的包
wget http://nginx.org/download/nginx-1.16.1.tar.gz
ll
3.1.1.5 解压并进入其目录
tar xf nginx-1.16.1.tar.gz
cd nginx-1.16.1/
3.1.1.6 创建其用户和授权
useradd -s /sbin/nologin  -M nginx 
mkdir -p /application
chown -R nginx. /application
ls -ld /application/
3.1.1.7 进行软件的预编译
./configure --user=nginx --group=nginx --prefix=/application/nginx-1.16.1 \
--with-http_stub_status_module --with-http_ssl_module --with-pcre  \
&>/dev/null
3.1.1.8 进行其编译和安装
make &>/dev/null && make install &>/dev/null
3.1.1.9 进行以下操作测试
cd
ln -s /application/nginx-1.16.1/ /application/nginx
/application/nginx/sbin/nginx
netstat -lntup|grep nginx
pkill nginx
!netstat

3.1.2 定制rpm包

3.1.2.1 安装 ruby 模块
yum -y install ruby rubygems ruby-devel &>/dev/null
rpm -qa ruby rubygems ruby-devel
3.1.2.2 更换国内的源
gem source list  -->查看当前源
gem sources -a https://gems.ruby-china.com/  -->添加国内源
gem sources --remove https://rubygems.org/  -->移除国外源
gem source list
3.1.2.3 安装 FPM 工具
gem install fpm

FPM 常用参数如下表所示

FPM常用参数 说明
-s 指定源类型
-t 指定目标类型,即想要制作为什么包
-n 指定包的名字
-v 指定包的版本号
-C 指定打包的相对路径
-d 指定依赖于哪些包
-f 第二次包时目录下如果有同名安装包存在,则覆盖它
-p 输出的安装包的目录,不想放在当前目录下就需要指定
--post-install 软件包安装完成之后所要运行的脚本;同--offer-install
--pre-install 软件包安装完成之前所要运行的脚本;同--before-install
--post-uninstall 软件包卸载完成之后所要运行的脚本;同--offer-remove
--pre-uninstall 软件包卸载完成之前所要运行的脚本;同—before-remove

安装可能遇到的问题

1、遇到以下语法报错:

Need executable 'rpmbuild' to convert dir to rpm {:level=>:error}

解决方法:

yum install -y rpm-build 

2、如果里面有gcc make的错误

解决方法:

yum install -y gcc 
3.1.2.4 创建 nginxrpm 包要执行的脚本
mkdir -p /server/scripts

cat >/server/scripts/nginx_rpm.sh <<EOF
#!/bin/bash 
useradd -M -s /sbin/nologin nginx
ln -s /application/nginx-1.16.1/ /application/nginx
chown -R nginx. /application
EOF
3.1.2.5 通过 fpm 命令打包 rpm
fpm -s dir -t rpm -n nginx -v 1.16.1 -d 'pcre-devel,openssl-devel' \
--post-install /server/scripts/nginx_rpm.sh  -f /application/nginx-1.16.1/

ll

打包 rpm 遇到问题:

No such file (for after_install): "/server/scripts/nginx_rpm.sh  " {:level=>:error}

解决方法

对不起,请你手动敲一遍吧,它生气了,不让你复制粘贴

3.1.2.6 一些查看信息的操作

查看 rpm 包信息

rpm -qpi nginx-1.16.1-1.x86_64.rpm

查看 rpm 包内容

rpm -qpl nginx-1.16.1-1.x86_64.rpm

查看 rpm 的包依赖

rpm -qpR nginx-1.16.1-1.x86_64.rpm

查看 rpm 自带的执行脚本,执行脚本不是以文件的形式存在 rpm 包中

rpm -qp --scripts nginx-1.16.1-1.x86_64.rpm

3.1.3 搭建yum源

3.1.3.1 创建仓库目录并移动RPM包
mkdir /application/yum/centos7/x86_64 -p
mv nginx-1.16.1-1.x86_64.rpm /application/yum/centos7/x86_64/
3.1.3.2 安装 createrepo 服务
yum -y install createrepo  &>/dev/null
echo $?
3.1.3.3 初始化 repodata 索引文件
createrepo -pdo /application/yum/centos7/x86_64/ /application/yum/centos7/x86_64/
3.1.3.4 修改 nginx 配置文件

修改 nginx 配置文件,让它默认访问浏览器找到 /application/yum/centos7/x86_64/ 目录

cat  >/application/nginx/conf/nginx.conf<<'EOF'
worker_processes  1;
events {
   worker_connections  1024;
}
http {
   include       mime.types;
   default_type  application/octet-stream;
   sendfile        on;
   keepalive_timeout  65;
   server {
       listen       80;
       server_name  localhost;
       location / {
           root   /application/yum/centos7/x86_64/;
           autoindex on;         ##开启目录
           index  index.html index.htm;
       }
       error_page   500 502 503 504  /50x.html;
       location = /50x.html {
           root   html;
       }
   }
}
EOF
3.1.3.5 检查 nginx 配置文件
/application/nginx/sbin/nginx -t
3.1.3.6 启动 nginx
/application/nginx/sbin/nginx
netstat -lntup|grep nginx
3.1.3.7 将所需 rpm 包移到仓库中

将我们之前下载的所有的 rpm 包都复制到本地 yum 仓库里

find /var/cache/yum/x86_64/7 -type f -name "*.rpm" \
|xargs mv -t /application/yum/centos7/x86_64

ls /application/yum/centos7/x86_64 |wc -l
3.1.3.8 进行更新索引

每加入一个新的 rpm 包就要执行一下如下命令,用来更新索引

createrepo --update /application/yum/centos7/x86_64/

3.2 客服端 TrueLv 主机操作

3.2.1 移走配置文件

mkdir -p /etc/yum.repos.d/bak
mv /etc/yum.repos.d/*repo* /etc/yum.repos.d/bak
ls /etc/yum.repos.d/

3.2.2 本地配置文件

cat >  /etc/yum.repos.d/local.repo  <<'EOF'
[local]
name=Server
baseurl=http://10.0.0.99
enable=1
gpgcheck=0
EOF

cat /etc/yum.repos.d/local.repo

3.2.3 进行以下操作

yum 操作、清除缓存、重新建立缓存

yum clean all

​ 指定指定使用 local 源,此命令重启 linux 系统失效, 这条命令中的 local 名称一定要对应 local.repo 中的 [local]!(这步不做好像也没影响)

yum makecache
or
yum --enablerepo=local --disablerepo=base,extras,updates,epel list 

安装 nginx ,进行测试

ll /application/
rpm -qa nginx
yum install -y nginx &>/dev/null
ll /application/
/application/nginx/sbin/nginx
netstat -lntup |grep nginx

『MineGi有话说』:快来扫一扫下面链接的二维码,加入我们吧!

posted @ 2020-07-03 08:00  MineGi  阅读(753)  评论(0编辑  收藏  举报