Todos os usuários linux que algum dia não tiveram conexão com a internet (ou que ainda hoje não têm) já se perguntaram: como eu faço pra instalar programas?
É notória a dificuldade de instalação de programas em máquinas offline que utilizam Linux. Alguns recomendam o aptoncd. Mas ele só é útil se dispomos de uma segunda máquina Linux com conexão. E se dispusermos somente de uma lanhouse com windows pra acessar a internet? o aptoncd é inútil. Se tivermos a sorte de ter um amigo que também use Ubuntu, ele pode baixar os pacotes e usar o aptoncd.
Contudo, suponhamos o seguinte cenário. Nós queremos instalar o programa XYZ que no total tem 10 dependências (incluindo quaisquer dependências de dependências). Nosso amigo limpa seu cache com grande frequência e por coincidência ele já tem algumas das dependências do programa XYZ instaladas.
Ao pedirmos para que ele baixe os pacotes e gere um disco com o aptoncd, o apt-get vai baixar o program XYZ e as dependências ausentes no sistema de nosso amigo. O apt-get não vai baixar de novo uma dependência que já se encontra instalada no sistema.
Nosso amigo então vai usar o aptoncd e nos mandar os pacotes. Ao adicionar o cd como repositório e tentar instalar o programa XYZ, irão faltar dependências. O único jeito seguro de ter todo o necessário seria se o nosso colega instalasse novamente o Ubuntu, para então instalar o programa XYZ. Ai sim teriamos todas as dependências necessárias.
Para não precisar instalar de novo o Ubuntu, nosso amigo poderia ter feito o seguinte. Sabendo de casos como o anterior, nosso amigo costuma guardar um backup do arquivo "/var/lib/dpkg/status" exatamente como era no sistema recém instalado.
# Logo após instalar o Ubuntu
# cp /var/lib/dpkg/status /var/lib/dpkg/status_original
Ao se deparar com situações como a nossa, ele faz uma cópia de seu "/var/lib/dpkg/status", substitui o arquivo por aquele que existia no sistema recém instalado e então manda o apt-get baixar os pacotes.
# apt-get clean (pra não mandar coisas desnecessárias)
#
# mv /var/lib/dpkg/status /var/lib/dpkg/status_clone
# cp /var/lib/dpkg/status_original /var/lib/dpkg/status
# apt-get -d install programaXYZ (-d faz o apt-get baixar os pacotes sem desempacotar nem instalar nada)
# rm /var/lib/dpkg/status
# mv /var/lib/dpkg/status_clone /var/lib/dpkg/status
Dessa forma, o apt vai pensar que os únicos pacotes instalados no sistema são aqueles de um sistema recém instalado, e será impossível o apt deixar de baixar alguma dependência necessária (desde que a versão do Ubuntu presente em ambas as máquinas seja idêntica). Agora sim nosso amigo poderia usar o aptoncd para gerar um disco para nós.
Este processo funciona bem, mas ainda é necessário ter alguém que use exatamente a mesma versão do ubuntu que a de nossa máquina, e é necessário que ele, ao instalar o Ubuntu, tenha feito um backup de /var/lib/dpkg/status. Mas, e se nós dispusermos somente da infame lanhouse que só usa windows?
Para isso, existe uma solução apontada pela própria documentação do Ubuntu, no tópico "Installing packages without an Internet connection"
https://help.ubuntu.com/community/InstallingSoftwarehttps://help.ubuntu.com/community/AptGet/Offline/Repository A primeira solução é usar o keryx:
http://keryxproject.org/ A segunda é criar um repositório local com as listas de pacotes, usar o synaptic para gerar o script, e modificar as urls dos scripts após gerado, e finalmente rodá-lo em uma máquina online (ou copiar e colar os links no do script no navegador para baixar os pacotes, se não for possível rodar os scripts).
Quem quiser tentar o keryx, o link está ali em cima. Incrivelmente, eu pesquisei tanto no forum do Ubuntu em português quanto em inglês e não achei uma entrada sequer sobre o keryx. Ele é um programa muito útil, mas que ainda tem suas desvantagens (ele baixa as coisas meio devagar, ele não tem como saber o que está instalado na sua máquina, pra não baixar dependências que você já tenha, etc). Ele é escrito e Python, e pode ser instalado em um pen-drive para rodar em uma lan-house com windows, por exemplo.
Já quem quiser tentar a segunda opção, pode utilizar uns scripts escritos por mim, que automatizam o processo. As instruções e os scripts estão a seguir.