Emacsバックポートの自作

Debian busterの emacsパッケージはv26であり、最新stableから乖離しています。
また、ターミナル機能のvtermを利用するために、modulesを有効にしてコンパイルする必要があったため、bullseyeのv27パッケージをバックポートしました。

以下のような方針で、新しいバージョンのdebをソースからビルドできます。

  • debソースはbullseye(次期ディストリビューション)のものを使用
  • 依存パッケージはbuster(現行ディストリビューション)を使用
  • ビルドホストはbusterを使用。将来の再現性のため、 Dockerコンテナで検証した
  • ビルド過程で必要なパッチを実行

なお、debianとbullseyeの間で関連パッケージ構成が近いため今回はとくに問題なくビルドできましたが、依存ライブラリに大きな変更がある組み合わせではビルドが通らないことも考えられます。

まず、ビルドの前提ツールをインストールしておきます。

echo "deb-src http://cdn-fastly.deb.debian.org/debian buster main contrib" >> /etc/apt/sources.list
apt-get update
apt-get install -y --no-install-recommends build-essential curl devscripts

libvterm0のビルド

一度ビルドしたあとに気づいたのですが、emacsでvtermを使うにはbusterのlibtermでは古すぎるため、libvtermもbackportしました。

# bullseyeのソースパッケージを利用
curl -OL http://deb.debian.org/debian/pool/main/libv/libvterm/libvterm_0.1.4-1.dsc
curl -OL http://deb.debian.org/debian/pool/main/libv/libvterm/libvterm_0.1.4.orig.tar.gz
curl -OL http://deb.debian.org/debian/pool/main/libv/libvterm/libvterm_0.1.4-1.debian.tar.xz

# ビルドの依存パッケージはbusterのパッケージを前提にインストール
apt-get build-dep libvterm0
dpkg-source -x libvterm_0.1.4-1.dsc
cd libvterm_0.1.4/debian
debuild -uc -us -b

debパッケージは上位のディレクトリに生成されます。

emacs27のビルド

emacsのビルドは以下のとおりです。
emacs-with-modules-debを参考に、modulesを有効にするオプションを追加しています。

# bullseyeのソースパッケージを利用
curl -OL http://deb.debian.org/debian/pool/main/e/emacs/emacs_27.1+1-3.dsc
curl -OL http://deb.debian.org/debian/pool/main/e/emacs/emacs_27.1+1.orig.tar.xz
curl -OL http://deb.debian.org/debian/pool/main/e/emacs/emacs_27.1+1-3.debian.tar.xz

# ビルドの依存パッケージはbusterのパッケージを前提にインストール
apt-get build-dep emacs -y
# emacs27はlibjansson-devが追加で必要
apt-get install -y --no-install-recommends libjansson-dev

dpkg-source -x emacs_27.1+1-3.dsc
cd emacs_27.1+1/debian
# modulesを有効にする設定変更
sed -i '/confflags += --with-sound=alsa/a confflags += --with-modules' rules
cd ..
debuild -uc -us -b

なお、emacsのビルドはかなり時間がかかります。

このバックポートにより、bullseyeと同等のパッケージをbusterにインストールできます。
近々、bullseyeもstableとしてリリースされますが、コンパイルオプションの異なるビルドが必要なケースで自作debパッケージが役立ちます。

中馬崇尋
Chuma Takahiro