S3上にyumリポジトリを構築した話(前編)
2年ほどやっているスクフェスが最近マンネリ気味だったから、気分転換に先週あたりからデレステを始めてみたら見事にハマって気がついたらアニメのデレマスまで全話消化していた。そんな近況。
ところで本題。
新卒 OJT で ngx_mruby の yumrepo 作ってもらったら便利だった
— SHIBATA Hiroshi (@hsbt) October 30, 2015
ということで先日弊社OJTでyumリポジトリを作った。それもS3上に。
OJT?
弊社の新卒OJTではいろいろなことをやってる。今回やった仕事もそのOJTのうちの一つ。詳しくは以下のリンクからどうぞ。
以前はこんな研修もやってた。
背景
以下のパッケージビルダーを落としてきて、 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日間しか時間がなかったため)
そのために以下の手順で検証を進めることにした。
- 必要なファイルやディレクトリ構成など、 rpm の配布方法について調査する
- Vagrant 上で2台 linux サーバを立ち上げて、一方を rpm を置いたリポジトリサーバにして、もう一方から yum でインストールしてみる
- S3 上にリポジトリサーバを構築、上で立ち上げた Vagrant サーバから同じように yum でインストールしてみる
では、1,2までやってみよう。
rpmの配布方法
ディレクトリの構成は特に指定は無さそうだけど、 nginx.org で公開されている rpm の構成がわかりやすくて良い気がする。 間違いがあったらごめんなさい :bow:
nginx.org/packages/centos/7/x86_64/RPMS/
そして、配布に必要なのは以下の3つ。
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 リポジトリ構築は次回に。