解き放たれしソフトウェア

GNU/LinuxなどFLOSSについて書いてみるつもり

【Gentoo】ebuild ファイルを書いてみる 第1回

先日に、M+ FONTSAdobe Source Sans Pro を合成したフォントを公開した人がいます(「僕が Linux デスクトップで使うフォントの話と、フォントを合成した話 - Qiita 」)。

そこで今回はこの kazesawa フォントをインストールする ebuild を書いてみます。

ebuild ファイルを書く意義

ところで、インストールしたいだけならば、 ebuild ファイルを書かなくても可能です。GNU/Linux でフォントをインストールするときには一般的に、次のいずれかにフォントファイルを入れます。

  1. /usr/share/fonts/ 以下
  2. /usr/local/share/fonts 以下
  3. ~/.fonts (${HOME}/.fonts) 以下

このうち、1は、パッケージマネージャが自動的に管理するディレクトリなので、(パッケージマネージャでインストールするフォントの置き場なので)あまり奨められません。 2は、システム全体で使用可能になり、どのユーザからもそのフォントが見えるようになります。 3は、特定のそのユーザ専用にインストールすることになります。

追記~/.fonts は旧来の場所で今でも機能しますが、現在の標準は ~/.local/share/fonts になりました。

そして、fc-cache -f を実行します。上記1や2のときは、root 権限で実行します。3のときは、そのユーザで実行します。

Gentoo でも、上記の方法でインストール可能です。 しかしさらに ebuild ファイルを書くことで、パッケージマネージャに管理させることまでも可能になります。 その際のフォントファイルの置き場はもちろん、/usr/share/fonts 以下です。

とりあえず簡略な完成版

media-fonts/kazesawa/kazesawa-2015.12.18.ebuild

# Copyright 1999-2015 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

EAPI=5

inherit font

DESCRIPTION="Kazesawa Font: M+ with Source Sans Pro"
HOMEPAGE="https://kazesawa.github.io/"
SRC_URI="https://github.com/${PN}/${PN}/releases/download/alpha-v1/${PN}.zip
    -> ${P}.zip"

LICENSE="OFL-1.1"
SLOT="0"
KEYWORDS="~amd64 ~x86"
IUSE=""

DEPEND="app-arch/unzip"
RDEPEND=""

S=${WORKDIR}
RESTRICT="binchecks mirror strip"

FONT_SUFFIX="ttf"
FONT_S=${S}

自作 ebuild ファイルの置き場

自作の ebuild ファイルは、自作のリポジトリの中に入れますリポジトリの作り方は先回に書いたとおりです。 gnu.hatenablog.com 先回の例だと /usr/local/portage/local-overlay というリポジトリを作成しましたから、その中に置きます。

決して、メインリポジトリ(「Portageツリー」)などの自動的に同期させるリポジトリに置いてはいけませんemerge --sync だとか eix-sync だとか、 cave syncpmerge --sync かもしれませんが、同期させたときに conflict (干渉)が起こってしまいます。(Git ではなく rsync で同期していたり、Paludis を使用していたりする)場合によっては、消えます。

ebuild ファイルを置くディレクトリと、ファイル名を決める

さて自作のリポジトリの中に置くとして、まず、そのソフトウェアパッケージの、カテゴリと、パッケージ名と、バージョニングを決めないといけませんそれでディレクトリやファイル名の構造が決まりますリポジトリの構造については以前書いた記事を参照してください。

gnu.hatenablog.com

今回はフォントなので既存の media-fonts というカテゴリに該当しますから、カテゴリを新たに定義する必要はありません。

パッケージ名は単純に、 kazesawa にすることにします。

ebuild ファイルのバージョニング

そして今回は問題になるのが、バージョニング(バージョン番号の付けかた)です。 upstream、つまり作者は、alpha-v1 というバージョンを付けています( Releases · kazesawa/kazesawa · GitHub )。 しかしGentooでは、数字とピリオドで構成するバージョン番号に、一定のサフィックスを付けてもよい、という決まりになっています( Gentoo Development Guide: Ebuild File Format )。Gentooでのこの決まりは、バージョンの大小を比較するのに合理的です。

そこで、例えば以下の案が考えられます。

  • 1_alpha1
    • 今後(たぶん)リリースされるバージョン1のアルファ版だと勝手に決める
    • cons(難点): 次のバージョンが1未満だったら、大小がひっくり返ってしまう
  • 0_alpha1
    • バージョン0だと勝手に決める
    • たぶん支障ないが、勝手に決めている
  • 2015.12
    • 年.月にする
    • 同じ月にまた出たら、 2015.12.2 にでもしよう
    • alpha-v1 どこいった?
  • 2015.12_alpha1
    • 長いね
  • 2015.12.18
    • 年.月.日にする*1
  • 2015.12.18_alpha1
    • 長いわあ

今回は、2015.12.18 にしてみます。

今回のようにバージョニングがGentooの決まりと一致しないときは、正解はひとつに定まりません。パッケージメンテナの主観的判断で決まるのです。

このように、ソフトウェアの作者は自己の信念に基づいてバージョニングをしているのでしょうけれど、ディストリビューションのパッケージメンテナはしばしば悩んでいるということです。 余談ですが、例えば Systemd などの製作者は徹底して小数点無しでバージョン番号を上げていますし(笑) http://www.freedesktop.org/software/systemd/ 。OpenSSL はマイナーなバグフィックスでは、番号のあとにアルファベットを付加していきます https://www.openssl.org/source/

今回のまとめ

ともかく、以上をまとめると今回は、 /usr/local/portage/local-overlay/media-fonts/kazesawa/kazesawa-2015.12.18.ebuild というファイルを作成します。 もちろん、そのファイルを置くディレクトリを先に作成して、それからテキストエディタでファイルを書いていきます。

$ sudo mkdir -p /usr/local/portage/local-overlay/media-fonts/kazesawa

sudo nano /usr/local/portage/local-overlay/media-fonts/kazesawa/kazesawa-2015.12.18.ebuild とか、 gksudo gedit /usr/local/portage/local-overlay/media-fonts/kazesawa/kazesawa-2015.12.18.ebuild とか、Emacs か Vim かなんか。

はしりの部分だけで既に長くなってしまいましたので、今回は以上にし、次回は上記の ebuild ファイルの中身を説明します。


この投稿は Gentoo Advent Calendar 2015 - Qiita 20日めの記事です。

*1:余談:GitHub が "* days ago" とか相対日付で書くせいで、日時が調べにくいです。私は GitHub 嫌いです。