
Tenho um laptop e uma cópia local de vários repositórios em um disco rígido externo conectado ao meu roteador. Meu roteador fornece acesso a esses arquivos (com credenciais) como compartilhamentos samba e/ou servidor FTP.
Gostaria de configurar o apt-get para verificar esses repositórios quando estiverem disponíveis e baixar atualizações deles para acelerar o processo quando possível.
Para ser mais claro: quero que o apt-get verifique os repositórios regulares na Internet e o meu local quando meu laptop estiver conectado ao meu wifi. Se os arquivos nos repositórios externos forem mais recentes que os do meu espelho local ou se o espelho não estiver disponível, o apt-get deverá baixar os arquivos da Internet.
Responder1
Existem 4 etapas para configurar seu próprio repositório
- Instalar
dpkg-dev
- Coloque os pacotes em um diretório
- Crie um script que irá escanear os pacotes e criar um arquivo
apt-get update
que possa ler - Adicione uma linha ao
sources.list
apontar para o seu repositório
Instalardpkg-dev
Abra um terminal:
sudo apt-get install dpkg-dev
O diretório
Crie um diretório para manter seus pacotes. Para este exemplo, usaremos /usr/local/lan-repo
.
sudo mkdir -p /usr/local/lan-repo
Agora mova todos os seus pacotes para esse novo diretório.
Pacotes que já foram baixados geralmente são armazenados em seu sistema no formato /var/cache/apt/archives
. Se você instalou, apt-cacher
provavelmente terá pacotes adicionais armazenados no apt-cacher/packages
diretório.
Crie um script chamadoupdate-lan-repo
É um script de três linhas muito simples:
#! /bin/bash
cd /usr/local/lan-repo
sudo dpkg-scanpackages . /dev/null | gzip -9c > packages.gz
Copie e cole o texto acima em seu editor de texto favorito e salve-o como update-lan-repo
no formato ~/bin
. ( ~
significa o diretório inicial. Se ~/bin
ainda não existir, crie-o. O Ubuntu colocará automaticamente esse diretório em seu PATH. Isso o torna um bom lugar para colocar scripts pessoais.)
Agora vamos tornar o script executável:
chmod u+x ~/bin/update-lan-repo
Veja como o script funciona:
dpkg-scanpackages
analisa todos os pacotes em lan-repo
, e a saída é compactada e gravada no arquivo packages.gz
, que apt-get update
pode ser lido (veja abaixo uma referência que explica isso em detalhes). /dev/null
é um arquivo vazio - isto é - é uma improvisação para um arquivo de substituição que contém algumas informações adicionais sobre os pacotes, que no nosso caso não são realmente necessárias. Verdeb-override(5)
se você quiser saber mais sobre isso.
Precisamos adicionar seu repositório local ao seu arquivo sources.list
echo "deb file:/usr/local/lan-repo ./" >> /etc/apt/sources.list
e pronto.
Opção CD/DVD
Você pode armazenar o diretório que contém o arquivo .deb em um CD/DVD e usá-lo também como repositório (bom para compartilhamento entre computadores). Para usar o CD como repositório:
basta executar o comando:
sudo apt-cdrom add
usando o novo repositório.
Então sempre que você armazenar um novo pacote debian no diretório lan-repo, execute:
sudo update-lan-repo
sudo apt-get update
Agora seus pacotes locais podem ser manipulados com Synaptic, aptitude e os comandos apt: apt-get
, apt-cache
, etc. Quando você tenta instalar o apt-get, quaisquer dependências serão resolvidas para você, desde que possam ser atendidas.
Responder2
Finalmente consegui resolver isso e está funcionando muito bem, então quero compartilhar com pessoas que desejam implementar algo semelhante.
Meu primeiro problema foi que meu sistema suporta multi-arch, então os repositórios espelhados deveriam conter pacotes i386 e amd64 (não espelhava fontes) para evitar erros de download. Isto é feito em/etc/apt/mirror.listcomo este exemplo mostra:
deb-i386 http://archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
deb-amd64 http://archive.ubuntu.com/ubuntu trusty-security main restricted universe multiverse
Meucaminho_basedefinido nesse arquivo é/mnt/apt-espelhos, e executo um script que monta um disco rígido externo conectado à porta USB do meu roteador como um compartilhamento Samba (você pode ver o script aqui: como usar o apt-mirror para salvar arquivos no HDD conectado ao roteador LAN
Eu queria acessar os repositórios espelhados de outros computadores na LAN, então a outra parte da solução é adicionar as definições dos repositórios FTPno inicioem/etc/apt/sources.list. Esta configuração fazapt-getusar os repositórios FTP primeiro ao baixar arquivos e depois usar aqueles definidos em/etc/apt/sources.list.d, desde que os espelhados estejam atualizados.
Os repositórios locais são definidos assim:
deb [arch=amd64,i386] ftp://user:password@lan-resource/apt-mirrors/mirror/archive.ubuntu.com/ubuntu trusty main restricted universe multiverse
onde você substituido utilizadorcom o nome de usuário que tem acesso concedido ao servidor FTP,:senhacom sua senha, se necessário para conectar (caso contrário, remova) erecurso lancom o endereço do servidor FTP na sua LAN (decidi editar/etc/hostspara evitar a repetição do endereço IP codificado, onde defini 192.168.0.1 comoservidor lanftppara usar neste campo).