Как запустить автоинструмент из нестандартного каталога?
Я пытаюсь создать библиотеку на удаленном CI-сервере, но у меня нет привилегий root. Для библиотеки требуются пакеты autoconf, automake и libtool. Я не могу сделать это с помощью apt-get install, поэтому я попытался обойти эту проблему: загрузить пакеты.deb и экспортировать PATH, чтобы можно было найти autoconf, libtoolize и т. Д.
Проблема заключается в том, что двоичные файлы в этих пакетах имеют некоторые пути к дополнительным сценариям (устанавливаемым как часть пакетов) в жестком коде. Теперь я получаю эту ошибку:
libtoolize: $pkgltdldir is not a directory: `/usr/share/libtool'
Есть ли способ изменить этот путь по умолчанию с помощью переменной среды (так же, как здесь /questions/330189/autoconf-libtool-i-neopredelennyij-acproglibtool/330198#330198)?
Я пытался экспортировать $pkgltdldir
но это не сработало.
2 ответа
В сценарии оболочки libtoolize (версии 2.4.2 и 2.4.6) жестко заданы четыре переменные:
datadir=/usr/share
pkgdatadir=/usr/share/libtool
pkgltdldir=/usr/share/libtool
aclocaldir=/usr/share/aclocal
Вскоре после этого появляется следующий раздел:
# 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"
Таким образом, установка $_lt_pkgdatadir в каталог libtool будет работать (работает для меня - но только если каталог aclocal находится в подкаталоге libltdl с именем m4).
Учитывая это, ваше решение sed кажется довольно разумным.
Я столкнулся с той же проблемой здесь:
Сборка Lighttpd-1.4.59 от имени пользователя без полномочий root
мобильный$ ./autogen.sh
main::scan_file() вызывается слишком рано для проверки прототипа в /usr/bin/aclocal, строка 622. autom4te: невозможно открыть autom4te.cache/requests: разрешение отклонено aclocal:/usr/bin/autom4te не удалось со статусом выхода: 1 autoreconf: Ошибка aclocal со статусом выхода: для 1 сборки требуется autoconf automake libtool m4pcre pcre-devel pkg-config
Сборка Lighttpd-1.4.59 от имени пользователя root
корень# ./autogen.sh
main::scan_file() вызывается слишком рано для проверки прототипа в строке 622 /usr/bin/aclocal. libtoolize: $pkgltdldir не является каталогом:`/syslol/share/libtool' autoreconf: ошибка libtoolize со статусом выхода: требуется 1 сборка autoconf automake libtool m4 pcrepcre-devel pkg-config
./autogen.sh пытается найти каталог libtool ` /syslol/share/libtool ' по заданному пути .
Поэтому создайте дерево каталогов ` /syslol/share/libtool ' следующим образом.
root# mkdir -p /syslol/share/libtool
Давайте найдем каталог libtool
root# find / -type d -name libtool
/share/libtool
Добавьте символическую ссылку на каталог `/share/libtool'.
root# ln -s /share/libtool/* /syslol/share/libtool/
Запустите сборку второй раз
корень# ./autogen.sh
main::scan_file() вызывается слишком рано для проверки прототипа в строке 622 /usr/bin/aclocal. libtoolize: $aclocaldir не является каталогом:` /syslol/share/aclocal' autoreconf: ошибка libtoolize со статусом выхода: требуется 1 сборка autoconf automake libtool m4 pcrepcre-devel pkg-config
Это показывает, что нам также необходимо связать каталог aclocal с этим путем `/syslol/share/aclocal'.
Создайте aclocal в каталоге /syslol/share.
root# mkdir -p /syslol/share/aclocal
Давайте найдем расположение каталога aclocal:
root# find / -type d -name aclocal
/share/aclocal
/usr/local/share/aclocal
/usr/доля/aclocal
Мы выберем
/share/aclocal/
путь для связи
root# ln -s /share/aclocal/* /syslol/share/aclocal/
Третий пробный прогон:
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
Мы исправили проблему с путем , но проблема с automake все еще остается. Для успешной сборки необходимо обновить Automake .
Файлы распространяемых версий automake можно найти в разделе «Версии» , а текущую версию я нашел в Automake версии 1.13.
Давайте заменим версию automake версии 1.11.2 на версию 1.13.
Сделайте резервную копию исходного двоичного файла
mobile$, который автоматизирует
/usr/bin/automake
корень # mv /usr/bin/automake /usr/bin/automake1.11.2
Создание нового файла конфигурации automake с содержимым версии 1.13.
корень # cat > /usr/bin/automake
вставьте сюда контент с сайта
^ Д
Добавить разрешение на выполнение
root # chmod +x /usr/bin/automake
Четвертая компиляция
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.
У нас есть успешная сборка