Como eu construo o Tmux a partir do código-fonte sem acesso root com um libevent 2.1 customizado?

1

Eu quero usar o Tmux em um nó de cluster de computação científica, mas ele não está disponível em nenhum dos Módulos de ambiente que eu posso ver . Então eu fui construí-lo a partir do código-fonte, sem acesso root. .configure precisava de libevent, então eu baixei e criei o libevent 2.1 com sucesso no meu diretório home. No entanto, não sei como especificar o libevent no script de configuração do Tmux. Como posso fazer isso?

NOTA: Esta questão é muito semelhante a Por que o gcc não consegue encontrar o libevent ao construir o tmux a partir do código-fonte? , mas estou usando o libevent 2.1.

    
por Hintron 31.07.2018 / 20:21

2 respostas

0

Como mencionado em Por que não é possível O gcc encontra o libevent quando constrói o tmux a partir do código fonte? , não existe a opção with-libevent=dir . Então faça o seguinte ao configurar o Tmux:

DIR="$HOME/path/to/libevent"
./configure CFLAGS="-I$DIR/include" LDFLAGS="-L$DIR/.libs"

Note que é .libs , não lib. Eu suponho que esta é uma mudança no libevent 2.1.

Isso fará com que passe as verificações de configuração e compile. No entanto, você ainda não saiu da floresta. Se você fizer isso, quando tentar executar tmux , receberá este erro:

error while loading shared libraries: libevent-2.1.so.6: cannot open shared object file: No such file or directory

Esta postagem do blog tem a solução - anexe o caminho .libs a LD_LIBRARY_PATH , assim:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$HOME/path/to/libevent/.libs

Agora, para que isso ocorra na próxima vez que você fizer login, cole a linha acima no arquivo ~/.bashrc . Se você simplesmente executar o comando no seu terminal, ele durará apenas essa sessão.

    
por 31.07.2018 / 20:35
1

Você pode usar pkg-config fazer isso facilmente.

Primeiro, crie libevent . Neste exemplo, vamos instalar libevent to /tmp/libevent - você não precisa criar esse diretório manualmente, ele será criado automaticamente durante a compilação processo. Você não precisa ser root para executar make install :

$ ./autogen.sh
$ ./configure  --prefix=/tmp/libevent
$ make
$ make install

Agora você deve ter /tmp/libevent/lib/pkgconfig/libevent.pc :

$ cat /tmp/libevent/lib/pkgconfig/libevent.pc
#libevent pkg-config source file

prefix=/tmp/libevent
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include

Name: libevent
Description: libevent is an asynchronous notification event loop library
Version: 2.2.0-alpha-dev
Requires:
Conflicts:
Libs: -L${libdir} -levent
Libs.private:
Cflags: -I${includedir}

Observe que prefix está configurado para o diretório que passamos como argumento para ./configure .

Antes de criar o tmux, adicione /tmp/libevent/lib/pkgconfig ao PKG_CONFIG_PATH :

$ export PKG_CONFIG_PATH=/tmp/libevent/lib/pkgconfig:$PKG_CONFIG_PATH
$ pkg-config --cflags --libs libevent
-I/tmp/libevent/include -L/tmp/libevent/lib -levent

E, em seguida, crie tmux normalmente:

$ ./autogen.sh
$ ./configure
$ make

Observe que, para realmente iniciar tmux com seu personalizado libevent , você precisa definir LD_LIBRARY_PATH corretamente:

$ ldd ./tmux
        linux-vdso.so.1 (0x00007ffce3d92000)
        libutil.so.1 => /lib64/libutil.so.1 (0x00007f2f1d77e000)
        libncurses.so.5 => /lib64/libncurses.so.5 (0x00007f2f1d527000)
        libevent-2.2.so.1 => not found
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f2f1d30b000)
        libc.so.6 => /lib64/libc.so.6 (0x00007f2f1cf42000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007f2f1cd3d000)
        /lib64/ld-linux-x86-64.so.2 (0x000055cdf0697000)
$ ./tmux
./tmux: error while loading shared libraries: libevent-2.2.so.1: cannot open shared object file: No such file or directory
$ LD_LIBRARY_PATH=/tmp/libevent/lib ./tmux -V
tmux master

EDITAR :

Para poder usar a configuração LD_LIBRARY_PATH , você pode definir rpath ao criar tmux :

$ ./configure LDFLAGS="-Wl,-rpath=/tmp/libevent/lib"
$ make
$ ldd ./tmux
        linux-vdso.so.1 (0x00007ffcc6de1000)
        libutil.so.1 => /lib64/libutil.so.1 (0x00007fbe121a4000)
        libncurses.so.5 => /lib64/libncurses.so.5 (0x00007fbe11f4c000)
        libevent-2.2.so.1 => /tmp/libevent/lib/libevent-2.2.so.1 (0x00007fbe11cf7000)
        libresolv.so.2 => /lib64/libresolv.so.2 (0x00007fbe11adc000)
        libc.so.6 => /lib64/libc.so.6 (0x00007fbe11712000)
        libdl.so.2 => /lib64/libdl.so.2 (0x00007fbe1150e000)
        libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fbe112f1000)
        /lib64/ld-linux-x86-64.so.2 (0x000055f057ef4000)
 $ ./tmux -V
 tmux master
    
por 31.07.2018 / 20:47

Tags