Obtenha a versão do pacote do arquivo

3

Eu deletei um arquivo em /etc fornecido pelo pacote packageA . Existe uma maneira que eu possa reinstalar apenas esse arquivo, desde que eu saiba onde está e qual pacote fornece?

Estou executando o Ubuntu 12.04 e o 14.04 nos meus servidores.

    
por Naftuli Kay 30.07.2014 / 21:35

2 respostas

3

Primeiro, você pode descobrir qual pacote fornece o arquivo:

dpkg -S /path/to/file

Então você pode baixar a versão atual do pacote.

apt-get download package-name

Se, por alguma razão, você precisar da versão do pacote que instalou inicialmente, terá que consultá-lo nos registros do APT em /var/log/apt/ ou /var/log/dpkg.log* (se eles não tiverem envelhecido) . Depois de determinar o número da versão ou a data, você pode procurá-la em snapshot.debian.org (Debian) ou < um href="https://launchpad.net/ubuntu"> Launchpad (Ubuntu).

Depois de baixar o pacote .deb , você pode extraí-lo em um diretório temporário com

dpkg-deb -x package_name-1.42.deb

Se você quiser imprimir o conteúdo de apenas um arquivo, use

dpkg-deb --fsys-tarfile package_name-1.42.deb | tar xO ./path/to/file

Você pode copiar o conteúdo no lugar, mas cuidado com o fato de que alguns arquivos precisam ter permissões específicas. Para extrair um arquivo com as permissões corretas, você precisará extraí-lo como root. Você pode usar dpkg-deb -x e copiar o arquivo:

# as root
dpkg-deb -x package_name-1.42.deb
cp -p path/to/file /path/to/file

Ou você pode extrair o tarball (substitua sudo por su ou qualquer método que você use para ganhar raiz):

dpkg-deb --fsys-tarfile package_name-1.42.deb | sudo tar x -C / ./path/to/file

Como alternativa, você pode reinstalar todo o pacote. Se o arquivo for um arquivo de configuração (ou seja, se ele estiver marcado como um arquivo de configuração a ser preservado em atualizações), você precisará instruir o dpkg a restaurar o arquivo modificado ou ausente. É um pouco mais fácil lidar com um conffile perdido, porque você pode querer preservar modificações em outros arquivos de configuração. Portanto, se o arquivo for um arquivo de configuração que você modificou o arquivo e deseja restaurar para seu estado original, renomeie sua versão primeiro para que o arquivo de configuração não exista. Então corra

dpkg -i --force-confmiss package_name-1.42.deb

Você pode usar apt-get para baixar e reinstalar o pacote de uma só vez. Se você deseja restaurar um conffile, instrua apt-get para passar a opção extra para dpkg .

apt-get --reinstall -o 'DPkg::options="--force-confmiss"' install package_name

Para evitar essa e outras dificuldades no futuro, instale etckeeper ( apt-get install etckeeper ), edite /etc/etckeeper/etckeeper.conf para selecionar seu sistema de controle de versão compatível favorito e execute etckeeper init . Modificações em /etc serão salvas no controle de versão. Execute etckeeper commit com uma mensagem de log significativa quando você alterar os arquivos de configuração. Então, se você quiser desfazer uma modificação em /etc , poderá restaurar uma revisão antiga do arquivo afetado.

    
por 31.07.2014 / 02:27
1

A resposta curta é sim. Como o / etc contém principalmente arquivos de configuração, você deve conseguir baixar o pacote .deb, extrair os arquivos e depois copiar o arquivo para o diretório correto.

mkdir ~/temp
dpkg -x somepackage.deb ~/temp/
cp ~/temp/somefile /etc

Se o arquivo baunilha será configurado corretamente ou não, é outra pergunta.

    
por 30.07.2014 / 21:57

Tags