우리는 2005년에 설치된 오래된 서버(Fedora Core 4)를 가지고 있습니다. 이 서버는 업데이트된 적이 없습니다. 외부 세계와 직접 연결하지 않고도 생산 라인을 모니터링할 수 있는 특수 소프트웨어를 실행한다.
시스템 업그레이드에는 문제가 없습니다.
일부 유틸리티에는 오류가 있거나 옵션이 누락되었습니다. 일부 다른 유틸리티가 누락되었습니다.
이 서버에 몇 가지 스크립트를 설치해야 합니다. 가장 큰 문제는 Bash가 정말 오래되었고 유용한 것들이 빠져 있다는 것입니다. 나는 잘 테스트된 스크립트를 해킹한다는 생각을 좋아하지 않습니다.
시스템을 변경하지 않고 최신 Bash를 실행하고 새 프로그램을 설치할 수 있는 방법이 있습니까?
BusyBox처럼요? 아니면 chroot 내에서? chroot의 문제점은 실제 시스템에 접근하기 어렵다는 것입니다. 예를 들어 내 백업 스크립트가 작동하지 않습니다.
답변1
내 생각에 가장 쉬운 방법은 다른 설치의 프로그램과 라이브러리를 별도의 디렉터리에 대량 복사하는 것입니다. 예를 들어, 몇 백 메가바이트에 불과한 필요한 모든 것을 포함할 수 있는 systemrescuecd와 같은 라이브 CD에서 /opt/new/로 복사합니다. 이를 통해 어떤 라이브러리가 필요한지 검색/찾기/추측/테스트할 필요 없이 복제할 수 있습니다.
LD_LIBRARY_PATH=/opt/new/lib/ ; /opt/new/bin/diff
그런 다음 이 프로그램을 사용하거나 실행할 수 있습니다 LD_LIBRARY_PATH=/opt/new/lib/ ; /opt/new/bin/bash
. 이는 유틸리티가 더 이상 이해하지 못하는 이전 구성 파일을 더 이상 읽지 않을 때까지 완벽하게 작동합니다. 아니면 더 나쁜 것은 그들이 글을 쓰지 않을 때까지입니다.
성공하면 새 라이브러리를 /lib/에 복사하여 LD_LIBRARY_PATH 트릭을 잊어버릴 수 있습니다. 파일 이름이 충돌하지 않는 한 이것은 안전합니다(다른 제안도 환영합니다).
과감히 이전 바이너리를 새 바이너리로 교체할 수도 있지만(선택한 바이너리에만 해당) 이는 프로덕션 서버에 적합하지 않을 수 있습니다.
답변2
전용 사용자의 홈 디렉터리에 필요한 도구를 컴파일하고 설치할 수 있습니다.
전용 사용자의 환경 변수 PATH
는 LD_LIBRARY_PATH
.
필요한 단계는 다음과 유사합니다.
- 새 사용자 만들기:
cooluser
~cooluser/Local
디렉터리 생성~cooluser/.profile
필요에 따라 설정 환경을 편집합니다.PATH=${HOME}/Local/bin:${PATH}
LD_LIBRARY_PATH=${HOME}/Local/lib:${LD_LIBRARY_PATH}
- 필요한 도구를 다운로드할 수 있는 소스
- intself가 설치되도록 도구를 구성합니다.
~cooluser/Local
- 예를 들어
./configure --prefix=~cooluser/Local
- 예를 들어
- 컴파일 및 설치
gcc
분명히 당신의 컴퓨터에는 다른 많은 개발 도구가 필요할 것입니다 . 해당 도구가 없으면 일부 OS 버전을 실행하는 다른(가상?) 컴퓨터에서 도구를 컴파일하고 ~cooluser/Local
준비가 되면 디렉터리를 전송할 수 있습니다.
답변3
설치된 프로그램이 많으면 수동으로 유지 관리하는 것이 어려울 수 있습니다. chroot에 최신 배포판을 설치하는 것이 좋습니다.
익숙해지면 Fedora를 설치해도 됩니다. chroot에 도구를 설치하는 것이 도움이 되는지 모르겠습니다. 그렇지 않다면 데비안과 그 파생물이 그렇게 합니다.부팅 방지 프로그램.이 가이드도움이 될 수도 있습니다. 이러한 이전 버전의 Fedora에는 schroot가 없지만 여전히 rpm을 설치할 수 있습니다.
schroot를 작동시킬 수 없는 경우 바인드 마운트로 chroot를 수동으로 채우십시오. 배포판을 설치했지만 /new
schroot를 사용하지 않는 경우 다음 항목을 다음에 추가하십시오 /etc/fstab
.
/ /new/old rbind rbind
/dev /new/dev rbind rbind
/home /new/home rbind rbind
/tmp /new/tmp rbind rbind
proc /new/proc proc defaults
sysfs /new/sys sysfs defaults
바인드 마운트를 사용할 것이므로 바인드 마운트 디렉터리를 통과하지 않도록 백업 스크립트를 구성해야 합니다. 그렇지 않으면 원래 위치에 한 번, 새 위치에 한 번, 총 두 번 백업하게 됩니다.
답변4
Bash는 libc에 의존하는데, 이는 너무 오래되어서 성공적인 컴파일 가능성이 매우 제한적입니다. 아마도 귀하의 bash 버전이 무엇인지 알려주는 것이 도움이 될 것입니다.