Bagaimana saya bisa memfilter “dpkg --get-selection” hanya paket yang tersedia di repositori?


9

Saya ingin mendapatkan daftar paket yang diinstal pada satu sistem dan menginstal semuanya pada sistem lain.

Saya tahu itu dpkg --get-selectionsbisa memberi saya daftar semua paket yang diinstal yang saya dapat pipa ke dpkg --set-selectionssistem target. Namun, beberapa paket yang diinstal adalah paket yang saya buat sendiri secara lokal (menggunakan misalnya checkinstall) dan tidak tersedia dari repositori. The dpkg --set-selectionsProses akan gagal ketika tidak dapat menemukan paket ini di repositori.

Jadi adakah cara saya bisa memfilter daftar yang dihasilkan dpkg --get-selectionssehingga hanya berisi paket-paket yang versi instalasinya tersedia di repositori saya saat ini?

Jawaban:


9

Saya percaya Pusat Perangkat Lunak memiliki fitur untuk sinkronisasi antar komputer saat ini. Jika itu menangani paket yang hilang dengan benar, itu bisa menyelesaikan masalah Anda.

Masalahnya di sini adalah dpkgtidak mengetahui repositori, hanya paket yang diinstal. Anda dapat mengetahui apakah suatu paket tersedia di repositori dengan menjalankan apt-cache policy $package. Jika Anda melihat repositori di Version Table, itu tersedia di sana.

Jadi, bagaimana dengan ini? Ini lambat, tetapi harus bekerja:

dpkg --get-selections '*' \
  | while read line; do
    apt-cache policy $(echo "$line" | cut -f1 ) \
      | grep -q 'http://' \
      && echo "$line"
done

Ini akan menunjukkan kemajuan dan menulis ke file:total=$(dpkg --get-selections '*'|wc -l); i=0; dpkg --get-selections '*' | while read line; do i=$(($i+1)); apt-cache policy $(echo "$line" | cut -f1 ) | grep -q 'http://' && echo "$i/$total $line"; echo $line>>/var/tmp/dpkg-selection.list; done
rubo77

-4

Gunakan perintah berikut

dpkg --get-selections > installed-software

itu akan membuat file yang disebut instal-perangkat lunak di direktori home Anda

pada sistem baru

dpkg --set-selections < installed-software

ini akan membaca seleksi dan menginstal


3
Saya tidak berpikir Anda membaca pertanyaan itu.
Ryan C. Thompson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.