Bagaimana saya bisa kembali dari upgrade ke repositori yang Diajukan?

Jawaban:

24

Berikut cara yang lebih umum untuk kembali dari paket yang diinstal secara lokal, paket yang diusulkan dan backports ke saluran + pembaruan yang stabil. Sementara jawaban lain benar dan bekerja dengan cara yang sama, saya pikir ini adalah pendekatan yang lebih elegan.

  1. Pastikan Anda menghapus entri -proposedatau -backportsdalam file Anda /etc/apt/sources.listdan /etc/apt/sources.list.d/*.
  2. Tambahkan file apt-preferensi, misalnya /etc/apt/preferences.d/99-back-to-stable-updatesberisi (untuk di precisesini - ganti dengan versi Anda):

    Package: *
    Pin: release a=precise
    Pin-Priority: 1001
    
    Package: *
    Pin: release a=precise-updates
    Pin-Priority: 1001
    
    Package: *
    Pin: release a=precise-security
    Pin-Priority: 1001
    
    Package: *
    Pin: release a=precise-proposed
    Pin-Priority: -10
    
    Package: *
    Pin: release a=precise-backports
    Pin-Priority: -10
    

    Menyematkan> 1000 ini akan membuat downgrade paksa pada paket dari saluran itu dan prioritas <0 pada -proposeddan -backportssaluran juga akan menghapus paket tambahan apa pun.

  3. Sekarang jalankan

    sudo apt-get update
    sudo apt-get dist-upgrade
    

    Periksa solusi yang diusulkan untuk Anda, dan jika Anda pikir tidak apa-apa, terima saja. Jika Anda perlu memeriksa mengapa dan versi apa yang akan diturunkan, periksa ini apt-cache policy packagenameuntuk melihat versi apa yang tersedia dan apa yang tepat untuk menentukan calon instalasi.

  4. Hapus /etc/apt/preferences.d/99-back-to-stable-updatesfile lagi, karena tidak diperlukan lagi.

Terima kasih mlinddi forum Ubuntu untuk inspirasi ini dalam menyematkan posnya lebih dari 5 tahun yang lalu - namun ini membantu saya dengan cukup baik hari ini.

gertvdijk
sumber
Saya kira itu harus bekerja dengan debian juga. Sayangnya, itu tidak melakukan apa pun untuk saya: /
Michael
@Michael 1) Debian tidak memiliki konsep repositori resmi -proposed. 2) Situs ini tentang Ubuntu, bukan Debian. Saya sarankan Anda untuk mengajukan pertanyaan baru di Unix.SE .
gertvdijk
Solusi ini juga bekerja dengan versi 'xenial'! (setelah mengganti tepat dengan xenial dalam file, tentu saja) Terima kasih banyak!
morhook
4

Halaman ini menunjukkan bahwa pin Apt dapat digunakan untuk menurunkan versi dari seluruh repositori dengan memanfaatkan fakta bahwa prioritas pin yang lebih tinggi dari 1000 dapat menyebabkan penurunan versi paket .

Satu solusi, dengan demikian, untuk sementara meningkatkan 1000 prioritas prioritas semua file paket kecuali untuk yang dari natty-proposedrepositori:

apt-cache policy | awk '
    /^ [0-9]+ / {
        p = $1;
        getline;
        r = $0;
        if (r !~ /a=natty-proposed/) p += 1000;
        print "Package: *\nPin: " r "\nPin-priority: " p "\n"
    }
' | sudo tee /etc/apt/preferences.d/downgrade-from-natty-proposed

(Catatan: Metode ini gagal meningkatkan prioritas file paket yang bidang rilisnya mengandung koma. Lihat pertanyaan ini .)

Setelah melakukan ini, apt-get --simulate upgradedapat digunakan untuk menguji deteksi downgrade yang berhasil. Setelah mengonfirmasi bahwa penurunan peringkat yang benar terdeteksi, sudo apt-get upgradeseharusnya hanya yang diperlukan untuk melakukan penurunan versi.

Ketika downgrade selesai, gunakan Sumber Perangkat Lunak untuk menonaktifkan repositori pembaruan Pra-rilis (disarankan) , kemudian hapus peningkatan prioritas sementara:

sudo rm /etc/apt/preferences.d/downgrade-from-natty-proposed

Terakhir, reboot agar semua program yang berjalan adalah versi yang diturunkan.

ændrük
sumber
1
Solusi menarik, mungkin yang terbaik dan lebih umum daripada saya. Omong-omong, jumlah paket yang diturunkan adalah sama, yang mengkonfirmasi kebenaran kedua pendekatan.
enzotib
2

Saya tidak dapat menemukan solusi yang lebih sederhana daripada yang berikut ini. Namun berharap seseorang masuk dengan jawaban yang lebih baik.

Script berikut yang bisa menjalankan downgrade

#!/bin/bash

# get a list of installed packages
dpkg --get-selections | awk '{ print $1 }' > all-packages

# run apt-cache policy on each of them, then elaborate with the awk script 
apt-cache policy $(<all-packages) |
  ./get-prev-pkg-vers >old-versions

# install previous version of packages
sudo apt-get --simulate install $(< old-versions)

The awkScript, bernama get-prev-pkg-versadalah sebagai berikut

#!/usr/bin/awk -f

/^[^ ]/ {
    package = $1
    gsub(":", "", package)
    search_next = 0
}
/^     [^ ]/ {
    installed = 0
    version = $1
    if (search_next == 1) {
        print package "=" version
        search_next = 0
    }
}
/^ \*\*\* [^ ]/ {
    installed = 1
}
/^        [^ ]/ {
    branch = $3
    if (installed == 1 && branch ~ /proposed/) {
        search_next = 1
    }
    installed = 0
}

Saat menjalankan skrip, repo yang diusulkan TIDAK seharusnya dinonaktifkan.

Ingatlah untuk mengatur bit yang dapat dieksekusi pada kedua skrip.

Masalah dengan pendekatan ini adalah bahwa semua paket yang di-downgrade akan menghasilkan terinstal secara manual (juga yang diinstal secara otomatis).

Agar aman, tambahkan --simulateopsi apt-getdi akhir skrip bash.

enzotib
sumber
2

Mengembalikan semua paket dari natty-usulan mungkin tidak diperlukan: sebagian besar paket akan segera diperbarui ke versi yang sama melalui natty-pembaruan.

Jika Anda memiliki masalah dengan satu paket, Anda bisa mengembalikan satu paket menggunakan metode darent present (setelah menonaktifkan -proposed), atau Anda bisa menggunakan sudo aptitude install packagename/natty. Tetapi yang lebih penting, Anda harus mengajukan bug terhadap paket. Hanya sedikit orang yang benar-benar menguji yang diusulkan, dan jika regresi (= masalah baru) terjadi mereka pasti harus dilaporkan. Kalau tidak, mereka mungkin berakhir dengan pembaruan untuk semua pengguna ubuntu. Jadi, jika Anda memiliki masalah, silakan laporkan.

johanvdw
sumber
1

Dalam sinaptik Anda dapat menonaktifkan repositori untuk diusulkan dan memperbarui sumber Anda. Maka Anda akan melihat bahwa semua paket daripada yang telah diperbarui muncul sebagai yang dipasang secara lokal (karena tidak ada dalam repo lagi).

Sekarang Anda harus "menurunkan versi" paket-paket itu. Pilih satu per satu, dan di menu atas pilih:

package > force version

(atau Kontrol + E)

Menu akan muncul dengan opsi yang tersedia. Saya akan memilih nomor versi yang lebih rendah untuk setiap paket. Jika Anda membuat kesalahan dan ada versi yang lebih baru di repo normal, itu akan diselesaikan di pembaruan nanti.

Solusi cepatnya adalah dengan menggunakan perintah purge-ppa yang menunjuk ke repositori berporp, tetapi tidak tahu apakah itu akan bekerja dengan mereka, saya hanya menggunakannya untuk membersihkan paket ppa eksternal dan menurunkan versi ke versi ubuntu resmi. Saya tidak akan merekomendasikan Anda untuk melakukan ini dalam kasus ini, mungkin seseorang tahu jika ini metode yang aman ...

animaletdesequia
sumber
Paragraf terakhir hanya spekulasi dan karenanya harus menjadi komentar atas pertanyaan atau diteliti dengan benar.
Karl Richter