非標準ディレクトリから autotools を実行するにはどうすればいいですか?

非標準ディレクトリから autotools を実行するにはどうすればいいですか?

リモート CI サーバーでライブラリを構築しようとしていますが、ルート権限がありません。ライブラリには autoconf、automake、libtool パッケージがインストールされている必要があります。apt-get install ではそれができないため、回避策として、.deb パッケージをダウンロードし、autoconf、libtoolize などが見つかるように PATH をエクスポートしようとしました。

問題は、これらのパッケージのバイナリに、追加のスクリプト (パッケージの一部としてインストールされる) へのパスがハードコードされていることです。次のエラーが発生します。

libtoolize: $pkgltdldir is not a directory: `/usr/share/libtool'

このデフォルトパスを環境変数で変更する方法はありますか(ここと同じ方法)https://superuser.com/a/1144948/62460)?

エクスポートを試みました$pkgltdldirが、うまくいきませんでした。

答え1

シェル スクリプト libtoolize (バージョン 2.4.2 および 2.4.6) では、4 つの変数がハードコードされています。

   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 を構築する

モバイル$ ./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 が必要です

./autogen.sh`を見つけようとします/syslol/share/libtool' 指定されたパス ディレクトリから libtool ディレクトリに移動します。

したがって、ディレクトリツリーを作成します`/syslol/share/libtool' 次のように

ルート# mkdir -p /syslol/share/libtool

libtoolディレクトリを見つけましょう

ルート# find / -type d -name libtool

/share/libtool

`/share/libtool'ディレクトリを参照するためのシンボリックリンクを追加します

ルート# 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を作成する

ルート# mkdir -p /syslol/share/aclocal

aclocal ディレクトリの場所を見つけましょう:

ルート# find / -type d -name aclocal

/share/aclocal

/usr/local/share/aclocal

/usr/share/aclocal

良い選択してください/share/aclocal/リンクのパス

ルート# ln -s /share/aclocal/* /syslol/share/aclocal/

3回目の予行演習:

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 バージョン 1.13

automakeバージョン1.11.2をバージョン1.13に置き換えましょう

元のバイナリをバックアップする

モバイル$ どのオートメイク

自動メイク

ルート # mv /usr/bin/automake /usr/bin/automake1.11.2

バージョン 1.13 の内容を含む新しい automake 構成ファイルを作成する

ルート # cat > /usr/bin/automake

サイトのコンテンツをここに貼り付けます

^D

実行権限を追加

ルート # chmod +x /usr/bin/automake

第4弾

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.

ビルドは成功しました

関連情報