Ubuntuで最新リリースのEmacsをインストールする

UbuntuでEmacsをインストールする場合、apt (apt-get) を使うとバージョン27がインストールされます(2024年10月現在)。しかし現時点では最新バージョンは29であり、aptではかなり古いものが入ってしまうということになります。

ここでは最新バージョンのソースをダウンロードし、configure, make によってビルドする方法をご紹介します。またビルドの際に遭遇したエラーとその対処のメモを残しておきます。

環境

  • Ubuntu: 22.04 および 24.04
  • Emacs: 29.4

手順

依存パッケージのインストール

最低限makeやgccなどは必要です。Ubuntuでは以下で基本的なものが入れられます。

sudo apt update
sudo apt install build-essential

しかしこれだけでは後述するエラーが出て失敗しますので、対応する依存パッケージを入れておきます。

sudo apt install pkg-config libgnutls28-dev libtinfo-dev texinfo

これで依存パッケージは揃いました。

ソースのダウンロード

公式サイトからファイルをダウンロードします。

近くのミラーサーバーから、またはメインのFTPサーバーがおすすめされています。

ダウンロードするファイルは emacs-[バージョン番号].tar.gz というものを選べばOKです。 emacs-[バージョン番号].tar.xz は圧縮方式が違うだけなのでこちらでも大丈夫ですが、 xz コマンドが入っていないと解凍できません。また .sig で終わるファイルはダウンロードしたファイルの改ざんや破損を検証するために必要なものです。ご興味あれば GPG Signature で調べてみてください。

Gitリポジトリからcloneする方法もなくはないですが、未リリースのバージョンも混ざっていたり configure が含まれてなかったりするので個人的には上記URLなどから落としてくるのが無難かと思います。以下ではその前提で話を進めます。

ビルド&インストール

落としたファイルは圧縮されているのでファイルを解凍します。

# ファイル名は適宜変更してください
tar zxf emacs-29.4.tar.gz

解凍されたフォルダ内で ./configure, make を実行します。特に変わった手順はありませんが詳細を知りたい場合はフォルダ内のINSTALLファイルをご覧ください。ちなみにGUI環境を使わない場合であれば ./configure 時に --without-x オプションをつけます。他にもオプションはいろいろあるので必要に応じてカスタマイズしてみてください。

# フォルダに移動
cd emacs-29.4

# ビルド
./configure && make

# インストール
sudo make install

これでおそらく /usr/local/ 配下にインストールされるはずです(場所は環境によるかもしれません)。 emacs --version で想定したバージョンのEmacsが起動できているか確認してみてください。もしダメであれば echo $PATHwhich emacs などで、パスが通っているかやインストールされているかなどを確認しましょう。

エラーと対処

以上でインストールは完了ですが、以下ではもしも依存パッケージが足りないときにどういうエラーが発生するかをご紹介します。特に興味がなければ読む必要はありません。

pkg-config, libgnutls28-dev

まず ./configure を実行して以下のエラーが出ました。

configure: WARNING: Unable to locate a usable pkg-config
configure: error: The following required libraries were not found:
     gnutls
Maybe some development libraries/packages are missing?
To build anyway, give:
     --with-gnutls=ifavailable
as options to configure.

エラー自体は gnutls が無いということですが、実はそれだけではなく直前のWARNINGである pkg-config も重要です。これが無いと gnutls があっても同じエラーが出ます。 pkg-configgnutls をaptでインストールします。

sudo apt install pkg-config libgnutls28-dev

libgnutls28-dev

こちらも ./configure で出るエラーです。

checking for library containing tputs... no
configure: error: The required function 'tputs' was not found in any library.
The following libraries were tried (in order):
  libtinfo, libncurses, libterminfo, libcurses, libtermcap
Please try installing whichever of these libraries is most appropriate
for your system, together with its header files.
For example, a libncurses-dev(el) or similar package.

今度は tputs が無いとのこと。親切に対処方法が書かれていますね。私の環境では apt install libtinfo は無かったので、以下のようにしました。

sudo apt install libtinfo-dev

texinfo

次は make で以下のエラーが出ました。

make[2]: Entering directory '/path/to/dir/emacs-29.4/doc/emacs'
  GEN      ../../info/emacs.info
/bin/bash: line 1: makeinfo: command not found
make[2]: *** [Makefile:170: ../../info/emacs.info] Error 127
make[2]: Leaving directory '/path/to/dir/emacs-29.4/doc/emacs'
make[1]: *** [Makefile:1122: emacs-info] Error 2
make[1]: *** Waiting for unfinished jobs....
make[2]: Entering directory '/path/to/dir/emacs-29.4/lib'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/path/to/dir/emacs-29.4/lib'
make[1]: Leaving directory '/path/to/dir/emacs-29.4'
make[1]: Entering directory '/path/to/dir/emacs-29.4'
***
*** "make all" failed with exit status 2.
***
*** You could try to:
*** - run "make bootstrap", which might fix the problem
*** - run "make V=1", which displays the full commands invoked by make,
***   to further investigate the problem
***
make[1]: *** [Makefile:414: advice-on-failure] Error 2
make[1]: Leaving directory '/path/to/dir/emacs-29.4'
make: *** [Makefile:370: all] Error 2

ドキュメント周りにおけるエラーですね。コマンドの makeinfo が無いとのことです。これは以下のコマンドでインストールできました。

sudo apt install texinfo

まとめ

Ubuntu22(および24)において最新のEmacs29.4をソースからインストールしました。aptでは依然として古いバージョンなので最新バージョンを使うにはソースからのビルドをおすすめします。実際あまり大きく困ることも無かったのでUbuntuでEmacsを使いたい人はぜひ挑戦していただければと思います。

最終更新 2024-10-14

広告

本記事はお役に立てたでしょうか。本ブログでは匿名でのコメントや少額から(15円~)の寄付などを受け付けております。もしお役に立てたのであればご支援いただけると大変励みになります。

Built with Hugo
テーマ StackJimmy によって設計されています。