Oct 02 2006
Como usar o Synaptic (do Ubuntu) offline.
Como os utilizadores de Ubuntu já devem ter notado, este vem com um utilitario chamado Synaptic, para gestão de ficheiros .deb instalados (acho que o Synaptic é uma shell sobre o apt-get), podendo este ser usado sobre CDs com .deb (como os install-cds do Ubuntu, agora chamados de alternate), como de repositorios ftp (como o repositorio oficial do Ubuntu), e dizem que também é possivel sobre directórios do disco rígido (ainda não consegui)
Mas lá está, enquanto a instalação de .deb dos repositorios ftp parece algo de mágico quando o utilizador está online, poode ser uma verdadeira tortura quando sempre se esteve offline (pelo menos o meu caso em casa, e a opção de utilizar o Synaptic online por conecção dial-up chega a ser completamente inviável, ao nivel do ridiculo… (experimentem com um modem de 56k ou menos, descarregarem .deb de dezenas ou centenas de megabytes, com suas respectivas dependencias…))
A solução que encontrei: já que o Synaptic (ou o apt-get) funciona sobre uma base de dados, que pressupostamente deva ser de um formato simples (do genero txt), e que se o Synaptic reconhece CDs e ftps mais ou menos da mesma forma, parti do principio que se encontram organizados de forma similar.
No install CD do Ubuntu 6.06 (o alternate .iso que cravei da pagina do Ubuntu) encontrei os seguintes ficheiros em /media/cdrom/:
dists/dapper/main/binary-i386/Packages.gz
dists/dapper/restricted/binary-i386/Packages.gz
(estou a citar o exemplo do i386 - amd64 ou ppc deve ser qualquer coisa semelhante)
O cd não tem as pastas universe e multiverse, mas estas normalmente existem nos repositorios ftp
Procurei um mirror qualquer, e encontrei os ficheiros (escolhi o .bz2 por estarem mais comprimidos, acho que tambem se encontram sem sufixo (descomprimidos, são .txt puros), ou comprimidos em formato .gz)
- http://ubuntu.secs.oakland.edu/dists/dapper/main/binary-i386/Packages.bz2 (605kb)
- http://ubuntu.secs.oakland.edu/dists/dapper/universe/binary-i386/Packages.bz2 (2.3mb)
- http://ubuntu.secs.oakland.edu/dists/dapper/multiverse/binary-i386/Packages.bz2 (93kb)
- http://ubuntu.secs.oakland.edu/dists/dapper/restricted/binary-i386/Packages.bz2 (4.5kb)
(estes são de binarios i386 - os amd64 e ppc tambem devem andar por aí algures…)
E então descomprimi e renomeei cada ficheiro:
- packages_main.txt
- packages_universe.txt
- packages_multiverse.txt
- packages_restricted.txt
Para juntar estes 4 txt num só podemos utilizar o seguinte script:
juntar.sh:
#!/bin/sh
cat packages_main.txt > packages_dapper.txtE na consola, no directorio onde estiver este script e os 4 .txt citados acima, entramos:
cat packages_universe.txt >> packages_dapper.txt
cat packages_multiverse.txt >> packages_dapper.txt
cat packages_restricted.txt >> packages_dapper.txt
bash ./juntar.shE confirmem se aparece um ficheiro chamado packages_dapper.txt de quase 17mb, já que é este o ficheiro que deve ser criado
—(
Só para curiosidade, para quem vem do dos/windows, o script acima é equivalente ao .bat (tentei copiar da forma mais parecida para verem mais claramente as diferenças):
juntar.bat:
copy packages_main.txt packages_dapper.txt(nota: acho que o .bat acima só funciona em dos/windows - em Linux, o
copy /b packages_dapper.txt + packages_universe.txt
copy /b packages_dapper.txt + packages_multiverse.txt
copy /b packages_dapper.txt + packages_restricted.txt
comando copy é capaz de mostrar qualquer coisa como: ‘bash: copy: command
not found’)
(tanto um script como o outro pode-vos fazer jeito para juntarem fragmentos
de ficheiros em outras situações, é uma questão de verem como funcionam)
(quanto ao .bat, o utilitario para windows MasterSpliter gera por opção um
.bat semelhante)
)—a vantagem deste ficheiro .txt, mesmo tendo esses quase 17mb, é que assim como fazemos search no Synaptic e temos acesso a todas as informações da base de dados, como descrição e dependencias, tambem então poderemos fazer com um simples editor de txt como o Gedit… (e quem diz Gedit diz Notepad (que pode crashar, devido ao tamanho do ficheiro), Editpad, etc.)
E também é incrivel de como só pelo facto de termos alguma curiosidade em ir lendo este documento, ficamos a conhecer programas que de outra forma dificilmente conheceríamos, pelo menos tantos programas em tão curto espaço de tempo…
Proxima tarefa: extrair só os urls de cada .deb, tendo todos estes urls num só txt.
Lendo o ficheiro packages_dapper.txt ou outro qualquer, todos os campos da base de dados dos .deb tem sempre a mesma estructura:
- Package:
- Priority:
- Section:
- Installed-Size:
- Maintainer:
- Architecture:
- Source:
- Version:
- Depends:
- Filename:
- Size:
- MD5sum:
- Description:
- Bugs:
- Origin:
Bem, como só precisei do que estava em ‘Filename:’, fiz o seguinte scriptzinho abaixo:
AptPackageFilenameExtractor.py:
#! /usr/bin/python(o tamanho e simplicidade deste script pode ser encorajador para aqueles que queiram aprender python!
# -*- coding: latin-1 -*-
#- usage: 'python AptPackageFilenameExtractor.py package.txt > result.txt'
import os,sys
finp_st=sys.argv[1];finp_fl=open(finp_st,”r”)
while True:
text_st=finp_fl.readline()
if len(text_st)==0:break
text_st=text_st.replace(”n”,”")
if text_st[:9]==”Filename:”:
print text_st
finp_fl.close()
)
(para quem tiver curiosidade ou necessidade, tenho mais scripts em http://nitrofurano.linuxkafe.com/python )E na consola, no directorio da pasta onde escrevi este script, entrei:
python AptPackageFilenameExtractor.py packages_dapper.txt > packages_dapper_urls.txtE o resultado (packages_dapper_urls.txt) fica com cerca de 1.7mb
E por fim, uso o replace (ctrl+h) do Gedit para substituir ‘Filename: pool/’ para, por exemplo, ‘http://ubuntu.secs.oakland.edu/pool/’ (este ultimo poderia ser tb um mirror à escolha (ver fim desta mensagem), desde que acabe com ‘/pool/’ (no caso dos mirrors abaixo, ‘/pool/’ teria de ser adicionado após o url - pode fazer jeito vasculhar pelo Firefox os directorios para se perceber como estão organizados))
Ou seja, as linhas da seguinte forma:
Filename: pool/main/i/inkscape/inkscape_0.43-4ubuntu3_i386.deb
ficaram assim:
http://ubuntu.secs.oakland.edu/pool/main/i/inkscape/inkscape_0.43-4ubuntu3_i386.deb
Agora, é só uma questão de vermos quais .deb queremos, e fazemos uma lista de download (a maioria dos minimamente bons download-managers permite importar .txt com lista de url (para w32 existe DownloadAccelerator, FlashGet, etc. - para Linux acho que o WebDownloaderForX também o faz))
Tendo esta lista pronta, mas se não quisermos procurar e copiar a mão os urls que queremos (como quando precisamos descarregar mais de 100 pacotes, como costuma acontecer comigo), podemos usar um script para obtermos a mesma lista automaticamente.
Para extrairmos desta lista gerada de ficheiros .deb só aqueles que desejamos, fazemos uma lista como:
lista.txt:
libforms1Importante é certificarmos de que cada linha de texto tem só o nome de cada pacote desejado, e que não há nenhum espaço depois, ou linhas em branco antes, entre ou depois das que tem esses nomes (afinal o código abaixo é demasiado simples para dar a volta a estas situações)
libkdeedu3
libforms1
libffcall1-dev
E o script abaixo é o que vai fazer toda a triagem da lista com todos os urls do repositorio para a lista de urls final desejada, baseada no ficheiro lista.txt acima:
synapticlistextractor.py:
#! /usr/bin/python
# -*- coding: latin-1 -*-
#- Synaptic List Extractor - 0611261234 - Paulo Silva - GPL licence
#- usage: python synapticlistextractor.py list.txt urlswholesynaptic.txt > final.txt
import os,sys
finp1_st=sys.argv[1];finp1_fl=open(finp1_st,”r”);finp2_st=sys.argv[2]
while True:
text1_st=finp1_fl.readline()
if len(text1_st)==0:break
text1_st=text1_st.replace(”r”,”")
text1_st=text1_st.replace(”n”,”")
finp2_fl=open(finp2_st,”r”)
while True:
text2_st=finp2_fl.readline()
if len(text2_st)==0:break
text1_st=text1_st.replace(”r”,”")
text2_st=text2_st.replace(”n”,”")
if text2_st.find(”/”+text1_st+”_”)>-1:print text2_st;break
finp2_fl.close()
finp1_fl.close()
Teremos então numa pasta os 3 documentos necessarios: o script acima, a lista desejada, e a lista com todos os urls do repositorio, e rodamos pela consola, no mesmo directorio da pasta, com:
python synapticlistextractor.py lista.txt urlswholesynaptic.txt > listafinal.txt
E pressupostamente teremos o ficheiro listafinal.txt, bastante semelhante à lista de wget gerada pelo Synaptic.
Só encontrei um porém: acaba sempre faltando um ou outro .deb no repositorio, mesmo o oficial do Ubuntu, mesmo que estes estejam listados no package, como o caso do UAE (emulador de Amiga) ou Quake (devem haver mais .deb a faltar) - o repositorio que tenho encontrado todos os .deb que dei pela falta encontrei no mirror http://ftp.interlegis.gov.br/pub/ubuntu/archive
Ao trazer os .deb de volta para o Linux, tendo estes .deb todos dentro de uma pasta, pela consola acedemos a esta pasta, fiz:
sudo dpkg -i *.deb
E deixei andar…
Ao acabar tudo, pelo Synaptic, vi que alguns .deb foram instalados, mas outros ficaram deram por falta algumas depencencias (os nomes em oblíquo), e lá fui eu listar num txt todos os nomes destes .deb que faltam, e fui procurando cada um no ficheiro packages_dapper_urls.txt - e com a lista pronta, mais um download dos .deb que faltam, e por aí consecutivamente…
Mas também há a hipotese de descarregarmos todos os .deb de packages_dapper_urls.txt , e tudo junto deve ocupar a volta de 12gb (muito alem do limite mensal de muitos provedores de internet nacionais) - mas a vantagem é que praticamente deixa de ser necessario o acesso do Synaptic a mirrors ftp (excluindo os updates, claro…), para alem de sempre podermos ter à mão todos esses .deb em 3 dvds dos simples.
Bem, isto tudo pode parecer tarefa de loucos, principalmente no ponto de vista dos novatos, mas acaba sempre sendo melhor este procedimento a nenhum…
A vantagem é que acabei por ter uma pasta com mais de 1gb de .deb , os quais não vou ter de descarregar outra vez, na eventualidade de ter de reinstalar o Ubuntu (situações como troca de disco, alguma perda de estabilidade por alguma má configuração que eu não consiga dar a volta, utilização desastrosa em modo root ou superutilizador, ou afins…) - de certeza pode fazer muito jeito a muita gente, principalmente com a internet que temos por cá.
Bem, o que falta mesmo à pasta de .deb é um ficheiro package que pudesse ser reconhecido pelo Synaptic, e a partir desta pasta ou de parecidas, podermos criar os nossos proprios CDs de Synaptic, que não só bastaria usar só o Synaptic e deixar de usar o ’sudo dpkg -i *.deb’ na consola (se alguem souber como se faz apt para gerar o ficheiro ‘packages’, que seja reconhecido pelo Synaptic…), como esses CDs podem então passar de computador para computador, funcionar como se fosse um cd de extras, que andaria sempre junto com o CD de instalação do Ubuntu para qualquer eventualidade de termos de reinstalar o Ubuntu, ou de copiar estes cds e/ou instala-los em computadores de amigos e afins, em computadores que porventura comprariamos depois de o termos instalado no computador ‘antigo’, etc…
Sei tambem que o Synaptic (pelo menos o que vem no Ubuntu 6.06) tem o Menu->File->GeneratePackageDownloadScript e o Menu->File->AddDownloadedPackages, mas o problema é que o segundo só funciona depois de ter sido feito o primeiro, para não falar que temos de ter no Synaptic os packages destes mirrors, coisa de que não faço a minima ideia de como se faz, muito menos de como se edita e que ficheiro é que é lido pelo AddDownloadedPackages (com alguma sorte pode ser um xml algures?) - tenho me comunicado por mail com os autores do Synaptic, mas alguma coisa me diz que não vai ser nada em breve que eles tenham resolvido esta situação… (e os meus limitados conhecimentos de programação e de como funcionam o Synaptic ou Apt-get de certeza estão muito aquem daquilo que poderia ser util para eu poder ajudar-lhes…)
———-
apendice: Quanto a mirrors, no site packages do Ubuntu encontrei estes:
South America:
http://ftp.interlegis.gov.br/pub/ubuntu/archive
http://ubuntu.c3sl.ufpr.br
North America:
http://ftp.cs.umn.edu/pub/ubuntu
http://mirror.clarkson.edu/pub/distributions/ubuntu
http://ubuntu.mirrors.tds.net/ubuntu
http://itanix.rutgers.edu/ubuntu
http://www.opensourcemirrors.org/ubuntu
http://ftp.ale.org/pub/mirrors/ubuntu
http://ubuntu.secs.oakland.edu
Asia:
http://archive.ubuntu.org.cn/ubuntu
http://komo.vlsm.org/ubuntu
http://kambing.vlsm.org/ubuntu
http://ubuntu.csie.ntu.edu.tw/ubuntu
http://mirror.isp.net.au/ftp/pub/ubuntu
http://www.planetmirror.com/pub/ubuntu
Europe:
http://archive.ubuntu.com/ubuntu
http://ubuntu.uni-klu.ac.at/ubuntu
http://gd.tuwien.ac.at/opsys/linux/ubuntu/archive
http://ftp.belnet.be/pub/mirror/ubuntu.com
http://mirror.freax.be/ubuntu/archive.ubuntu.com
http://archive.ubuntu.cz/ubuntu
http://mirrors.dk.telia.net/ubuntu
http://mirrors.dotsrc.org/ubuntu
http://mir1.ovh.net/ubuntu/ubuntu
http://ftp.inf.tu-dresden.de/os/linux/dists/ubuntu
http://www.artfiles.org/ubuntu.com/archive
http://ftp.rz.tu-bs.de/pub/mirror/ubuntu-packages
http://ftp.join.uni-muenster.de/pub/mirrors/ftp.ubuntu.com/ubuntu
http://ftp.kfki.hu/linux/ubuntu
http://ubuntu.odg.cc
http://ftp.esat.net/mirrors/archive.ubuntu.com
http://ftp.heanet.ie/pub/ubuntu
http://na.mirror.garr.it/mirrors/ubuntu-archive
http://ftp.litnet.lt/pub/ubuntu
http://ubuntu.synssans.nl
http://ubuntulinux.mainseek.com/ubuntu
http://ftp.acc.umu.se/mirror/ubuntu
http://mirror.switch.ch/ftp/mirror/ubuntu
http://www.mirrorservice.org/sites/archive.ubuntu.com/ubuntu
Importante: Este artigo é destinado a instalação de .deb comuns, como os de aplicações, jogos, bibliotecas, temas, tipos de letra, documentação, exemplos, plugins, etc. - quanto aos .deb que possam afectar/alterar a configuração do sistema operativo (a ponto do Ubuntu ter de ser reinstalado, como já me aconteceu algumas vezes…), como .deb de kernel, xorg, grub/lilo, etc., ou que necessitem de configurações em especial, deve se ter obviamente o respectivo cuidado, do genero evitar fazer ’sudo dpkg -i *.deb’ numa pasta onde esses .deb estejam presentes (do genero uma pasta onde estão todos os 12gb de .deb do repositorio ftp do ubuntu, ou todos os 650mb de .deb do cd ubuntu installer alternate, ou todos os 3gb de .deb do ubuntu dvd ) - resumindo, é importante de que tenhamos uma ideia a principio do tipo de ficheiros .deb que estamos a instalar.
Autor: Nitrofurano
Relacionados










































