rcmdnk's blog

Utmp

Linuxに自分でmakeしてGNU screenを入れようとした所 ちょっとエラーが出てそのままでは出来なかったので調べたメモ。

GNU screen 4.3.1のインストール時のエラー

インストールしたのは screen-4.3.1.tar.gz。 現在の最新安定版です。

Gitのmaster(git://git.sv.gnu.org/screen.git)から直接取ってきて コンパイルしてみようとしてみましたが、 何やら沢山エラーが出たので辞めました。 (最近のライブラリが沢山必要で、古い環境だと揃えるのが大変過ぎる感じだったので。 と、”–enable-colors256”のオプションがなくなってたみたいなので、デフォルトな 感じになるのかな?と思ったり。)

4.3.1をコンパイルしてみたところ、

tmp.c:99:1: warning: "pututline" redefined
In file included from screen.h:30,
                 from utmp.c:34:
os.h:262:1: warning: this is the location of the previous definition
utmp.c: In function ‘makedead’:
utmp.c:602: error: ‘struct __exit_status’ has no member named ‘e_termination’
utmp.c:603: error: ‘struct __exit_status’ has no member named ‘e_exit’
make: *** [utmp.o] Error 1

こんな感じのエラーが。

調べて見たところ、utmp.cではなく、os.h内の253行目にある、

# if defined(SVR4) && !defined(DGUX) && !defined(__hpux)

という行が以前と変わった所で、これを

# if defined(SVR4) && !defined(DGUX) && !defined(__hpux) && !defined(linux)

と、linuxの部分を足してあげるとコンパイルが通りました。

この部分の下にはutmpx.hを読み込むか、 もしくは上の式が偽ならutmp.hを読み込む、と言うことがあります。 utmpx.hを読み込む場合にはutmp等の値をutmpx等にdefineしたりして 対応を取っています。

この辺、utmpx.h等の新しい古いに関係ありそうですが、 utmpx.hを使うと失敗して、 utmp.hを使うと上手く行った様です。 (linuxの値は定義されてるので元の式だと真でutmpx.hを、変更した式だと偽になって後のutmp.hを使うので。 Debianだとlinuxは定義されない?)

[screen-devel] screen 4.3.1 fails to compile on CentOS 5, workaround in

去年の9月にscreen-develに流れてますが、特に反応がありません。

また、StackExchangeには

software installation - Trying to compile GNU Screen - Unix & Linux Stack Exchange

というのがあって、libc6-devを入れれば良い、とのこと。

Note that the utmp struct from libc5 has changed in libc6. Because of this, binaries using the old libc5 struct will corrupt /var/run/utmp and/or /var/log/wtmp.

みたいな事があるのでまさにこの辺のことなのかもしれません。

Debianだと

#819792 - screen: FTBFS: utmp.c:602:13: error: ‘struct __exit_status’ has no member named ‘e_termination’ - Debian Bug report logs

みたいなスレッドがあって、Debian独自のパッチみたいのがあって そこでは最近治った様です。

GNU screenのGitのアクティビティやscreen-devel等を見てると 最近もそれなりに活発にアップデートを行っている様なので そろそろまた新しい(4.4?)とかが出る頃かな、とも思うので この辺治ったものが出てくるのを期待してます。

screen.git - screen

日本語用パッチのアップデート

ちょっと関係ないですが、素のままだと日本語の文字化けが出てしまうので

  • https://gist.github.com/raw/626040/be6a04f0e64c56185ba5850415ac59dad4cd62a0/screen-utf8-nfd.patch
  • http://zuse.jp/misc/screen-utf8-osc.diff

という2つのパッチを当てています。

ただ、このうちosc.diffの方が結構前にリンク切れになっていて 以前取ってきたものを自分でGistに置いて使っていました。

で、今回やろうとした所、nfd.patchの方もリンク切れになってしまったので これもまた以前コンパイルした時に取ってきたのが残ってたのでGistに置いておきました。

これらを使って以下の様にして インストールしました。

cd /tmp
wget http://ftp.gnu.org/gnu/screen/screen-4.3.1.tar.gz
tar xzvf screen-4.3.1.tar.gz
cd screen-4.3.1
wget --no-check-certificate http://gist.githubusercontent.com/rcmdnk/143cb56d31335dbccf70/raw/4b3e175946f2366b4076088c1c8f2bbe65b32e16/screen-utf8-osc.diff
wget --no-check-certificate http://gist.githubusercontent.com/rcmdnk/5e72a6fd14bf106f9d410ea68adf0644/raw/be75f51d16e5a24bcee9d357f785e95b008814df/screen-utf8-nfd.patch
patch < screen-utf8-osc.diff
patch < screen-utf8-nfd.patch
./autogen.sh
CFLAGS="-L$HOME/usr/local/lib" LDFLAGS="-L$HOME/usr/local/lib" ./configure --prefix="$HOME/usr/local/stow/screen-4.3.1"  --enable-colors256
make
make install
cd $HOME/usr/local/stow
stow -D screen-4.2.1
stow --override='share/info/dir' screen-4.3.1
rm -rf /tmp/screen-4.3.1.tar.gz /tmp/screen-4.3.1

stowを使って$HOME/usr/localに自分でローカルに入れたパッケージ管理をしてるので configureの所のオプションやmake install後の作業の所が こんな感じになっています。

Macのパッチ付きFormulaについてもアップデートしています。

こちらはscreenのパッチ用Formulaを含めたレポジトリのアップデート時にテストを行ってるのですが、 他のファイルのアップデート時の テストで4日前まではエラーが出てなかったので どうもここ数日で消えたみたいです。

Sponsored Links
Sponsored Links

« vim-parenmatchの導入とちょっと注意点 GitHubのGistの古いraw urlが無効になっていたので対応してみた »

}