Làm cách nào tôi có thể hoàn nguyên từ bản nâng cấp lên kho lưu trữ Đề xuất?


23

Tôi đã kích hoạt nhầm kho lưu trữ Bản cập nhật trước khi phát hành (được đề xuất) và sau đó nâng cấp tất cả các gói.

Làm thế nào tôi có thể hoàn tác điều này?

Dưới đây là kết quả kiểm tra từ hướng dẫn của @ enzotibkết quả kiểm tra từ hướng dẫn của tôi .


1
Các kết quả kiểm tra pastebins đã chết.
enzotib

Câu trả lời:


24

Đây là một cách tổng quát hơn để hoàn nguyên từ các gói được cài đặt cục bộ, các gói được đề xuất và sao lưu vào kênh cập nhật + ổn định. Trong khi các câu trả lời khác là chính xác và hoạt động theo cách tương tự, tôi nghĩ rằng đây là một cách tiếp cận thanh lịch hơn.

  1. Hãy chắc chắn rằng bạn đã xóa các mục trong -proposedhoặc -backportstrong tệp /etc/apt/sources.listvà của bạn /etc/apt/sources.list.d/*.
  2. Thêm tệp apt-Preferences, ví dụ: /etc/apt/preferences.d/99-back-to-stable-updateschứa ( precisetại đây - thay thế bằng phiên bản của bạn):

    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
    

    Việc ghim> 1000 này sẽ khiến apt có thể hạ cấp các gói từ kênh đó và mức ưu tiên <0 trên -proposed-backportscác kênh cũng sẽ loại bỏ mọi gói bổ sung.

  3. Bây giờ chạy

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

    Kiểm tra giải pháp được đề xuất apt sẽ cung cấp cho bạn, và nếu bạn nghĩ nó ổn, thì hãy chấp nhận nó. Nếu bạn cần kiểm tra lý do tại sao và phiên bản nào sẽ bị hạ cấp xuống, hãy kiểm tra apt-cache policy packagenamephiên bản này để xem phiên bản nào có sẵn và apt quyết định nào là ứng cử viên để cài đặt.

  4. Xóa /etc/apt/preferences.d/99-back-to-stable-updatestệp một lần nữa, vì nó không cần thiết nữa.

Cảm ơn mlindtrên các diễn đàn Ubuntu về cảm hứng này về việc ghim trong bài đăng của anh ấy từ hơn 5 năm trước - nhưng nó đã giúp tôi khá tốt ngày hôm nay.


Tôi cho rằng nó cũng nên làm việc với debian. Thật không may, nó không làm gì cho tôi: /
Michael

@Michael 1) Debian không có khái niệm về kho lưu trữ chính thức được cung cấp. 2) Trang web này là về Ubuntu, không phải Debian. Tôi muốn đề nghị bạn đặt một câu hỏi mới về Unix.SE .
gertvdijk

Giải pháp này cũng hoạt động với phiên bản 'xenial'! (sau khi thay thế chính xác bằng xenial trong tập tin, tất nhiên) Cảm ơn rất nhiều!
morhook

4

Trang này gợi ý rằng ghim Apt có thể được sử dụng để hạ cấp từ toàn bộ kho lưu trữ bằng cách tận dụng thực tế là mức độ ưu tiên của pin cao hơn 1000 có thể gây ra sự xuống cấp gói .

Sau đó, một giải pháp có thể là tăng tạm thời 1000 ưu tiên mặc định của tất cả các tệp gói ngoại trừ các ưu tiên từ natty-proposedkho lưu trữ:

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

(Lưu ý: Phương pháp này không tăng mức độ ưu tiên của các tệp gói có trường phát hành chứa dấu phẩy. Xem câu hỏi này .)

Sau khi làm điều này, apt-get --simulate upgradecó thể được sử dụng để kiểm tra phát hiện hạ cấp thành công. Sau khi xác nhận rằng các hạ cấp chính xác được phát hiện, sudo apt-get upgradenên là tất cả những gì cần thiết để thực hiện hạ cấp.

Khi hạ cấp hoàn tất, hãy sử dụng Nguồn phần mềm để vô hiệu hóa kho lưu trữ Bản cập nhật trước khi phát hành (được đề xuất) , sau đó xóa mức tăng ưu tiên tạm thời:

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

Cuối cùng, khởi động lại để tất cả các chương trình đang chạy là phiên bản hạ cấp của chúng.


1
Giải pháp thú vị, có lẽ là tốt nhất và tổng quát hơn của tôi. Nhân tiện, số lượng các gói hạ cấp là như nhau, xác nhận tính chính xác của cả hai phương pháp.
enzotib

2

Tôi không thể tìm thấy một giải pháp đơn giản hơn sau đây. Tuy nhiên, hy vọng ai đó nhận được với một câu trả lời tốt hơn.

Kịch bản sau đây có thể thực hiện hạ cấp

#!/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)

Các awkkịch bản, đặt tên get-prev-pkg-verslà như sau

#!/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
}

Khi chạy tập lệnh, repo được đề xuất KHÔNG nên bị vô hiệu hóa.

Nhớ đặt bit thực thi trên cả hai tập lệnh.

Một vấn đề với cách tiếp cận này là tất cả các gói bị hạ cấp sẽ dẫn đến cài đặt thủ công (cũng là các gói được cài đặt tự động).

Để an toàn, hãy thêm --simulatetùy chọn apt-getvào cuối tập lệnh bash.


2

Hoàn nguyên tất cả các gói từ đề xuất natty có lẽ là không cần thiết: hầu hết các gói sẽ sớm được cập nhật lên cùng phiên bản thông qua cập nhật natty.

Trong trường hợp bạn gặp sự cố với một gói, bạn có thể hoàn nguyên một gói đó bằng cách sử dụng phương thức mà trình bày (sau khi vô hiệu hóa -propro), hoặc bạn có thể sử dụng sudo aptitude install packagename/natty. Nhưng quan trọng hơn, bạn nên nộp một lỗi đối với gói. Rất ít người thực sự kiểm tra đề xuất tự nhiên, và nếu hồi quy (= vấn đề mới) xảy ra, họ chắc chắn nên được báo cáo. Nếu không, họ có thể sẽ cập nhật trong tất cả các bản cập nhật cho tất cả người dùng Ubuntu. Vì vậy, nếu bạn có bất kỳ vấn đề, xin vui lòng báo cáo.


1

Trong synap, bạn có thể vô hiệu hóa kho lưu trữ để đề xuất và cập nhật nguồn của mình. Sau đó, bạn sẽ thấy hơn tất cả các gói đã được cập nhật xuất hiện dưới dạng cài đặt cục bộ (vì chúng không còn trong kho nữa).

Bây giờ bạn sẽ phải "hạ cấp" các gói đó. Chọn từng cái một, và trong menu trên đã chọn:

package > force version

(hoặc Kiểm soát + E)

Một menu sẽ xuất hiện với các tùy chọn có sẵn. Tôi sẽ chọn số phiên bản thấp hơn cho mỗi gói. Nếu bạn mắc lỗi và có một phiên bản mới hơn trong các bản repos thông thường, nó sẽ được giải quyết trong bản cập nhật sau.

Một giải pháp nhanh chóng là sử dụng lệnh purge-ppa chỉ vào kho lưu trữ có mái vòm, nhưng không biết liệu nó có hoạt động với chúng không, tôi chỉ sử dụng nó để lọc các gói ppa bên ngoài và hạ cấp xuống các phiên bản ub Ubuntu chính thức. Tôi sẽ không đề nghị bạn làm điều này trong trường hợp này, có lẽ ai đó biết nếu đó là một phương pháp an toàn ...


Đoạn cuối chỉ là suy đoán và do đó nên là một nhận xét về câu hỏi hoặc được nghiên cứu đúng.
Karl Richter

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.