(Esta pergunta é muito semelhante à 10458. Foi sugerido que o Fedora e o Ubuntu / Debian são diferentes o suficiente para garantir respostas diferentes.)
Como uso qualquer instalação do Ubuntu, instalo gradualmente vários pacotes além da instalação da linha de base. Se eu reinstalar ou precisar instalar uma nova máquina, geralmente quero reinstalar esses pacotes específicos e quero fazê-lo rapidamente para voltar ao trabalho com o mínimo de problemas. Até onde eu já 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 aborrecimento). Mas nenhum deles pode me dizer quais pacotes eu tenhoinstalados, ao contrário de suas dependências ou atualizações do sistema. Até os logs são complicados, pois não tenho muita certeza do que devo extrair deles ou de como integrá-los (no caso das várias ferramentas familiares do apt). Isso significa que, toda vez que eu reinstalar ou 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. Mesmo padrões para os quais grep, boas regras de ouro ou uma idéia 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 uma aproximação do que estou procurando e é útil até certo ponto. O escolhido é o que mais se aproxima de uma maneira razoavelmente automática de reinstalar minhas ferramentas em um novo sistema, mesmo com todas as suas ressalvas.
Respostas:
Em qualquer máquina baseada no Debian, esta é uma maneira comum de duplicar um conjunto de pacotes. Na máquina antiga:
Copie o arquivo
my_favorite_packages
para a nova máquina (um pen drive é uma boa opção, masscp
também funciona bem). Em seguida, execute esta sequência (com privilégios de root):Isso não recebe apenas os pacotes que você 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 desativadas.
Quanto aos logs,
apt-get
mantém um log em/var/log/apt/history.log
(obrigado a Tshepang por atualizar isso em um comentário);dpkg
faz (at/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 paginar através dele com privilégios regulares de usuário.Pelo que sei, você tem razão em que nenhum desses logs rastreia especificamente o que você instalou, em vez de dependências instaladas automaticamente. Você pode obter essas informações, no entanto, em uma
aptitude
pesquisa. Procure por todos os pacotes instalados que também foram instalados automaticamente:Se você deseja apenas os que você instalou (não as auto-dependências), negue o
~M
:Se você deseja que este seja formatado para ter apenas os nomes dos pacotes e a palavra "instalar", também
aptitude
pode fazê-lo. Isso fornece uma lista pronta para alimentardpkg --get-selections
:(Eu não tenho nada no RedHat ou sistemas baseados em RedHat. Desculpe. Não há realmente nenhuma uma resposta para Linux per se , desde o gerenciamento de pacotes é uma grande parte do que torna diferentes distros diferentes .)
fonte
apt-get
,synaptic
eaptitude
(até onde eu vi). Isto é, desde o início de 2010.dpkg.log
instruções não parecem ser verdadeiras no Ubuntu 14.04, pois qualquer usuário pode obter minhas seleções facilmente, não trivial, mas não muito difícil.awk '$3 != "install" { next } ; { gsub(/:.+/, "", $4) ; print $4 }' /var/log/dpkg.log | sort | uniq
awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -u
faz.Use
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 exatamente a diferença:
diff jaunty.original mysystem.2009017
fonte
Aptidão é realmente muito bom nisso. O Aptitude sabe quando algo foi instalado manualmente ou por dependência, e você pode dizer para remover coisas que não são mais necessárias e que foram instaladas apenas porque outra coisa dependia dele, sempre mantendo o sistema o menor possível.
Existem vários pacotes que compõem uma instalação do Ubuntu, ubuntu-minimal, ubuntu-desktop, ubuntu-server e assim por diante. Se você pedir ao Aptitude para marcar esses itens como instalados manualmente e remover todo o resto, você terá a quantidade mínima possível de pacotes.
Explico como fazer tudo isso em duas postagens no meu blog: Limpando um Debian GNU / Linux e Limpando um Debian GNU / Linux (ou Ubuntu), reprise . Em suma, a resposta que você está procurando é:
A última vez que trabalhei com isso, se você usou o apt-get, não funcionou. É por isso que eu sempre recomendo o aptitude e, até onde eu sei, o Debian está obsoleto pelo apt-get em favor do aptitude.
Eu não sei como fazê-lo no Fedora e você provavelmente deve separar do que em uma pergunta diferente. O Fedora e o Ubuntu são sistemas operacionais diferentes e devem ser tratados como tal (mesmo que compartilhem seu kernel e outras coisas).
fonte
grep
:aptitude search '~i !~M'
deve fazer o truque.apt-get
não está obsoleto. O Debian recomenda oaptitude
gerenciamento de pacotes na linha de comando, mas isso está longe de ser obsoletoapt-get
.No debian, o apt-show-versions mostra as versões dos pacotes instalados.
fonte
Nos sistemas baseados no apt, consulte /var/log/apt/term.log. Para mim, há uma linha bastante clara para definir onde a instalação terminou e onde minhas instalações começaram.
fonte
De
man aptitude-create-state-bundle
:Isso manterá as mesmas informações que
aptitude
possuem sobre quais pacotes foram instalados manualmente.Ele deve ser usado com
aptitude-run-state-bundle
:fonte
Ao usá-
dpkg
lo, você não sabe se o pacote foi instalado manualmente ou automaticamente pelo usuário (como uma dependência ou durante a instalação inicial do SO). Se você deseja reter essas informações, é necessário obter uma lista apenas dos pacotes que foram realmente instalados manualmente.Para isso, você pode usar um desses dois one-liners. Ambos produzem exatamente a mesma saída na minha máquina e são mais precisos do que todas as soluções propostas até agora nesta questão. Eles são uma combinação das duas respostas (1) e (2) . Note que eu originalmente postei esta resposta aqui .
Usando
apt-mark
:Usando
aptitude
:Pouquíssimos pacotes ainda caem nas falhas, embora eu suspeite que eles sejam realmente instalados pelo usuário, logo após a instalação pela configuração da localização do idioma ou, por exemplo, pelo instalador do codec Totem. Além disso, as versões do cabeçalho linux também parecem se acumular, mesmo que eu tenha instalado apenas o metapacote não específico da versão. Exemplos:
Como funciona
sed
remove os espaços em branco restantes no final da linha.Outras possibilidades não funcionam tão bem:
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, mesmo que não sejam.apt-mark showauto
vez 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 que a solução acima.
fonte
Sou tendenciosa, e a solução que apresento nem sempre é possível, mas me cansei dessa situação. O resultado é que não instalo mais nada com as ferramentas de atualização / gerenciador de pacotes.
Eu segui um caminho bastante difícil (eu tinha requisitos estritos para versões). Criei um enorme makefile que baixa, compila e instala no meu diretório pessoal todos os pacotes (programas, bibliotecas, o que for) que eu precisar. Desenvolvi passo a passo, peça por peça. O makefile baixa e compila tudo, até os compiladores.
Quando mudo para um novo sistema ou reinstalei, apenas copio o makefile (mais algumas coisas de suporte), corro make world e volto no dia seguinte.
Para alguns programas que desenvolvo (para que eu tenha controle), eu uso uma ferramenta que eu programei, gerenciador de pacotes da 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 as bibliotecas do sistema)
fonte