동일한 데비안 패키지의 다른 버전을 비교


11

로컬로 설치된 패키지와 업데이트 된 패키지간에 소스 차이를 얻는 방법이 있습니까? 이것은 어떤 부품이 고정, 변경 또는 추가되었는지 정확하게 확인하는 데 유용합니다.

예를 들어, 시스템에 linux-libc-dev 패키지가 설치되어 있고

sudo apt-get update && sudo apt-get upgrade

The following packages will be upgraded:
  linux-libc-dev 

업그레이드하기 전에 동일한 패키지의 로컬 버전과 비교하여 정확한 변경 사항을 확인하려고합니다.

우리는 어떻게 할 수 있습니까?

답변:


5

함께 해킹 한 다른 솔루션이 있습니다 : whatchanged .

관심있는 바이너리 패키지의 이름을 유일한 인수로 사용합니다. 최근 SRU를 예로 사용하려면 :

./whatchanged python_papyon

이것이하는 일입니다 :

  1. 업데이트 후보가 있는지 확인하십시오. 없는 경우 종료
  2. 후보가 존재하면 임시 디렉토리를 작성하고 설치된 버전 및 후보에 대한 소스 패키지를 가져옵니다.
  3. debdiff출력과 출력을 stdout과 비교하십시오 (더 읽기 쉬운 방향으로 리디렉션하고 싶을 것입니다)
  4. 임시 디렉토리를 정리하십시오.

소스 검색 중에 잘못 될 수있는 특정 사항을보다 잘 처리해야하고, 흐름 제어가 약간 벗어 났으며, 버전 확인을위한 더 우아한 방법이 있어야하지만 지금까지 제한된 테스트에서는 제대로 작동했습니다. 지금은 빠른 해킹이라고 생각하면 개선이 가장 환영받습니다. bzr 저장소로 푸시하거나 런치 패드 프로젝트를 작성하여 소수의 사람들에게 유용 할 것입니다.

편집 : pastebin에서 썩지 않고 Launchpad 프로젝트 를 시작 했습니다. 을 사용하여 최신 트렁크 버전을 얻을 수 있습니다 bzr branch lp:whatchanged. 버그 를 보고하고 , 분기하고, Perl로 다시 작성하십시오.


멋지다! 답변으로 도구 개발;) 스타일을 코딩하는 것과 마찬가지로
펄로

감사; 그것이 사용되기를 바랍니다. 패키징 및 릴리스 기술이 때때로 공개 코드를 불투명하게 만드는 방법은 제 생각에있어 왔으며,이를 극복하기위한 간단한 도구를 찾지 못했습니다. 원시적 인 것을 스스로 만드십시오.
mgunes

7

Afaik이 이것을 할 수있는 유일한 방법은 소스를 얻고 diff를 당신 자신으로 만드는 것입니다. apt-get으로 패키지를 컴파일하는 데 사용되는 실제 소스를 얻을 수 있습니다. fx :

apt-get source gwibber=2.30.2-0ubuntu3 gwibber=2.30.0.1-0ubuntu1
diff -rupN gwibber-2.30.0.1/ gwibber-2.30.2/

표준 패치 형식으로 모든 파일 간의 모든 차이점을 인쇄합니다.


1
이것은 꽤 좋습니다. 이 예제에서 변경 한 유일한 것은 raw diff 대신 "debdiff gwibber_2.30.0.1-0ubuntu1.dsc gwibber_2.30.2-0ubuntu3.dsc"를 사용하는 것입니다.
RAOF

1
실제로는 똑같은 일을하지만 모든 패키지 / 타르볼에 diff를 사용할 수 있습니다. 어쩌면 누군가 svn-trunk와 현재 pkg 사이의 차이점을보고 싶을 것입니다.
LassePoulsen

내 두 번째 대답 (변경된)은 본질적으로 이것을 자동화합니다.
mgunes

2

다음은 UDD 방법 중 하나 일 것입니다 (아마도 최적은 아님) .

릴리스에 대한 풀 업데이트 분기 (Lucid 가정) (가정 가정)에 최신 SRU가 포함되어야합니다.

bzr branch lp:ubuntu/lucid-updates/package_name

최신 개정판에 의해 도입 된 변경 사항을 가져 오십시오 (이 가정은 최신 SRU에 해당함).

bzr diff -c`bzr revno`

2
흠. 패키지 이름이 bzr 소스 트리와 일치하지 않거나 존재하지 않을 수 있다는 점에서 Source Lab보다 덜 포괄적이지만 흥미 롭습니다.
Gödel

소스 패키지 이름을 아는 한 일치합니다. 이진 패키지로 생성 된 소스 패키지를 찾을 수 있습니다 apt-cache show package_name | grep Source:.
mgunes

@Murat 글쎄, <package_name>그래서 일부 패키지에서는 작동하지 않습니다 : bzr branch lp:ubuntu/lucid-updates/$(apt-cache show linux-libc-dev | grep -m 1 Source: | awk "{print \$2}")=> bzr : 오류 : 전송에 잘못된 URL이 제공되었습니다 : "bzr + ssh : //bazaar.launchpad.net/+branch/ubuntu/lucid-updates/linux" : 지원되지 않는 체계
Gödel

커널에 대한 우분투 브랜치가 전혀 없기 때문에 두려워합니다. 커널이 git (kernel.ubuntu.com)에서 유지된다는 사실로 인해 특정 예외가 될 수 있지만 현재 bzr 패키지 분기의 정확한 범위에 대해서는 확실하지 않습니다. # ubuntu-devel에 물어보십시오.
mgunes

@Mural 나는 알고있다. 그것이 방법이 Source Lab보다 덜 포괄적 인 이유입니다. 그러나 다시 한 번 흥미로운 일입니다.
Gödel

0

패키지 아카이브에서 파일 차이를 보려면 md5sums 파일을 추출하여 정렬 및 비교 한 다음 실제 파일 목록을 좁혀 비교할 수 있습니다.


-1

"정확한"변경 사항은 아니지만 apt-listchanges설치된 버전 이후에 작성된 변경 사항에 대한 변경 사항 항목을 나열합니다.

새 패키지 다운로드를 완료 한 후 설치가 시작되기 전에 단계를 추가하여 작동합니다. 여기에서 각 패키지의 업그레이드 로그 항목이 표시됩니다. 그런 다음 계속하거나 취소 할 수 있습니다. 당신은 그것을 설치할 수 있습니다

sudo apt-get install apt-listchanges

그런 다음 설정

sudo dpkg-reconfigure apt-listchanges

다시 한 번 질문은 ChangeLog 변경 사항을 표시하는 것이 아닙니다.
Gödel

D' oh, "source diffs"라고 말한 첫 줄을 놓쳤습니다.
Ken Simon
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.