オープンソースこねこね

Webプログラミングなどについてあれこれ。

Githubのリポジトリをyumリポジトリとして使う

簡単にできた。手順は後ほど。

背景

普段使っているサーバOSはCentOSなので、自作のOSSツールなどをyumコマンドを使ってさくっとインストールしたい。RPMを作るところまではスクリプト化してあって一発でできるようになっている。yumリポジトリをどうするか。今まではbintrayで個人用のyumリポジトリを立てて使っていました。

bintray.com

ところが、先日このbintrayのyumリポジトリから古くてもう使っていないパッケージを削除しようとしたところ「公開後180日たつと削除できない」とエラーになってしまいました。

結局この後、bintrayのサポートに問い合わせてみたら、わりとすぐに削除してくれたのですが、今後パッケージが要らなくなって消そうとするたびに、問い合わせしなくてはならないのかな、、、と思うとちょっとツライです。

そんなわけで代替となるyumリポジトリをホストしてくれるサービスを探していたりしました。packagecloud.ioなどを見てみましたが、いまひとつ使う気になれず。。。

packagecloud.io

そこで昔yumリポジトリを個人サーバに立てたときのことを思い出してみると、結局必要だったのはただのhttpサーバだけだったはずでは。それならGithub Pagesを使えばGithub上にyumリポジトリも立てられるんじゃないかなと思い至り、ちょっとググったら、かなり前にやっぱり同じことをやっている人がいた。

qiita.com

この記事を参考にして、今はgh-pagesのブランチを切る必要もないし、SSLも対応しているので、その辺をふまえて以下のようにやりました。

作業手順

Githubリポジトリを作る

何でもいいですが、ここではリポジトリ名はyumrepo-exampleとします。作成後リポジトリの設定画面からGithub Pagesの設定をします。Sourceをmasterブランチに設定すれば昔のようにgh-pagesのブランチを切る必要もないです。

f:id:kohkimakimoto:20170721194716p:plain

リポジトリをcloneしてRPMファイルを配置する

上記のリポジトリをローカルにcloneし、サポートするディストリビューションアーキテクチャなどで、適当にサブディレクトリを作成してその中にホストしたいRPMファイルをおきます。試しに拙作であるプロビジョニングツールのcofuのRPM

https://github.com/kohkimakimoto/cofu/releases

からダウンロードしてCentOS6とCentOS7用に配置します

$ mkdir el6-x86_64 el7-x86_64
$ curl -L -o el6-x86_64/cofu-0.6.0-1.el6.x86_64.rpm   https://github.com/kohkimakimoto/cofu/releases/download/v0.6.0/cofu-0.6.0-1.el6.x86_64.rpm
$ curl -L -o el7-x86_64/cofu-0.6.0-1.el7.x86_64.rpm   https://github.com/kohkimakimoto/cofu/releases/download/v0.6.0/cofu-0.6.0-1.el7.x86_64.rpm

createrepoコマンドでリポジトリのメタファイルを作る

createrepoコマンドでyumリポジトリに必要なメタファイルを生成します。Macで直接動作するcreaterepoコマンドはないのですが、dockerを使えばこのあたりも簡単にできます。以下のようにしてbashスクリプトcreaterepoとして作成します。

$ echo '#!/usr/bin/env bash
docker run --rm  -u "$(id -u):$(id -g)" -v $PWD:/build -w /build kohkimakimoto/rpmbuild:el7 createrepo "$@"' > createrepo
$ chmod 755 createrepo

そして、RPMを配置したサブディレクトリを指定して実行します。

$ ./createrepo el6-x86_64
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 0 pkgs
Spawning worker 2 with 0 pkgs
Spawning worker 3 with 0 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

$ ./createrepo el7-x86_64
Spawning worker 0 with 1 pkgs
Spawning worker 1 with 0 pkgs
Spawning worker 2 with 0 pkgs
Spawning worker 3 with 0 pkgs
Workers Finished
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete

後はコミットしてpushすれば完了です。なおRPMを更新したら都度同じようにcreaterepoスクリプトを実行してメタファイルも更新します。

yumでインストールしてみる

リポジトリができたのでyumでインストールしてみます。以下の例はCentOS7でやった際のもの。リポジトリのパスなどは適宜読み替えてください。

まずリポジトリの設定をして

$ sudo sh -c 'echo "[github-yumrepo-example-el7-x86_64]
name=github-yumrepo-example-el7-x86_64
baseurl=https://kohkimakimoto.github.io/yumrepo-example/el7-x86_64
gpgcheck=0
enabled=1
" > /etc/yum.repos.d/github-yumrepo-example-el7-x86_64.repo'

あとは普通にyum installする

$ sudo yum install cofu

以上です。サンプルのリポジトリは以下においておきます。

github.com