yum仓库的部署
阅读原文时间:2023年07月08日阅读:1

https://segmentfault.com/a/1190000013968371

私有yum仓库在企业中的应用还是比较广泛,有方便、快捷、灵活等优势。如某公司安全部门不允许大批量的主机连接互联网、自己单独制作的rpm包需要存放、节省出口带宽、公有仓库下载安装比较慢、等等吧. 迫使我们需要建立一个私有的软件仓库。然而私有的软件仓库构建比较简单,无非是从互联网上的公有仓库中同步文件到本地然后再装个ftp、http等能提供yum客户端访问的服务将仓库发布出去即可。但有没有想过一个问题我们自己构建的私有仓库在提供内部机器使用的时候需要修改yum配置文件是一件很痛苦的事情(别往里钻,钻就没意思了,有同学就说了可以用自动化工具去同步所有主机的配置文件…您且往下看,机器比较少(十台八台的)的话构建私有仓库是一种奢侈排除在外),那么这么痛苦的事情怎么解决?…运维的核心观念--能简单一步到位解决的事情就别大费周章去搞其他的了,至于怎么选择那是你的事情了?

这里简单说下是怎么实现的如下:

1、且看默认的yum配置文件内容(摘其中一段) CentOS-Base.repo

[base]

name=CentOS-$releasever - Base

mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra

#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

我们看mirrorlist=xxxxxx…. 这行,实际是去请求的不是真正的仓库,而是去取的一个 仓库的列表,这个列表里包含一堆的实际仓库的url,有看到这行包含几个变量

release=$releasever为系统的发行版本是CentOS/redhat系列的 5、6 、7

arch=$basearch为当前系统的平台是x86_64的还是i386的

repo=os为仓库名

我们需要的就是如上几个了,这里来拼凑成一个实际请求的url如下:

http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os

http://mirrorlist.centos.org/?release=6&arch=i386&repo=os

在浏览器中打开此链接看看是不是返回了一堆实际仓库的路径

2、得到如上的url后我们需要自己写一个web的程序来提供在浏览器中打开上述链接         返回的内容,具体实现也很简单对于会点开发的人来说,就是根据请求不同的参数来返         回不同的内容,而里面的内容就是我们自己构建的私有仓库地址,代码见MList项目

3、好了,仓库有了,程序也有了下面就需要将默认请求的域名(mirrorlist.centos.org)     通过私有dns解析到2中程序部署的地址即可,且要配置nginx或apache的域名虚   拟主机

4、慢慢享受吧. 我不知道这么讲大伙能不能理解.不能理解的可以单独找我,网络班企         业教练 Andy_f

有同学就说了,看你说这么一大通感觉也很复杂,还不如我一个一个修改配置文件呢.

而我觉得这样很方便一劳永逸,再也不用担心私有仓库的问题了.简单总结下几点

A、构建私有仓库

B、写代码(代码比较简单我已经写好提供使用)响应默认配置文件中请求的内容并部         署nginx反带,域名形式的虚拟主机

C、构建内部dns解析默认配置文件中的域名及私有仓库的域名

D、O了.这么一总结是不是就感觉简单多了…

IP

应用名称

备注

10.57.1.206

yum仓库、nginx、MList、dns

CenOS7.x

# 小提示,确保selinux及防火墙是关闭状态

1、构建私有CentOS仓库

yum仓库里的包我们从中国科技大学的公有仓库中同步CentOS的整个仓库,整个centos的仓库大概有三百多G,里面包含iso,rpm包等等

http://mirrors.ustc.edu.cn/ 中国科技大学的公共仓库主页,里面包含很多系统及开源软件的仓库,可根据自己需要参考如下方式同步其他的.

A、 首先建立一个统一存放的目录

mkdir /data/soft_repos/centos -pv

# 统一放在/data/soft_repos/目录下,如果其他的仓库也可放在此目录下

B、 同步CentOS仓库至本地

#中国科技大学的公有软件仓库提供了rsync同步服务,只要服务上安装有rsync即可使用

vim /data/soft_repos/centos.sh

#!/bin/bash

rsync -avrtH --bwlimit=3850 \

rsync://rsync.mirrors.ustc.edu.cn/centos/ /data/soft_repos/centos/

由于整个仓库比较大同步可能会比较耗时,慢慢等待吧, --bwlimit参数是限制流量的,可根据自己的出口带宽来调整

C、 配置nginx来发布仓库

# 安装nginx,安装方式可根据自己喜好,这里使用epel仓库中的rpm包

yum install epel-release -y

yum install nginx -y

修改nginx主配置文件

vim /etc/nginx/nginx.conf

# 内容如下,可不必跟我这一样,参考主要配置为如下标红色的三个配置项

user nginx;

worker_processes auto;

error_log /var/log/nginx/error.log;

pid /run/nginx.pid;

include /usr/share/nginx/modules/*.conf;

events {

worker_connections 1024;

}

http {

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

sendfile            on;

tcp_nopush          on;

tcp_nodelay         on;

keepalive_timeout   65;

types_hash_max_size 2048;

#开启目录索引,以便在浏览器中访问

autoindex on;

gzip  on;

include             /etc/nginx/mime.types;

default_type        application/octet-stream;

include /etc/nginx/conf.d/*.conf;

}

# end

添加yum仓库的虚拟主机

vim /etc/nginx/conf.d/mirror.conf

# 内容如下

server {

listen       80;

# 这几个域名待会要用私有dns服务器来解析,

server_name mirror.xxxxx.com yum.xxxxx.com mirror.centos.org;

# 下载流量限制

limit_rate 50M;

charset utf8;

location / {

root   /data/soft_repos/;

access_log  /var/log/nginx/mirror.log  main;

}

}

启动nginx并设置开机启动

systemctl start nginx

systemctl enable nginx

至此私有CentOS仓库已经建好, 可能同步没那么快,如果想更快的看到效果可将iso挂载至对应目录

2、部署MList并配置Nginx

MList程序是用python的tornado web框架写的一个简单的程序,作用在上面已经介绍过了.这里不过多的阐述.直接开干.

将MList-2019-03-30.tar.gz  文件上传至服务器/usr/local/目录下

ls /usr/local/MList-2019-03-30.tar.gz

/usr/local/MList-2019-03-30.tar.gz

安装tornado

yum install python-setuptools -y

easy_install tornado==5.1.1

解压MList-2019-03-30.tar.gz

cd /usr/local

tar xvf MList-2019-03-30.tar.gz

# 修改仓库列表配置

vim MList/views.py

# 修改18行那个列表中的值,其他别动

def centos(request):

# 这里是定义yum仓库的url,域名要内部dns能够解析, 如果内部yum仓库使用的是IP这里的域名替换为IP也是可以的

repoUrl=[

'http://mirror.xxxxx.com/centos',

'http://yum.xxxxx.com/centos',

'http://mirror.centos.org/centos'

]

# 保存退出

启动MList

nohup python /usr/local/MList/Mlist.py --port=8080 &

# 加入开机启动

echo 'nohup python /usr/local/MList/Mlist.py --port=8080 &' >> /etc/rc.local

chmod a+x /etc/rc.d/rc.local

curl http://127.0.0.1:8080  # 显示如下信息表示正常

Welcome MList

使用nginx代理MList来工作

vim /etc/nginx/conf.d/MList.conf

server {

listen       80;

# 不知道大家还有印象没,这个MList程序的作用,这里为什么要配置这个域名呢?

server_name mirrorlist.centos.org;

access_log  /var/log/nginx/MList.log  main;

location / {

proxy_pass   http://127.0.0.1:8080/centos/;

}

}

重启nginx

systemctl restart nginx

至此MList已经配置好了,接下来就比较简单了,解析下如上配置的域名到对应的IP

mirrorlist.centos.org  # 默认yum配置文件中的域名,A记录到MList的nginx主机IP

mirror.xxxxx.com    # 以下三个域名是实际私有的yum仓库的域名,需要解析到yum仓库的IP

yum.xxxxx.com

mirror.centos.org

3、部署私有DNS

dns的开源软件有很多,如bind/powerdns/dnsmasq等,这里使用比较简单的dnsmasq

一般来说dnsmasq承载几百台机器的解析工作还是没有问题的

安装dnsmasq

yum install dnsmasq -y

添加解析记录

vim /etc/dnsmasq.d/test.conf

# MList

address=/mirrorlist.centos.org/10.57.1.206

# YUM Repos

address=/mirror.xxxxx.com/10.57.1.206

address=/yum.xxxxx.com/10.57.1.206

address=/mirror.centos.org/10.57.1.206

启动dnsmasq

systemctl start dnsmasq

systemctl enable dnsmasq

至此基本已经配置完成了,接下来做下测试

找一台centos6.x 或centos7.x 的主机将dns服务器指向 dnsmasq的地址

然后在nginx的主机上 查看日志

tail -f /var/log/nginx/MList.log

# 多开俩窗口查看日志

tail -f /var/log/nginx/mirror.log

最后在测试机上安装ntp

yum install ntp -y

# 查看yum客户端是否去MList上请求仓库列表

# 查看rpm包是否是去私有仓库中下载并安装的