ฉันจะดูการเปลี่ยนแปลงสำหรับแพ็คเกจ debian / ubuntu ได้อย่างไร


19

ฉันใช้งาน Ubuntu และติดตั้งไฟล์ deb แล้ว ฉันเคยทำแพ็กเกจ deb มาก่อนดังนั้นฉันรู้ว่ามีการเปลี่ยนแปลงเดเบียน (debchange) มีอยู่เพื่อดูการเปลี่ยนแปลง debian สำหรับแพคเกจใด ๆ ที่ฉันได้ติดตั้ง สมมติว่าฉันไม่มีสิทธิ์เข้าถึงไฟล์ต้นฉบับของ 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และค้นหาcmdline/apt-get.ccไฟล์และดูDoChangelog()ฟังก์ชัน (btw, ดูDoMoo()ฟังก์ชัน)
jfs

แปลกฉันมี (เดเบียน) apt 0.9.12.1 และคำสั่งนี้ไม่สามารถใช้ได้
gipi

คำตอบ:


21

อีกทางเลือกหนึ่งถ้า deb อยู่ในที่เก็บและคุณต้องการทราบการเปลี่ยนแปลงรุ่นเก่ากว่าคุณสามารถใช้apt-get changelog packageเพื่ออ่านการเปลี่ยนแปลงทั้งหมดได้ ตัวอย่างเช่น openssl:

apt-get changelog libssl1.0.0

นี้แน่นอนคำตอบที่เกี่ยวข้องสำหรับ 2016 ทั้งใน Debian และ Ubuntu Jessie :)
Dmitri DB

นี่คือคำตอบที่ถูกต้อง
Teekin

12

apt-listchangesเป็นแพคเกจที่ดีที่จะมีรอบ แต่โดยไม่ต้องมีไฟล์ deb รอบทางออกที่ดีที่สุดของคุณมากที่สุดน่าจะเป็นในการอ่านการเปลี่ยนแปลงจาก Debian /usr/share/doc/somepackage/changelog.Debian.gz

สร้างฟังก์ชั่นเปลือกด้วย:

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

ตามที่ OP อ้างถึงdebchangeจริง ๆ แล้วเป็นเครื่องมือที่มีอยู่ในdevscripts ที่ใช้สำหรับการสร้างรายการการเปลี่ยนแปลง ดังนั้นฉันขอแนะนำให้เลือกชื่ออื่น นอกจากนี้$0อาจจะไม่ทำสิ่งที่คุณคาดหวัง zless /usr/share/doc/bash/changelog.Debian.gzในกรณีของฉันมันก็จะดำเนินการ ในกรณีของคุณให้แทนที่bashด้วยชื่อของเชลล์หรือสคริปต์ที่คุณเรียกใช้งาน
หก

3

หากต้องการขยายคำตอบของ Janne Pikkarainen ต่อไปนี้เป็นนามแฝงที่สามารถใช้อ่าน changelog.Debian.gz สำหรับแพ็คเกจที่ให้มา:

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

มันสามารถใช้เช่น:

changelog 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.