두 개의 서로 다른 리눅스 설치의 차이점을 얻는 도구 또는 기술


10

알버트 아인슈타인 인용

광기 : 똑같은 일을 반복하고 다른 결과를 기대 함

종종 리눅스는 똑같은 일을 반복하고 상자마다 다른 결과를 얻기 때문에 나를 미치게 합니다. ( 이전 질문 참조 ).

나를 위해, 혼란의 가장 큰 영역은 다른 사람이 설치 한 컴퓨터를 인수하는 것입니다 (웹 호스팅 회사에 가입 할 때와 마찬가지로). 당신은 당신이 무엇을 다루고 있는지 모른다.

Linux (Ubuntu) 설치에서 실행할 수 있는 어떤 종류의 영리한 diff 도구 가 있습니까?

즉, 놀랍게도 작동하여 시행 착오 방식을 피하는 명령 목록을 보여줄 수있는 것.


4
"놀랍게도 동작 할 명령 목록"을 얻지 못할 것입니다. 소프트웨어는 놀라운 것을 예측할 수 없습니다.
Gilles 'SO- 악마 그만'

감사. 이 답변 을 통해 다른 사람이 설치 한 기계를 인계 할 때 고려해야 할 적절한 차이 영역 을 모델링하는 방법을 더 잘 이해할 수 있습니다. 지금까지 패키지 설치 , 서비스 실행 , 구성파일 시스템 유형의 차이점이 있습니다. 그것이 그것이 목록인지 또는 목록이 무한한지 알고 싶습니다. @Gilles-그렇습니다. 리눅스에 대한 지식이 제한되어 있기 때문에, 제가 스스로 '놀람'을 찾은 것을 예측하기가 어렵습니다!
JW01

1
목록은 무한합니다. Linux 예제는 아니지만 얼마 전까지 만해도 Visual Studio는 특정 컴퓨터에서 일부 대화 상자를 표시하지 않았습니다 (오류가없고 컨트롤이 있어야하는 빈 공간). 너무 많은 글꼴이 설치되어 있기 때문입니다. 이 이야기의 교훈은 항상 모퉁이에 숨어있는 놀라움이있을 것이라는 것입니다.
Gilles 'SO- 악한 중지'

답변:


10

좋은 참조 시스템과 오작동하는 시스템이있을 때마다 vimdiff와 비교하려고합니다. 내가 비교하는 것은 문제에 따라 다릅니다.

1) 패키지 수준에서 서버를 비교할 때 각 서버에서 정렬 된 패키지 목록을 작성하고 결과를 파일로 전송 한 다음 비교합니다.

server1에서 :

dpkg --get-selections|sort > server1_packages

server2에서 :

dpkg --get-selections|sort > server2_packages

두 파일을 동일한 시스템에 복사하고 diff (또는 vimdiff)하십시오.

2) 예제 1과 같이 실행중인 서비스 목록을 작성하십시오.

sysv-rc-conf --list|sort > server1_services

sysv-rc-conf --list|sort > server2_services

... 등.

3) 예를 들어 Apache와 일치하지 않는 구성 문제를 해결하는 경우 구성 파일의 사본을 만들고 그 파일 등을 vimdiff하십시오.


2
옵션 요약. 또한 /etc진행중인 작업을 추적하는 데 도움이되도록 파일 을 버전 관리하에 두는 것이 좋습니다 . etckeeper당신을 위해 이것을 할 것입니다.
Faheem Mitha

"dpkg : 읽기 위해 패키지 정보 파일`/ var / lib / dpkg / status '를 열지 못했습니다 : 해당 파일 또는 디렉토리가 없습니다"라는 메시지가 표시됩니다. yum이있는 Centos에서는 어떻게 보일까요? PS 신경 끄시 고, 그것은 "냠 목록 설치"발견
giorgio79

5

동일한 배포판의 두 설치 간의 차이점은 대부분에 있습니다 /etc. /etc한 머신에서 다른 머신의 임시 디렉토리로 컨텐츠를 복사 하고 실행하십시오.

diff -ru /etc /copy/of/other/etc

머신을 기본 설치와 비교하려면 새로운 기본 설치 (아마 가상 머신)에서 사본을 가져 오십시오.

처음부터 기계를 제어 할 수있는 경우 버전 관리 를 유지 하려면 etckeeper 를 설치하십시오 /etc. 그러면 변경된 내용을 정확하게 볼 수 있습니다.

물론 많은 차이점이 있습니다. 아직 볼 위치에 대한 아이디어가 없다면 행동의 특정 차이점을 조사하기위한 잘못된 접근 방법입니다. 예를 들어, 명령 adduser이 두 시스템에서 다르게 작동 한다고 가정 해 봅시다 . 그렇다면 최선의 방법은 무엇 adduser을하고 있는지 보는 것 입니다. 두 머신에서 실행하고 비교하십시오. 좀 더 장황하게 말할 수있는 옵션이 있다면 adduser사용하십시오. 더 근본적으로, 프로그램에 따라 실행 strace를 , 예를 들어,

strace -s9999 -efile adduser …

어떤 파일이 adduser액세스 하는지 확인하십시오 .


2

이전 질문으로 되돌아 가기 위해, 나에게 좋은 아이디어처럼 들리는 멋진 도구이지만, 그런 짐승에 대해 들어 본 적이 없으며 파일 시스템 유형 및 크기와 같은 것을 확인해야합니다.

2002 년에 나에게 일어난 실제 사례 : 두 사람이 두 대의 랙 장착 서버에 SuSE 7.3 시스템을 설치했습니다. 그들은 두 서버 모두에서 패키지를 정확히 동일하게 만들기 위해 많은 노력을 기울였습니다. 잠시 후, 개발중인 일부 소프트웨어에 문제가있었습니다. 한 서버에서 ext3 파일 시스템으로, 다른 서버에서 Reiserfs로 내려 왔습니다. Reiserfs의 일반 "ls"는 파일 이름을 어휘 순서로 제공하지만 ext3에는 없습니다. 하나의 프로그램이 잘못된 파일 이름으로 실패했습니다.


1

파일, 사용자, 그룹, 패키지, 서비스 등을 위해 http://www.scriptrock.com ; 일부 서버에서는 무료이며 서버 간의 차이점을 시각적으로 비교할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.