Як я можу фільтрувати "dpkg - вибір-вибір" до лише пакетів, доступних у сховищах?


9

Я хотів би отримати список пакетів, встановлених в одній системі, та встановити їх у іншій системі.

Я знаю, що це dpkg --get-selectionsможе дати мені список усіх встановлених пакетів, які я можу передати dpkg --set-selectionsв цільову систему. Однак деякі встановлені пакети - це ті, які я створив локально (використовуючи, наприклад, checkinstall) і недоступні у сховищах. dpkg --set-selectionsПроцес зазнає невдачі , якщо він не в змозі знайти ці пакети в репозиторіях.

Отже, чи є спосіб я фільтрувати список, згенерований dpkg --get-selectionsтаким чином, щоб він містив лише пакети, чия встановлена ​​на даний момент версія доступна в моїх поточних сховищах?

Відповіді:


9

Я вважаю, що в Центрі програмного забезпечення є можливість синхронізації між комп’ютерами в наші дні. Якщо це правильно обробляти відсутні пакети, це може вирішити вашу проблему.

Проблема тут полягає в тому, що dpkgне знають сховища, лише встановлені пакети. Ви можете дізнатися, чи є пакет доступним у сховищі, запустивши apt-cache policy $package. Якщо ви бачите сховище в папці Version Table, воно доступне там.

Отже, як щодо цього ?. Це повільно, але має працювати:

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

Це покаже прогрес і запише у файл: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

Використовуйте наступну команду

dpkg --get-selections > installed-software

це створить файл, який називається встановленим програмним забезпеченням у вашому домашньому каталозі

на новій системі

dpkg --set-selections < installed-software

це прочитає виділення та встановлення


3
Я не думаю, що ви читали питання.
Райан К. Томпсон,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.