Debian Jessie đang cài đặt quá nhiều backport


9

Tôi có Debian Jessie và đã thêm backport (theo các hướng dẫn sau ):

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

(Tôi đã làm điều này để có được một kernel mới hơn, vì tôi cần nó, cho một số phần cứng trong máy tính xách tay của tôi.)

Các hướng dẫn nói rằng không có gì nên xảy ra, trừ khi tôi yêu cầu một gói rõ ràng. ví dụ apt-get -t jessie-backports install "package".

Tuy nhiên, bây giờ tôi dường như tải toàn bộ hệ thống của mình từ các cổng sau và một gói chưa được cài đặt, vì nó phụ thuộc vào một phiên bản chính xác, của một cái gì đó đã được cập nhật vào cổng sau.

Vì vậy, câu hỏi của tôi:

  • Làm thế nào để tôi dừng nó trước, để không có thêm backport được cài đặt?
  • Làm thế nào để tôi loại bỏ các backport hiện có?

Lưu ý: điều này nhận được một danh sách các gói được cài đặt từ backport (và ở định dạng có thể được chuyển đến apt-get install, vì một số lý do sudo apt-get installthay thế tiếng vang ở cuối đường ống không hoạt động):

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

Chú ý:

Một số gói được cài đặt tự động, vì vậy nếu bạn cài đặt lại tất cả, thì các gói được cài đặt tự động này sẽ được đánh dấu là cài đặt thủ công. Do đó không loại bỏ khi không cần thiết.

Bất kỳ ai có bất kỳ ý tưởng như làm thế nào để giải quyết điều này?

Câu trả lời:


10
  1. Hãy thử thêm các mục sau vào một /etc/apt/apt.confhoặc một tệp trong /etc/apt/apt.conf.d:

    APT::Default-Release "jessie";

  2. Để loại bỏ các backport hiện có, bạn sẽ cần có một danh sách những cái nào đã được cài đặt và phiên bản nào chúng đã thay thế. May mắn thay, thông tin này có thể được trích xuất rất dễ dàng từ/var/log/dpkg.log

ví dụ grep ' upgrade ' /var/log/dpkg.logsẽ cung cấp cho bạn nhiều dòng như sau:

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

Điều này nói rằng vào lúc 11:06 sáng ngày 15 tháng 2, tôi đã nâng cấp python-numpy từ phiên bản 1: 1.11.0 ~ b2-1 lên phiên bản 1: 1.11.0 ~ b3-1

Nếu tôi muốn hạ cấp xuống phiên bản trước, thì tôi sẽ chạy:

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

LƯU Ý: trong trường hợp cụ thể này, nó có thể sẽ không hoạt động vì tôi chạy debian sidaka unstablenên phiên bản cũ có thể không còn có sẵn trong kho lưu trữ deb. Nếu bạn đang chạy jessievà đang cài đặt lại phiên bản jessie của gói dưới dạng hạ cấp xuống phiên bản jessie-backports, nó sẽ hoạt động như mong đợi.

Tương tự, nếu một gói đã bị xóa, bạn có thể tìm thấy nó và phiên bản chính xác của nó bằng cách tham removegia /var/log/dpkg.log.


Việc hạ cấp hàng loạt nhiều gói có thể được tự động hóa phần lớn bằng các công cụ tiêu chuẩn như awkgrep. Ví dụ: Nếu bạn biết rằng các bản nâng cấp jessie-backports bạn đã cài đặt đều được thực hiện vào một ngày cụ thể (ví dụ: 2016/02/15), thì bạn có thể hạ cấp xuống các phiên bản trước với nội dung như sau:

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

(thêm nguồn cấp dữ liệu và thụt lề để tránh thanh cuộn ngang)

LƯU Ý việc sử dụng tùy chọn -d( --download-only). Chạy lại lệnh và xóa tùy chọn đó sau khi bạn xác minh rằng apt-get installsẽ thực hiện những gì bạn muốn và CHỈ những gì bạn muốn.

Tôi cũng khuyên bạn nên chỉ chạy awkphần lệnh đó trước để bạn có thể xem danh sách chính xác các gói và phiên bản sẽ được cài đặt lại.


1
bởi 'phần lớn tự động' Tôi có nghĩa là mặc dù nó hầu như sẽ hoạt động mà không gặp sự cố, nhưng nó sẽ không / luôn luôn chạy hoàn hảo (tùy thuộc vào các gói chính xác có liên quan và các dòng phụ thuộc / khuyến nghị / xung đột / vv) của chúng. Có thể có một hoặc hai gói bạn phải tự cài đặt hoặc gỡ bỏ cài đặt với một trong hai apt-gethoặc dpkg. Miễn là bạn không hoảng loạn, không có gì phải lo lắng. Hầu hết các vấn đề với hệ thống đóng gói là do mọi người hoảng loạn và phản ứng mà không suy nghĩ .... hãy chậm rãi và suy nghĩ trước khi hành động.
cas

Anh ta không nên ghim các gói kernel mới vào backport @cas sao?
Rui F Ribeiro

Điều đó sẽ không gây hại nhưng không cần thiết và việc ghim khá phức tạp và khó khăn hơn một chút so với việc chỉ cài đặt Apt :: Phát hành mặc định. apt-getsẽ không hạ cấp một gói đã được cài đặt trừ khi bạn nói rõ với nó. Và @richard nói rằng anh ta muốn cài đặt jessiecác gói theo mặc định trừ khi anh ta chỉ định rõ ràng jessie-backports- tôi cho rằng điều ước đó cũng áp dụng cho các gói kernel.
cas

anh ấy nói anh ấy đã bao gồm các backport để có kernel mới, có lẽ giống như tôi, để có kernel 4 trong jessie.
Rui F Ribeiro

1
Tôi đoán rằng những người sử dụng stable+ stable-backportscó lẽ quan tâm nhiều đến việc ghim hơn tôi và đã nỗ lực để tìm hiểu thêm về nó. Tôi có xu hướng chạy unstablevà giữ cho các hệ thống của mình được đồng bộ hóa sid mới nhất khá thường xuyên (với các tính năng bổ sung thường xuyên từ experimental), do đó không có nhu cầu ghim. Lần duy nhất tôi sử dụng nó rất nhiều là cách đây nhiều năm trong quá trình chuyển đổi sang gnome3, khi tôi không muốn các gói gnome2 của mình bị thay thế - tôi nhớ rằng việc duy trì danh sách các gói thay đổi liên tục là pin PITA. Tôi đã chuyển sang xfce và thanh trừng gnome.
cas

1

Có vẻ như bạn chưa thiết lập đúng /etc/apt/preferences. Những điều sau đây sẽ ngăn không cho bất cứ thứ gì được cài đặt từ jessie-backport mong đợi những gì bảo nó cài đặt (chẳng hạn như kernel backported). Bạn vẫn sẽ gặp sự cố nếu các gói được chỉ định yêu cầu các gói khác từ backport không được liệt kê.

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

Nếu bạn muốn cài đặt danh sách các gói backported, bạn có thể sử dụng tập lệnh sau (hoặc các phần của nó):

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

Nếu bạn muốn hạ cấp bất kỳ gói nào được liệt kê bởi tập lệnh trên, hãy thêm vào sau /etc/apt/preferences:

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

Sau đó chạy:

sudo apt-get upgrade

1

Kiểm tra cấu hình ghim của bạn để biết apt trong / etc / apt / Preferences và /etc/apt/preferences.d/

Có thể bạn đã thêm một cấu hình ghim tùy chỉnh và quên nó? Đó là cách duy nhất tôi có thể nghĩ về điều đó sẽ khiến apt thích backport hơn vì nó dường như đang làm với bạn. Mặt khác, nó chỉ kéo các phụ thuộc - mà các gói bạn chỉ định yêu cầu.

Backport chính thức đã được ghim thấp hơn (100) so với jessie trong các gói backported Tập tin phát hành trong repo backport. Bạn không cần phải thực hiện bất kỳ cấu hình apt nào để làm cho apt thích jessie hơn jessie-backports.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.