2016-07-02 1 views
1

Uniscan은 kali linux 및 기타 펜 테스트 배포판에 포함 된 웹 사이트를 검색하는 도구입니다. 내 응용 프로그램을 테스트하기 위해 매주 그것을 사용하는 데 사용하지만 내 리눅스 도구의 일부 업데이트 후 지금은 그것을 실행할 때 다음과 같은 오류주고있다 :로드 가능한 라이브러리와 펄 바이너리가 일치하지 않습니다 (:Uniscan :로드 가능한 라이브러리 및 perl 바이너리가 일치하지 않습니다.

XS/Moose.c을 핸드 셰이크 키 0xdb00080 필요, 0xdb80080)

현재 perl 버전은 5.24.0입니다. 나는 어딘가에이 문제가 perl 버전을 다운 그레이드하면 우회 할 수 있다고 읽었지 만 다운 그레이드해야하는 버전을 찾지 못했고 내 패키지 관리자 캐시에서 사용할 수있는 모든 버전을 시도했지만 아무 것도 작동하지 않아 실제로 변경되었습니다 .c 핸드 셰이크가 일치하지 않는 파일 또한 Uniscan을 최신 버전 (6.3.1)으로 업데이트하려고했지만 아무 것도하지 않았습니다.

어쨌든이 문제를 해결하는 방법을 알고 있습니까? 미리 감사드립니다.

+0

다른 빌드의 Perl로 설치된 Perl 빌드가있는 모듈을 사용하는 것처럼 보입니다. 'PERL5LIB' 환경 변수는 아마도 어딘가에있는 것을 가리킬 것입니다. – ikegami

답변

3

이 오류 메시지는 perl 인터프리터의 Perl_xs_handshake 기능에서 발생합니다. 코멘트에서 :

펄이 모듈이 함께 를 구축되었는지 확인하려면위한 ExtUtils :: ParseXS에 의해 파일을 .C에 추가되는 다양한 XS _ * _ BOOTCHECK 매크로를 실행하면 실행 펄와 바이너리 호환 . 한마디로

, 이것은 Moose 펄 모듈은 펄 인터프리터의 호환되지 않는 버전에 내장되는 것을 의미한다 (즉 perl이 가능한 옵션이 다운 그레이드, 그러나 이것은 문제의 그것의 자신의 세트가있다).

Moose은 perl을위한 객체 지향 확장 프레임 워크입니다. 일부 배포판이 미리 빌드하고 배포판에 별도 패키지로 포함하는 것이 일반적입니다 (예 : fedora 아래, perl-Moose fedora 패키지가 있음).

MooseCPAN 패키지로도 제공됩니다.

배포판 (칼리)이 올바로 설정되어 있다면 상황이 스스로 처리되어야합니다 (그렇지 않은 경우). 즉, kali가 perl으로 업그레이드했다면, 다양한 perl 모듈 패키지 (그 중 하나 인 Moose)를 다시 빌드해야합니다.

또는 ... Moose는 배포판에서 설치 결코했지만, (예를 들어, 어떤 사람의 일환으로) CPAN에서 설치되었다.

또 다른 방법은 cpan을 호출하고 거기에서 Moose 패키지를 다운로드, 다시 작성 및 설치하는 것입니다. 찾기 위해

것은 현재 Mooseperldoc -lm Moose을 수행하여 (예를 들어, /usr/lib64/... 또는 /usr/local/lib64/... 등)에 설치되어있는 장소를 찾는 것입니다. 이 경우 디렉토리를 설치하는 데 cpan을 구성하는 데 도움이 될 수 있습니다.


는 UPDATE :

혼자 무스를 다시 CPAN을 사용하는 방법을 찾을 수 없습니다, 나는 또한 다운로드하려고 -c, -m과 함께 "CPAN 무스를"(시도 그리고 -g를 사용하여 설치, 아무 것도 작동하지 않음) 그래서 설치된 모든 모듈을 업데이트하기 위해 cpan -u를 실행했습니다. 그 후에도 문제가 지속됩니다. 배포판 패키지 (예를 들어 칼리 포)와 CPAN 패키지 :

패키지 두 가지 유형이있다. 주어진 펄 모듈이 배포판에서 설치 되었다면 cpan이 그것을 업데이트하려고 시도하지 않을 것입니다. 우리가해야 할 일은 cpan에서 까지 (CPAN에서)을 설치하는 것입니다.

cpan을 사용할 때 나는 보통 /full_path_to/perl -MCPAN -e shell입니다. 전체 경로를 사용하는 이유는 여러 다른 perl 버전이 설치되어 있기 때문입니다. 내가 가진 이유에 대한 배경 지식이 프롬프트에서, 나는 보통 install Moose 그런 짓을, 내 대답은 그 후 https://serverfault.com/questions/741186/cpan-is-using-old-perl-version-to-install-modules/741216#741216

를 참조 [와 그들을 가지고했다]. 패키지 의존성을 찾을 것이고 일반적으로 모두에게 예라고 말합니다.

cpan은 몇 가지 다른 설치 모드를 허용합니다. 특히 시스템 전체 (즉, 사용자는 sudo)를 설치하거나 $ HOME 디렉토리 아래의 서브 디렉토리에 설치하십시오. 이렇게하면 루트가 아닌 사용자가 로컬 시스템 관리자가 설치를 허용하지 않을지라도 CPAN 모듈을 설치할 수 있습니다. /usr/lib64/...

자세한 내용은 을 참조하십시오. 특히 관심 대상은 $HOME/.cpan/CPAN/MyConfig.pm입니다. 해당 텍스트 파일에서 설치 관련 정보 (예 : 'make_install_make_command' => q[sudo /usr/bin/make])를 찾으십시오. 그것에는 sudo이있을 수도 있고 없을 수도 있습니다. 거기에 몇 가지 다른 유사한 옵션이 있습니다 (mbuild_install_build_command). 그들이 sudo을 가지고 있지 않다면, 수작업으로 파일을 편집 할 수 있습니다.

여기까지 조금 더 살펴 보겠습니다. 하지만 먼저 uniscanstrace 아래로 실행해야합니다. 상황이 어떻게 구성되고, 버전이 지정 되더라도, 이것은 진행되고있는 일을 기록 할 것입니다. 여기에 내가 strace에게 추천하려는 옵션이있는 스크립트는 다음과 같습니다

strace -ttt -i -f -ff -etrace=all -o /anyplace/log/whatever.spysys \ 
-eread=0,1,2,3,4,5,6,7,8,9,10 -ewrite=0,1,2,3,4,5,6,7,8,9,10 \ 
-eread=11,12,13,14,15,16,17,18,19,20,21 \ 
-ewrite=11,12,13,14,15,16,17,18,19,20,21 \ 
-eread=22,23,24,25,26,27,28,29,30,31,32 \ 
-ewrite=22,23,24,25,26,27,28,29,30,31,32 \ 
-eread=33,34,35,36,37,38,39,40,41,42,43 \ 
-ewrite=33,34,35,36,37,38,39,40,41,42,43 \ 
-eread=44,45,46,47,48,49,50,51,52,53,54 \ 
-ewrite=44,45,46,47,48,49,50,51,52,53,54 \ 
-eread=55,56,57,58,59,60,61,62,63,64,65 \ 
-ewrite=55,56,57,58,59,60,61,62,63,64,65 \ 
-eread=66,67,68,69,70,71,72,73,74,75,76 \ 
-ewrite=66,67,68,69,70,71,72,73,74,75,76 \ 
-eread=77,78,79,80,81,82,83,84,85,86,87 \ 
-ewrite=77,78,79,80,81,82,83,84,85,86,87 \ 
-eread=88,89,90,91,92,93,94,95,96,97,98 \ 
-ewrite=88,89,90,91,92,93,94,95,96,97,98 -eread=99 -ewrite=99 -x \ 
/usr/bin/whatever 

시스템에 적합한 무언가로 /anyplace/...를 교체합니다. /usr/bin/whateveruniscan 명령으로 바꾸십시오. 당신이 일반적으로 루트로 uniscan을 실행하면 strace 이러한 옵션은 출력의 많은를 생성하는 것을 sudo

참고로 strace를 앞에 수 있지만 금품을 두지 마십시오. 결국 uniscan 명령은 [이미 경험 한대로] 중단되지만, 이제 strace 출력에 이유가 있습니다.

특히 로그 출력을 살펴보면 오류가있는 Moose.so의 정확한 전체 경로를 찾을 수 있습니다.즉, perl은 무스 관련 파일을 열어 (성공적으로) 곧 실패 메시지를 stderr로 출력합니다. moose 파일은 /usr/lib64/...이거나 또는 /usr/local/lib64/...과 같이 완전히 이상한 곳이거나 심지어 낯선 사람 /usr/lib64/uniscan/lib/Moose/... 일 수 있습니다. 그러나 이것은 이제 우리에게 을 말해줍니다.은 무스를 다시 빌드하고 설치하려고합니다.

참고 : 여러분도 알다시피, 내 원래의 대답은 편집있어 [pedantically] 문법,하지만, 실질적으로 [I가 승인하지 않았다] find를 사용하여 내 추천을 대체합니다.

어쨌든 cpanstrace 항목을 일치시킵니다. cpan을 사용할 때 "설치를 $HOME/..."모드로 실행했을 수 있습니다.이 모드는 IIRC가 기본값입니다. 따라서 그러한 경우 (예 : MyConfig.pm 체크) 원하는 시스템 전체 디렉토리가 아닌 홈 디렉토리 아래에서 업데이트 된 패키지를 찾을 수 있습니다. 따라서 이것을 확인하는 데 도움이되도록 find $HOME -name '*Moose*'을 실행하고 무슨 일이 일어나는지 확인하십시오.

는 그래서, strace 파일 이름에 따라, 파일 에 타임 스탬프 당신이 당신의 cpan 명령을 한 시간과 일치한다. 그러나, 나는 그들이하지 않을 것이라는 점을 확신하고있다.

$HOME/.cpan에는 하위 디렉토리 $HOME/.cpan/build이 있습니다. 이것은 cpan 명령이 패키지 파일을 다운로드하여 저장하는 위치입니다. 또한 패키지를 빌드합니다. cpan 호출에 무스가 적용된 경우 파일과 디렉토리가 *Moose*이어야합니다.

"나쁜"패키지 인 IIRC가있을 때마다 $HOME/.cpan/build (및 일부 종속 패키지)에서 제거한 다음 install을 다시했습니다. 상황이 재발견되고 재건되고 재설치됩니다. 그것에서 사슴 파일을 가지고 어디에 strace에서

우리는 지금 는 통역을 펄가 (아마 /usr/bin/perl)을 사용 하였다 알고있다. moose 파일은 @INC 디렉토리 중 하나에 있어야합니다. 그렇다면, 괜찮아. 그렇지 않다면 uniscan의 "wrapper"스크립트가 strace에 대한 비표준 경로를 설정하고 있다는 것을 의미합니다. strace를 수행하는 이유입니다.이 것을 확인하거나하지 않습니다.

그런 다음 필요한 경우 MyConfig.pm을 수정하십시오. 그것이 sudo이 빠진 경우, 그게 전부일지도 모릅니다. 그런 다음 install Moose을 수행하십시오.

원할 경우 $HOME/.cpan/build을 먼저 제거 할 수 있습니다.

+0

안녕하세요. cpan을 사용하여 Moose를 재 구축하는 방법을 찾을 수 없었습니다. "cpan Moose"(-c, -m을 사용하여 -g를 사용하여 다운로드 및 설치하려고 시도했지만 아무 것도 작동하지 않았습니다)를 시도했기 때문에'cpan -u '을 클릭하여 설치된 모든 모듈을 업데이트하십시오. 그 후에도 문제가 지속됩니다. 그 밖의 무엇을 시도 할 수 있습니까? 감사 – Fabiotk