Yum
リポジトリ

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などカーネルに付随するパッケージをダウンロードする際は、下記の設定を外す必要があります

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パッケージの情報を読み取って、メタデータが作成され、リポジトリとして動作する形になります。リポジトリとするディレクトリのパスの指定は必須です。

$ 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

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 は適当読み替えてください。

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

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

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

sudo yum check-update
sudo yum update

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


yumリポジトリの更新・追加

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

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

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

新しくパッケージを追加

新しくFTPクライアントをインストールします

$ 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

リポジトリを更新

$ 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 なりします。

以上