Como posso filtrar “dpkg --get-selections” apenas para pacotes disponíveis nos repositórios?

9

Gostaria de obter uma lista de pacotes instalados em um sistema e instalar todos eles em outro sistema.

Eu sei que isso dpkg --get-selectionspode me dar uma lista de todos os pacotes instalados nos quais posso canalizar no dpkg --set-selectionssistema de destino. No entanto, alguns dos pacotes instalados são aqueles criados por mim localmente (usando, por exemplo, checkinstall) e não estão disponíveis nos repositórios. O dpkg --set-selectionsprocesso falhará quando não for possível encontrar esses pacotes nos repositórios.

Então, existe uma maneira de filtrar a lista gerada por, dpkg --get-selectionspara que ela contenha apenas pacotes cuja versão atualmente instalada esteja disponível em meus repositórios atuais?

Ryan C. Thompson
fonte

Respostas:

9

Acredito que o Software Center tem um recurso para sincronizar entre computadores atualmente. Se ele manipular pacotes ausentes corretamente, poderá resolver o seu problema.

O problema aqui é que dpkgnão está ciente dos repositórios, apenas dos pacotes instalados. Você pode descobrir se um pacote está disponível em um repositório executando apt-cache policy $package. Se você vir um repositório no Version Table, ele estará disponível lá.

Então, que tal isso? É lento, mas deve funcionar:

dpkg --get-selections '*' \
  | while read line; do
    apt-cache policy $(echo "$line" | cut -f1 ) \
      | grep -q 'http://' \
      && echo "$line"
done
tumbleweed
fonte
Isso mostrará o progresso e 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
gravará
-4

Use o seguinte comando

dpkg --get-selections > installed-software

ele criará um arquivo chamado software instalado em seu diretório pessoal

no novo sistema

dpkg --set-selections < installed-software

isso lerá a seleção e instalará

sarveshlad
fonte
3
Eu não acho que você leu a pergunta.
23912 Ryan C. Thompson