#author("2025-11-23T19:39:12+00:00","default:sysosa","sysosa")
#author("2025-11-25T17:29:58+00:00;2025-11-23T19:39:12+00:00","default:sysosa","sysosa")
内部に抱える計算機が多くなるとyum-updateの参照先を内部に抱えたくなる.
ちょうどwindows-updateの配布パッケージを社内に持つように.

ここではそんなリポジトリのミラーを作ってみた(&color(magenta){ローカルリポジトリ};)

参照先 [[https://www.server-world.info/query?os=CentOS_7&p=localrepo>+https://www.server-world.info/query?os=CentOS_7&p=localrepo]]

***RHEL7系+RHEL8系+RHEL9系[#e717ea2e]
RHEL{7,8,9}系のローカルリポジトリを作ってみる.

&color(magenta){ローカルリポジトリ};サイトは 「repository.sybyl.local」 とします. 
httpが動いてればOSは何でもいいです.

ここにRHEL{7,8,9}系のパッケージデータを集めてみた.  &size(10){epelも};
&size(10){参照 [[https://wiki.rockylinux.org/rocky/repo/>+https://wiki.rockylinux.org/rocky/repo/]]};
#code(nonumber){{
(OSがRHEL7系なら)
yum install httpd rsync createrepo

(OSがRHEL8,9系なら)
dnf install httpd rsync createrepo_c

(RHEL7系CentOS7)
[root@repository ~]# mkdir -p /var/www/html/repos/centos/7/{os,updates,extras}/x86_64   /var/www/html/repos/fedora/epel/7/x86_64
[root@repository ~]# rsync -avz --delete ftp.riken.jp::centos/7/os/x86_64/Packages/      /var/www/html/repos/centos/7/os/x86_64/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::centos/7/updates/x86_64/Packages/ /var/www/html/repos/centos/7/updates/x86_64/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::centos/7/extras/x86_64/Packages/  /var/www/html/repos/centos/7/extras/x86_64/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::fedora/epel/7/x86_64/Packages/    /var/www/html/repos/fedora/epel/7/x86_64/Packages/
[root@repository ~]# cd /var/www/html/repos/centos/7
[root@repository 7]# for i in "os/x86_64" "updates/x86_64" "extras/x86_64" ; do createrepo $i ; done
[root@repository 7]# createrepo /var/www/html/repos/fedora/epel/7/x86_64

(RHEL8系RockyLinux8)
[root@repository ~]# mkdir -p   /var/www/html/repos/rocky/8/{AppStream,BaseOS,Devel,extras,PowerTools}/x86_64/os /var/www/html/repos/fedora/epel/8/{Everything,Modular}/x86_64
[root@repository ~]# rsync -avz --delete ftp.riken.jp::rocky/8/AppStream/x86_64/os/Packages/   /var/www/html/repos/rocky/8/AppStream/x86_64/os/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::rocky/8/BaseOS/x86_64/os/Packages/      /var/www/html/repos/rocky/8/BaseOS/x86_64/os/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::rocky/8/Devel/x86_64/os/Packages/       /var/www/html/repos/rocky/8/Devel/x86_64/os/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::rocky/8/extras/x86_64/os/Packages/      /var/www/html/repos/rocky/8/extras/x86_64/os/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::rocky/8/PowerTools/x86_64/os/Packages/  /var/www/html/repos/rocky/8/PowerTools/x86_64/os/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::fedora/epel/8/Everything/x86_64/Packages/ /var/www/html/repos/fedora/epel/8/Everything/x86_64/Packages
[root@repository ~]# rsync -avz --delete ftp.riken.jp::fedora/epel/8/Modular/x86_64/Packages/    /var/www/html/repos/fedora/epel/8/Modular/x86_64/Packages
[root@repository ~]# cd /var/www/html/repos/rocky/8
[root@repository 8]# for i in "AppStream/x86_64/os" "BaseOS/x86_64/os" "Devel/x86_64/os" "extras/x86_64/os" "PowerTools/x86_64/os" ; do createrepo $i ; done
[root@repository 8]# createrepo /var/www/html/repos/fedora/epel/8/Everything/x86_64
[root@repository 8]# createrepo /var/www/html/repos/fedora/epel/8/Modular/x86_64

(RHEL9系RockyLinux9)
[root@repository ~]# mkdir -p   /var/www/html/repos/rocky/9/{AppStream,BaseOS,CRB,devel,extras,plus}/x86_64/os /var/www/html/repos/fedora/epel/9/Everything/x86_64
[root@repository ~]# rsync -avz --delete ftp.riken.jp::rocky/9/AppStream/x86_64/os/Packages/   /var/www/html/repos/rocky/9/AppStream/x86_64/os/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::rocky/9/BaseOS/x86_64/os/Packages/      /var/www/html/repos/rocky/9/BaseOS/x86_64/os/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::rocky/9/CRB/x86_64/os/Packages/         /var/www/html/repos/rocky/9/CRB/x86_64/os/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::rocky/9/devel/x86_64/os/Packages/       /var/www/html/repos/rocky/9/devel/x86_64/os/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::rocky/9/extras/x86_64/os/Packages/      /var/www/html/repos/rocky/9/extras/x86_64/os/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::rocky/9/plus/x86_64/os/Packages/        /var/www/html/repos/rocky/9/plus/x86_64/os/Packages/
[root@repository ~]# rsync -avz --delete ftp.riken.jp::fedora/epel/9/Everything/x86_64/Packages/ /var/www/html/repos/fedora/epel/9/Everything/x86_64/Packages/
[root@repository ~]# cd /var/www/html/repos/rocky/9
[root@repository 9]# for i in "AppStream/x86_64/os" "BaseOS/x86_64/os" "CRB/x86_64/os" "devel/x86_64/os" "extras/x86_64/os" "plus/x86_64/os" ; do createrepo $i ; done
[root@repository 9]# createrepo /var/www/html/repos/fedora/epel/9/Everything/x86_64
}}
&size(10){「reposync」コマンドでより簡単にできそうだけど、rsyncを使ってます};

以上で準備は完了です. 次にこの作ったリポジトリを使ってみます. 「/etc/yum.repos.d/*.repo」のリポジトリ参照先を変更します
(RockyLinux9の場合)
-rocky.repo
#code(diff,nonumber){{
--- /etc/yum.repos.d/rocky.repo.orig    2023-04-27 14:35:55.000000000 +0900
+++ /etc/yum.repos.d/rocky.repo 2023-07-30 14:16:02.515834020 +0900
@@ -10,8 +10,7 @@

 [baseos]
 name=Rocky Linux $releasever - BaseOS
-mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever$rltype
-#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/BaseOS/$basearch/os/
+baseurl=http://repository.sybyl.local/repos/rocky/$releasever/BaseOS/$basearch/os/
 gpgcheck=1
 enabled=1
 countme=1
@@ -38,8 +37,7 @@

 [appstream]
 name=Rocky Linux $releasever - AppStream
-mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=AppStream-$releasever$rltype
-#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/AppStream/$basearch/os/
+baseurl=http://repository.sybyl.local/repos/rocky/$releasever/AppStream/$basearch/os/
 gpgcheck=1
 enabled=1
 countme=1
@@ -66,8 +64,7 @@

 [crb]
 name=Rocky Linux $releasever - CRB
-mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=CRB-$releasever$rltype
-#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/CRB/$basearch/os/
+baseurl=http://repository.sybyl.local/repos/rocky/$releasever/CRB/$basearch/os/
 gpgcheck=1
 enabled=0
 countme=1
}}
-rocky-devel.repo
#code(diff,nonumber){{
--- /etc/yum.repos.d/rocky-devel.repo.orig      2023-04-27 14:35:55.000000000 +0900
+++ /etc/yum.repos.d/rocky-devel.repo   2023-07-30 14:19:27.142867010 +0900
@@ -4,8 +4,7 @@

 [devel]
 name=Rocky Linux $releasever - Devel WARNING! FOR BUILDROOT ONLY DO NOT LEAVE ENABLED
-mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=devel-$releasever$rltype
-#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/devel/$basearch/os/
+baseurl=http://repository.sybyl.local/repos/rocky/$releasever/devel/$basearch/os/
 gpgcheck=1
 enabled=0
 countme=1
}}
-rocky-extras.repo
#code(diff,nonumber){{
--- /etc/yum.repos.d/rocky-extras.repo.orig     2023-04-27 14:35:55.000000000 +0900
+++ /etc/yum.repos.d/rocky-extras.repo  2023-07-30 14:18:01.814046124 +0900
@@ -10,8 +10,7 @@

 [extras]
 name=Rocky Linux $releasever - Extras
-mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=extras-$releasever$rltype
-#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/extras/$basearch/os/
+baseurl=http://repository.sybyl.local/repos/rocky/$releasever/extras/$basearch/os/
 gpgcheck=1
 enabled=1
 countme=1
@@ -38,8 +37,7 @@

 [plus]
 name=Rocky Linux $releasever - Plus
-mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=plus-$releasever$rltype
-#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/plus/$basearch/os/
+baseurl=http://repository.sybyl.local/repos/rocky/$releasever/plus/$basearch/os/
 gpgcheck=1
 enabled=0
 countme=1
}}
-epel.repo
#code(diff,nonumber){{
--- /etc/yum.repos.d/epel.repo.orig     2023-04-15 06:22:03.000000000 +0900
+++ /etc/yum.repos.d/epel.repo  2023-07-30 14:31:16.907971561 +0900
@@ -2,8 +2,7 @@
 name=Extra Packages for Enterprise Linux $releasever - $basearch
 # It is much more secure to use the metalink, but if you wish to use a local mirror
 # place its address here.
-#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/
-metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir
+baseurl=http://repository.sybyl.local/repos/fedora/epel/$releasever/Everything/$basearch/
 enabled=1
 gpgcheck=1
 countme=1
}}

これで「yum update/install」らはローカルリポジトリ「repository.sybyl.local」を参照するようになります.
&size(10){repoファイルの変数ですが、「$contentdir」->「pub/rocky」、「$releasever」->「9」、「$basearch」->「x86_64」と対応するみたい};


***ローカルに置いた場合 [#p4f7cc22]

ミラーをローカルに配置した場合、あるいはUSBにリポジトリのデータを入れて、それでアプリを入れたい場合

「/mnt/repo/rocky/9/」「/mnt/repo/fedora/epel/9/」にあるなら
#code(nonumber){{
[root@rockylinux9 ~]# cd /mnt/repo/rocky/9/
[root@rockylinux9 ~]# dnf localinstall /mnt/repo/rocky/9/AppStream/x86_64/os/Packages/c/createrepo_c-0.20.1-2.el9.x86_64.rpm \
                                       /mnt/repo/rocky/9/AppStream/x86_64/os/Packages/c/createrepo_c-libs-0.20.1-2.el9.x86_64.rpm

[root@rockylinux9 ~]# (cd /mnt/repo/rocky/9 ; for i in "AppStream/x86_64/os" "BaseOS/x86_64/os" "CRB/x86_64/os" "devel/x86_64/os" "extras/x86_64/os" "plus/x86_64/os" ; do createrepo $i ; done )
[root@rockylinux9 ~]# createrepo /var/www/html/repos/fedora/epel/9/Everything/x86_64
[root@rockylinux9 ~]# createrepo /mnt/repo/fedora/epel/9/Everything/x86_64
}}
と準備しつつ、「/etc/yum.repos.d/*.repo」のすべてを別の場所に移して下記ファイルを作る
#code(nonumber){{
[root@rockylinux9 ~]# mkdir /etc/yum.repos.d.backup
[root@rockylinux9 ~]# mv /etc/yum.repos.d/*.repo /etc/yum.repos.d.backup/
[root@rockylinux9 ~]# vi /etc/yum.repos.d/local-rocky.repo
[local-baseos]
name=local - BaseOS
baseurl=file:///mnt/repo/rocky/9/BaseOS/x86_64/os
gpgcheck=0
enabled=1

[local-appstream]
name=local - AppStream
baseurl=file:///mnt/repo/rocky/9/AppStream/x86_64/os
gpgcheck=0
enabled=1

[local-crb]
name=local - CRB
baseurl=file:///mnt/repo/rocky/9/CRB/x86_64/os
gpgcheck=0
enabled=1

[root@rockylinux9 ~]# vi /etc/yum.repos.d/local-epel.repo
[local-epel]
name=local - epel
baseurl=file:///mnt/repo/fedora/epel/9/Everything/x86_64
enabled=1
gpgcheck=0

[root@rockylinux9 ~]#
}}
っでキャッシュを作り直します
#code(nonumber){{
[root@rockylinux9 ~]# dnf clean all
[root@rockylinux9 ~]# dnf makecache
local - epel                                171 MB/s |  22 MB     00:00
local - BaseOS                               62 MB/s | 2.1 MB     00:00
local - AppStream                           128 MB/s | 7.6 MB     00:00
local - CRB                                  66 MB/s | 2.3 MB     00:00
Metadata cache created.

[root@rockylinux9 ~]#
}}

これでローカルに置いたレポジトリを使えるようになります



***ubuntuのローカルリポジトリ [#ada90cd3]
使っているノードがubuntuなら「apt-mirror」が便利らしいが、ここではRHEL系の上で行いたい
「debmirror」が簡単に作れるそうな [[https://github.com/bviktor/debmirror-runner>+https://github.com/bviktor/debmirror-runner]]
&size(10){っがRocky9向けには用意されていない様子..};

#code(nonumber){{
yum install --enablerepo=epel debmirror
}}
まずkeyが必要. 簡単にubuntu22.04の/usr/share/keyrings/ubuntu-archive-keyring.gpgを持ってくる. っで
#code(nonumber){{
mkdir /opt/UbuntuMirror/mirrorkeyring
gpg --no-default-keyring --keyring /opt/UbuntuMirror/mirrorkeyring/trustedkeys.gpg --import /usr/share/keyrings/ubuntu-archive-keyring.gpg
}}
として「/opt/UbuntuMirror/mirrorkeyring/trustedkeys.gpg」を作る.
あとは/etc/debmirror.confのパラメータを弄る
#code(diff,nonumber){{
--- /etc/debmirror.conf.orig    2022-10-03 20:46:52.000000000 +0900
+++ /etc/debmirror.conf 2023-07-30 20:12:26.499895169 +0900
@@ -12,7 +12,7 @@
 # files.

 # Location of the local mirror (use with care)
-# $mirrordir="/path/to/mirrordir"
+$mirrordir="/var/www/html/repos/ubuntu";

 # Output options
 $verbose=0;
@@ -20,14 +20,14 @@
 $debug=0;

 # Download options
-$host="ftp.debian.org";
+$host="ftp.riken.jp";
 $user="anonymous";
 $passwd="anonymous@";
-$remoteroot="debian";
-$download_method="ftp";
-@dists="sid";
-@sections="main,main/debian-installer,contrib,non-free,non-free-firmware";
-@arches="i386";
+$remoteroot="ubuntu";
+$download_method="rsync";
+@dists="jammy,jammy-security,jammy-updates";
+@sections="main,restricted,universe,multiverse";
+@arches="amd64";
 # @ignores="";
 # @excludes="";
 # @includes="";
@@ -36,9 +36,9 @@
 $omit_suite_symlinks=0;
 $skippackages=0;
 # @rsync_extra="doc,tools";
-$i18n=0;
+$i18n=1;
 $getcontents=0;
-$do_source=1;
+$do_source=0;
 $max_batch=0;

 # @di_dists="dists";
}}
その後にミラーリポジトリを作らせる
#code(nonumber){{
export GNUPGHOME=/opt/UbuntuMirror/mirrorkeyring
debmirror 
}}
参照先 [[https://help.ubuntu.com/community/Debmirror>+https://help.ubuntu.com/community/Debmirror]]
出来上がったリポジトリのサイズは「203GB」でした.


次に構築したubuntuリポジトリを参照させる.

#code(nonumber){{
root@ubuntu22:~# vi /etc/apt/sources.list
deb [arch=amd64] http://repository.sybyl.local/repos/ubuntu/ jammy main restricted
deb [arch=amd64] http://repository.sybyl.local/repos/ubuntu/ jammy-updates main restricted
deb [arch=amd64] http://repository.sybyl.local/repos/ubuntu/ jammy universe
deb [arch=amd64] http://repository.sybyl.local/repos/ubuntu/ jammy-updates universe
deb [arch=amd64] http://repository.sybyl.local/repos/ubuntu/ jammy multiverse
deb [arch=amd64] http://repository.sybyl.local/repos/ubuntu/ jammy-updates multiverse
deb [arch=amd64] http://repository.sybyl.local/repos/ubuntu/ jammy-backports main restricted universe multiverse
deb [arch=amd64] http://repository.sybyl.local/repos/ubuntu/ jammy-security main restricted
deb [arch=amd64] http://repository.sybyl.local/repos/ubuntu/ jammy-security universe
deb [arch=amd64] http://repository.sybyl.local/repos/ubuntu/ jammy-security multiverse

root@ubuntu22:~# 
root@ubuntu22:~# apt update
}}
リポジトリを更新したら「apt update」を実施します. これで作ったローカルリポジトリが参照され、閉鎖環境でアプリの更新が可能となる
&size(10){クライアントの「/etc/hosts」には「repository.sybyl.local」のエントリーを載せる};
1

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS