読者です 読者をやめる 読者になる 読者になる

お布団宇宙ねこ

Haskell ねこ

S3上にyumリポジトリを構築した話(前編)

Amazon S3 ngx_mruby Yum Programming

2年ほどやっているスクフェスが最近マンネリ気味だったから、気分転換に先週あたりからデレステを始めてみたら見事にハマって気がついたらアニメのデレマスまで全話消化していた。そんな近況。

ところで本題。

ということで先日弊社OJTyumリポジトリを作った。それもS3上に。

OJT?

弊社の新卒OJTではいろいろなことをやってる。今回やった仕事もそのOJTのうちの一つ。詳しくは以下のリンクからどうぞ。

blog.hifumi.info

以前はこんな研修もやってた。

blog.hifumi.info

blog.hifumi.info

blog.hifumi.info

背景

以下のパッケージビルダーを落としてきて、 docker-toolbox でビルドすることで ngx_mruby の rpm パッケージが生成される。 でもいちいち手元でビルドしないといけないのは面倒だから yum install で生成される rpm をインストールできたらいいよね、というのがはじまり。

GitHub - hsbt/ngx_mruby-package-builder: Package Builder of ngx_mruby with Docker

検証手順

そこで今回やったのは、運用とかは考えずにS3上にリポジトリを立ててみて yum install できるか検証すること。 (検証だけなのは2日間しか時間がなかったため)

そのために以下の手順で検証を進めることにした。

  1. 必要なファイルやディレクトリ構成など、 rpm の配布方法について調査する
  2. Vagrant 上で2台 linux サーバを立ち上げて、一方を rpm を置いたリポジトリサーバにして、もう一方から yum でインストールしてみる
  3. S3 上にリポジトリサーバを構築、上で立ち上げた Vagrant サーバから同じように yum でインストールしてみる

では、1,2までやってみよう。

rpmの配布方法

ディレクトリの構成は特に指定は無さそうだけど、 nginx.org で公開されている rpm の構成がわかりやすくて良い気がする。 間違いがあったらごめんなさい :bow:

nginx.org/packages/centos/7/x86_64/RPMS/

そして、配布に必要なのは以下の3つ。

  • rpm パッケージ
  • repomd.xml
  • データベースファイル

repomd.xml にはリポジトリの情報が、データベースファイルには rpm パッケージに関する情報がそれぞれ格納されている。

最低限必要そうなものはわかったので、Vagrant 上でリポジトリを構築して yum install できるかどうか検証してみる。

Vagrant 上の yum リポジトリyum install

適当に Vagrantfile を用意してそこに httpd で Web サーバを立ててみる。今回は CentOS 7 。

vagrant up rpm-repo-server
vagrant ssh rpm-repo-server
yum install -y httpd
rm -f /etc/httpd/conf.d/welcome.conf
systemctl stop firewalld
systemctl disable firewalld
systemctl start httpd
systemctl enable httpd
exit
vagrant reload

リポジトリの準備を行う。 配布に使う rpm パッケージは nginx.org ですでに配布されているパッケージを置いてみる。

mkdir -p /var/www/html/repos/cent7/{i386,i686,x86_64,SRPMS}
yum install -y createrepo
yum install -y wget
wget http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.8.0-1.el7.ngx.x86_64.rpm
mv nginx-1.8.0-1.el7.ngx.x86_64.rpm /var/www/html/repos/cent7/x86_64/
createrepo -v /var/www/html/repos/cent7/x86_64/

rpm を取ってくるための VM を用意する。 Vagrant 間で通信できるよう Vagrantfile にて virtualbox__intnet オプションを追記しておくこと。

vagrant up rpm-repo-client

立てた yum リポジトリから yum install してみる。 インストールするためには repo ファイルが必要。 repo ファイルは下みたいにセキュリティ云々気にしない方向ならこれでよさそう。

  • /etc/yum.repos.d/nginx-test.repo
[nginx-test]
name=nginx rpm repo test
baseurl=http://192.168.33.10/cent7/$basearch/
gpgcheck=0
enabled=1

作ってみる。

vagrant ssh rpm-repo-client
vi /etc/yum.repos.d/nginx-test.repo
yum clean all
yum list all | grep nginx
yum install nginx

yum list installed | grep nginx で確認して表示されていればとりあえずOK。

nginx.x86_64                     1:1.8.0-1.el7.ngx                     @nginx-test

まとめ

雑に作業手順をまとめてみたけれどこれでできるはず。

長くなりそうだから S3 での yum リポジトリ構築は次回に。

後編も書けたぞ

ku00.hatenablog.com