
Estoy intentando crear una biblioteca en un servidor CI remoto, pero no tengo privilegios de root. La biblioteca requiere la instalación de los paquetes autoconf, automake y libtool. No puedo hacer eso con apt-get install, así que intenté encontrar una solución alternativa: descargar los paquetes .deb y exportar las RUTAS para poder encontrar autoconf, libtoolize, etc.
El problema es que los archivos binarios de estos paquetes tienen algunas rutas a scripts adicionales (instalados como parte de los paquetes) codificados. Ahora me sale este error:
libtoolize: $pkgltdldir is not a directory: `/usr/share/libtool'
¿Hay alguna manera de cambiar esta ruta predeterminada con una variable de entorno (de la misma manera que aquí?https://superuser.com/a/1144948/62460)?
Intenté exportar $pkgltdldir
pero no funcionó.
Respuesta1
En el script de shell libtoolize (versiones 2.4.2 y 2.4.6), cuatro variables están codificadas:
datadir=/usr/share
pkgdatadir=/usr/share/libtool
pkgltdldir=/usr/share/libtool
aclocaldir=/usr/share/aclocal
Poco después aparece la siguiente sección:
# 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"
Por lo tanto, configurar $_lt_pkgdatadir en el directorio libtool funcionará (funciona para mí, pero solo si el directorio aclocal está en un subdirectorio de libltdl llamado m4).
Dado esto, su sed solución parece bastante sensata.
Respuesta2
Me encontré con el mismo problema aquí:
Construyendo lighttpd-1.4.59 como usuario no root
móvil$ ./autogen.sh
main::scan_file() llamado demasiado pronto para verificar el prototipo en /usr/bin/aclocal línea 622. autom4te: no se puede abrir autom4te.cache/requests:Permiso denegadoaclocal: /usr/bin/autom4te falló con el estado de salida: 1 autoreconf: aclocal falló con el estado de salida: 1 la compilación requiere autoconf automake libtool m4 pcre pcre-devel pkg-config
Construyendo lighttpd-1.4.59 como usuario root
raíz# ./autogen.sh
main::scan_file() llamó demasiado pronto para verificar el prototipo en /usr/bin/aclocal línea 622. libtoolize:$pkgltdldir no es un directorio: `/syslol/share/libtool'autoreconf: libtoolize falló con el estado de salida: 1 compilación requiere autoconf automake libtool m4 pcre pcre-devel pkg-config
El./autogen.shintenta localizar el `/syslol/share/libtool' directorio libtool del directorio de ruta proporcionado.
Por lo tanto, cree el árbol de directorios `/syslol/share/libtool' como sigue
raíz# mkdir -p /syslol/share/libtool
Busquemos el directorio libtool
raíz # buscar / -tipo d -nombre libtool
/compartir/libtool
Agregue un enlace simbólico para hacer referencia al directorio `/share/libtool'
raíz# ln -s /share/libtool/* /syslol/share/libtool/
Ejecute la compilación por segunda vez.
raíz# ./autogen.sh
main::scan_file() llamó demasiado pronto para verificar el prototipo en /usr/bin/aclocal línea 622. libtoolize: $aclocaldir no es un directorio: `/syslol/share/aclocal'autoreconf: libtoolize falló con el estado de salida: 1 compilación requiere autoconf automake libtool m4 pcre pcre-devel pkg-config
Esto muestra que también necesitamos vincular un directorio local a esta ruta.`/syslol/share/aclocal'
Cree aclocal dentro del directorio /syslol/share
raíz# mkdir -p /syslol/share/aclocal
Busquemos la ubicación del directorio aclocal:
raíz# buscar / -tipo d -nombre aclocal
/compartir/aclocal
/usr/local/share/aclocal
/usr/share/aclocal
Bienelegir el/share/aclocal/
camino para vincular
raíz# ln -s /share/aclocal/* /syslol/share/aclocal/
Tercer simulacro:
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
Hemos solucionado el problema de la ruta., aunque todavía tengoproblema de autofabricación Tengo que actualizar Autohacerpara una construcción exitosa.
Los archivos de versión distribuida de automake se pueden encontrar enVersionesy para la actualidad encontré enAutomake versión 1.13
Reemplacemos la versión automake versión 1.11.2 con la versión 1.13
Copia de seguridad del binario original
móvil$ que marca automática
/usr/bin/automake
raíz # mv /usr/bin/automake /usr/bin/automake1.11.2
Creando un nuevo archivo de configuración de automake con contenido de la versión 1.13
raíz # gato > /usr/bin/automake
pegue el contenido del sitio aquí
^D
Agregar permiso de ejecución
raíz # chmod +x /usr/bin/automake
Cuarta recopilación
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.
Tenemos una construcción exitosa.