CentOS7にyumのリポジトリを作成する


# はじめに
インターネットにアクセスできるサーバにyumのリポジトリを作成し、インタ^ネットに接続できない他のサーバから参照されるような構成にしたいという要望が有ったので、試しにyumのリポジトリを作成してみました。



# メニュー
### yumリポジトリの作成
1. yum updateで最新化
2. createrepo のインストール
3. yum-utilsをインストール
4. パッケージの配置
5. リポジトリの作成
6. Apacheの環境設定


# 環境
Google Computer Engin
CentOS7
Apacheによるアクセス
---

それでは始めてみましょう

# リポジトリの作成
インターネットで接続できるマシンにyumのリポジトリを作成します。

## 1. yum update でパッケージの最新化

` $ sudo yum update `

** kernelを上げないための設定**
下記のように/etc/yum.confに追記してください。
※gccなどカーネルに付随するパッケージをダウンロードする際は、下記の設定を外す必要があります

```js
exclude=kernel* centos*
```
「centos*」は、centOS7.3で必要になりました

## 2. createrepo のインストール
yumのリポジトリを作るには、createrepoコマンドを使います。
 createrepo コマンドは以下のようにしてインストールします
 
 `$ sudo yum install createrepo`
 
 
## 3.yum-utilのインストール
 yumdownloadを使用するのでyum-utilsをインストールします。
 
 `$ sudo yum install yum-utils`
 
## 4.パッケージの配置
 
リポジトリは、任意のパスに作成できます。
ローカルからしかアクセスできない場所に作成してもいいし、apache等のWEBサービスの管理下にリポジトリを作成すれば、HTTP／HTTPS経由で他のシステムからもリポジトリへアクセスできるようになります。
今回はApache経由で他サーバからアクセスさせるので、Apacheでアクセスできる場所にリポジトリを作成します。

リポジトリとするディレクトリを決めて、配布したいrpmパッケージをそのディレクトリへ配置します。

ここでは/var/www/html/yum_repoディレクトリへ下記のパッケージを配置します
・http
・mod_proxy_html
・mod_ssl
※これだとhttpに関連するパッケージが見当たらないというエラーになる
　なので、下記コマンドで必要なパッケージをダウンロードする
 
※yumdownloader に-–resolveを付けると依存関係も解決してダウンロードする
 
```
$ sudo mkdir -p /var/www/html/yum_repo
$ sudo chown $(whoami). /var/www/html/yum_repo
$ cd /var/www/html/yum
$ rpm -qa|grep -v ^gpg-pubkey|sudo xargs -L3 -P5 yumdownloader --cacheonly --

```
 
## 5.リポジトリの作成
createrepo コマンドを使って、yum のリポジトリを作成します。
リポジトリのパスとして指定したディレクトリに配置されているrpmパッケージの情報を読み取って、メタデータが作成され、リポジトリとして動作する形になります。リポジトリとするディレクトリのパスの指定は必須です。

```js
$ sudo createrepo /var/www/html/yum_repo
Spawning worker 0 with 3 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
$ ll
合計 2936
-rw-r--r--. 1 root root 2836228  8月 24 03:01 httpd-2.4.6-67.el7.centos.2.x86_64.rpm
-rw-r--r--. 1 root root   48780  8月 24 03:09 mod_proxy_html-2.4.6-67.el7.centos.2.x86_64.rpm
-rw-r--r--. 1 root root  111596  8月 24 03:09 mod_ssl-2.4.6-67.el7.centos.2.x86_64.rpm
drwxr-xr-x. 2 root root    4096  9月 29 06:08 repodata
```

## 6.Apacheの環境設定
公開用にApacheの設定ファイルを変更します。
yum リポジトリのディレクトリをエイリアスにします。

`sudoedit /etc/httpd/conf/httpd.conf`

```js
Alias /yum /var/www/html/yum_repo
<Directory /var/www/html/yum_repo>
    Options +Indexes
    Order allow,deny
    Allow from all
</Directory>
```

Apacheを再起動します
`sudo systemctl restart httpd.service`


# yumリポジトリにアクセスするサーバの設定

## 1.作成したリポジトリにアクセスしてみる

yum リポジトリを使う側は /etc/yum.repos.d/ にリポジトリの設定ファイルを作成ます。

ここではリポジトリの名前を local にしています。

`$ sudoedit /etc/yum.repos.d/local.repo`

次のような内容で作成します。yum.example.jp は適当読み替えてください。

```js
[local]
name=local
baseurl=http://yum.example.jp/yum_repo/
gpgcheck=0
priority=1
```

なお priority=1 を指定することで local リポジトリを 最優先 にしています。priority については下記を参照してください。


yum update すると、local リポジトリから最新のパッケージがダウンロードされます。

```js
sudo yum check-update
sudo yum update
```

これで初期設定は完了です

---

# yumリポジトリの更新・追加
作成したリポジトリを更新するには、リポジトリとしたディレクトリ内のrpmパッケージを更新し、createrepo コマンドを再実行するだけです。

リポジトリとしたディレクトリ内へ、パッケージを追加したり、おいてあるrpmパッケージを上書き更新、あるいは削除するたびに、手順５の「リポジトリの作成」のコマンドを再度実行し、リポジトリのメタデータを作成しなおす必要があります。

この際、「--update」オプションを使うと差分だけが処理の対象となり、システムへの負荷が軽減されます。

##  新しくパッケージを追加
新しくFTPクライアントをインストールします

```js

$ sudo yumdownloader ncftp
読み込んだプラグイン:fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.scalabledns.com
 * epel: mirrors.cat.pdx.edu
 * extras: repos.lax.quadranet.com
 * updates: mirror.keystealth.org
ncftp-3.2.5-7.el7.x86_64.rpm                                                                            | 340 kB  00:00:01
$ ls -l
合計 3276
-rw-r--r--. 1 root root 2836228  8月 24 03:01 httpd-2.4.6-67.el7.centos.2.x86_64.rpm
-rw-r--r--. 1 root root   48780  8月 24 03:09 mod_proxy_html-2.4.6-67.el7.centos.2.x86_64.rpm
-rw-r--r--. 1 root root  111596  8月 24 03:09 mod_ssl-2.4.6-67.el7.centos.2.x86_64.rpm
-rw-r--r--. 1 root root  347668  4月 15  2014 ncftp-3.2.5-7.el7.x86_64.rpm
drwxr-xr-x. 2 root root    4096  9月 29 06:08 repodata

```

リポジトリを更新

```js
$ sudo createrepo --update /var/www/html/yum_repo
Spawning worker 0 with 1 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
```

後は、リポジトリを使う側で、yum clean all　を実行してから、 yum install なり yum update なりします。

以上