você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Criando Imagens de DVD do Repositório Ubuntu

Colaboração: Antonio Carlos Braga Machado

Data de Publicação: 26 de Dezembro de 2006

Todo mundo sabe que o debian disponibiliza seu repositório inteiro em imagens de dvd, e isso facilita em muito quem deseja levar para casa ou qualquer outro lugar pacote do repositório para instalação em máquinas sem internet por exemplo, partindo desse princípio sempre pensei porque a distro ubuntu não tem imagens completas do seu repositório, ela somente disponibiliza uma unica imagem de dvd do repositório principal "main", deixando os maiores repositórios universe e multiverse somente acessado opcionalmente na internet pois estes ela não dá suporte.

Requisitos

Então vamos ao que interessa, pacotes que necessitamos para criar nossas imagens:

  • Pacote debpartial
  • Pacote debpartial-mirror
  • Um HD com pelo menos 20GB para universe e multiverse e para gerar o iso, se for fazer um mirror completo será preciso 30GB livre

Construindo um mirror local

Precisamos instalar o pacote debpartial-mirror para baixar o mirror local e só assim depois poder gerar as imagens de dvd, no meu caso eu vou criar dois mirrors, o mirror dos repositórios universe e multiverse que não vem no dvd oficial, e também vou criar o mirror dos repositórios de update e security main, restricted, universe e multiverse, assim poderei sempre está gerando um dvd com atualizações constantemente.

# apt-get install debpartial-mirror

Agora é preciso modificar o arquivo /etc/debpartial-mirror.conf.

[mirror]
# Servidor mirror de origem
server=http://archive.ubuntu.com/ubuntu/

# Diretório destino do seu mirror
local_directory=/dados/ubuntu-mirror/dapper/

# Download pacotes sugeridos?
get_suggests=true

# Download pacotes recomendados?
get_recomends=true

# Download provided packages?
get_provides=true

# Qual arquitetura do download?
archs=i386

# Aqui nós especificamos a versão do repositório a ser baixando.
[dapper]
filter= universe:*:* multiverse:*:*

# Caso queria baixar tudo do repositorio comentar a linha acima e descomentar a linha abaixo:
#filter= main:*:* restricted:*:* universe:*:* multiverse:*:*

Agora para criarmos o segundo repositório das atualizações e segurança, copie o arquivo anterior original:

# cd /etc/
# cp debpartial-mirror.conf debpartial-update.conf
# vi debpartial-update.conf

Altere como abaixo, não se esquecendo de alterar o caminho do diretório do seu mirror local_directory=/dados/ubuntu-mirror/dapper-updates/, se não quando executar o comando debpartial-mirror -c /etc/debpartial-update.conf, ele irá apagar o mirror anterior.

[mirror]
# Servidor mirror de origem
server=http://archive.ubuntu.com/ubuntu/

# Diretório destino do seu mirror
local_directory=/dados/ubuntu-mirror/dapper-updates/

# Download pacotes sugeridos?
get_suggests=true

# Download pacotes recomendados?
get_recomends=true

# Download provided packages?
get_provides=true

# Qual arquitetura do download?
archs=i386

# Aqui nós especificamos a versão do repositório a ser baixando, essa é a diferença principal do mirror anterior, dapper-updates e dapper-security.

[dapper-updates]
filter= main:*:* restricted:*:* universe:*:* multiverse:*:*

[dapper-security]
filter= main:*:* restricted:*:* universe:*:* multiverse:*:*

Agora vem a parte mais demorada, mas pelo menos um consolo demora somente na primeira vez, depois ele baixa somente as alterações no mirror, é preciso uma internet banda larga, e bota banda larga nisso :).

# sudo debpartial-mirror  (aqui ele assume o arquivo default /etc/debpartial-mirror.conf)
# sudo debpartial-mirror -c /etc/debpartial-update.conf (mirror updates e security)

Criando as Imagens

Agora para este passo utilize o script abaixo, mas antes é preciso pegar um arquivo chamado debcopy que vem no pacote debpartial, copie o debcopy para o mesmo diretório do script que será criado a serguir.

# sudo apt-get install debpartial
# cp /usr/share/doc/debpartial/examples/debcopy.gz .
# gzip -d debcopy.gz

Agora crie um scrip com um nome do tipo geradvd.sh para gerar o dvd universe e multiverse. Vou explicar somente as variáveis mais importante. UBUNTU_FULL_REP -> essa variável é o caminho completo que ==Vocabulary Help== especificou ao criar o mirror.

#!/bin/bash

#############
# Variables #
#############

# Mirror of the complete local ubuntu repository (main, universe, multiverse)
UBUNTU_FULL_REP="/dados/ubuntu-mirror/dapper"

# Directory where the
ISOS_DIR="/dados/isos"

# DVD sized Repositories
#MAIN_REP_DVD="/home/ubuntu-dvd/main"
UNIVERSE_MULTIVERSE_REP_DVD="/dados/ubuntu-mirror/dapper-dvd"

####################
# End of Variables #
####################

echo Removing current dvd-sized repositories...
echo "$UNIVERSE_MULTIVERSE_REP_DVD/*"
rm -rf $UNIVERSE_MULTIVERSE_REP_DVD/*

echo
echo Building universe and multiverse...
echo

debpartial --nosource --dirprefix=ubuntu --section=universe,multiverse \
—dist=dapper-updates --size=DVD $UBUNTU_FULL_REP/ $UNIVERSE_MULTIVERSE_REP_DVD

echo
echo "Making the soft links with universe and multiverse... (debcopy -l)"
echo

i=0
for part in $UNIVERSE_MULTIVERSE_REP_DVD/*; do
echo "Linking $part..."
ruby debcopy -l $UBUNTU_FULL_REP $part
(( i++ ))

echo "#define DISKNAME  Ubuntu Universe Multiverse $i" > $part/README.diskdefines
echo "#define TYPE  binary" >> $part/README.diskdefines
echo "#define TYPEbinary  $i" >> $part/README.diskdefines
echo "#define ARCH  i386" >> $part/README.diskdefines
echo "#define ARCHi386  $i" >> $part/README.diskdefines
echo "#define DISKNUM  $i" >> $part/README.diskdefines
echo "#define DISKNUM1  $i" >> $part/README.diskdefines
echo "#define TOTALNUM  $i" >> $part/README.diskdefines
echo "#define TOTALNUM1  $i" >> $part/README.diskdefines
mkdir $part/.disk
echo "Ubuntu Universe Multiverse $i" > $part/.disk/info

echo "Building iso image: $ISOS_DIR/ubuntu-universe-multiverse-$i.iso"
mkisofs  -quiet -V "Ubuntu Universe Multiverse $i" -f -J -r -o \
$ISOS_DIR/ubuntu-universe-multiverse-$i.iso $part
done

Agora um escript com nome geradvd-update.sh igual ao anterior somente modificando a variável de caminho para o repositorio de atualizações e o nome do iso.

#!/bin/bash

#############
# Variables #
#############

# Mirror of the complete local ubuntu repository (main, universe, multiverse)
UBUNTU_FULL_REP="/dados/ubuntu-mirror/dapper-updates"

# Directory where the
ISOS_DIR="/dados/isos"

# DVD sized Repositories
UPDATES_REP_DVD="/dados/ubuntu-mirror/dapper-updates-dvd"

####################
# End of Variables #
####################

echo Removing current dvd-sized repositories...
echo "$UPDATES_REP_DVD/*"
rm -rf $UPDATES_REP_DVD/*

echo
echo Building Ubuntu Updates...
echo

debpartial --nosource --dirprefix=ubuntu --section=main,restricted,universe,multiverse --dist=dapper-updates,dapper-security --size=DVD \
$UBUNTU_FULL_REP/ $UPDATES_REP_DVD/

echo
echo "Making the soft links with Updates... (debcopy -l)"
echo

for part in $UPDATES_REP_DVD/*; do
echo "Linking $part..."
ruby debcopy -l $UBUNTU_FULL_REP $part
(( m++ ))

echo "#define DISKNAME  Ubuntu Updates Security $m" > $part/README.diskdefines
echo "#define TYPE  binary" >> $part/README.diskdefines
echo "#define TYPEbinary  $m" >> $part/README.diskdefines
echo "#define ARCH  i386" >> $part/README.diskdefines
echo "#define ARCHi386  $m" >> $part/README.diskdefines
echo "#define DISKNUM  $m" >> $part/README.diskdefines
echo "#define DISKNUM1  $m" >> $part/README.diskdefines
echo "#define TOTALNUM  $m" >> $part/README.diskdefines
echo "#define TOTALNUM1  $m" >> $part/README.diskdefines
mkdir $part/.disk
echo "Ubuntu Updates Security $m" > $part/.disk/info

echo "Building iso image: $ISOS_DIR/ubuntu-updates-security-$m.iso ..."
mkisofs  -quiet -V "Ubuntu Updates Security $m" -f -J -r -o $ISOS_DIR/ubuntu-updates-security-$m.iso $part

done

Ao executar os scripts o repositório universe e multiverse irá gerar 3 DVDS, 2 DVDS completos e um terceiro iso em torno de 400MB que pode ser gravado em cd, esses praticamente não sofrerá mais mudanças você pode gravar definitivamente.

Já o iso de update e security ficará com 1,5GB, praticamente todo dia sai atualizações para ubuntu, você pode agendar o debpartial-mirror para baixar as atualizações para seu mirror local e gerar sempre um dvd atualizado.

Deixo aqui minha experiência espero que seja util.

Documentação de referência "Building Ubuntu DVD images" em http://cargol.net/~ramon/ubuntu-dvd-en



Veja a relação completa dos artigos de Antonio Carlos Braga Machado