因为后面工做中可能会遇到服务器在无公网的状况下使用,那么这个时候就可能须要在本地搭建私有yum仓库
了。正好趁着周末学习一下如何搭建,如下是我学习自建yum仓库的笔记。html
这里我默认你们都会编译安装Nginx,因此使用yum的方式安装以减小文章篇幅。python
# rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
复制代码
# yum -y install nginx
复制代码
# systemctl start nginx
# systemctl enable nginx
复制代码
mirrors.conf
# vim /etc/nginx/conf.d/mirrors.conf
复制代码
内容以下:nginx
server {
listen 80 default_server;
server_name _;
location / {
# 仓库文件路径
root /opt/aliyun-mirrors/;
# 开启目录显示功能
autoindex on;
# 关闭详细文件大小统计,默认为b,以kb、mb、gb为单位显示
autoindex_exact_size off;
# 开启以服务器时区显示文件修改日期
autoindex_localtime on;
# 以html风格将目录展现在浏览器中
autoindex_format html;
charset utf-8,gbk;
}
}
复制代码
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
# nginx -s reload
复制代码
Everything
版本的ISO镜像文件相对rpm包要丰富一些,且使用ISO镜像来搭建仓库是比较方便快捷的。shell
iso镜像文件
至服务器# mkdir /mnt/centos7-iso
复制代码
# mount -o loop -t iso9660 /tmp/CentOS-7-x86_64-Everything-1908.iso /mnt/centos7-iso/
mount: /dev/loop0 is write-protected, mounting read-only
# echo "/tmp/CentOS-7-x86_64-Everything-1908.iso /mnt/centos7-iso/ iso9660 defaults 0 0" >> /etc/fstab
复制代码
挂载完成,使用方法见下方vim
安装必备工具centos
createrepo
命令用于建立yum源(软件仓库),即为存放于本地特定位置的众多rpm包创建索引,描述各包所需依赖信息,并造成元数据reposync
命令是一个python脚本
。包含在yum-utils
包中。所以,咱们若是要使用reposync命令的时候,须要安装yum-utils包。# yum -y install createrepo yum-utils
复制代码
获取阿里云镜像站配置文件浏览器
# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
复制代码
建立存储仓库路径bash
# mkdir -p /opt/aliyun-mirrors/centos/7/os/{base,extras,updates}
复制代码
使用reposync
同步镜像到本地,命令格式:reposync -r 仓库名(通常为base) -p 目标目录
服务器
# reposync -r base -p /opt/aliyun-mirrors/centos/7/os/
# reposync -r extras -p /opt/aliyun-mirrors/centos/7/os/
# reposync -r updates -p /opt/aliyun-mirrors/centos/7/os/
复制代码
建立yum仓库dom
# createrepo /opt/aliyun-mirrors/centos/7/os/base/
# createrepo /opt/aliyun-mirrors/centos/7/os/extras/
# createrepo /opt/aliyun-mirrors/centos/7/os/updates/
复制代码
至此镜像同步完成,如今配置nginx提供外部访问便可,配置文件如上述nginx部署中配置文件,修改本地仓库地址为你所建立地址便可,访问浏览器以下界面
慎用!由于文件总量很大,会占用服务器较多资源,而且因为流量过大可能会封IP,如非必要请尽可能避免使用该方式
同步脚本以下:
#!/bin/bash
kill -9 $(ps -aux | grep rsync | grep -v grep | awk '{print $2}')
# 待同步仓库
repos=("centos" "epel" "ceph")
# repo存储路径
mirrorsdir="/opt/mirrors/"
# 中科大镜像站rsync地址
# URL="rsync://rsync.mirrors.ustc.edu.cn/repo/"
# 清华大学镜像站rsync地址
URL="rsync://mirrors.tuna.tsinghua.edu.cn/"
if [ ! -d "${mirrorsdir}" ]; then
echo "建立镜像仓库路径:${mirrorsdir}"
mkdir -p ${mirrorsdir}
fi
# 同步仓库
for repo in ${repos[@]}; do
if [ ! -d "${mirrorsdir}/${repo}" ]; then
echo "建立${repo}镜像仓库路径"
mkdir -p ${mirrorsdir}/${repo}
fi
echo "开始同步${repo}相关镜像文件"
rsync -avzPH --delete ${URL}${repo}/ ${mirrorsdir}${repo}/
done
复制代码
保存脚本后直接执行便可,同步完成后能够在浏览器看到相应的文件列表
若是单机使用,则在/etc/yum.repos.d/CentOS-Base.repo
中baseurl
的值为file:///仓库文件路径
,提供给局域网其余服务器的话须要使用Nginx或者Apache,而且baseurl
的值为仓库服务器的IP
或者域名
。
如下为客户端修改repo的脚本,使用时修改仓库地址及IP部分便可
#!/bin/bash
# 自建仓库IP
repoIP="10.100.5.80"
echo "添加域名解析到hosts文件"
cat /etc/hosts | grep ${repoIP}
if [ $? == 1 ]; then
echo "${repoIP} mirrors.akiya.org" >>/etc/hosts
echo "备份CentOS-Base.repo"
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
echo "写入自建源repo配置文件"
cat >/etc/yum.repos.d/CentOS-Base.repo <<EOF
[akiya-mirror]
name=CentOS-$releasever - Base
# 若是是本地仓库则填写本地文件路径便可
# 注意:file:///是三斜线,必定要记住路径不能写错,写错你就走远了,老弟
baseurl=file:///mnt/centos7-iso/
# 远程仓库则填写对应的远程仓库地址
# baseurl=http://mirrors.akiya.org/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOF
yum clean all
yum repolist
fi
复制代码
保存并执行脚本后能够看到已有咱们的自建源了。
复制代码
# yum repolist
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
repo id repo name status
akiya-mirror CentOS- - Base 10,097
repolist: 10,097
复制代码
能够看到咱们安装软件的时候Repository
显示为咱们本身设置的akiya-mirror
使用下述脚本,修改domain
值为仓库所在服务器的IP
或域名
便可。
#!/bin/bash
# 自建仓库IP
repoIP="10.100.5.80"
domain="mirrors.akiya.org"
echo "添加域名解析到hosts文件"
cat /etc/hosts | grep ${repoIP}
if [ $? == 1 ]; then
echo "${repoIP} ${domain}" >>/etc/hosts
echo "备份CentOS-Base.repo"
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
echo "写入自建源repo配置文件"
cat >/etc/yum.repos.d/CentOS-Base.repo <<EOF
[base]
name=CentOS-\$releasever - Base - ${domain}
failovermethod=priority
baseurl=http://${domain}/centos/\$releasever/os/base/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#released updates
[updates]
name=CentOS-\$releasever - Updates - ${domain}
failovermethod=priority
baseurl=http://${domain}/centos/\$releasever/os/updates/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
#additional packages that may be useful
[extras]
name=CentOS-\$releasever - Extras - ${domain}
failovermethod=priority
baseurl=http://${domain}/centos/\$releasever/os/extras/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
EOF
yum clean all
yum repolist
fi
复制代码
使用此方法自建源后/etc/yum.repos.d/CentOS-Base.repo
修改内容请参考中科大CentOS 源使用帮助,把baseurl
的域名替换为你自建仓库服务器的IP
或者域名
便可。
使用iso镜像:
11GB
iso文件
,既能够安装操做系统又能挂载用做本地yum仓库使用reposync同步阿里云等镜像仓库对应发行版本:
9.8GB
;extras(305):408MB
;updates(680):5.5GB
;合计:16GB
使用rsync同步完整仓库:
150GB
,估计CentOS相关仓库文件用500G磁盘应该够了