glibc 사전 구성 오류: libc를 /usr/local에 설치하면 안 됩니다.

glibc 사전 구성 오류: libc를 /usr/local에 설치하면 안 됩니다.
.
.
.
checking for kernel header at least 3.2.0... ok
*** On GNU/Linux systems the GNU C Library should not be installed into
*** /usr/local since this might make your system totally unusable.
*** We strongly advise to use a different prefix.  For details read the FAQ.
*** If you really mean to do this, run configure again using the extra
*** parameter `--disable-sanity-checks'.
Pre-configuration commands finished with code: 1

C 코드를 보고 싶어서 glibc를 복제하고 clion에서 열었는데 이 오류가 발생했습니다.

  1. 내 시스템에 어떻게 구축하나요: 데비안?
  2. 데비안은 왜 그런 일을 할까요?

답변1

  1. 데비안은 왜 그런 일을 할까요?

/usr/local/lib이는 Debian 때문이 아니라 대부분의 Linux 시스템에서 C 컴파일러와 동적 링커/로더가 구성되어 있기 때문입니다. 동일한 이름의 라이브러리가 및 에 있으면 /usr/lib및 의 라이브러리가 /usr/local/lib우선합니다.

이를 통해 시스템 관리자는 시스템의 모든 라이브러리를 사용자 정의 라이브러리로 쉽게 교체하고 패키지 업데이트 후에도 사용자 정의 라이브러리를 유지할 수 있습니다.

하지만,현재 수행 중인 작업을 실제로 알지 않는 한 기존 설치를 사용자 정의 설치로 바꾸는 것은 glibc좋은 생각이 아닙니다 .새 버전을 설치하는 데 사용되는 도구를 포함하여 시스템의 거의 모든 명령과 프로그램에 영향을 미칩니다.glibc.

~에서glibc FAQ 위키 페이지:

GNU/Linux 시스템의 /usr/local에 glibc가 설치되지 않는 이유는 무엇입니까?

/usr/local/includeGNU C 컴파일러는 이러한 디렉터리를 특별한 방법으로 처리 /usr/local/lib한 다음 시스템 디렉터리를 검색합니다. GNU/Linux에서는 /usr/include시스템 디렉터리에 /usr/lib잠재적으로 다른 glibc 버전이 포함되어 있고 다른 glibc 설치의 특정 파일을 혼합하는 것은 지원되지 않으며 손상될 수 있으므로 전체 시스템이 손상될 위험이 있습니다.

glibc 설치를 테스트하려면 다른 디렉터리에 설치해야 합니다 DESTDIR(다른 값으로 덮어쓰지 마십시오 --prefix. 이는 --prefix=/usr허용되기만 합니다).

방금 구축한 모든 GNU C 라이브러리 프로젝트 라이브러리를 어떻게 설치합니까?

/tmp/glibc이러한 라이브러리를 설치하는 유일한 올바른 방법은 먼저 via 등의 임시 디렉터리에 설치한 make install DESTDIR=/tmp/glibc다음 해당 디렉터리를 초기 루트 디스크에 복사하고 초기 루트 디스크를 부팅한 다음 결과를 루트 파일 시스템에 복사한 다음 루트 파일 시스템은 부팅의 마지막 단계 역할을 합니다. 그건오직오늘 glibc를 설치하는 안전한 방법입니다.

그러나 어떤 배포판도 이 작업을 수행하지 않는다는 점에 유의하십시오. 그렇게 하면 그렇게 하기 때문에 그들은 그렇게 하지 않는다.필요하다glibc를 설치한 후 재부팅하세요. 현재 실행 중인 모든 프로세스가 보안 업데이트 후 glibc를 다시 로드하려는 경우에만 필요합니다(실행 중인 프로세스는 여전히 이전 라이브러리를 실행하므로). 대신 배포판에서는 패키지 관리자를 사용하여 라이브러리 아카이브의 압축을 풀고 실행 중인 시스템에 설치합니다. 이는 실제로 매우 위험합니다. 어느 시점이 되면 시스템에 새로운 라이브러리와 오래된 라이브러리의 혼합 복사본이 있게 되어 실행 프로세스를 시작할 수 없게 될 수 있기 때문입니다. 비슷한 방식으로, 업그레이드하는 동안 언어 로캘이 포함된 지역화 아카이브가 다시 작성됩니다. 이 기간 동안 필요한 지역화가 누락된 경우(아직 아카이브로 다시 작성되지 않은 경우) 프로세스가 시작되지 않을 수 있습니다. 패키지 관리 시스템도 면역되지 않습니다. 예를 들어 rpm은 glibc를 설치할 때 새 프로세스를 실행하지 않고 대신 내장된 lua 인터프리터를 사용하여 스크립트를 실행하고 rpm이 이전 프로세스를 사용하여 전체를 실행할 수 있도록 조치를 취해야 했습니다. 응집력으로 라이브러리 사본을 설치하고 새 사본도 설치하십시오.

요약하자면, glibc를 설치하는 가장 좋은 방법은 다른 시스템에서 사용 중인 디스크에 설치하는 것입니다. 일반적으로 이 작업은 초기 루트 디스크에서 수행할 수 있으며, 차선책은 정적 또는 조작된 응용 프로그램을 통해 복사하는 것입니다. 불완전한 부분 설치를 통해 새 프로세스를 실행하지 않고 파일이 제자리에 있습니다. 그 중 하나를 선택하세요. 결국 후자는 공유 런타임이 있는 로드가 많은 시스템에서 지원되지 않게 됩니다.


  1. 내 시스템에 어떻게 구축하나요: 데비안?

FAQ에서 말했듯이 DESTDIR환경 변수입니다. ./configureglibc 스크립트의 보안 검사가 실행되지 않도록 시작하기 전에 이 작업을 수행하세요 .

LD_LIBRARY_PATH빌드 가 완료되면 환경 변수 를 $DESTDIR/lib. 그러나 위에서 언급한 것처럼 데비안 표준 버전의 glibc에 속하는 다른 파일과 충돌이 발생할 수 있습니다.

새 glibc를 테스트하는 더 좋은 방법은 가상 머신을 준비한 다음 해당 디스크를 호스트 시스템에 마운트하는 것입니다(가상 머신이 중지됨). 이렇게 하면 필요하기 전에 새 glibc의 모든 구성 요소를 가상 머신에 설치할 수 있습니다. 모든 구성 요소를 실행합니다. 위험 비호환성. 그런 다음 가상 머신을 시작하고 무슨 일이 일어나는지 확인할 수 있습니다.

가상 머신이 여전히 작동하고 새 glibc가 당시 실행하려는 테스트를 통과하면그때야호스트 시스템에 새로운 glibc 설치에 대해 생각해 볼 수 있습니다. 이렇게 하려면 신중하게 계획을 세워야 합니다. 새 glibc를 설치하기 위해 외부 미디어에서 부팅하시겠습니까? 아니면 새 glibc를 *.deb패키지(세트)로 패키징하고 패키지 관리자를 사용하여 설치하시겠습니까? 어느 쪽이든, 더욱 확실하게백업이 최신 상태입니다그리고부팅 미디어가 준비되어 있습니다.시작하기 전에.

패키징 경로를 선택하기로 결정했다면 먼저 배포판의 glibc 표준 버전에 대한 소스 패키지를 로드하고 패키징과 포함된 사전 설치/설치 후 스크립트를 자세히 살펴보는 것이 좋습니다. 패키지 관리자는 특정 콘텐츠를 가질 수 있습니다. 프로세스의 필수 단계매우 정확함.

답변2

스크립트 --prefix=<some other directory>에 전달해야 합니다 . 파일이 [0] configure에 설치되었는지 확인합니다 .<some other directory>

glibcin 의 호환되지 않는 버전을 설치하면 /usr/local시스템을 사용할 수 없게 될 수 있습니다.

컴파일하려면 glibc소스 트리의 루트로 이동하여

cd build
../configure --prefix=<some other directory> # /tmp/compileGlibc
make -j$(nproc)

.glibc

make install

설치 파일을 에 복사합니다 <some other directory>.

또한 스크립트에 전달하여 glibc기본 컴파일을 사용할 수도 있습니다.PREFIX--disable-sanity-checksconfigure

[0]https://sourceware.org/git/?p=glibc.git;a=blob;f=install;h=b29916e748c25a25888125ee3d162050d6339181;hb=HEAD

관련 정보