Compila o tmux estático com suporte a libutempter

2

Gostaria de corrigir o problema do tmux quando ele não pode denunciar o nome de usuário via logname :

  logname: no login name

Estou usando as etapas abaixo:

  # 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

Mas o tmux ainda não pode reportar o nome de login via logname : (

E não consigo instalar pacotes (sem acesso root).

UPDATE: 30 de janeiro, atualizado var vars e flags, o ldd não informa libs compartilhadas, mas o tmux ainda não pode mostrar o nome de login via logname: (

    
por zais 29.01.2015 / 16:01

1 resposta

2

Este é o objetivo pretendido de libutempter , mas também requer um nível de suporte de aplicativo, que tmux tem somente recentemente (fevereiro de 2014) obtido na ramificação master (que você está usando), mas pode não estar pronto para uso.

Do FAQ na atual distribuição de fonte 1.9a:

* 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.

A ramificação principal FAQ on-line omite exatamente esse ponto, embora a% O arquivoCHANGES ainda não está atualizado.

Verifique a definição HAVE_UTEMPTER em Makefile (não o esperado config.h !) depois de executar configure , se não estiver definido, você precisará ler config.log para determinar o que está errado com o ambiente de criação.

Meus melhores palpites são:

  • você não tem um libutempter.a , apenas libutempter.so , então o uso de -static faz com que o libutempter falhe na detecção, já que ele não pode ser vinculado
  • ele é detectado e compilado, mas o utempter helper (ao qual a tarefa privilegiada de atualização utmp é delegada) não é setgid (geralmente setgid utmp)
  • alguns sistemas são conhecidos por limitar o acesso a esse ajudante para prevent still , portanto, o binário de chamada (ou seja, tmux ) deve também ser setgid (normalmente setgid utempter)

Se você criar libutempter você mesmo deve fazer ambas versões estáticas e dinâmicas, mas eu suspeito que os pacotes de distribuição conterão apenas a versão dinâmica.

Se você não tem acesso root, você não pode instalar seu próprio libutempter corretamente: ele não pode manter os arquivos utmp / wtmp do sistema. Se houver uma instalação do sistema do libutempter que não tenha apenas libutempter.a , você deverá ser capaz de compilar seu próprio libutempter.a na configuração / link tmux estaticamente, e usar o sistema já instalado setgid helper (geralmente /usr/lib/utempter/utempter ou /usr/libexec/utempter/utempter ). Você não pode solucionar o problema se o acesso a esse binário também for restrito, ou seja, tmux precisa ser setgid para executá-lo.

O tratamento de erros para os novos recursos do libutempter está incompleto em tmux neste momento, se você puder reconstruir o libutempter com -DUTEMPTER_DEBUG , poderá ajudar se nenhum dos itens acima ocorrer:

make CFLAGS=-DUTEMPTER_DEBUG
    
por 30.01.2015 / 14:19