Reempacotamento e repositório local em um sistema Debian-like

Nesse pequeno artigo venho demonstrar como criar um repositório local para cache de pacotes .deb e veremos também como reempacotar todo um sistema para a utilização posterior de seus pacotes.

[ Hits: 20.883 ]

Por: edps em 11/04/2011 | Blog: https://edpsblog.wordpress.com/


Introdução



A principal ideia que trago com este artigo é a utilização de um espelho local para que se possa utilizar os pacotes .debs que temos (seja por meio de download|compilação etc) de forma parecida como é feita num repositório Debian.

Em segundo lugar; mas não menos importante vem a possibilidade de reempacotar todo o sistema para posterior uso dos pacotes, seja na nossa própria máquina ou numa outra que não tenha acesso à Internet. Nesse caso fiz algo parecido para o Arch Linux nessa dica.

No caso acima podemos ainda copiar todo o resultado do processo: sources.list e pasta com os pacotes, salvá-los num pendrive e utilizá-los numa outra máquina ou na mesma no caso de uma futura reinstalação.

Outro caso que esse método é uma solução é para aqueles usuários que utilizam o famoso 'apt-get clean' que remove todo o cache dos pacotes, nesse caso o que fazer então? Baixar tudo novamente? Sim se possível for! Mas se não for... reempacotemos ora!

Espero que gostem!

Reempacotamento de um sistema Debian

Para reempacotarmos todos os nossos pacotes em uma distro Debian-based (Ubuntu, Mint aptosid e outros) utilizaremos o software 'dpkg-repack' que já foi alvo de dica aqui no VOL:
E se caso não o tenham instalado, instale-o assim:

sudo apt-get install dpkg-repack

* ou sigam o passo alternativo indicado no fim do artigo.

Começando.

Tendo instalado o programa vamos ao reempacotamento e tal como visto na imagem abaixo, criaremos uma pasta chamada 'debs', na qual entraremos a seguir, obteremos a informação dos pacotes instalados e através dela geraremos um script para o reempacotamento, os passos são esses:
Criação da pasta:

mkdir debs

Entrada na pasta de trabalho:

cd debs/

Obtenção da lista de pacotes instalados com o dpkg:

dpkg --get-selections | awk '{if ($2=="install") print $1}' > debian_packages.list
* como visto na imagem tenho 2051 pacotes instalados, alguns dos repositórios Debian, outros compilados e empacotados com o Checkinstall e outros baixados da Internet (caso do LibreOffice).

Criação do script para reempacotamento:

cat debian_packages.list | awk '{ print "dpkg-repack " $1 }' > repack.sh
Daremos permissão de execução para o script:

chmod +x repack.sh

Execução do script gerado:

sudo ./repack.sh

Script em execução (demora um pouco... afinal são 2051 pacotes, alguns bem grandes caso do Sauerbraten, Nexuiz etc):
Término do reempacotamento:
Pasta na qual os arquivos foram gerados:
Informações da pasta e remoção dos arquivos gerados (debian_packages.list e repack.sh):
rm -fv debian_packages.list; rm -fv repack.sh):

e tendo concluído isso, estamos prontos para o próximo passo...

    Próxima página

Páginas do artigo
   1. Introdução
   2. Criação do repositório local
   3. Considerações finais
Outros artigos deste autor

Instalação do navegador Vivaldi no GNU/Linux

sidux Hipnos XFCE

Virtualbox - clonando e reduzindo o tamanho de HDs

Kernel otimizado? Porque não?

Arch Linux - Instalação a partir de imagem híbrida

Leitura recomendada

Instalando o Beryl + Drivers NVIDIA no Ubuntu 6.10 (Edgy)

Gerenciamento de pacotes RPM (parte 1)

Conexão com chaves assimétricas sem uso de senha em servidor sshd

Slackware descomplicado para iniciantes

Execução automática de comandos na inicialização do modo gráfico

  
Comentários
[1] Comentário enviado por eldermarco em 11/04/2011 - 17:29h

Que interessante esse negócio de reempacotar todo o sistema! Muito bom edps!

[2] Comentário enviado por removido em 11/04/2011 - 18:21h

Obrigado eldermarco, isso é bastante útil no caso das pessoas que não tem acesso a Net e que assim quem sabe podem utilizar uma versão determinada de um programa que esteja disponível em outra máquina.

A questão do espelho local é porque ultimamente venho compilando e empacotando muitos pacotes com o Checkinstall, assim fica mais fácil de gerenciá-los. O LibreOffice já está nos repositórios Debian, mas por hora preferi manter a versão que tinha baixado do site oficial.

t+

[3] Comentário enviado por removido em 11/04/2011 - 19:44h

Não sei quem é mais versátil, se é você com toda sua bagagem em GNU/Linux ou o próprio Linux.
Quantas possibilidades! Incrível! Não tem como não dizer que o Linux é o melhor sistema.
Quanto mais leio e aprendo, mais coisas tenho a aprender com você e todos aqui.

Muito bom, Edinaldo.

[4] Comentário enviado por removido em 11/04/2011 - 22:25h

Obrigado Izaias por suas palavras;

a idéia do espelho local não é nova inclusive existem artigos no próprio VOL a esse respeito, mas foi com a dica do DicasL que obtive o melhor resultado.

Sobre o reempacotamento já fiz muito disso quando conheci as maravilhas dos antigos knoppix, kanotix, sidux... grande parte de seus aplicativos eu reempacotava e instalava no meu Debian. Não existe a promessa que tudo o que for reempacotado será possível instalar noutra máquina devido a questão das dependências, porém em máquinas com sistemas semelhantes é bem provável que tudo funcione.

um abraço!


[5] Comentário enviado por rauldipeas em 11/04/2011 - 23:33h

Existe algum meio de "autenticar" os pacotes do repositório local?
Por que no Ubuntu, o gerenciador de atualizações dá erro com esses pacotes na hora de atualizar...

[6] Comentário enviado por removido em 11/04/2011 - 23:42h

@rauldipeas,

você pode usar o método que expus nessa dica:

http://www.vivaolinux.com.br/dica/Autenticacao-de-repositorios-em-distros-Debianlike/

ou simplesmente usar a opção ' allow-unauthenticated ' como em:

$ sudo apt-get install --allow-unauthenticated kde-full

* o método da dica é bem melhor pois é definitivo.

um abraço.

[7] Comentário enviado por brunotec em 12/04/2011 - 01:08h

Muito Bom Artigo,

Acho que para ambientes corporativos ou em lan houses onde é preciso instalar em várias máquinas ou como foi dito no artigo em máquinas que não possuam internet é uma ajuda e tanto!!

Agora para uma reinstalação futura pode ser que não seja muito lucrativo pois com as atualizações constantes dos pacotes ocorreria de a maioria estar desatualizada, mas é claro dependendo do tamanho do pacote como em um Libreoffice por exemplo ai seria legal já que como ele é um pouco grande dai bastaria atualizar.

No caso do Debian Estável acho que seria legal tbm já que só recebe atualizações de segurança e sendo assim a maioria dos pacotes não necessitariam de atualização.

@edps

vc é uma grande referencia aqui do VOL para Debian e eu que ja gostava muito dessa distro com seus artigos me identifico com ela cada vez mais.

10zão e um abraço.

[8] Comentário enviado por chimico em 12/04/2011 - 13:47h

Olá edps, vc pode fazer assim também:

dpkg --get-selections | awk '{if ($2=="install") print $1}' | dpkg-repack

para reempacotar sua distro. Já fiz isso em um live cd a partir de uma partição do hd montada para salvar os pacotes deb.
Afinal um live-cd pode além de te fornecer ferramentas de recuperação alguns pacotes no caso de algum problema.
t++

[9] Comentário enviado por tonyrecife em 12/04/2011 - 13:59h

muito bom mesmo. Uso repositório local pra economizar banda de internet. Apenas o servidor baixa os pacotes da internet, os outros baixam dele, isso somado com cache de páginas, etc...
Viva o Linux. Parabens edps.

[10] Comentário enviado por removido em 12/04/2011 - 18:42h

Valeu galera (brunotec, chicotrance e tonyrecife), obrigado pelos comentários.

@chicotrance,

thanks man again! estás me devendo aquela dica do debdelta hein rsrsrs, um abraço meu brother!


[11] Comentário enviado por chimico em 12/04/2011 - 22:44h

Ae edps, a propósito postei hoje (12/04/2011), espero que aprovem, faz tempo que não posto nada (13/03/2008 ), mas tenho muita coisa pra postar, pois me foquei em otimização (sem compilar) e algumas ferramentas em linha de comando como awk, sed, find, kerneis enxutos, mudar o file system sem fazer uma nova instalação (inclusive do root /), apt-build, apt-fast (outros gerenciadores de download), gosto do Arch, mas o Debian..., prefiro compilar tudo nele, ferramentas de backup,...

Abraço!

[12] Comentário enviado por rauldipeas em 13/04/2011 - 04:33h

@edps Obrigado pelas dicas, mais a minha dúvida é sobre como criar um repositório local com chave GPG, falo isso por que tenho um repositório pessoal hospedado no sourceforge, e não sei como criar uma chave GPG pra esse repositório...

Eu só criei o repositório local e hospedei a estrutura de pastas com os arquivos no sourceforge.

Desde já agradeço sua atenção!!

AbraxX!!

[13] Comentário enviado por removido em 13/04/2011 - 18:31h

@chicotrance, valeu e no aguardo de sua dica.

@rauldipeas, nunca fiz esse processo portanto não sei como se faz, mas vendo o artigo abaixo da Ubuntu Wiki, parece que não é difícil:

http://wiki.ubuntu-br.org/GnuPG

1 - instalar o GNUPG
2 - criar suas chaves privadas e pública
3 - assinar seus arquivos
4 - enviar sua chave para um servidor.

caso tente e se funcionar, posta um artigo no VOL.

artigos sobre o assunto:

http://www.vivaolinux.com.br/artigo/Gerar-par-de-chaves-com-o-GnuPG-em-11-passos
http://www.vivaolinux.com.br/artigo/Assinatura-e-criptografia-de-dados-com-GPG/

espero tê-lo ajudado!

[14] Comentário enviado por Fabio_Farias em 27/04/2011 - 10:11h

Parabéns Edinaldo.
Mais um belo trabalho seu amigo. É sempre um prazer ler trabalhos como esse. Obrigado por contribuir.
Abraços!

[15] Comentário enviado por brunotec em 27/04/2011 - 14:39h

SALVOU A PÁTRIA !!!

tem um PC aqui em casa onde é inviável levar um cabo de rede até ele e para funcionar meu wireless usb nele eu precisava instalar o firmware-ralink e wireless-tools mas baixando os debs e levando até ele sempre dava errode dependencias "lib" e com esse reempacotamento eu consegui instalar os aplicativos de boa e consegui fazer funcionar a wireless! hehehe

o repositório funcionou direitinho e aproveitei e já instalei os drivers nvidia e outras coisa.


mais uma vez, Valeu.

[16] Comentário enviado por removido em 27/04/2011 - 17:42h

@FábioFarias,

obrigado pelo comentário caro colega, um abraço!

@brunotec,

beleza cara, que bom que funcionou.

[17] Comentário enviado por removido em 27/04/2011 - 17:50h


ADENDO AO ARTIGO:


sempre que novos pacotes forem adicionados ou excluídos do repositório local é recomendável que se faça:

$ cd caminho-da-pasta ### no meu caso /opt/packages

$ sudo dpkg-scanpackages . /dev/null > Packages

ou

$ sudo dpkg-scanpackages . /dev/null | sudo gzip -9c > Packages.gz

$ sudo apt-get update


peço desculpas por ter esquecido esse detalhe pois só atentei a isso quando baixei os pacotes do Emerald para Debian e os adicionei no repo local, mas não rodei os passos acima.

* sobre o Emerald para Debian e derivados:

http://www.vivaolinux.com.br/screenshot/Xfce-XFCE+Compix+Emerald/

[18] Comentário enviado por removido em 05/05/2011 - 16:19h

gostei,so ficaria melhor com algo parecido com o um script para reinstalar todos os pacotes .

[19] Comentário enviado por noctuae em 06/05/2011 - 13:35h

Ta aparecendo isso em todos os pacotes processados...

dpkg-deb: building package `amsn' in `./amsn_0.98.4-0ubuntu1_amd64.deb'.
dpkg-deb: warning: './dpkg-repack-3271/DEBIAN/control' contains user-defined field 'Original-Maintainer'
dpkg-deb: warning: ignoring 1 warning about the control file(s)

Porque será...

[20] Comentário enviado por noctuae em 06/05/2011 - 13:40h

Outra coisa

Eu to com problemas com a minha placa de video , sera que na reinstalação destes pacotes no sistema zerado no mesmo PC nao vou recolocar o problema de novo...

[21] Comentário enviado por removido em 23/05/2011 - 09:07h

@ noctuae ,tive o mesmo problema,esse foi o segundo.
no primeiro passo da primeira vez não deu quase nenhum erro mas na hora de mover os arquivos para uma pasta percebi que os pacotes eram menores que o original,na hora de criar repositório deu erro(por alguma informação errada no pacote).
O que deve dar esses erros nos arquivos de controle do *.deb ?

[22] Comentário enviado por removido em 23/05/2011 - 20:08h

desculpa aí galera por não ter visto esses últimos comentários.

em relação ao arquivo 'control' são apenas warnings, que não influenciaram no tamanho dos pacotes.

sobre o tamanho dos pacotes uma possível causa seria o 'localepurge' que remove todo e qualquer locale que não esteja definido (marcado) em /etc/locale.nopurge, isso influenciará no tamanho do pacote com certeza.

até parei de usá-lo, pois como uso o debdelta para diminuir o tamanho dos pacotes baixados durante a atualização do sistema, se o localepurge estiver instalado os deltas não são aplicados.

um abraço!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts