yumリポジトリサーバの構築方法

最新の記事は、以下に記載しました。
https://hana-shin.hatenablog.com/entry/2023/03/29/234856

#1 環境
ゲストマシンはサーバとクライアントの2台構成です。
サーバ、クライアントともに下記設定です。

```
[root@server ~]# cat /etc/redhat-release
CentOS Linux release 7.3.1611 (Core)

[root@server ~]# uname -r
3.10.0-514.el7.x86_64

[root@server ~]# cat /etc/hosts
192.168.0.10 server
192.168.0.110 client


                  192.168.0.0/24
   client ---------------------------- server(yumリポジトリサーバ)
         .110                         .10
```


#2 事前準備
server(yumリポジトリサーバ)で下記設定を行います。

```
httpdパッケージをインストールする。
[root@server ~]# yum install httpd

yumdownloaderコマンドを使うため、yum-utilsパッケージをインストールする。
[root@server ~]# yum install yum-utils

createrepoパッケージをインストールする。
[root@server ~]# yum install createrepo
[root@server ~]# createrepo --version
createrepo 0.9.9

```

#3 ローカルディスク経由でyumリポジトリサーバにアクセスする方法
ここで使うマシンは、serverの1台だけです。
serverの/tmp/repo配下にリポジトリを作成してみます。

```
リポジトリ用のディレクトリを作成する。
[root@server ~]# mkdir /tmp/repo

repoファイルを作成する。
[root@server ~]# vi /etc/yum.repos.d/local.repo
[root@server ~]# cat /etc/yum.repos.d/local.repo
[local]
name=Test Repo
baseurl=file:///tmp/repo
gpgcheck=0

データベースを作成する。
[root@server ~]# createrepo --database /tmp/repo
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

/tmp/repoに移動する。
[root@server ~]# cd /tmp/repo/

ディレクトリを確認する。repodataディレクトリが生成されたことがわかる。
[root@server repo]# ls -F
repodata/

テスト用のrpmパッケージをダウンロードする。
[root@server repo]# yumdownloader --disablerepo=* --enablerepo=base bc
[root@server repo]# ls -F
bc-1.06.95-13.el7.x86_64.rpm  repodata/

ファイルを追加したので、データベースを更新する。
[root@server repo]# createrepo --update /tmp/repo/
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 0 pkgs
Spawning worker 2 with 0 pkgs
Spawning worker 3 with 0 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

yumキャッシュをクリアする。
[root@server repo]# yum clean all

localリポジトリのパッケージを確認する。bcパッケージ(★)が存在することがわかる。
[root@server repo]# yum --disablerepo=* --enablerepo=local --showduplicates list bc
読み込んだプラグイン:fastestmirror, priorities
local                                                   | 2.9 kB  00:00:00
local/primary_db                                        | 2.2 kB  00:00:00
Determining fastest mirrors
インストール済みパッケージ
bc.x86_64                        1.06.95-13.el7                 @test
利用可能なパッケージ
★bc.x86_64                        1.06.95-13.el7                 local
```


#4 ネットワーク経由でyumリポジトリサーバにアクセスする方法
ここで使うマシンは、serverとclientの2台です。
clientからserver(yumリポジトリサーバ)にyumコマンドでアクセスしてみます。

##4.1 server側の設定

```
httpdを起動する。
[root@server ~]# systemctl start httpd

ポート番号を確認する。
[root@server ~]# lsof -i:80 -P
COMMAND  PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
httpd   1386   root    4u  IPv6  21626      0t0  TCP *:80 (LISTEN)
httpd   1408 apache    4u  IPv6  21626      0t0  TCP *:80 (LISTEN)
httpd   1410 apache    4u  IPv6  21626      0t0  TCP *:80 (LISTEN)
httpd   1411 apache    4u  IPv6  21626      0t0  TCP *:80 (LISTEN)
httpd   1412 apache    4u  IPv6  21626      0t0  TCP *:80 (LISTEN)
httpd   1413 apache    4u  IPv6  21626      0t0  TCP *:80 (LISTEN)
httpd   1949 apache    4u  IPv6  21626      0t0  TCP *:80 (LISTEN)

80番ポートへのアクセスを許可する。
[root@server ~]# firewall-cmd --add-port=80/tcp
success

リポジトリ用のディレクトリを作成する。
[root@server ~]# mkdir /var/www/html/repo

リポジトリを作成する。
[root@server ~]# createrepo --database /var/www/html/repo/
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

/var/www/html/repoに移動する。
[root@server ~]# cd /var/www/html/repo/
[root@server repo]# pwd
/var/www/html/repo

ディレクトリを確認する。repodataディレクトリが作成されたことがわかる。
[root@server repo]# ls -F
repodata/

テスト用のrpmパッケージをダウンロードする。
[root@server repo]# yumdownloader --disablerepo=* --enablerepo=base bc

ファイルを確認する。bcパッケージがダウンロードできたことがわかる。
[root@server repo]# ls -F
bc-1.06.95-13.el7.x86_64.rpm  repodata/

リポジトリをアップデートする。
[root@server repo]# createrepo --update /var/www/html/repo/
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 0 pkgs
Spawning worker 2 with 0 pkgs
Spawning worker 3 with 0 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
```


##4.2 client側の設定

```
repoファイルを作成する。
[root@client ~]# vi /etc/yum.repos.d/remote.repo
[root@client ~]# cat /etc/yum.repos.d/remote.repo
[remote]
name=Remote Repo
baseurl=http://192.168.0.10/repo
gpgcheck=0

yumキャッシュをクリアする。
[root@client ~]# yum clean all

remoteリポジトリにbcパッケージがあるかどうかを確認する。remoteリポジトリにbcパッケージ(★)があることがわかる。
[root@client ~]# yum --disablerepo=* --enablerepo=remote --showduplicates list bc
読み込んだプラグイン:fastestmirror, priorities
Loading mirror speeds from cached hostfile
インストール済みパッケージ
bc.x86_64                        1.06.95-13.el7               @base
利用可能なパッケージ
★bc.x86_64                        1.06.95-13.el7               remote
```

#X 参考情報
[yum リポジトリを作成する](http://kazmax.zpp.jp/linux_beginner/yum_createrepo.html)
[6.3.6. YUM リポジトリの作成](https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/deployment_guide/sec-yum_repository)
[ローカル環境内に yum リポジトリを作成する](http://dotnsf.blog.jp/archives/2807753.html)
[第４回：yumレポジトリサーバの設定](https://thinkit.co.jp/free/article/0706/14/4/)