
Estou tentando construir uma biblioteca em um servidor de CI remoto, mas não tenho privilégios de root. A biblioteca requer a instalação dos pacotes autoconf, automake e libtool. Não consigo fazer isso com o apt-get install, então tentei fazer uma solução alternativa: baixar os pacotes .deb e exportar PATHs para que autoconf, libtoolize, etc.
O problema é que os binários nesses pacotes possuem alguns caminhos para scripts adicionais (instalados como parte dos pacotes) codificados. Agora recebo este erro:
libtoolize: $pkgltdldir is not a directory: `/usr/share/libtool'
Existe uma maneira de alterar este caminho padrão com uma variável de ambiente (da mesma forma que aquihttps://superuser.com/a/1144948/62460)?
Tentei exportar $pkgltdldir
, mas não funcionou.
Responder1
No shell script libtoolize (versão 2.4.2 e 2.4.6), quatro variáveis são codificadas:
datadir=/usr/share
pkgdatadir=/usr/share/libtool
pkgltdldir=/usr/share/libtool
aclocaldir=/usr/share/aclocal
Logo depois há a seguinte seção:
# Allow the user to override the master libtoolize repository:
if test -n "$_lt_pkgdatadir"; then
pkgltdldir="$_lt_pkgdatadir"
pkgdatadir="$_lt_pkgdatadir/libltdl"
aclocaldir="$_lt_pkgdatadir/libltdl/m4"
Definir $_lt_pkgdatadir para o diretório libtool funcionará (funciona para mim - mas apenas se o diretório aclocal estiver em um subdiretório de libltdl chamado m4).
Diante disso, sua solução sed parece bastante sensata.
Responder2
Encontrei o mesmo problema aqui:
Construindo lighttpd-1.4.59 como usuário não root
celular $ ./autogen.sh
main::scan_file() chamado muito cedo para verificar o protótipo na linha /usr/bin/aclocal 622. autom4te: não é possível abrir autom4te.cache/requests:Permissão negadaaclocal: /usr/bin/autom4te falhou com status de saída: 1 autoreconf: aclocal falhou com status de saída: 1 compilação requer autoconf automake libtool m4 pcre pcre-devel pkg-config
Construindo lighttpd-1.4.59 como usuário root
raiz#./autogen.sh
main::scan_file() chamado muito cedo para verificar o protótipo em /usr/bin/aclocal linha 622. libtoolize:$pkgltdldir não é um diretório: `/syslol/share/libtool'autoreconf: libtoolize falhou com status de saída: 1 compilação requer autoconf automake libtool m4 pcre pcre-devel pkg-config
O./autogen.shtenta localizar o `/syslol/share/libtool'diretório libtool do diretório de caminho fornecido.
Portanto, crie a árvore de diretórios `/syslol/share/libtool' do seguinte modo
raiz # mkdir -p /syslol/share/libtool
Vamos encontrar o diretório libtool
root# encontrar / -type d -name libtool
/share/libtool
Adicione um link simbólico para referenciar o diretório `/share/libtool'
root# ln -s /share/libtool/* /syslol/share/libtool/
Execute a compilação uma segunda vez
raiz#./autogen.sh
main::scan_file() chamado muito cedo para verificar o protótipo em /usr/bin/aclocal linha 622. libtoolize: $aclocaldir não é um diretório: `/syslol/share/aclocal'autoreconf: libtoolize falhou com status de saída: 1 compilação requer autoconf automake libtool m4 pcre pcre-devel pkg-config
Isso mostra que também precisamos vincular o diretório aclocal a este caminho`/syslol/share/aclocal'
Crie aclocal dentro do diretório /syslol/share
root# mkdir -p /syslol/share/aclocal
Vamos encontrar a localização do diretório aclocal:
root# encontrar / -type d -name aclocal
/compartilhar/aclocal
/usr/local/share/aclocal
/usr/share/aclocal
Bemescolha o/share/aclocal/
caminho para vincular
root# ln -s /share/aclocal/* /syslol/share/aclocal/
Terceiro ensaio:
root# ./autogen.sh
main::scan_file() called too early to check prototype at /usr/bin/aclocal line 622.
`'libtoolize: putting auxiliary files in `.'.
libtoolize: copying file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'
main::scan_file() called too early to check prototype at /usr/bin/aclocal line 622.
Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/\${ <-- HERE ([^ \t=:+{}]+)}/ at /usr/bin/automake line 4153.
configure.ac:24: require Automake 1.13, but have 1.11.2
autoreconf: automake failed with exit status: 1
build requires autoconf automake libtool m4 pcre pcre-devel pkg-config
Corrigimos o problema do caminho, embora ainda tenhaproblema de criação automática Precisa atualizar Automakepara uma construção bem sucedida.
Arquivos de versão distribuída do automake podem ser encontrados emVersõese para corrente eu encontrei emAutomake versão 1.13
Vamos substituir a versão automake versão 1.11.2 pela versão 1.13
Faça backup do binário original
celular $ que automake
/usr/bin/automake
raiz # mv /usr/bin/automake /usr/bin/automake1.11.2
Criando um novo arquivo de configuração do automake com conteúdo da versão 1.13
raiz # gato > /usr/bin/automake
cole o conteúdo do site aqui
^ D
Adicionar permissão de execução
raiz # chmod +x /usr/bin/automake
Quarta compilação
root # ./autogen.sh
main::scan_file() called too early to check prototype at /usr/bin/aclocal line 622.
libtoolize: putting auxiliary files in `.'.
libtoolize: copying file `./ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'
main::scan_file() called too early to check prototype at /usr/bin/aclocal line 622.
Now type './configure ...' and 'make' to compile.
Temos uma construção de sucesso