Linux에서 별도의 (최신) glibc / gcc /… 스택을 루트가 아닌 스택으로 유지 관리하는 방법


10

우리의 계산 클러스터는 구 커널 (2.6.18)과 구 라이브러리와 바이너리가있는 아주 오래된 CentOS 버전을 실행합니다. 모든 것을 업데이트하려면 모든 노드에서 많은 작업이 필요하기 때문에 이것은 옵션이 아닙니다.

(및 / 또는 ) C++11의 최신 버전 이 필요한 프로그램을 컴파일하고 사용하려고합니다 . 시스템을 엉망으로 만들고 싶지 않기 때문에 일부 로컬 디렉토리 트리에서 루트가 아닌 사용자 로이 작업을 수행하려고합니다.gccclang

문제는 머신에있는 것보다 gcc새로운 것이 필요 glibc하다는 것입니다. 따라서, 나는 별도, 최신 버전을 유지할 필요가 glibc내 로컬에 lib/설명 된대로 아마 트리 여기 .

어디에서 잃어버린하고, 어떻게 모든 일에 내 로컬 libs와의 I "하드 코드"경로 필요한 바이너리, 즉 gcc, g++등? LD_LIBRARY_PATH를 로컬 lib/트리로 설정 하면 모든 시스템 바이너리 가 컴파일되지 않은 ELF file OS ABI invalidlibm.so/ 를 사용하기 때문에 더 이상 작동하지 않습니다 ( ) libc.so.

그래서, 그것을 포장하기 : 새로운 지역 개발 스택 (포함 유지하는 적절한 방법은 무엇입니까 glibc, gcc루트로 장난하지 않고 기존 시스템에 병렬로 등)?

부수적 인 질문으로 : LD_LIBRARY_PATH 설정은 분리에 관해서 SE 전역에 솔루션으로 게시됩니다 glibc. 나를 위해 시스템 바이너리 (예 :)를 실행하려고하면 위의 오류가 발생합니다 ls. 어떻게 오세요? 내가 잘못했거나 의도 한 행동입니까?

답변:


10

기본적으로 세 가지 옵션이 있습니다.

  1. 라이브러리 주위에 래퍼를 사용하면 LD_LIBRARY_PATH적절 하게 설정 한 다음 원하는 라이브러리를 실행할 수 있습니다.

    #!/bin/sh
    export LD_LIBRARY_PATH="path/goes/here"
    exec "$@"
    
  2. 동적 링커의 검색 경로를 바이너리에 추가 하는 -rpath( -Wl,rpath) 와의 링크 ( SO 답변 참조 -래퍼도 언급).

  3. 이 글을 읽고 싶지 않을 것입니다 : 클러스터를 업데이트 하십시오 ( "your"에 중점을 두십시오). 그것은 하루나 다른 날에 이루어져야 할 것이므로 오늘은 어떻습니까? 대부분의 경우 "옵션이 아님" 은 약간 강력합니다. 다른 사용자들도 아마 같은 문제가있을 것입니다.

문제가있는 오래된 바이너리의 경우 바이너리에는 선호하는 동적 링커가 포함되어 있습니다. 그리고 오래된 동적 링커는 최신 ABI를 이해하지 못합니다. 다음과 같이 바이너리를 호출하십시오 path/to/your/ld-linux-<arch>.so binary.

GCC 구축 : 항상 CFLAGSGCC의 빌드 환경에서 내보내기 를 시도 할 수 있지만 전파 될 것이라고 확신합니다. 다양한 배포판의 빌드 스크립트는 몇 가지 단서를 제공 할 수 있습니다 (예 : openSUSE의 경우 .spec 파일의 1880 행을 둘러보십시오 ).


Peterph 안녕하세요, 답변 주셔서 감사합니다. 옵션 2를 선호합니다. 그러나 Makefile 등을 변경하지 않고 어떻게 rpath를 gcc와 같이 하드 코딩합니까? 클러스터 업데이트와 관련하여 : 물론 이것은 우리의 의제에 있지만 지금은 너무 많은 사람들이 더 긴 다운 타임을 정당화하기 위해 사용하고 있습니다. 또한 업데이트하기 위해 원래 설정 한 회사를 다시 고용 할 것입니다. 우리 그룹에는 이에 대한 충분한 지식과 경험을 가진 사람이 없습니다.
janoliver

GCC의 경우 내 답변 업데이트를 참조하십시오. 클러스터 업그레이드의 경우 개인 권장 사항은 내부 (또는 적어도 장기 외부) 전문가를 얻는 것입니다. 일반적으로 단순히 아웃소싱하는 것보다 장기적으로 저렴하고 유연합니다. 가장 중요한 장점은 시스템 관리자와 사용자 간의 상호 작용을 통해 지식을 얻는 것입니다.
peterph

절망적으로 저조한 독일 과학 시스템의 소규모 연구 그룹 인 우리는 불행히도이 작업을 위해 누군가를 고용하거나 시간을 투자 할 수 없습니다. 당신은 옳을 수도 있지만 장기적으로는 돈을 지불 할 수도 있지만 지금은 예산이 너무 제한되어 있습니다. 이것은 회사에 있지 않은 단점입니다. ;)
janoliver

대학에서 IT / CS 학생들을 확보하십시오. 좋은 학사 / 학사 학위 논문으로도 사용할 수 있습니다. 그리고 재정과 관련하여 : 당신이 동방 이웃이 아닌 독일에 있다는 것을 기뻐하십시오 (오스트리아를 제외하고). :)
peterph

전달에 대한 대안으로서 -rpath( -Wl,rpath링커) 링커는 또한에서 경로를 추가한다 LD_RUN_PATH탐색 경로 환경 변수
rakslice
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.