libutetemperを使用した静的tmuxコンパイルのサポート

libutetemperを使用した静的tmuxコンパイルのサポート

tmuxが次の方法でユーザー名を報告できない問題を解決したいと思いますlogname

logname: no login name

次の手順を使用しています。

# lets assume all other prerequisites are compiled already
# and staged/installed to $HOME/opt

# libutempter (http://freecode.com/projects/libutempter)
# URL : ftp://ftp.altlinux.org/pub/people/ldv/utempter/libutempter-1.1.5.tar.bz2
tar xvfj libutempter-1.1.5.tar.bz2
cd libutempter-1.1.5
vi Makefile
grep 'DESTDIR =' Makefile
---
DESTDIR = /home/xxxxxx/opt

make
make install

# tmux (http://tmux.sourceforge.net/)
# URL : git://git.code.sf.net/p/tmux/tmux-code
git clone git://git.code.sf.net/p/tmux/tmux-code tmux
cd tmux
sh autogen.sh

CFLAGS="-I$HOME/opt/include -I$HOME/opt/usr/include -I$HOME/opt/include/ncurses" \
CPPFLAGS="-I$HOME/opt/include -I$HOME/opt/usr/include -I$HOME/opt/include/ncurses" \
LDFLAGS="-L$HOME/opt/lib -L$HOME/opt/include/ncurses -L$HOME/opt/include -L$HOME/opt/usr/lib" \
./configure --enable-static

CPPFLAGS="-I$HOME/opt/include -I$HOME/opt/usr/include -I$HOME/opt/include/ncurses" \
LDFLAGS="-static -L$HOME/opt/include -L$HOME/opt/usr/include -L$HOME/opt/include/ncurses -L$HOME/opt/lib -L$HOME/opt/usr/lib" \
make

ただし、tmuxはまだログインを報告しませんlogname

(ルートアクセスなし)パッケージをインストールできません。

環境変数とフラグを更新しましたが、lddは共有ライブラリがないと報告しましたが、tmuxはまだログ名でログインを表示できませんでした。

答え1

これは目的の目的ですが、libutempter一定レベルのアプリケーションサポートも必要ですtmux最近まで(2014年2月)中に入った所有者使用している分岐ですが、まだ使用する準備ができていない可能性があります。

現在の1.9aソースディストリビューションのFAQ:

* How is tmux different from GNU screen?
  [...]
  - screen has support for updating utmp. Nobody has really come up with a clean,
    portable way to do this without making tmux setuid or setgid yet.

マスターブランチオンラインFAQCHANGES文書は更新されていませんが、これは完全に無視されます。

実行後、定義を確認してくださいHAVE_UTEMPTERMakefile予期しない!)。定義がない場合は、ビルド環境に問題があるかどうかを確認するために読んでください。config.hconfigureconfig.log

現在私の最善の推測は次のとおりです。

  • libutempter.a、のみがないため、libutempter.soこれを使用すると-staticリンクできないため、libtempterの検出は失敗します。
  • 検出されコンパイルされますが、utempter(更新された特権タスクが委任されている)ヘルパーはutmpsetgid(通常setgid utmp)ではありません。
  • 一部のシステムは既知の制限付きアクセスそのヘルパーに愚かさを防ぐしたがって、呼び出しバイナリ(例tmux:)は次のようになります。返品setgidです(通常setgid utempter)。

自分で作れば作らlibutempterなければならない両方静的バージョンと動的バージョンがありますが、展開パッケージには動的バージョンのみが含まれているようです。

ルートアクセス権がない場合できないutmpあなた自身のlibutempterを正しくインストールしてください。システム/ファイルを保持できませんwtmp。システムにインストールされているlibutemperが欠落している場合は、静的設定/リンク用に独自のlibutemperをコンパイルし、インストールされているシステムsetgidヘルパー(通常または)を使用できる必要がlibutempter.aあります。バイナリへのアクセスも制限されている場合、つまりこれを実行するためにsetgidが必要な場合、問題に対する解決策はありません。libutempter.atmux/usr/lib/utempter/utempter/usr/libexec/utempter/utemptertmux

tmux新しい libutetemper 機能のエラー処理は現在不完全です。-DUTEMPTER_DEBUG上記のいずれも実行されていない場合は、それを使用してlibutetemperを再構築できれば便利です。

make CFLAGS=-DUTEMPTER_DEBUG

関連情報