ฉันจะเปลี่ยนแพคเกจทั้งหมดกลับเป็นเวอร์ชันทางการได้อย่างไร


10

ฉันได้ติดตั้งแพคเกจจำนวนมากจาก PPAs และฉันต้องการเปลี่ยนกลับเป็นเวอร์ชันทางการแล้ว PPA จำนวนมากไม่มีอยู่อีกต่อไป/etc/apt/sources.list.dดังนั้นppa-purgeจะไม่สามารถใช้งานได้

อะไรคือวิธีที่ตรงไปตรงมาที่สุดสำหรับสิ่งนั้น

คำตอบ:


11

คุณสามารถลบและติดตั้งแพ็กเกจใหม่ได้

ppa-purgeอาจเป็นทางออกที่ดีที่สุดของคุณสำหรับการหลบหนีที่สะอาด เพียงแค่เพิ่ม PPA ใหม่แพคเกจมาจากนั้นใช้ppa-purgeเพื่อฆ่ามัน ฉันไม่แน่ใจว่าคุณติดตั้ง PPA จำนวนเท่าใด แต่ถ้าน้อยกว่า 10 ฉันจะทำสิ่งนี้ดู

หากคุณคิดว่าวิธีนี้นิ่มเกินไปฉันเพิ่งเขียนbash-porn ไปเพื่อช่วยระบุรุ่นของแพ็คเกจที่ตอนนี้แหล่งที่มาของการติดตั้งมีอยู่ในเครื่อง/var/lib/dpkg/statusเท่านั้น สิ่งนี้ไม่เหมือนกับแพ็คเกจ "orphaned"

for p in `dpkg-query --showformat='${Package} ' -W`; do
    if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
        echo $p;
    fi;
done

ฉันไม่แน่ใจว่ามันสมบูรณ์แบบหรือเปล่า หมายเหตุมันจะพิมพ์ชื่อของแพ็คเกจเท่านั้น คุณจะต้องถอนการติดตั้ง / ติดตั้งแต่ละแพ็คเกจด้วยตนเอง

หากต้องการทำสิ่งนี้อันดับแรกให้ดูที่แพคเกจนั้นพร้อมใช้งานapt-cache policy <package>และคุณจะเห็นรายการเวอร์ชันแพ็คเกจ (รวมถึง/var/lib/dpkg/statusเวอร์ชัน) ค้นหาอุปกรณ์ภายนอกที่ใกล้ที่สุดแล้วเรียกใช้:

sudo apt-get install <package>=<version>

คุณอาจต้องเพิ่ม a --reinstallหลังinstallแต่ดูว่ามันไปอย่างไร


1
@ Jokerdino นั้นแตกต่างอย่างละเอียด (แต่สำคัญ) นั่นจะค้นหาแพ็คเกจที่ถูกกำพร้านั่นคือแพ็คเกจที่ไม่มีที่เก็บการติดตั้งที่ทำงานได้ในปัจจุบันดังนั้นมันจะแสดงเฉพาะสิ่งที่คุณติดตั้งจาก PPA ที่ไม่มีอยู่ในที่อื่น สำหรับสิ่งที่คุณอัพเกรดแพ็คเกจปัจจุบัน (เช่นถ้าคุณใช้ xorg-edgers เพื่ออัพเกรดทั้งระบบ X) แพ็คเกจเหล่านั้นจะไม่ถูกนับ
Oli

ขอโทษ ฉันเพิ่งสังเกตเห็นและลบความคิดเห็นของฉัน (แต่มันก็สายเกินไป .. : /) สำหรับการอ้างอิงถึงผู้อื่นที่อาจต้องการติดตามบทสนทนาฉันเชื่อมโยงกับคำตอบนี้
jokerdino

ตามแถลงการณ์อย่างเป็นทางการ ppa-purge ถูกลบออกจาก Ubuntu เพราะฟังก์ชั่นทั้งหมดสามารถทำได้โดย apt-get ฉันจะทำเช่นนี้กับฉลาดรับ
rafee

@rafee ทำไมคุณคิดว่าppa-purgeถูกลบ? มันอยู่ใน Repos สำหรับ Trusty เช่นเดียวกับทุกการเปิดตัวการสนับสนุนอื่น
Oli

มันถูกลบออกจากการติดตั้งเริ่มต้น & มันต้องมีความสามารถในการพึ่งพา
rafee

1

ฉันได้เขียนสคริปต์ที่สมบูรณ์ยิ่งขึ้นซึ่งจะรับรู้แพ็คเกจที่มีเวอร์ชันปัจจุบันไม่ได้มาจาก PPA และพวกเขามีเวอร์ชั่นที่ใช้ได้อีก PPA หลังจากรันแล้วจะพิมพ์คำสั่งพร้อมทำงานที่จะดาวน์เกรดแพ็คเกจดังกล่าวเป็นเวอร์ชัน PPA

https://gist.github.com/peci1/2d7859857fdad73ee8443f5ecd5ee5a3

#!/usr/bin/env bash

# BSD 3-clause license, copyright Martin Pecka @ 2019

# This script outputs a command that will revert all packages from non-PPA versions to their latest PPA version.
# This may be handy i.e. for finding packages for which you installed a newer version from a .deb file, or after
# incompletely removing a PPA.

export LC_ALL=C

command=""

for p in `dpkg-query --showformat='${Package} ' -W`; do
    if [[ $(apt-cache policy $p | grep -Pzo "\*\*\* [^\n]+\s+100") ]]; then
        versions=$(apt-cache policy $p | tr "\n" "\r" | grep -Po '(?<=\r )[ *]{3} [^\r]+ [0-9]+\r\s+[0-9]+' | sed 's/ [0-9]\+\r\s\+\([0-9]\+\)/ \1/g' | tr "\r" "\n")
        installable_versions=$(echo "${versions}" | grep -v " 100$")
        version_to_install=$(echo "${installable_versions}" | head -n1 | grep -Po "\s+\K.*(?= [0-9]+$)")
        if [[ ! -z "${version_to_install}" ]]; then
            echo "${p}=${version_to_install}"
            command="${command} ${p}=${version_to_install}"
        else
            echo "${p}: no PPA version"
        fi
    fi;
done

echo "To revert packages to their latest PPA version, call the following command as root. Please, carefully go through the list of changes apt-get will present to you!"
echo "apt-get install ${command}"
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.