Ubuntu Weekly Recipe

第335回MATEデスクトップ環境をビルドする前編】

今回はMATEデスクトップ環境を自力でビルドし、インストールする方法のうち、ビルドの部分だけを紹介します。インストール方法は次回の【後半】で紹介します。

MATEとは

MATE(マテ)はGNOME 2.xから派生したデスクトップ環境です。Ubuntuでは長らくMATE(プロジェクト)が用意しているパッケージをインストールする以外に使用する方法はなかったのですが[1]⁠、一式がDebianのリポジトリに入りそれにともなって開発中のUbuntu 14.10(Utopic Unicorn)でも使用できるようになりました。

Ubuntu Weekly Topics 2014年7月11日号で紹介されたUbuntu MATE Remixは、そんな開発版をベースにリリースしたようです。

とは言え14.10の開発版を今から使用するのはしんどいですし、せっかくなので自力で14.10向けのパッケージを14.04でビルドしてみたらどうかなと考えました。ちなみにこれをバックポートと言います。PPAにも今のところは14.04向けのMATEはなさそうでした。少なくともMATE 1.8のうちは、将来的にも同じ方法でビルドできると思います。

読み進めていただければわかりますが、パッケージ数が多いので手間はかかりますが、難易度はそんなに高くありません。夏休みに挑戦してみる価値は充分にあるでしょう。

ついでに言うと、筆者はMATEのことはあまり好きではありません。権利関係に疎い人達がやっているという固定観念があるからです。とは言え次期Vine LinuxがMATEをデフォルトにすることを決定したり、また個人的にも(古くても)軽量なデスクトップ環境が必要になり、無視はできなくなった、というのが正直なところです。

準備

何はなくともビルド環境を用意します。今回はVirtualBoxのゲストOSとしてUbuntu Serverをインストールしましたが、LXCやDockerでも良いでしょう。インストール自体の方法はここでは解説しませんが、VirtualBoxの場合[2]はネットワークをブリッジモードにするといろいろ手間が省けます。インストール完了後、適宜アップデートなどを行ってから最低限必要なパッケージをインストールします。

$ sudo apt-get install ssh avahi-daemon vim lv

お好みで増減していただきたいところですが、インストールが終わってsshが起動したら、別のPCからログインします。ブリッジモードにしてある場合は

$ ssh (ビルド環境のホスト名).local

でログインできます。ログイン後、byobuを実行するのも良いでしょう。

VirtualBoxを使用している場合は、Guest Additionsをインストールすると便利です。

$ sudo apt-get install virtualbox-guest-utils

新し目のVirtualBoxを使用したい場合は、筆者のリポジトリを追加してください。

$ sudo add-apt-repository ppa:ikuya-fruitsbasket/virtualbox
$ sudo apt-get update
$ sudo apt-get install virtualbox-guest-utils

インストール後vboxsfグループに自身を追加してから再起動してください。

そしてビルドに最低限必要なパッケージをインストールします。

$ sudo apt-get install build-essential devscripts
$ sudo apt-get install ubuntu-dev-tools --no-install-recommends

ホームフォルダー直下にmateというフォルダーを作成し、実際のビルドはここで行うことにします。また、パッケージを入れておくpackageフォルダーも作成します。

$ mkdir -p mate/packages
$ cd mate

今回は頻繁にchangelogを変更します。ここには名前とメールアドレスが入ります。必須ではありませんが、自動的に自分の名前とメールアドレスを入れるようにするには⁠DEBEMAIL⁠⁠DEBFULLNAME⁠という環境変数を指定します。例としては、

export DEBEMAIL="[email protected]" 
export DEBFULLNAME="Ikuya Awashiro"

のような感じで、これを~/.bashrcに追加します。

$ source ~/.bashrc

を実行し、.bachrcを読込し直すとこれらの環境変数を反映します。

準備はこれで完了です。

ビルド

ソースのダウンロード

一番最初にビルドするのは、mate-commonと言ういかにもなパッケージです。次のコマンドを実行してください。

$ pull-lp-source mate-common utopic -m http://jp.archive.ubuntu.com/ubuntu

これでソースのダウンロードと展開は終わりました。早速フォルダーを移動します。

$ cd mate-common-1.8.0/

バージョンの変更

次に行うのはパッケージバージョンの変更です。バージョンは必ず元のバージョンよりも低くします。なぜならアップグレードを行った際[3]に、これから作成するパッケージを確実に上書きさせるためです。とくに今回は14.10からソースを取得しているため、14.10やそれ以降にもスムーズにアップグレードできることを期待しますので、整合性を取るという意味で重要な作業です。

今回のmate-commonのバージョンは⁠1.8.0-2⁠です、これはハイフン(-)の前後で意味が分かれています。前がmate-commonのアップストリームのバージョンで、後ろがパッケージのリビジョン[4]です。よって、これはmate-commonのバージョンは1.8.0であり、パッケージの変更を2回行ったという意味です。実際にdebian/changelogを読んでみると、そのとおりであることがわかります。たとえアップストリームのバージョンが同じであっても、14.04と14.10ではビルド環境が異なります。ということはライブラリのバージョンが違ったりする可能性もあるので、アップグレードする際にエラーになったりする可能性があります。なので、確実にバージョンを低くするのがシステムを安定的に運用するコツなのです。

パッケージのバージョンは、次のコマンドで変更します。

$ dch -i -D trusty

dchはdebchangeコマンドの短縮形で、-iはdebian/changelogに新しいエントリーを追加します。-DはUbuntuのバージョン[5]を指定します。初回はエディターの選択が表示されるのでお好みのものを指定し、編集画面に移動してください。1行目が

mate-common (1.8.0-2ubuntu1) trusty; urgency=medium

となっています。⁠ubuntu1⁠は自動的に付与されます。⁠trusty⁠は-Dオプションを反映しています。確実にバージョンを下げるにはチルダ⁠~⁠をうまく活用します。

mate-common (1.8.0-2~ubuntu1~trusty1) trusty; urgency=medium

ここではこのように編集します。⁠2⁠⁠ubuntu1⁠の間に⁠~⁠を入れましたが、これによって

2 > 2~ubuntu1

となり、バージョンを低くすることができます。次のコマンドで確認できます。

$ dpkg --compare-versions 1.8.0-2 gt 1.8.0-2~ubuntu1 && echo "ok"

“gt⁠⁠greater than⁠⁠、すなわち⁠>⁠の意味で、これが成り立つと⁠ok⁠を出力します。

“2~ubuntu1⁠の後ろの⁠~trusty1⁠は、わかりやすくするためにつけています。もしパッケージのリビジョンを上げる場合は、⁠~trusty1⁠の数字を増やしていくと良いでしょう。また、今回は行いませんが12.04にもバックポートする場合は⁠~precise1⁠などとします。この場合も、⁠~precise1⁠⁠~trusty1⁠よりもバージョンが低くなる[6]⁠、と言うわけです。

$ dpkg --compare-versions 1.8.0-2~ubuntu1~tursty1 gt 1.8.0-2~ubuntu1~precise1 && echo "ok"

このコマンドを実行すると、⁠ok⁠が返ってきます。

少々話は脱線しましたが、今回は⁠-⁠の直後の数字と⁠ubuntu1⁠の間に⁠~⁠を入れ、さらに後ろに⁠~trusty1⁠をつける、というポリシーを採用します。

“*⁠の後ろは変更点を書きますが、⁠Rebuild for Trusty.⁠とでもしておけば良いでしょう。使用しているところは見たことありませんが、日本語でも書けるはずです。

このような感じになれば完了です。

mate-common (1.8.0-2~ubuntu1~trusty1) trusty; urgency=medium 

  * Rebuild for Trusty. 

 -- Ikuya Awashiro <[email protected]>  Sun, 20 Jul 2014 23:01:06 +0900

ビルドの実行と必要なパッケージのインストール

いよいよビルドを始めます。次のコマンドを実行してください。

$ dpkg-buildpackage -r -uc -b

“dpkg-buildpackage⁠はそのままパッケージをビルドするコマンドで、⁠-r⁠はユーザー権限でビルドするためにつけているオプションです。⁠-uc⁠はchangesファイルへの署名を省略するオプションです。⁠-b⁠はバイナリパッケージだけをビルドするオプションで、今回はソースパッケージはビルドしません。

すると、次のようなエラーが出て止まります。

dpkg-buildpackage: source package mate-common 
dpkg-buildpackage: source version 1.8.0-2~ubuntu1~trusty1 
dpkg-buildpackage: source distribution trusty 
dpkg-buildpackage: source changed by Ikuya Awashiro  
dpkg-buildpackage: host architecture amd64 
 dpkg-source --before-build mate-common-1.8.0 
dpkg-checkbuilddeps: Unmet build dependencies: debhelper (>= 9) pkg-config autoconf automake libtool autotools-dev intltool 
dpkg-buildpackage: warning: build dependencies/conflicts unsatisfied; aborting 
dpkg-buildpackage: warning: (Use -d flag to override.) 

ポイントは⁠dpkg-checkbuilddeps⁠の行で、要するにビルドに必要なパッケージが足りないということです。⁠debhelper⁠の後ろに⁠(>= 9)⁠とありますが、これは⁠debhelper⁠パッケージのバージョンが9以上必要という意味です。度々登場しますが、バージョンについてハマるところはとくにないので、今回はこの部分は気にしないでインストールしてしまってください。よって、次のコマンドを実行してビルドに必要なパッケージをインストールします。⁠dpkg-checkbuilddeps⁠の行を参考に、

$ sudo apt-get install debhelper pkg-config autoconf automake libtool autotools-dev intltool

を実行します。

インストールが完了したら、再び次のコマンドを実行します。

$ dpkg-buildpackage -r -uc -b

しばらく待つとビルドが完了し、1つ上のフォルダーに⁠mate-common_1.8.0-2~ubuntu1~trusty1_all.deb⁠というパッケージが作成されています。


今週はここまでにします。後編では簡易リポジトリを作成し、すべてのパッケージをビルドしてからインストールするところまでを行います。お盆明けのいつかのタイミングで公開するつもりですが、今回の記事で何かわからないことがあればコメントをください。お答えできる範囲でお答えし、それを後編に盛り込もうと考えています。

おすすめ記事

記事・ニュース一覧