데비안 / 우분투 deb 패키지의 변경 로그를 어떻게 볼 수 있습니까?


19

우분투를 실행 중이며 deb 파일이 설치되어 있습니다. 나는 전에 deb 패키지를 만들었으므로 데비안 변경 로그 (debchange)가 있음을 알고 있습니다. 내가 설치 한 패키지에 대한 데비안 변경 로그를 볼 수 있습니까? 이 패키지의 deb 소스 파일에 액세스 할 수없고 deb 파일을 사용할 수 없다고 가정하십시오. 필요한 경우 추가 패키지를 설치할 수 있습니다.


5
apt-get설치된 패키지의 변경 사항을 보려면 :apt-get changelog <package>
jfs

@JFSebastian apt-get에는 그러한 명령이 없습니다.
gipi

2
@gipi : apt-get changelog apt | grep -C5 'apt-get changelog'이 명령이 apt (0.8.9ubuntu1) natty(2010)에 도입되었음을 나타냅니다 . 소스를 얻을 수 있습니다 (결국 오픈 소스입니다). 파일을 실행 apt-get source apt하고 함수를 찾으십시오 (btw, 함수를보십시오). cmdline/apt-get.ccDoChangelog()DoMoo()
jfs

이상하게도 (debian) apt 0.9.12.1이 있으며이 명령을 사용할 수 없습니다.
gipi

답변:


21

또는 deb가 리포지토리에도 있고 이전 버전의 변경 로그를 알고 싶은 경우 apt-get changelog package모든 변경 로그를 읽는 데 사용할 수 있습니다 . 예를 들어 openssl의 경우 :

apt-get changelog libssl1.0.0

이것은 확실히 데비안 제시와 우분투에서 2016 년에 대한 적절한 답변입니다 :)
Dmitri DB

이것이 정답입니다.
Teekin

12

apt-listchanges좋은 패키지이지만, 가장 좋은 방법은 deb 파일이 없어도 /usr/share/doc/somepackage/changelog.Debian.gz 에서 데비안 변경 로그를 읽는 것입니다 .

다음을 사용하여 쉘 함수를 작성하십시오.

function debchanglog () {
  zless "/usr/share/doc/$1/changelog.Debian.gz"
}

OP가 암시하는 것처럼 debchange실제로 변경 로그 항목 을 만드는 데 사용되는 기존 스크립트 도구입니다 . 다른 이름을 선택하는 것이 좋습니다. 또한, 당신이 기대하는 것을하지 않을 것입니다. 필자의 경우 항상 실행 됩니다. 귀하의 경우, 실행중인 쉘 또는 스크립트의 이름으로 바꾸 십시오. $0zless /usr/share/doc/bash/changelog.Debian.gzbash
Six

3

Janne Pikkarainen의 답변 을 확장하기 위해 주어진 패키지에 대한 changelog.Debian.gz를 읽는 데 사용할 수있는 별칭이 있습니다.

alias changelog="xargs -I% -- zless /usr/share/doc/%/changelog.Debian.gz <<<"

다음과 같이 사용할 수 있습니다.

changelog PACKAGE

그러나 이것은 끔찍한 해킹 솔루션이므로 대부분의 상황에서 권장되지 않습니다. 함수 또는 독립형 스크립트가 훨씬 더 나은 솔루션입니다.

PACKAGE에 대해 사용 가능한 모든 변경 로그를 읽는 함수는 다음과 같습니다.

changelog(){
    if (( $# != 1 )); then
        echo "Usage: ${FUNCNAME[0]} PACKAGE"
        return 1
    fi

    find -L "/usr/share/doc/$1" -type f -name 'changelog*.gz' -exec zless {} \; 2>/dev/null
}

다음은 PACKAGE에 대해 사용 가능한 모든 변경 로그 목록을 인쇄하고 읽을 항목을 선택하도록 사용자에게 쿼리하는 기능입니다.

changelog(){
    if (( $# != 1 )); then
        echo "Usage: ${FUNCNAME[0]} PACKAGE"
        return 1
    fi

    local changelog changelogs

    readarray -t changelogs < <(find -L "/usr/share/doc/$1" -type f -name 'changelog*.gz' 2>/dev/null)

    if (( ${#changelogs[@]} == 0 )); then
        return 0
    elif (( ${#changelogs[@]} == 1 )); then
        zless "${changelogs[0]}"
        return $?
    fi

    select changelog in "${changelogs[@]}" EXIT; do
        case $changelog in
            '')
                echo "ERROR: Invalid selection" >&2
                continue
                ;;
            EXIT)
                return 0
                ;;
            *)
                zless "$changelog"
                return $?
                ;;
        esac            
    done
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.