
Я пытаюсь собрать библиотеку на удаленном сервере CI, но у меня нет прав root. Библиотека требует установки пакетов autoconf, automake и libtool. Я не могу сделать это с помощью apt-get install, поэтому я попытался обойти эту проблему: загрузить пакеты .deb и экспортировать PATH, чтобы можно было найти autoconf, libtoolize и т. д.
Проблема в том, что в двоичных файлах этих пакетов жестко прописаны некоторые пути к дополнительным скриптам (установленным как часть пакетов). Теперь я получаю эту ошибку:
libtoolize: $pkgltdldir is not a directory: `/usr/share/libtool'
Есть ли способ изменить этот путь по умолчанию с помощью переменной среды (таким же образом, как здесь)https://superuser.com/a/1144948/62460)?
Я попробовал экспортировать $pkgltdldir
, но это не сработало.
решение1
В скрипте оболочки 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 кажется вполне разумным.
решение2
Я столкнулся с той же проблемой здесь:
Сборка 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 m4 pcre pcre-devel pkg-config
Сборка lighttpd-1.4.59 от имени пользователя root
root# ./autogen.sh
main::scan_file() вызван слишком рано для проверки прототипа в /usr/bin/aclocal строка 622. libtoolize:$pkgltdldir не является каталогом: `/syslol/share/libtool'autoreconf: libtoolize завершился неудачно, код выхода: 1 сборка требует autoconf automake libtool m4 pcre pcre-devel pkg-config
The./autogen.shпытается найти `/syslol/share/libtool' каталог 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/
Запустите сборку второй раз
root# ./autogen.sh
main::scan_file() вызван слишком рано для проверки прототипа в /usr/bin/aclocal строка 622. libtoolize: $aclocaldir не является каталогом: `/syslol/share/aclocal'autoreconf: libtoolize завершился неудачно, код выхода: 1 сборка требует autoconf automake libtool m4 pcre pcre-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/share/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 можно найти по адресуВерсиии для тока я нашел вАвтомейк версия 1.13
Давайте заменим версию automake версии 1.11.2 на версию 1.13
Резервное копирование исходного двоичного файла
мобильный$, который производит авто
/usr/bin/automake
корень # mv /usr/bin/automake /usr/bin/automake1.11.2
Создание нового файла конфигурации automake с содержимым версии 1.13
root # cat > /usr/bin/automake
вставьте сюда содержимое сайта
^D
Добавить разрешение на выполнение
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.
У нас есть успешная сборка