プライベートYUMレポジトリを作ろう
アドベントカレンダー初日!今日からソニックムーブのスタッフブログもアドベントカレンダー開始です!
ここ最近、Immutable Infrastracture という言葉が賑わっており、Docker や Packer など、もろもろツールが、だいぶ増えてきました。
ですが、今回は、その前段階として、パッケージ化してますか?というお話です。
Chef や Ansible といったプロビジョニングツールを利用して、Packer/Chef or Packer/Ansible といった組み合わせで、AMI を構築するにしても、パッケージ管理をしていないと、面倒なことが増えてしまうと思います。
まずは、ミドルウェアをしっかり管理するところから、始めたいと思います。
プライベートYUMレポジトリを作ろう
RPMに関する支援ツールは豊富にそろっていて、レポジトリの作成ツールである createrepo コマンドをインストールし、作成済みのRPMを入れたディレクトリをYUMレポジトリとして構築します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
[sourcecode lang="bash"] $ yum install createrepo $ createrepo test.repo/ Spawning worker 0 with 1 pkgs Workers Finished Gathering worker results Saving Primary metadata Saving file lists metadata Saving other metadata Generating sqlite DBs Sqlite DBs complete $ tree test.repo/ test.repo/ ├── bash-completion-2.0-3.amzn1.noarch.rpm └── repodata ├── 401dc19bda88c82c403423fb835844d64345f7e95f5b9835888189c03834cc93-filelists.xml.gz ├── 6bf9672d0862e8ef8b8ff05a2fd0208a922b1f5978e6589d87944c88259cb670-other.xml.gz ├── 77a287c136f4ff47df506229b9ba67d57273aa525f06ddf41a3fef39908d61a7-other.sqlite.bz2 ├── 8596812757300b1d87f2682aff7d323fdeb5dd8ee28c11009e5980cb5cd4be14-primary.sqlite.bz2 ├── dabe2ce5481d23de1f4f52bdcfee0f9af98316c9e0de2ce8123adeefa0dd08b9-primary.xml.gz ├── f8606d9f21d61a8bf405af7144e16f6d7cb1202becb78ba5fea7d0f1cd06a0b2-filelists.sqlite.bz2 └── repomd.xml [/sourcecode] |
構築したレポジトリを、ApacheなどのWebサーバで公開すれば利用できますが、パッケージ一覧があると便利なので、
repoview というコマンドで、Web上で確認できるパッケージ一覧ページを構築しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
[sourcecode lang="bash"] $ repoview test.repo/ Examining repository...done Opening primary database...done Opening changelogs database...done Examining state db...done Collecting group information...done Collecting letters...done Writing package bash-completion.html Writing group unspecified.group.html Writing group letter_b.group.html Collecting latest packages...done Writing index.html...done $ tree test.repo/ test.repo/ ├── bash-completion-2.0-3.amzn1.noarch.rpm ├── repodata │ ├── 25cc31d5f640de034fb996c951ddb36268bb8f945d71e93ff8875a17137fe567-filelists.sqlite.bz2 │ ├── 31bcd1aefe8fff0d57725cc0097a465f6df88a29ad1c93b221e9c1209f31e3af-other.sqlite.bz2 │ ├── 32c4e7a2cb961017e9dc698957e91a405b41f1b050a1f015fef257d17d77ca98-other.xml.gz │ ├── 6aaee4883bf69b6d74d4b67d62671b5e898f1b8d8f8d6c9868458165f542cbf0-primary.xml.gz │ ├── bbfa3621175f0e47950a063e50a3e42e7352f640adc3c653cab91e979c4e6bec-primary.sqlite.bz2 │ ├── fbb7b22b89357a7c4ea36e19333734ea7bc7bfbddfdc5cb1009ded840f4a2391-filelists.xml.gz │ └── repomd.xml └── repoview ├── bash-completion.html ├── index.html ├── layout │ └── repostyle.css ├── letter_b.group.html ├── state.sqlite └── unspecified.group.html [/sourcecode] |
作ったレポジトリ S3 へ s3cmd で送って、公開設定をして、利用したいOS側に以下の設定をすれば、すぐに利用できます。
1 2 3 4 5 6 7 8 9 |
[sourcecode lang="bash"] $ cat /etc/yum.repos.d/private.repo [private] name=Private Repository $releasever - $basearch baseurl=http://your-s3-bucket/ enabled=1 gpgcheck=0 metadata_expire=300 [/sourcecode] |
次回はカスタムRPMの作成を、紹介したいと思います!