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_UTEMPTER( Makefile예상되지 않음!). 정의가 없으면 빌드 환경에 어떤 문제가 있는지 확인하기 위해 읽어야 합니다.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

관련 정보