Debian Jessie memasang terlalu banyak backports

9

Saya memiliki Debian Jessie dan telah menambahkan backports (sesuai dengan instruksi ini ):

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

(Saya melakukan ini untuk mendapatkan kernel yang lebih baru, seperti yang saya perlukan, untuk beberapa perangkat keras di laptop saya.)

Instruksi mengatakan bahwa tidak ada yang harus terjadi, kecuali saya secara eksplisit meminta paket yang di-backport. mis apt-get -t jessie-backports install "package".

Namun saya sekarang tampaknya memiliki seluruh beban sistem saya dari backports, dan satu paket telah terinstal, karena itu tergantung pada versi yang tepat, dari sesuatu yang telah diperbarui ke back-port.

Jadi pertanyaan saya:

  • Bagaimana cara pertama saya menghentikannya, sehingga tidak ada lagi backport yang diinstal?
  • Bagaimana cara menghapus backport yang ada?

Catatan: ini mendapatkan daftar paket yang diinstal yang berasal dari backports (dan dalam format yang dapat diteruskan ke apt-get install, untuk beberapa alasan menempatkan sudo apt-get installgema di akhir pipa tidak berfungsi):

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

Peringatan:

Beberapa paket diinstal secara otomatis, jadi jika Anda menginstal ulang semuanya, maka paket yang diinstal secara otomatis ini akan ditandai sebagai yang diinstal secara manual. Dengan demikian tidak dihapus saat tidak diperlukan.

Adakah yang punya ide bagaimana menyelesaikannya?

ctrl-alt-delor
sumber

Jawaban:

10
  1. Coba tambahkan berikut ini ke salah satu /etc/apt/apt.confatau file di bawah /etc/apt/apt.conf.d:

    APT::Default-Release "jessie";

  2. Untuk menghapus backport yang ada, Anda harus mendapatkan daftar mana yang diinstal, dan versi apa yang diganti. Untungnya, informasi ini dapat diekstraksi dengan sangat mudah dari/var/log/dpkg.log

misalnya grep ' upgrade ' /var/log/dpkg.logakan memberi Anda banyak baris seperti berikut:

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

Ini mengatakan bahwa pada 11:06 pada 15 Februari, saya memutakhirkan python-numpy dari versi 1: 1.11.0 ~ b2-1 ke versi 1: 1.11.0 ~ b3-1

Jika saya ingin menurunkan versi ke versi sebelumnya, maka saya akan menjalankan:

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

CATATAN: dalam kasus khusus ini, mungkin tidak akan berhasil karena saya menjalankan debian sidalias unstablejadi versi lama mungkin tidak lagi tersedia di repositori deb. Jika Anda menjalankan jessiedan menginstal ulang versi paket jessie sebagai penurunan versi ke versi jessie-backports, itu akan berfungsi seperti yang diharapkan.

Demikian pula, jika paket telah dihapus Anda dapat menemukannya dan versi yang tepat yang oleh grepping untuk removedi /var/log/dpkg.log.


Penurunan banyak paket secara massal sebagian besar dapat diotomatisasi menggunakan alat standar seperti awkdan grep. Misalnya, Jika Anda tahu bahwa upgrade jessie-backports yang Anda instal semua dilakukan pada hari tertentu (mis. 2016-02-15), maka Anda dapat menurunkan versi ke versi sebelumnya dengan sesuatu seperti:

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

(umpan baris dan indentasi ditambahkan untuk menghindari bilah gulir horizontal)

Perhatikan penggunaan opsi -d( --download-only). Jalankan kembali perintah dan hapus opsi itu setelah Anda memverifikasi bahwa apt-get installakan melakukan apa yang Anda inginkan, dan HANYA apa yang Anda inginkan.

Saya juga merekomendasikan untuk menjalankan hanya awksebagian dari perintah itu dengan sendirinya terlebih dahulu sehingga Anda dapat melihat daftar paket dan versi mana yang akan diinstal ulang.

cas
sumber
1
maksudnya 'sebagian besar otomatis' maksud saya sementara sebagian besar akan bekerja tanpa masalah, itu tidak / tidak akan selalu berjalan dengan sempurna (tergantung pada paket yang tepat terlibat dan mereka tergantung / merekomendasikan / konflik / baris dll). Mungkin ada satu atau dua paket yang harus Anda instal atau hapus secara manual dengan salah satu apt-getatau dpkg. Selama Anda tidak panik, tidak ada yang perlu dikhawatirkan. Sebagian besar masalah dengan sistem pengemasan disebabkan oleh orang-orang yang panik dan bereaksi tanpa berpikir .... bawa perlahan-lahan dan pikirkan sebelum bertindak.
cas
Tidakkah seharusnya dia menyematkan paket kernel baru ke backports @cas?
Rui F Ribeiro
Tidak akan sakit tetapi tidak perlu, dan menyematkan sedikit lebih rumit dan sulit untuk diperbaiki daripada hanya mengatur Apt :: Default-Release. apt-gettidak akan menurunkan versi paket yang sudah diinstal kecuali Anda secara eksplisit mengatakannya. Dan @richard mengatakan dia ingin menginstal jessiepaket secara default kecuali jika dia secara eksplisit menentukan jessie-backports- saya berasumsi bahwa keinginan itu berlaku untuk paket kernel juga.
cas
dia bilang dia memasukkan backports untuk memiliki kernel baru, mungkin seperti saya, untuk memiliki kernel 4 di jessie.
Rui F Ribeiro
1
Saya kira orang-orang yang menggunakan stable+ stable-backportsmungkin lebih peduli tentang menyematkan daripada yang saya lakukan dan telah berupaya untuk mempelajari lebih banyak tentang itu. Saya cenderung menjalankan unstabledan menjaga sistem saya tetap disinkronkan dengan sid terbaru secara teratur (dengan tambahan sesekali dari experimental), sehingga memiliki sedikit kebutuhan untuk menyematkan. Satu-satunya waktu saya menggunakannya sangat berat adalah bertahun-tahun yang lalu selama transisi ke gnome3, ketika saya tidak ingin paket gnome2 saya diganti - saya ingat bahwa mempertahankan daftar paket yang selalu berubah adalah pin PITA. Sejak itu saya beralih ke xfce dan membersihkan gnome.
cas
1

Sepertinya Anda belum memasang dengan benar /etc/apt/preferences. Hal-hal berikut ini akan mencegah apa pun diinstal dari jessie-backports mengharapkan apa yang diminta untuk diinstal (seperti kernel backported). Anda masih akan mengalami masalah jika paket yang ditentukan memerlukan paket lain dari backports yang tidak terdaftar.

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

Jika Anda ingin mendapatkan daftar paket yang di-backport terinstal, Anda dapat menggunakan skrip berikut (atau bagian dari itu):

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

Jika Anda ingin menurunkan versi paket apa pun yang dicantumkan oleh skrip di atas, tambahkan yang berikut ke /etc/apt/preferences:

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

Lalu lari:

sudo apt-get upgrade
NeoH4x0r
sumber
1

Periksa konfigurasi pinning Anda untuk apt di / etc / apt / preferensi dan /etc/apt/preferences.d/

Apakah mungkin Anda telah menambahkan konfigurasi penyematan kustom dan melupakannya? Itulah satu-satunya cara yang bisa saya pikirkan yang akan membuat saya lebih suka backport seperti yang Anda lakukan. Kalau tidak, itu hanya menarik dependensi - yang dibutuhkan paket yang Anda tentukan.

Backport resmi sudah disematkan lebih rendah (100) daripada jessie dalam paket-paket yang di-backport. Rilis file dalam repo backports. Anda tidak harus melakukan konfigurasi apt untuk membuat apt prefer jessie daripada jessie-backports.

figtrap
sumber