Como parte de um esquema maior de restauração de backup, estou tentando obter uma lista concisa dos pacotes instalados do servidor ubuntu 16.04. Eu quero que a lista seja a mais curta possível e potencialmente útil cinco anos depois em uma nova versão LTS do ubuntu.
Considere o seguinte cenário:
Dia 1: eu instalo o servidor do Ubuntu 16.04 em uma máquina.
Dia 2: eu instalo o php-fpm
Dia 3: eu instalei nginx
, php
e sendmail
Dia 4: eu instalo atanks
. Não, não sei porque estou instalando um jogo gráfico em um servidor sem cabeçalho. O ponto é apenas adicionar mais coisas que foram instaladas manualmente no banco de dados do apt.
Dia 5: Meu servidor explode em um inferno de fogo. Talvez uma explosão de tanque tenha algo a ver com isso. Em qualquer caso, eu preciso criar um novo servidor baseado no backup.
No meu script de backup, gostaria de gerar a seguinte linha com base na minha atividade do apt-get nos últimos dias:
apt-get install atanks nginx php php-fpm sendmail
Então, como fazemos isso?
Primeiro, tentei algumas consultas do apt ,
apt-mark showmanual
mas eles pareciam listar centenas de pacotes mais do que eu tinha instalado manualmente.
Em segundo lugar, encontrei debfoster
:
Logo após instalar o ubuntu, eu corri:
sudo apt-get update
sudo apt-get -y install debfoster
sudo debfoster -q
sudo cp /var/lib/debfoster/keepers ~/startkeepers
E as operações normais do servidor podem continuar. Eu ou outros usuários do servidor podem instalar qualquer número de pacotes.
No meu script de backup, eu tenho o seguinte:
sudo debfoster -q
sudo echo $(diff --new-line-format="" --unchanged-line-format="" /var/lib/debfoster/keepers ~/startkeepers) > apt-get.list
E então eu poderia restaurar em uma nova instalação com:
apt-get install -y $(cat apt-get.list)
Infelizmente, este método não está funcionando perfeitamente devido a pacotes diferentes que instalam ou não instalam certas recompensas.
Quando depois de armazenar startkeepers
, eu corro
sudo apt-get install -y nginx php-fpm python-certbot-nginx sendmail composer php-mbstring php-xml php-zip php-mysql
sudo debfoster -q
sudo echo $(diff --new-line-format="" --unchanged-line-format="" /var/lib/debfoster/keepers ~/startkeepers) | tr ' ' '\n'
Esta última linha tem a seguinte saída:
composer
php-fpm
php-mbstring
php-mysql
php-xml
php-zip
python-certbot-nginx
sendmail
Isso está faltando ... nginx !!! Isso me assustou, mas depois percebi que nginx
deve ser uma dependência de python-certbot-nginx
, e eu confirmei isso. Então, talvez esse método funcionaria afinal?
Corri sudo apt-get upgrade
no meu servidor de teste e a saída permaneceu inalterada depois de usar
sudo debfoster -q
sudo echo $(diff --new-line-format="" --unchanged-line-format="" /var/lib/debfoster/keepers ~/startkeepers) | tr ' ' '\n'
No entanto, no meu servidor real, aquele para o qual estou tentando configurar essa duplicação com script, há mais duas linhas nele que eu acho que não deveriam estar lá:
linux-headers-4.4.0-112-generic
linux-image-4.4.0-112-generic
Eu não os instalei manualmente ... E não quero instalá-los em outro servidor, a menos que quem determinou a necessidade volte a fazê-lo. Poderia ter sido apt-update?
TLDR; O que é uma maneira confiável de rastrear uma lista agnóstica de versão do servidor de pacotes instalados manualmente, onde manualmente significa coisas que o usuário sabe sobre a instalação, não foram instaladas por atualizações ou cabeçalhos linux no entanto e versões do kernel são instaladas? Qualquer coisa que melhore o meu processo seria apreciada, pontos de bônus para usar ferramentas apt em vez de debfoster
, considerando seus desenvolvedores alegação apt suporta todos os seus recursos .