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 awk
kịch bản, đặt tên get-prev-pkg-vers
là 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 --simulate
tùy chọn apt-get
vào cuối tập lệnh bash.