2011-04-14 10 views
1

는 우리의 환경에있는 서버의 대부분은 자신의 루프 백 라인을 가지고 :마스킹 호스트 이름이

127.0.0.1  mydevserver.testdomain.com mydevserver localhost.localdomain localhost 

보통을,이 문제가되지 않습니다 . 그러나 우리는 이제 gethostbyaddr을 호출하는 공급 업체의 일부 외부 소프트웨어를 다루고 있으며 hostname --ip-address의 결과가 127.0.0.1 인 경우 해당 설치 관리자가 실패하도록 설계되었습니다. 물론 서버 호스트 이름이 루프백 행 /etc/hosts에 있기 때문에 시스템에서 오류가 발생합니다.

나는 떠들썩한 파티 또는 Perl 스크립트의 설치를 포장하면 내 질문입니다,/etc/hosts 파일 변경하지 않고 hostname --ip-address의 결과를 변경 "마스크"하거나 일시적으로 방법은 무엇입니까?

(명확한 설명 :. 그들은 자신의 컴파일 된 바이너리 설치 프로그램 내에서이 gethostbyaddr() 함수를 호출 명령 줄에서 비슷한 결과를 얻을 수있는 방법은 hostname --ip-address입니다) 예상되는 일을 hostname 당신 자신의 구현을 작성

+0

이와 같은 이유로 인해 '127. *. *. *'와 같은 다른 주소를 사용하는 것이 일반적이지 않은 이유는 '127.0.1.1'입니다. 서버의 FQDN입니다. 나는 이것이 당신이 요구 한 것이 아니라는 것을 알고 있습니다, 그래서 저는 이것을 대답이 아니라 주석으로 추가하고 있습니다. – clacke

답변

4

한 가지 방법은 이렇게 공급 업체의 설치 프로그램이 시스템 gethostbyaddr()보다는 그것을 사용 후, preload it in a wrapper script을, 자신의 gethostbyaddr() 함수를 작성 (말하자면 libmyfunc.so)을 라이브러리로 컴파일 할 수 있습니다 "호스트 이름"호출 전에 이것을 추가하십시오 :
function hostname(){ echo -n; }

+0

보기 흉한 방법이지만 공급 업체의 소프트웨어가 추악하기 때문에 필요할 수도 있습니다. – Eli

1

어딘가에 넣으십시오. 그 디렉토리는 $PATH 앞에 위치해야합니다.

+0

감사합니다. 그러나 컴파일 된 바이너리 설치 프로그램에서 gethostbyaddr() 함수를 호출하고 있습니다. 명령 행에서 비슷한 결과를 얻는 방법은 **'hostname --ip-address' **입니다. – Eli

1

실제로 hostname 명령을 호출하면 그보다 쉬운 것은 없습니다. 단지 자신의 버전으로 바꾸십시오. 잘

#!/bin/bash  
export LD_PRELOAD=libmyfunc.so 
export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH 

/path/to/crappy_vendor_binary [email protected] 
+0

감사합니다. 그러나 컴파일 된 바이너리 설치 프로그램에서 gethostbyaddr() 함수를 호출하고 있습니다. 명령 행에서 비슷한 결과를 얻는 방법은 **'hostname --ip-address' **입니다. – Eli

+0

@Eli, 그러면/etc/hosts를 더 잘 업데이트 할 수 있습니다. 나는 당신의 연습을위한 합리적 이유가 없다고 확신합니다. 설치자이기 때문에/etc/hosts 파일을 임시로 정리하면됩니다. – Ingo

0

가 있다면 :