CentOS7 リポジトリサーバ クイックスタート

**イントラ内にリポジトリサーバを設置する**

この手順内でリポジトリサーバのホストアドレスは便宜上
**172.27.0.67**とする

#####個別に必要なパッケージを導入
```
# yum install httpd rsync createrepo
```

#####パッケージを設置するディレクトリを作成
```
# mkdir -p /var/www/html/centos/7/{os,updates,extras}/
```

#####手動rsyncでパッケージをローカルにダウンロード
```作成するyumリポジトリサーバで配布するパッケージを既存のミラーサイトからダウンロード。同期先に今回は理化学研究所様のミラーサイト使わせていただく。
rsync -rptvz --delete rsync://ftp.riken.jp/centos/7/os/ /var/www/html/centos/7/os/
rsync -rptvz --delete rsync://ftp.riken.jp/centos/7/updates/ /var/www/html/centos/7/updates/
rsync -rptvz --delete rsync://ftp.riken.jp/centos/7/extras/ /var/www/html/centos/7/extras/

※結構時間かかるので気長に待つ。

rsyncオプションメモ
-r	ディレクトリ内を再帰的にコピー。
-p	パーミッションをそのままコピー。
-t	タイムスタンプをそのままコピー。
-v	コピーしているファイル名やバイト数などの情報を表示。
-z	通信を圧縮。
-u  コピー先がコピー元より新しいならコピーしない
```

#####リポジトリサーバhttp設定

```
# cd /etc/httpd/conf.d
# mkdir old
# mv .* old
# echo '<directory "/var/www/html/centos">' >  /etc/httpd/conf.d/centos-mirror.conf
# echo '  options +indexes'                 >> /etc/httpd/conf.d/centos-mirror.conf
# echo '</directory>'                       >> /etc/httpd/conf.d/centos-mirror.conf
# systemctl restart  httpd
```

##### httpリクエストを受けるホストIPを設定

```
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
```

```lang:/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=dhcp
HWADDR=XX:XX:XX:XX:XX:XX
TYPE=Ethernet
IPADDR=172.27.0.67
NETMASK=255.255.255.0
IPV6INIT=no
```

```
# systemctl restart NetworkManager
# systemctl restart network
```

ホストから以下のアドレスで接続確認する

```
# curl 172.27.0.67/centos/7/os/x86_64/Packages/
```

```
# vi /etc/yum.repos.d/CentOS-Base.repo
```

```lang:/etc/yum.repos.d/CentOS-Base.repo
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
baseurl=http://172.27.0.67/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
baseurl=http://172.27.0.67/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
baseurl=http://172.27.0.67/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
```

参照しているリポジトリが設定したホストである事を確認

```
# du -sh /var/cache/yum
# yum clean all
# yum repolist all
# du -sh /var/cache/yum
```

定期的に差分同期する為にcronとスクリプトを仕込む

```
# yum install cronie-noanacron
# yum remove cronie-anacron
# systemctl start crond
# systemctl enable crond
# cat /etc/cron.d/dailyjobs
```

```lang:/etc/cron.daily/reposync.sh
#!/bin/bash
rsync -aurvz --delete rsync://ftp.riken.jp/centos/7/os/ /var/www/html/centos/7/os/ > /tmp/reposync.centos_7_os.log
rsync -aurvz --delete rsync://ftp.riken.jp/centos/7/updates/ /var/www/html/centos/7/updates/ > /tmp/reposync.centos_7_updates.log
rsync -aurvz --delete rsync://ftp.riken.jp/centos/7/extras/ /var/www/html/centos/7/extras/ > /tmp/reposync.centos_7_extras.log
```

「cron.daily」をミラーサイトと同期したい時刻に変更

```lang:/etc/cron.d/dailyjobs
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# run-parts
01 00 * * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.daily
22 4 * * 0 root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.weekly
42 4 1 * * root [ ! -f /etc/cron.hourly/0anacron ] && run-parts /etc/cron.monthly
# ll /tmp/
```