it-swarm-pt.tech

Como você rastreia quais pacotes foram instalados no Ubuntu (Linux)?

(Esta pergunta é muito semelhante a 10458 . Foi sugerido que o Fedora e o Ubuntu/Debian são diferentes o suficiente para garantir respostas diferentes.)

À medida que uso qualquer configuração do Ubuntu, instalo gradualmente vários pacotes além da instalação básica. Se eu reinstalar, ou se eu precisar instalar uma nova máquina, geralmente quero reinstalar esses pacotes específicos e fazer isso rápido para obter de volta ao trabalho com o mínimo de aborrecimento. Tanto quanto eu vi todos os gerenciadores de pacotes (apt-get, aptitude e synaptic) podem me dizer quais pacotes estão instalados, e todos eles têm logs (embora sejam diferentes para cada ferramenta, o que é um incômodo). Mas nenhum deles pode me dizer quais pacotes eu instalei, ao contrário de suas dependências ou atualizações do sistema. Até mesmo os logs são complicados, pois não tenho certeza do que devo extrair deles ou como integrá-los (no caso das várias ferramentas da família apt). Isso significa que cada vez que eu reinstalar, ou mesmo apenas fazer backup, não tenho certeza de como recriar essa lista.

Não estou necessariamente esperando que nenhuma das ferramentas faça isso por mim, mas se não o fizerem, estou procurando soluções alternativas. Até mesmo padrões para pesquisar, boas regras básicas ou uma ideia clara do que exatamente está sendo registrado, seriam úteis. Pode não haver uma "melhor resposta" aqui, mas as boas seriam muito úteis.


A maioria das respostas abaixo fornece alguma aproximação do que estou procurando e é útil até certo ponto. O escolhido é o que mais se aproxima de uma forma razoavelmente automática de reinstalar minhas ferramentas em um novo sistema, mesmo com todas as suas ressalvas.

38
quark

Em qualquer máquina baseada em Debian, esta é uma maneira comum de duplicar um conjunto de pacotes. Na máquina antiga:

dpkg --get-selections "*" > my_favorite_packages

Copie o arquivo my_favorite_packages para a nova máquina (um pen drive é uma boa opção, mas scp também funciona bem). Em seguida, execute esta sequência (com privilégios de root):

apt-get update
dpkg --set-selections < my_favorite_packages
apt-get -u dselect-upgrade

Isso não leva você apenas os pacotes que instalou. Ele também obtém suas dependências, etc. Além disso, se os repositórios entre as duas máquinas forem diferentes, todas as apostas serão canceladas.

Quanto aos registros, apt-get mantém um registro em /var/log/apt/history.log (obrigado a Tshepang por atualizar isso em um comentário); dpkg faz (em /var/log/dpkg.log), mas é notoriamente difícil de analisar e só pode ser lido com privilégios de root; aptitude tem um em /var/log/aptitude e você pode navegar por ele com privilégios de usuário regulares.

Pelo que eu posso dizer, você está certo de que nenhum desses logs rastreia especificamente o que você instalou, ao contrário das dependências instaladas automaticamente. Você pode obter essas informações, no entanto, em uma pesquisa aptitude. Pesquise todos os pacotes instalados que também foram instalados automaticamente:

aptitude search '~i ~M'

Se você quiser apenas aqueles que você instalou (não as autodependências), negue o ~M:

aptitude search '~i !~M'

Se você quiser que seja formatado de forma que tenha apenas os nomes dos pacotes e a palavra "instalar", aptitude pode fazer isso também. Isso lhe dá uma lista pronta para alimentar dpkg --get-selections:

aptitude search '~i !~M' -F "%p install"

(Não tenho nada sobre RedHat ou sistemas baseados em RedHat. Desculpe. Realmente não há uma resposta para Linux per se uma vez que o gerenciamento de pacotes é uma grande parte do que torna diferentes distros diferentes.)

31
Telemachus

Usar dpkg -l '*' > jaunty.original para lembrar todos os pacotes instalados em um sistema recém-instalado.

Depois de instalar todos os seus pacotes adicionais, faça dpkg -l '*' > mysystem.2009017.

Os pacotes adicionais são apenas a diferença: diff jaunty.original mysystem.2009017

7
Ludwig Weinzierl

A aptidão é realmente muito boa nisso. O Aptitude sabe quando algo foi instalado manualmente ou por dependência e você pode dizer a ele para remover coisas que não são mais necessárias e foram instaladas apenas porque alguma outra coisa dependia disso sempre mantendo seu sistema o menor possível.

Há um punhado de pacotes que compõem uma instalação do Ubuntu, ubuntu-minimal, ubuntu-desktop, ubuntu-server e assim por diante. Se você disser ao Aptitude para marcá-los como manualmente instalados e remover todo o resto, você acabará com a quantidade mínima possível de pacotes.

Eu explico como fazer tudo isso em dois posts no meu blog: Limpando um Debian GNU/Linux e Limpando um Debian GNU/Linux (ou Ubuntu), reprise . Resumindo, a resposta que você está procurando é:

aptitude search ~i | grep -v "i A"

A última vez que trabalhei com isso, se você usou o apt-get, não funcionou. É por isso que sempre recomendo o aptitude e, pelo que sei, o Debian está substituindo o apt-get pelo aptitude.

Eu não sei como fazer isso no Fedora e você provavelmente deveria separar isso em uma pergunta diferente. Fedora e Ubuntu são sistemas operacionais diferentes e devem ser tratados como tal (mesmo que compartilhem seu kernel e outras coisas).

3
pupeno

No debian apt-show-versions mostra as versões dos pacotes instalados.

2
seb

De man aptitude-create-state-bundle:

aptitude-create-state-bundle produz um arquivo compactado que armazena os arquivos necessários para replicar o estado de arquivo do pacote atual.

Isto irá reter as mesmas informações que aptitude possui sobre as quais os pacotes foram instalados manualmente.

Deve ser usado com aptitude-run-state-bundle:

aptitude-run-state-bundle descompacta o bundle de aptitude dado criado por aptitude-create-state-bundle (1) para um diretório temporário, invoca nele com o fornecido e remove o diretório temporário depois.

1
intuited

Ao usar apenas dpkg você não sabe se o pacote foi instalado manualmente pelo usuário ou automaticamente (como uma dependência ou durante a instalação inicial do sistema operacional). Se quiser reter essas informações, você precisa obter uma lista apenas dos pacotes que foram realmente instalados manualmente.

Para isso, você pode usar qualquer um desses dois one-liners. Ambas geram exatamente a mesma saída em minha máquina e são mais precisas do que todas as soluções propostas até agora nesta questão. Eles são uma combinação das duas respostas (1) e (2) . Observe que originalmente postei esta resposta aqui .

Usando apt-mark:

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Usando aptitude:

comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

Muito poucos pacotes ainda falham, embora eu suspeite que estes são realmente instalados pelo usuário, seja logo após a instalação através da configuração de localização de idioma ou, por exemplo, através do instalador do codec Totem. Além disso, as versões do cabeçalho do linux também parecem se acumular, embora eu tenha instalado apenas o metapacote não específico da versão. Exemplos:

libreoffice-help-en-gb
openoffice.org-hyphenation
gstreamer0.10-fluendo-mp3
linux-headers-3.13.0-29    

Como funciona

  1. Obtenha a lista de pacotes instalados manualmente. Para o aptitude, o sed adicional remove os espaços em branco restantes no final da linha.
  2. Obtenha a lista de pacotes instalados logo após uma nova instalação.
  3. Compare os arquivos, apenas imprima as linhas no arquivo 1 que não estão presentes no arquivo 2.

Outras possibilidades não funcionam tão bem:

  • Usando o ubuntu-14.04-desktop-AMD64.manifest arquivo ( aqui para Ubuntu 14.04) em vez de /var/log/installer/initial-status.gz. Mais pacotes são mostrados como instalados manualmente, embora não sejam.
  • Usando apt-mark showauto ao invés de /var/log/installer/initial-status.gz. apt-mark por exemplo, não inclui o pacote xserver-xorg, enquanto o outro arquivo inclui.

Ambos listam mais pacotes do que a solução acima.

1
jmiserez

Em sistemas baseados em apt, olhe em /var/log/apt/term.log. Para mim, há uma linha bem clara para traçar onde a instalação terminou e onde minhas instalações começaram.

1
Wade

Sou preconceituoso, e a solução que apresento nem sempre é possível, mas cansei dessa situação. O resultado é que eu não instalo mais nada com as ferramentas do gerenciador de atualização/pacote.

No entanto, tomei um caminho bastante difícil (tinha requisitos estritos para as versões). Eu criei um makefile enorme que baixa, compila e instala em meu diretório pessoal todos os pacotes (programas, bibliotecas, qualquer coisa) que eu preciso. Eu o desenvolvi passo a passo, peça por peça. O makefile baixa e compila tudo, até mesmo os compiladores.

Quando eu mudo para um novo sistema, ou reinstalo, eu apenas copio o makefile (mais algumas coisas de suporte), executo make world e volto no dia seguinte.

Para alguns programas que desenvolvo (portanto tenho controle sobre), uso uma ferramenta que programei, gerenciador de pacotes castanha . Mais ou menos como pastas .app no ​​MacOSX. Tudo está no pacote, então eu sei o que está instalado a qualquer momento, e sei que é independente e auto-suficiente (exceto para bibliotecas de sistema)

0
Stefano Borini