
원격 CI 서버에 라이브러리를 구축하려고 하는데 루트 권한이 없습니다. 라이브러리를 사용하려면 autoconf, automake 및 libtool 패키지가 설치되어 있어야 합니다. apt-get 설치로는 그렇게 할 수 없으므로 해결 방법을 시도했습니다. .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 디렉토리가 m4라는 libltdl의 하위 디렉토리에 있는 경우에만 해당).
이를 감안할 때 귀하의 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가 필요함
루트 사용자로 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 디렉토리를 찾자
루트# 찾기 / -type d -name libtool
/공유/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
/공유/aclocal
/usr/local/share/aclocal
/usr/share/aclocal
잘선택하다/share/aclocal/
연결 경로
루트 # 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으로 교체해 보겠습니다.
원본 바이너리를 백업하세요.
자동으로 만들어지는 mobile$
/usr/bin/automake
루트 # mv /usr/bin/automake /usr/bin/automake1.11.2
버전 1.13의 내용으로 새로운 automake 구성 파일 생성
루트 # 고양이 > /usr/bin/automake
여기에 사이트의 콘텐츠를 붙여넣으세요.
^D
실행 권한 추가
루트 # 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.
우리는 성공적인 빌드를 했습니다