使用 Rsync 和 Nginx 创建 Rocky Linux 本地仓库镜像
本文最后更新于 344 天前,其中的信息可能已经有所发展或是发生改变。

前述

随着 Rocky Linux 多个版本的发行,国内各大云厂商已经开始在自家的 ECS 产品系列镜像中添加了 Rocky Linux,各方面已经成熟,版本发布趋于稳定,很高兴宣布 Rocky Linux 可投入生产。

配置本地存储库镜像目录

因为存储库镜像都比较大,所以一般需要单独创建一个磁盘用于存放对应文件,所以这里单独挂载了一个100GB的磁盘,用于存储仓库镜像。

# 初始化磁盘
[root@localhost ~]# mkfs.xfs /dev/sdb

# 创建本地仓库目录
[root@localhost ~]# mkdir -p /data

# 挂载磁盘
[root@localhost ~]# mount /dev/sdb /data

# 创建rocky源目录
[root@localhost ~]# mkdir -p /data/repos/rocky

# 查看磁盘UUID
[root@localhost ~]# blkid | grep sdb
/dev/sdb: UUID="19eab4e2-0cab-498c-95e8-60cd54d64625" BLOCK_SIZE="512" TYPE="xfs"

# 设置开机自动挂载磁盘/dev/sdb
[root@localhost ~]# echo "UUID=19eab4e2-0cab-498c-95e8-60cd54d64625  /data                   xfs     defaults        0 0" >> /etc/fstab

# 确保配置是正常的
[root@localhost ~]# cat /etc/fstab
/dev/mapper/rl-root     /                       xfs     defaults        0 0
UUID=5e85ff20-6774-4dd3-8239-2de3eae0eb20 /boot                   xfs     defaults        0 0
/dev/mapper/rl-swap     none                    swap    defaults        0 0
UUID=19eab4e2-0cab-498c-95e8-60cd54d64625  /data                   xfs     defaults        0 0

配置仓库同步脚本

目前 Rocky Linux 已在多国创建镜像仓库,Rocky Linux 中文社区 已与网易源达成共识,在国内上线 Rocky Linux 源。

# 安装同步软件
dnf install -y rsync

# 创建同步脚本
# 这是简单说一下rsync各参数的意思
# --delete: 将源中不存在的文件进行删除
# -a: 归档(压缩)模式,表示以递归方式传输文件,并保持所有文件属性等同于
# -v: 输出详细同步信息
# -q: 安静模式,禁止显示非错误消息
# -z: 在传输过程中进行压缩
# -S: 对稀疏文件进行特殊处理以节省空间(如虚拟机文件)
# -P: 在传输过程中显示进度
# -H: 保留硬链接,如果您愿意的话,木子建议使用-l选项同来保存软链接(符号链接)
# --delay-updates: 将所有更新的文件放在整个下载的末尾。也就是说,它不会在每次下载新文件时都进行更新,但是相反,如果有100个新文件,则在完成100个新文件后,将它们重新同步到位。

[root@localhost ~]# cat > /etc/rocky8_repo_sync1.sh << EOF
#!/bin/bash
repos_base_dir="/data/repos/rocky/"

if [[ -d "\$repos_base_dir" ]] ; then
  rsync -avzqlH --delete --delay-updates rsync://mirrors.vinters.com/rocky  "\$repos_base_dir"
fi
EOF

# 设置每天晚上0点30同步
[root@localhost ~]# crontab -e
30 0 * * * /etc/rocky8_repo_sync.sh

# 初始化同步
[root@localhost ~]# /etc/rocky8_repo_sync.sh

# 确保对应目录开始同步文件
[root@localhost ~]# ll
总用量 8
lrwxrwxrwx.  1 root root    3 4月  30 17:11 8 -> 8.3
drwxr-xr-x. 11 root root  160 5月   4 09:46 8.3
-rw-r--r--.  1 root root 1672 5月   3 17:11 RPM-GPG-KEY-rockyofficial
-rw-r--r--.  1 root root 1672 5月   3 17:11 RPM-GPG-KEY-rockytesting

Nginx 配置

这里的 Nginx 配置,主要用于为其它 Rocky Linux 用户提供 dnf 源服务,方便本地用户快速获取软件包。

# 安装nginx
dnf install -y nginx

# Nginx配置
[root@localhost ~]# cat > /etc/nginx/conf.d/rockylinux.conf << EOF
server {
        listen 80;
        server_name mirror.rockylinux.cn;
        root /data/repos/rocky/;

       location / {
                autoindex on;
        }
}
server {
        listen 443 ssl http2;
        server_name mirror.rockylinux.cn;
        ssl_session_timeout 1d;
        ssl_session_cache shared:SSL:50m;
        ssl_session_tickets on;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
        ssl_prefer_server_ciphers on;
        ssl_dhparam /etc/nginx/cert/dhparam.pem;
        ssl_certificate /etc/nginx/cert/mirror.rockylinux.cn.pem;
        ssl_certificate_key /etc/nginx/cert/mirror.rockylinux.cn.key;
        add_header Strict-Transport-Security "max-age=15768000;includeSubDomains; preload;";
        add_header Referrer-Policy "no-referrer";
        add_header X-Content-Type-Options nosniff;
        add_header X-XSS-Protection "1; mode=block";
        add_header X-Robots-Tag none;
        add_header X-Download-Options noopen;
        add_header X-Permitted-Cross-Domain-Policies none;
        root /data/repos/rocky/;

       location / {
                autoindex on;
        }
}
EOF

# 测试Nginx配置是否正确
[root@localhost ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

# 启动Nginx
[root@localhost ~]# systemctl start nginx

# 设置开机自启动
[root@localhost ~]# systemctl enable nginx

# 设置防火墙允许http&https
[root@localhost ~]# firewall-cmd --zone=public --permanent --add-service=http
[root@localhost ~]# firewall-cmd --zone=public --permanent --add-service=https
# 重载防火墙配置
[root@localhost ~]# firewall-cmd --reload

# 设置SELinux
[root@localhost ~]# semanage fcontext -a -t httpd_sys_content_t "/data/repos/rocky(/.*)?"
[root@localhost ~]# restorecon -Rv /data/repos/rocky
# 或直接禁用SELinux
[root@localhost ~]# sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
[root@localhost ~]# setenforce 0

确保 https://mirror.rockylinux.cn 可以正常打开即可。

写在最后

在写完这篇博文的时候,本地存储库已经同步完成,总共90G,这个存储库还是很大的。如果需要使用本地源,还需要修改 /etc/yum.repos.d/ 目录中的相关配置文件。

Avatar photo

关于 木子

Founder of the Rocky Linux Chinese community, MVP、VMware vExpert、TVP, advocate for cloud native technologies, with over ten years of experience in site reliability engineering (SRE) and the DevOps field. Passionate about Cloud Computing、Microservices、CI&CD、DevOps、Kubernetes, currently dedicated to promoting and implementing Rocky Linux in Chinese-speaking regions.
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。

评论

  1. ynzwj
    2年前
    2022-11-29 9:12:42

    个人有几个建议或疑问:
    1 磁盘挂载配置完成后,文章中未明确说明是否需要重启服务器挂载。按实测,如果不重启,只修改/etc/fstab 系统是不能正常挂载的。
    2 首次使用rsync同步源完成后,后续自动同步时,同步完成后,是否需要更新repodata下的相关文件,还是在更新的同时就会更新repodata文件夹下的相关内容。如果不更新repodata文件下的内容的话,使用本地源安装时,检索时最新同步的包的信息可能就会有缺失?
    3 nginx的配置文件中使用了https方式访问,个人觉得本身就是为了在内部本地局域网之内搭建,个人觉得https就没有必要了,直接使用http的方式应该就可以了。

    • Avatar photo
      博主
      ynzwj
      2年前
      2022-11-29 13:52:26

      1)放在/etc/fstab是为了重启后能够自动挂载,未重启的情况下,可以使用mount挂载。
      2)正常逻辑是会自动更新repodata目录。
      3)不管是内网使用还是外网使用,建议采用https,let’s encrypt证书不收费,建议采用。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇