お布団宇宙ねこ

にゃーん

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

前回のあらすじ

ku00.hatenablog.com

前編では以下の3つ検証手順のうちの1,2をやった。

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

今回はブログタイトルでもある本題の3をやるぞ。

S3 上の yum リポジトリyum install

S3上の yum リポジトリには ngx_mruby-package-builder で生成した rpm を置いておきたいから、リポジトリ作成に入る前に用意しておこう。本題ではないから docker-toolbox のインストール解説とかは特にやらない。

まず、 ngx_mruby の rpm パッケージを x86_64 以下に置いて createrepo コマンドでリポジトリの準備を行う。 そして、ホストマシン側に以下のものを落としておく。

  • rpm パッケージ
  • repodata (repomd.xml とデータベースファイルを含んだディレクトリ)
mkdir pkg
vagrant ssh rpm-repo-server
createrepo /var/www/repos/cent7/x86_64/
exit
scp -F ssh.config -r vagrant@rpm-repo-server:/var/www/repos/cent7/x86_64/ ./pkg

次に、上で用意したものを S3 へアップロードするための準備を行う。

S3 バケットの作成

バケット名は今回は rpm-repos にした。また、ディレクトリは rpm-repos/centos/7/x86_64 まで作っておく。

AWS CLI をインストール

以下のリンクにインストール方法等が書かれているのでその通りにやる。

http://docs.aws.amazon.com/ja_jp/kinesis/latest/dev/kinesis-tutorial-cli-installation.html

アクセスキーの作成と登録

以下のリンクの通りにやる。先ほどインストールした AWS CLI を使って aws configure でアクセスキーが登録できる。また、登録した情報は ~/.aws/credentials から確認できる

https://docs.aws.amazon.com/ja_jp/AWSSimpleQueueService/latest/SQSGettingStartedGuide/AWSCredentials.html

S3 へのアクセスを許可

IAM コンソールのユーザから登録したユーザを選択して、アクセス許可からポリシーのアタッチで S3 のポリシーを追加する。 aws s3 ls でバケットが表示されればOK

ホスティングの有効化

バケットのプロパティから有効にする。インデックスドキュメントおよびエラードキュメントは適当に存在しないファイルでもいいと思う。今回は index.html と入力しておいた。

そして先ほどホストマシンに落としてきたファイルを S3 へアップロードする。

aws s3 cp --recursive --acl public-read pkg/ s3://rpm-repos/centos/7/x86_64/

これでリポジトリの準備は完了。下のような repo ファイルを用意して yum install してみよう。 今回は前回の記事で使った rpm-repo-client を使う。

  • /etc/yum.repos.d/nginx-mruby.repo
[nginx-mruby]
name=nginx-mruby rpm repo test
baseurl=http://rpm-repos.s3-website-ap-northeast-1.amazonaws.com/centos/7/$basearch/
gpgcheck=0
enabled=1
yum clean all
yum list all | grep nginx
yum remove nginx
yum install nginx
yum list installed | grep nginx

以上。

あとはインストールした ngx_mruby の動作確認もやる。 nginx の conf ファイルに下のようなサンプルコードを追加してみる。

  • /etc/nginx/conf.d/default.conf
location /hello {
    mruby_content_handler_code '
        Nginx.rputs "hello"
        Nginx.echo "world!"
    ';
}

そして起動。

systemctl start nginx

[VagrantのIP]/hello にアクセスして helloworld! が表示されていれば成功。

まとめ

hsbt さん指導のもと、いくつかのステップに分けて調査と検証を繰り返すことでなんとか S3 上に yum リポジトリを構築して yum install できるようになった。hsbt さんありがとうございました。おかげで粗い点がたくさんあったもののなんとかゴールすることができました。

また、実際に構築した yum リポジトリからインストールした ngx_mruby の動作確認にご協力いただいた おっくん さん、 ひろやん さん、 けんちゃんくん さんもありがとうございました。

今回は検証用に粗く作っただけだけど、近いうちに弊社の公式リポジトリができて、世界中からインストールできる日が来るかもしれない。

参考サイト