Debian Jessie ติดตั้ง backport มากเกินไป


9

ฉันมี Debian Jessie และได้เพิ่ม backport (ตามคำแนะนำเหล่านี้ ):

echo "deb http://http.debian.net/debian jessie-backports main contrib non-free" | sudo tee /etc/apt/sources.list.d/backports.list

(ฉันทำสิ่งนี้เพื่อให้ได้เคอร์เนลที่ใหม่กว่าตามที่ต้องการสำหรับฮาร์ดแวร์บางอย่างในแล็ปท็อปของฉัน)

คำแนะนำบอกว่าไม่มีอะไรจะเกิดขึ้นเว้นแต่ฉันขอแพคเกจ backported อย่างชัดเจน apt-get -t jessie-backports install "package"เช่น

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

ดังนั้นคำถามของฉัน:

  • ฉันจะหยุดมันก่อนได้อย่างไรเพื่อไม่ให้ติดตั้ง backport เพิ่มเติมอีก?
  • ฉันจะลบ backport ที่มีอยู่ได้อย่างไร

หมายเหตุ: สิ่งนี้จะได้รับรายชื่อของแพ็คเกจที่ติดตั้งซึ่งมาจาก backports (และในรูปแบบที่สามารถส่งผ่านไปapt-get installได้ด้วยเหตุผลบางประการที่ทำให้sudo apt-get installecho ที่จุดสิ้นสุดของไพพ์ไลน์ไม่ทำงาน):

cat /var/log/dpkg.log.1 |grep -v linux | grep -v xserver | grep -v firmware | grep "status installed" | grep bpo | cut -d" " -f 5 | cut -d: -f 1 | xargs -i{} -n1 bash -c "dpkg-query -s {} >/dev/null && echo {}" | sed -r -e "s~.*~\0/jessie~" | xargs echo

ข้อควรระวัง:

แพคเกจบางส่วนได้รับการติดตั้งโดยอัตโนมัติดังนั้นหากคุณติดตั้งใหม่ทั้งหมดแพคเกจที่ติดตั้งโดยอัตโนมัติเหล่านี้จะถูกทำเครื่องหมายว่าติดตั้งด้วยตนเอง ดังนั้นจึงไม่ถูกลบออกเมื่อไม่ต้องการ

มีใครมีความคิดเห็นเกี่ยวกับวิธีการแก้ปัญหานี้บ้าง?

คำตอบ:


10
  1. ลองเพิ่มสิ่งต่อไปนี้ใน/etc/apt/apt.confไฟล์หรือภายใต้/etc/apt/apt.conf.d:

    APT::Default-Release "jessie";

  2. ในการลบ backport ที่มีอยู่คุณจะต้องรับรายการที่ติดตั้งอยู่และรุ่นที่พวกเขาแทนที่ โชคดีที่สามารถดึงข้อมูลนี้ได้อย่างง่ายดาย/var/log/dpkg.log

เช่นgrep ' upgrade ' /var/log/dpkg.logจะให้คุณหลายบรรทัดดังนี้:

2016-02-15 11:06:32 upgrade python-numpy:amd64 1:1.11.0~b2-1 1:1.11.0~b3-1

สิ่งนี้บอกว่าเวลา 11:06 น. ของวันที่ 15 กุมภาพันธ์ฉันอัพเกรด python-numpy จากรุ่น 1: 1.11.0 ~ b2-1 เป็นรุ่น 1: 1.11.0 ~ b3-1

หากฉันต้องการปรับลดรุ่นเป็นรุ่นก่อนหน้าฉันจะเรียกใช้:

apt-get install python-numpy=1:1.11.0~b2-1

หมายเหตุ: ในกรณีนี้มันอาจจะไม่ทำงานเพราะฉันเรียกใช้ debian sidaka unstableดังนั้นเวอร์ชั่นเก่าอาจไม่สามารถใช้งานได้ในพื้นที่เก็บข้อมูล deb อีกต่อไป หากคุณกำลังใช้งานjessieและกำลังติดตั้งแพคเกจเวอร์ชัน jessie อีกครั้งเพื่อปรับลดรุ่นเป็น jessie-backport มันจะทำงานได้ตามที่คาดไว้

ในทำนองเดียวกันถ้าแพคเกจได้ถูกลบออกคุณสามารถค้นหาได้และรุ่นที่แน่นอนโดย grepping สำหรับในremove/var/log/dpkg.log


ปรับลดกลุ่มของหลายแพ็กเกจได้โดยอัตโนมัติส่วนใหญ่ใช้เครื่องมือมาตรฐานเช่นและawk grepตัวอย่างเช่นหากคุณรู้ว่าการอัพเกรด jessie-backport ที่คุณติดตั้งนั้นเสร็จสิ้นในวันใดวันหนึ่ง (เช่น 2016-02-15) คุณสามารถปรับลดรุ่นเป็นรุ่นก่อนหน้าได้ดังนี้:

 apt-get -d -u install $(awk '/2016-02-15 ..:..:.. upgrade / {print $4 "=" $5}'
    /var/log/dpkg.log)

(เพิ่มการป้อนบรรทัดและการเยื้องเพื่อหลีกเลี่ยงแถบเลื่อนแนวนอน)

หมายเหตุการใช้ตัวเลือก-d( --download-only) เรียกใช้คำสั่งอีกครั้งและลบตัวเลือกนั้นออกหลังจากที่คุณตรวจสอบแล้วว่าapt-get installจะทำสิ่งที่คุณต้องการและเฉพาะสิ่งที่คุณต้องการ

ฉันขอแนะนำให้เรียกใช้เฉพาะawkส่วนของคำสั่งนั้นด้วยตัวเองก่อนเพื่อให้คุณเห็นรายการของแพคเกจและรุ่นที่จะติดตั้งใหม่


1
โดย 'อัตโนมัติเป็นส่วนใหญ่' ฉันหมายความว่าแม้ว่ามันจะทำงานได้โดยไม่มีปัญหา แต่ก็ไม่ได้ทำงานอย่างสมบูรณ์แบบ (ขึ้นอยู่กับแพคเกจที่เกี่ยวข้องและบรรทัดขึ้นอยู่กับ / แนะนำ / ข้อขัดแย้ง / ฯลฯ ) อาจจะมีหนึ่งหรือสองแพคเกจที่คุณต้องติดตั้งด้วยตนเองหรือถอนการติดตั้งอย่างใดอย่างหนึ่งหรือapt-get dpkgตราบใดที่คุณไม่ต้องตกใจไม่มีอะไรต้องกังวล ปัญหาส่วนใหญ่ที่เกิดขึ้นกับระบบบรรจุภัณฑ์นั้นเกิดจากการที่คนตื่นตระหนกและตอบโต้โดยไม่คิด ... ลองคิดให้ช้าก่อนคิด
cas

เขาไม่ควรจะปักหมุดเคอร์เนลแพ็คเกจใหม่เพื่อ backports @casi?
Rui F Ribeiro

มันจะไม่เจ็บ แต่ก็ไม่จำเป็นและการปักหมุดค่อนข้างซับซ้อนและยากที่จะได้รับมากกว่าแค่การติดตั้ง Apt :: Default-Release apt-getจะไม่ดาวน์เกรดแพคเกจที่ติดตั้งไว้แล้วเว้นแต่ว่าคุณจะบอกให้ชัดเจน และ @richard บอกว่าเขาต้องการติดตั้งjessieแพ็กเกจโดยค่าเริ่มต้นเว้นแต่เขาระบุไว้อย่างชัดเจนjessie-backports- ฉันถือว่าความปรารถนานั้นใช้กับแพ็คเกจเคอร์เนลด้วย
cas

เขาบอกว่าเขารวม backport เพื่อให้มีเคอร์เนลใหม่อาจเหมือนกับฉันเพื่อมีเคอร์เนล 4 ในเจสซี
Rui F Ribeiro

1
ฉันเดาว่าคนที่ใช้stable+ stable-backportsอาจสนใจเกี่ยวกับการปักหมุดมากกว่าที่ฉันทำและพยายามหาข้อมูลเพิ่มเติมเกี่ยวกับมัน ฉันมักจะเรียกใช้unstableและทำให้ระบบของฉันมีการซิงค์ซิดล่าสุดอย่างสม่ำเสมอ (โดยมีการเพิ่มพิเศษเป็นครั้งคราวexperimental) ดังนั้นจึงมีความจำเป็นเล็กน้อยสำหรับการปักหมุด ครั้งเดียวที่ฉันใช้มันอย่างหนักคือเมื่อหลายปีก่อนในช่วงเปลี่ยนผ่านเป็น gnome3 เมื่อฉันไม่ต้องการให้แทนที่แพ็กเกจ gnome2 ของฉัน - ฉันจำได้ว่าการรักษารายการแพ็กเกจที่เปลี่ยนไปอย่างต่อเนื่องคือ PITA ฉันเปลี่ยนมาเป็น xfce และ gnome
cas

1

/etc/apt/preferencesดูเหมือนว่าคุณมีการติดตั้งอย่างถูกต้องไม่ได้ ข้อมูลต่อไปนี้จะป้องกันไม่ให้มีการติดตั้งอะไรจากเจสซี - แบ็กพอร์ตคาดหวังสิ่งที่บอกให้ติดตั้ง (เช่นเคอร์เนล backported) คุณจะยังคงมีปัญหาหากแพ็กเกจที่ระบุต้องการแพ็คเกจอื่นจาก backport ที่ไม่อยู่ในรายการ

Package: *
Pin: release n=jessie-backports
Pin-Priority: -1

Package: *
Pin: release n=jessie
Pin-Priority: 1000

# this will allow you to not have to use '-t jessie-backports install'
Package: linux-doc linux-headers-amd64 linux-image-amd64 linux-source
Pin: release n=jessie-backports
Pin-Priority: 1000

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

chmod a+x name_of_script ./name_of_script > name_of_output_file

#!/bin/bash
RELEASES="jessie-backports"

echo  "Searching for installed packages from" >&2
echo $RELEASES | sed s/^/" * "/ | sed s/\|/"\n * "/g >&2

for package in $(dpkg -l | grep -i ^ii | awk '{print $2}')
do
check=$( apt-cache policy $package 2>&1 | grep -i -A 1 "[*]" | egrep $RELEASES )
if [ "$check" == "" ] ; then
 echo -ne "." >&2
else
 echo -ne "#" >&2
 echo
 apt-cache policy $package
fi
done
echo >&2
echo

หากคุณต้องการลดระดับแพ็คเกจใด ๆ ที่ระบุโดยสคริปต์ด้านบนจะผนวกสิ่งต่อไปนี้เพื่อ/etc/apt/preferences:

Package: package1 package2 package3
Pin: release n=jessie
Pin-Priority: 1000

จากนั้นเรียกใช้:

sudo apt-get upgrade

1

ตรวจสอบการกำหนดค่าปักหมุดของคุณสำหรับ apt ใน / etc / apt / preferences และ /etc/apt/preferences.d/

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

backport อย่างเป็นทางการถูกตรึงไว้ต่ำกว่า (100) กว่า jessie ในไฟล์ backported ที่วางจำหน่ายใน repo ของ backport คุณไม่ควรทำการกำหนดค่า apt ใด ๆ เพื่อให้ apt ชอบ jessie มากกว่า jessie-backport

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.