ฉันได้ติดตั้งแพคเกจจำนวนมากจาก PPAs และฉันต้องการเปลี่ยนกลับเป็นเวอร์ชันทางการแล้ว PPA จำนวนมากไม่มีอยู่อีกต่อไป/etc/apt/sources.list.d
ดังนั้นppa-purge
จะไม่สามารถใช้งานได้
อะไรคือวิธีที่ตรงไปตรงมาที่สุดสำหรับสิ่งนั้น
ฉันได้ติดตั้งแพคเกจจำนวนมากจาก PPAs และฉันต้องการเปลี่ยนกลับเป็นเวอร์ชันทางการแล้ว PPA จำนวนมากไม่มีอยู่อีกต่อไป/etc/apt/sources.list.d
ดังนั้นppa-purge
จะไม่สามารถใช้งานได้
อะไรคือวิธีที่ตรงไปตรงมาที่สุดสำหรับสิ่งนั้น
คำตอบ:
คุณสามารถลบและติดตั้งแพ็กเกจใหม่ได้
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
แต่ดูว่ามันไปอย่างไร
ppa-purge
ถูกลบ? มันอยู่ใน Repos สำหรับ Trusty เช่นเดียวกับทุกการเปิดตัวการสนับสนุนอื่น
ฉันได้เขียนสคริปต์ที่สมบูรณ์ยิ่งขึ้นซึ่งจะรับรู้แพ็คเกจที่มีเวอร์ชันปัจจุบันไม่ได้มาจาก 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}"