Eu instalei um Ubuntu 10.10 simples no meu computador e instalei algum software via apt-get. Na semana passada, eu consegui quebrar tudo e comecei do zero e preciso reinstalar o software. Existe alguma maneira de criar uma lista com todos os pacotes que eu instalei manualmente?
Para que me desse uma lista como texlive, ...
e não texlive, texlive-dep1, textlive-dep2, ...
e todos os pacotes padrão removidos?
Se eu pudesse descobrir de alguma forma quais programas da instalação regular removi, isso também seria incrível!
Atualização 23/05/2015: Agora uso o Ansible como gerenciamento de configuração em meus sistemas. Lá eu especifico os pacotes a serem instalados. Isso serve à meta, instalando todos os programas em um sistema novo, ainda melhor. Portanto, essa pergunta pode ser a entrada em algum gerenciamento de configuração leve.
something
e nãosomething-common
tão bem.Este tópico do superuser.com fornece esta solução:
fonte
apt-get
, além de suas dependências. Assim, por exemplo, se você instalouaptitude
, então ele irá também listaapt-xapian-index aptitude-common libboost-iostreams1.54.0 libclass-accessor-perl libcwidget3 libept1.4.12 libio-string-perl libparse-debianchangelog-perl libsigc++-2.0-0c2a libsub-name-perl libtimedate-perl libxapian22 python-chardet python-debian python-six python-xapian
Se seus logs do apt estiverem em / var / log / apt, algo como isto deve funcionar:
Ou se você quiser se livrar de alguns dos itens repetitivos indesejados na saída:
fonte
Você pode usar o apt-mark , mas eu recomendo o debfoster :
Isso inspecionará todos os pacotes instalados e descobrirá quais estão mantendo os outros instalados:
Conforme você responde "y" a cada pergunta (basta pressionar Enter para mover-se rapidamente), o debfoster coletará a lista de pacotes e os escreverá linha por linha em um arquivo. Por padrão, isso é em
/var/lib/debfoster/keepers
. Se parece com isso:Eu configurei o debfoster via
/etc/debfoster.conf
para colocar esta lista/etc/debfoster-keepers
e acompanhar o arquivo com o etckeeper para manter o histórico e os backups. A resposta aqui mostra como instalar uma lista de pacotes a partir de um arquivo de texto delimitado por nova linha:Observe uma limitação aqui, os pacotes que você limpou têm um '-' na frente deles. Então você deseja remover essas linhas antes de chamar apt-mark.
Mesmo que o site do debfoster diga que o debfoster foi preterido em favor do aptitude, eu prefiro a configuração rápida e simples do debfoster. Ele coloca você no meio do banco de dados de pacotes e permite que você limpe as coisas, tornando os pacotes automático e manual mais óbvios.
Digite "h" no prompt do debfoster para explicar suas opções. Tipo "?" para ver a descrição do pacote. O tutorial aqui pode ser útil.
fonte
Fornece todos os pacotes instalados manualmente (não pacotes do sistema, não dependências). Para exemplos, mostra,
build-essential
mas nãogcc
.fonte
Para aqueles que preferem usar as ferramentas apt- *, existe um utilitário apt-mark que permite consultar e modificar o estado manual / automático.
Você também pode especificar um padrão para os pacotes nos quais você está interessado:
fonte
Finalmente entendi agora:
fonte
/var/log/apt/history.log(.N.gz)
entanto.zgrep
vez degunzip
ouzcat
canalizado paragrep
. É um script wrapper que vem com o gzip, eu acredito. Ele também aceita arquivos descompactados, para que você possa simplificar o seu script parazgrep -E '(\[INSTALLIEREN\]|\[INSTALL\])' /var/log/aptitude* | awk '{ print $2 }'
Sou capaz de extrair tudo abrindo os arquivos de log em / var / log / apt /
Então eu entro e filtro manualmente os pacotes de instalação do apt-get. Pode haver uma maneira de fazer isso programaticamente, mas não estou ciente disso.
fonte
Dessa forma, você vê a lista de comandos executados no passado.
Remova o código grep se precisar de mais informações:
se o log estiver compactado (ou seja, terminar com gz)
para compactá-lo novamente quando terminar, você pode:
fonte
zcat
? É tão fácil quantozcat filename.gz
. Pode-se apenas usá-lo em arquivos compactados gzip no lugar decat
. Tambémgrep
pode ser substituído porzgrep
, por exemplozgrep Commandline history.log.1.gz
.(grep "Commandline" history.log ; zgrep "Commandline" history.log.*.gz ) | grep " install " | grep -v -- "--yes" | sed -r "s/^.*install //"
. Possui falhas, porque os pacotes removidos também são listados e, se um pacote foi instalado mais de uma vez, é listado várias vezes.Não vi nenhuma solução aqui funcionando para mim, instalei alguns pacotes deb com o dpkg e alguns dos itens que estava procurando particularmente estavam ausentes.
Um forro bastante longo, mas conveniente para copiar e colar seria:
O comando acima salva uma lista de pacotes em um arquivo no seu diretório de trabalho atual chamado
my-packages
.Explicação
Primeiro criei uma lista de pacotes que compunham a linha de base dos pacotes selecionados durante a instalação.
Seguido por uma longa lista de itens instalados em geral.
Em seguida, comparei os dois arquivos
initial
einstalled
liste apenas os itens exclusivos a serem instalados.A partir daí, eu queria filtrar as dependências; é neste ponto que esse método pode perder alguns pacotes desejados; ele desconhece as dependências que também são explicitamente instaladas.
Eu escrevi uma função rápida do bash para diminuir essas etapas no processamento desses itens.
Depois disso, passei cada linha do meu arquivo
custom
para esta função comxargs
.Depois de ter a longa lista de todas as dependências possíveis (não tenho certeza de todas as declarações possíveis), obtive novamente as linhas que eram exclusivas para um único arquivo.
E minha lista finalizada de pacotes agora está em um arquivo chamado
manual
disponível para revisão.fonte
Alguém vinculado a https://unix.stackexchange.com/questions/3595/ubuntu-list-explicitly-installed-packages/3624#3624 que possui uma boa solução, mas não se comporta corretamente como a saída do aptitude mudou. Aqui está uma versão atualizada, baseada nos pacotes atualmente instalados comparados ao 12.04 LTS. Você precisará
aptitude
instalado, esse é o único requisito.Para dividir o comando acima em partes, esse bit gera um pacote por linha de tudo o que está instalado no sistema
E isso baixa a lista de pacotes padrão e recolhe as informações redundantes.
e
comm
compara os dois arquivos e gera os pacotes que não estão na lista padrão.fonte
Use um arquivo de manifesto de distribuição como o conjunto de pacotes base. Classifique os resultados instalados manualmente em grupos de pacotes por arquitetura e seção, para que seja mais fácil se concentrar em grupos de pacotes (talvez você não se importe com algumas seções).
https://gist.github.com/darrenleeweber/8cc570ff402f19af7fa4
fonte
apt-get install -y
e o arquivo seja um script bash. Todos os arquivos do pacote podem ser incluídos em um loop de provisão vagante.fonte
Não encontrei um que fosse adequado para mim, então escrevi um roteiro. Analisando o conteúdo de /var/log/apt/history.log* e / var / log / aptitude, classifique por data e hora, resultando em duas listas: uma é a instalação manual dos pacotes, a outra é instalada, mas os pacotes são removidos. Script com verificação 'apt list'. um pequeno desvio, porque o uso do dpkg instalou e modificou a fonte PPA.
Coloquei aqui, https://github.com/eexpress/eexp-bin/blob/master/self-installed-pkg.pl .
se alguém precisar testá-lo, talvez precise modificar algum código, pois meus arquivos de log são misturados em chinês e inglês (especialmente formato de data e hora RFC2822), preciso lidar com isso.
fonte
Eu acho que você deseja usar
/var/log/apt/history.log
e seus amigos para dar as alterações que foram feitas:(Modificado da fonte )
Fornecerá todos os pacotes que foram instalados na linha de comando usando uma variação de
apt-get install
.Ele obtém os arquivos compactados nos antigos
history.log
e os adiciona com a correntehistory.log
e passa pelo grep, extraindo linhas com o apt [-get] install [e / ou reinstalar] e mostrando o restante da linha (sinalizador -o) que equivale ao nome (s) do pacote.Isso precisará de um pouco de modificação (por exemplo, com
sed
) se você quiser apenas os nomes dos pacotes em linhas separadas; um exercício para o leitor!Vale a pena notar que o gerenciador de pacotes sinápticos (
gksu synaptic
oukdesudo synaptic
) na seção "status" possui uma lista "instalada (manualmente)". Se você marcar a lista inteira para remoção [não a aplique !!], poderá salvar as alterações marcadas e obter uma lista de pacotes dessa maneira. Cuidado: isso está bloqueadosynaptic
para mim (calculando as remoções de dependência presumivelmente).fonte