
Ich versuche, eine Bibliothek auf einem Remote-CI-Server zu erstellen, habe aber keine Root-Berechtigungen. Die Bibliothek erfordert die Installation der Pakete autoconf, automake und libtool. Das geht mit apt-get install nicht, also habe ich versucht, das Problem zu umgehen: die .deb-Pakete herunterzuladen und PATHs zu exportieren, damit autoconf, libtoolize usw. gefunden werden können.
Das Problem besteht darin, dass die Binärdateien in diesen Paketen einige Pfade zu zusätzlichen Skripten (die als Teil der Pakete installiert sind) fest codiert haben. Jetzt erhalte ich diesen Fehler:
libtoolize: $pkgltdldir is not a directory: `/usr/share/libtool'
Gibt es eine Möglichkeit, diesen Standardpfad mit einer Umgebungsvariable zu ändern (auf die gleiche Weise wie hierhttps://superuser.com/a/1144948/62460)?
Ich habe versucht, es zu exportieren, $pkgltdldir
aber das hat nicht funktioniert.
Antwort1
Im Shellskript libtoolize (Version 2.4.2 und 2.4.6) sind vier Variablen fest codiert:
datadir=/usr/share
pkgdatadir=/usr/share/libtool
pkgltdldir=/usr/share/libtool
aclocaldir=/usr/share/aclocal
Kurz darauf folgt folgender Abschnitt:
# 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"
Das Festlegen von $_lt_pkgdatadir auf das Libtool-Verzeichnis funktioniert daher (funktioniert bei mir – aber nur, wenn sich das aclocal-Verzeichnis in einem Unterverzeichnis von libltdl mit dem Namen m4 befindet).
Vor diesem Hintergrund erscheint Ihre Sed-Lösung durchaus sinnvoll.
Antwort2
Ich bin hier auf dasselbe Problem gestoßen:
Erstellen von lighttpd-1.4.59 als Nicht-Root-Benutzer
mobile$ ./autogen.sh
main::scan_file() wurde zu früh aufgerufen, um den Prototyp in /usr/bin/aclocal Zeile 622 zu prüfen. autom4te: autom4te.cache/requests kann nicht geöffnet werden:Zugriff verweigertaclocal: /usr/bin/autom4te ist fehlgeschlagen mit Exit-Status: 1 autoreconf: aclocal ist fehlgeschlagen mit Exit-Status: 1 Build erfordert Autoconf Automake Libtool m4 pcre pcre-devel pkg-config
Erstellen von lighttpd-1.4.59 als Root-Benutzer
Wurzel# ./autogen.sh
main::scan_file() wurde zu früh aufgerufen, um den Prototyp in /usr/bin/aclocal Zeile 622 zu prüfen. libtoolize:$pkgltdldir ist kein Verzeichnis: „/syslol/share/libtool“autoreconf: libtoolize ist mit Exit-Status fehlgeschlagen: 1 Build erfordert Autoconf Automake Libtool M4 PCRE PCRE-Devel Pkg-Config
Der./autogen.shversucht, das ` zu lokalisieren/syslol/share/libtool' Libtool-Verzeichnis aus dem angegebenen Pfadverzeichnis.
Erstellen Sie dazu den Verzeichnisbaum `/syslol/share/libtool' wie folgt
root# mkdir -p /syslol/share/libtool
Suchen wir das Libtool-Verzeichnis
root# finden / -Typ d -name libtool
/teilen/libtool
Fügen Sie einen symbolischen Link hinzu, um auf das Verzeichnis „/share/libtool“ zu verweisen.
root# ln -s /share/libtool/* /syslol/share/libtool/
Führen Sie den Build ein zweites Mal aus
Wurzel# ./autogen.sh
main::scan_file() wurde zu früh aufgerufen, um den Prototyp in /usr/bin/aclocal Zeile 622 zu prüfen. libtoolize: $aclocaldir ist kein Verzeichnis: `/syslol/share/aclocal'autoreconf: libtoolize ist mit Exit-Status fehlgeschlagen: 1 Build erfordert Autoconf Automake Libtool M4 PCRE PCRE-Devel Pkg-Config
Dies zeigt, dass wir auch ein lokales Verzeichnis mit diesem Pfad verknüpfen müssen`/syslol/share/aclocal'
Erstellen Sie aclocal im Verzeichnis /syslol/share
root# mkdir -p /syslol/share/aclocal
Suchen wir den Speicherort des Verzeichnisses aclocal:
root# finden / -Typ d -name aclocal
/teilen/aclocal
/usr/lokal/share/aclocal
/usr/share/aclocal
Alsowählen Sie das/share/aclocal/
Pfad zur Verlinkung
root# ln -s /share/aclocal/* /syslol/share/aclocal/
Dritter Probelauf:
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
Wir haben das Pfadproblem behoben, haben aber immer nochAutomake-Problem Müssen aktualisieren Automarkefür einen erfolgreichen Build.
Verteilte Automake-Versionsdateien finden Sie unterVersionenund für den Strom fand ich beiAutomake Version 1.13
Ersetzen wir die Version Automake Version 1.11.2 durch Version 1.13
Sichern Sie die ursprüngliche Binärdatei
Handy$ welches Automarke
/usr/bin/automake
root # mv /usr/bin/automake /usr/bin/automake1.11.2
Erstellen einer neuen Automake-Konfigurationsdatei mit Inhalt der Version 1.13
root # cat > /usr/bin/automake
Inhalt der Site hier einfügen
^D
Ausführungsberechtigung hinzufügen
root # chmod +x /usr/bin/automake
Vierte Zusammenstellung
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.
Wir haben einen erfolgreichen Build