如何从非标准目录运行自动工具?

如何从非标准目录运行自动工具?

我正在尝试在远程 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

在 shell 脚本 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 目录位于名为 m4 的 libltdl 子目录中时)。

鉴于此,您的 sed 解决方案似乎非常合理。

答案2

我在这里遇到了同样的问题:

以非 root 用户身份构建 lighttpd-1.4.59

移动$./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

以 root 用户身份构建 lighttpd-1.4.59

根目录#./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

复制代码尝试找到“/syslol/共享/libtool' 从给定的路径目录中获取 libtool 目录。

因此,创建目录树`/syslol/共享/libtool' 如下

root# mkdir -p /syslol/share/libtool

让我们找到 libtool 目录

root# find / -type d -name libtool

/共享/libtool

添加符号链接以引用“/share/libtool”目录

root# ln -s /share/libtool/* /syslol/share/libtool/

再次运行构建

根目录#./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'

在 /syslol/share 目录中创建 aclocal

root# mkdir -p /syslol/share/aclocal

让我们找到 aclocal 目录的位置:

root# find / -type d -name aclocal

/共享/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 版本 1.13

让我们用 1.13 版本替换 automake 1.11.2 版本

备份原始二进制文件

移动$哪个自动制作

在/usr/bin/automake中

根目录# mv /usr/bin/automake /usr/bin/automake1.11.2

创建一个新的 automake 配置文件,内容为版本 1.13

根目录# 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.

我们已成功构建

相关内容