Exemplo de shell script para criar imagem de disco de cache do APT

By Geowany, 25 de junho de 2010

Pessoal! Fiz esse pequeno script que me atende muito bem para criar um disco com pacotes para instalação sem conexão com a internet. Espero que ajude quem precisa porquê 3g no PC dos outros é refresco!

#!/bin/bash
DISTRIBUICAO=`lsb_release -a 2> /dev/null | grep Distributor | cut  -f 2`
CODINOME=`lsb_release -a 2> /dev/null | grep Codename | cut  -f 2`
ARQUITETURA=`uname -a | cut -d ' ' -f 12`
DATA=`date "+%Y-%m-%d %R"`</em>
 
<em>echo "Pode fazer o favor de atualizar seu sistema?[y/N]"
read ATUALIZAR</em>
 
<em>echo "Pode ser que você tenha feito a besteira de apagar algum pacote
da cache que está instalado no sistema. Deseja baixars TODOS os pacotes
que estão instalados nesta máquina?[y/N]"
read BAIXARTODOS</em>
 
<em>echo "Excluir pacotes de versões antigas?[y/N]"
read EXCLUIRANTIGA</em>
 
<em>if [ "$ATUALIZAR" == "y" ]
then
apt-get update
apt-get dist-upgrade -y
apt-get autoremove -y
fi</em>
 
<em>if [ "$BAIXARTODOS" == "y" ]
then
for package in `dpkg &#045&#045get-selections | grep install | cut -f 1`
do
apt-get install $package -d
done
fi</em>
 
<em>if [ "$EXCLUIRANTIGA" == "y" ]
then
apt-get autoclean
fi</em>
 
<em>echo "Copiando pacotes..."
mkdir packages
cp -v /var/cache/apt/archives/*.deb packages/
echo "Pacotes copiados!"</em>
 
<em>echo "Você quer gravar o cache em CD (700Mb) ou DVD (4000Mb)? [Cd/Dvd]"
read TAMANHO
if [ "$TAMANHO" == "C" ]
then
TAMANHO=650M
fi
if [ "$TAMANHO" == "D" ]
then
TAMANHO=4400M
fi</em>
 
<em>echo "Dividindo os pacotes em volumes"
dirsplit -s $TAMANHO -m -p cache_ packages/
rm -r packages/
echo "Pacotes divididos em volumes!"</em>
 
<em>i=0</em>
 
<em>#for DISCO in `ls cache_* | grep : | cut -d ':' -f 1 `
for DISCO in `find . -iname cache_*`
do
i=$(($i+1))
echo "Criando imagem do disco $i"
cd $DISCO
touch tmp
mkdir packages
mv *.deb packages/
echo "Criando índice de pacotes..."
dpkg-scanpackages packages tmp | gzip &gt; Packages.gz
echo "Índice de pacotes criado!"
rm tmp
echo "Criando arquivo de definições do disco..."
echo "#define DISKNAME  MyRepository for $DISTRIBUICAO $CODINOME - $ARQUITETURA ($DATA)
#define TYPE  binary
#define TYPEbinary  CD$i
#define ARCH  $ARQUITETURA
#define ARCH$ARQUITETURA  CD$i
#define DISKNUM  CD$i
#define DISKNUMCD$i  CD$i
#define TOTALNUM  CD$i
#define TOTALNUMCD1  CD$i" &gt; README.diskdefines
echo "Arquivo de definições de disco criado"
echo "Criando informações do disco..."
echo "distribution: $DISTRIBUICAO
codename: $CODINOME
architecture: $ARQUITETURA
date: $DATA" &gt; disk.info
echo "Informações criadas!"
echo "Criando arquivo de imagem no formato ISO-9660..."
cd ..
mkisofs -V "$DISCO" -r -joliet-long -o $DISCO.iso $DISCO/
rm -rf $DISCO/
echo "Arquivo de imagens foi criado!"
done

16 Responses to “Exemplo de shell script para criar imagem de disco de cache do APT”

  1. Geowany disse:

    @Paulo Estou usando um ubuntu instalado por método "minimal install" só com o lxde, nem "lubuntu-desktop" foi instalado.

  2. Paulo disse:

    Estranhas essas dependencias… pra mim sò dava muita dependencia quando tentei instalar numa Lubuntu, que tem o Lxde em vez do Gnome… mas nao entendo porque na tua lista aparecem dependencias do kde…

  3. Geowany disse:

    root@camelot:/home/geowany# apt-get install aptoncd
    Lendo listas de pacotes… Pronto
    Construindo árvore de dependências
    Lendo informação de estado… Pronto
    Os pacotes extra a seguir serão instalados:
    app-install-data cdparanoia cdrdao dvd+rw-tools exiv2 gdebi-core
    gdebi-kde genisoimage gnome-doc-utils gnome-user-guide icoutils
    install-package k3b k3b-data kdebase-runtime kdebase-runtime-data
    kdelibs-bin kdelibs5 kdelibs5-data kdepimlibs-data kdepimlibs5
    kdesudo kpackagekit kubuntu-debug-installer libaa1
    libakonadiprivate1 libao2 libattica0 libaudio2
    libboost-program-options1.40.0 libcaca0 libcdparanoia0
    libclucene0ldbl libdbusmenu-qt2 libexiv2-6 libflac++6 libgif4
    libgpgme11 libical0 libiodbc2 libk3b6 libkcddb4 libmng1
    libmodplug0c2 libmpcdec3 libmusicbrainz4c2a libmysqlclient16
    libnm-glib2 libnm-util1 libpackagekit-glib2-12 libpackagekit-qt-12
    libphonon4 libplasma3 libpolkit-qt-1-0 libpth20 libqca2
    libqt4-assistant libqt4-dbus libqt4-designer libqt4-help
    libqt4-network libqt4-opengl libqt4-qt3support libqt4-script
    libqt4-scripttools libqt4-sql libqt4-sql-mysql libqt4-svg
    libqt4-test libqt4-webkit libqt4-xml libqt4-xmlpatterns libqtcore4
    libqtgui4 libraptor1 librasqal2 librdf0 libsdl1.2debian
    libsdl1.2debian-alsa libsoprano4 libspeex1 libssh-4
    libstreamanalyzer0 libstreams0 libtag1-vanilla libtag1c2a
    libtheora0 libwavpack1 libxcb-shape0 libxcb-shm0 libxcb-xv0
    libxine1 libxine1-bin libxine1-console libxine1-misc-plugins
    libxine1-x libxml2-utils libxss1 mysql-common oxygen-icon-theme
    packagekit packagekit-backend-apt phonon phonon-backend-xine
    plasma-scriptengine-javascript polkit-kde-1 python-gconf
    python-gnome2 python-gnomecanvas python-kde4 python-libxml2
    python-packagekit python-pyorbit python-qt4 python-sip
    shared-desktop-ontologies software-properties-kde soprano-daemon
    ttf-dejavu ttf-dejavu-extra update-manager-kde virtuoso-nepomuk
    wodim xsltproc xulrunner-1.9.2 yelp
    Pacotes sugeridos:
    update-notifier gdebi cdrskin cdrkit-doc libterm-readline-gnu-perl
    libterm-readline-perl-perl k3b-extrathemes k3b-i18n
    normalize-audio sox movixmaker-2 libk3b6-extracodecs vcdimager
    djvulibre-bin hspell akonadi-server nas gpgsm
    libqca2-plugin-cyrus-sasl libqca2-plugin-gnupg libqca2-plugin-ossl
    libqca2-plugin-pkcs11 libqt4-dev qt4-qtconfig raptor-utils
    redland-utils librdf-storage-postgresql librdf-storage-mysql
    librdf-storage-sqlite speex gxine xine-ui libxine1-doc libxine-doc
    libxine1-ffmpeg phonon-backend-gstreamer phonon-backend-vlc
    phonon-backend-mplayer kcm-phonon-xine python-gnome2-doc
    python-libxml2-dbg python-pyorbit-dbg python-qt4-dbg
    Os NOVOS pacotes a seguir serão instalados:
    app-install-data aptoncd cdparanoia cdrdao dvd+rw-tools exiv2
    gdebi-core gdebi-kde genisoimage gnome-doc-utils gnome-user-guide
    icoutils install-package k3b k3b-data kdebase-runtime
    kdebase-runtime-data kdelibs-bin kdelibs5 kdelibs5-data
    kdepimlibs-data kdepimlibs5 kdesudo kpackagekit
    kubuntu-debug-installer libaa1 libakonadiprivate1 libao2
    libattica0 libaudio2 libboost-program-options1.40.0 libcaca0
    libcdparanoia0 libclucene0ldbl libdbusmenu-qt2 libexiv2-6
    libflac++6 libgif4 libgpgme11 libical0 libiodbc2 libk3b6 libkcddb4
    libmng1 libmodplug0c2 libmpcdec3 libmusicbrainz4c2a
    libmysqlclient16 libnm-glib2 libnm-util1 libpackagekit-glib2-12
    libpackagekit-qt-12 libphonon4 libplasma3 libpolkit-qt-1-0
    libpth20 libqca2 libqt4-assistant libqt4-dbus libqt4-designer
    libqt4-help libqt4-network libqt4-opengl libqt4-qt3support
    libqt4-script libqt4-scripttools libqt4-sql libqt4-sql-mysql
    libqt4-svg libqt4-test libqt4-webkit libqt4-xml libqt4-xmlpatterns
    libqtcore4 libqtgui4 libraptor1 librasqal2 librdf0 libsdl1.2debian
    libsdl1.2debian-alsa libsoprano4 libspeex1 libssh-4
    libstreamanalyzer0 libstreams0 libtag1-vanilla libtag1c2a
    libtheora0 libwavpack1 libxcb-shape0 libxcb-shm0 libxcb-xv0
    libxine1 libxine1-bin libxine1-console libxine1-misc-plugins
    libxine1-x libxml2-utils libxss1 mysql-common oxygen-icon-theme
    packagekit packagekit-backend-apt phonon phonon-backend-xine
    plasma-scriptengine-javascript polkit-kde-1 python-gconf
    python-gnome2 python-gnomecanvas python-kde4 python-libxml2
    python-packagekit python-pyorbit python-qt4 python-sip
    shared-desktop-ontologies software-properties-kde soprano-daemon
    ttf-dejavu ttf-dejavu-extra update-manager-kde virtuoso-nepomuk
    wodim xsltproc xulrunner-1.9.2 yelp
    0 pacotes atualizados, 127 pacotes novos instalados, 0 a serem removidos e 0 não atualizados.
    É preciso baixar 107MB de arquivos.
    Depois desta operação, 376MB adicionais de espaço em disco serão usados.
    Você quer continuar [S/n]?
    n

  4. Geowany disse:

    @Paulo Que nada brother! Adorei a simplificação que você enviou…Em breve vou atualizar este post com essa dica que me deu!

  5. Paulo disse:

    @Geowany
    Conheço bem pouco sobre bash, sò o basico do basico… tanto que nem entendi pq disse que o $(arch) nao funcionaria…
    Sabe… è mania de principiante de querer ficar "ensinando" as poucas coisas que sabe.. rssss
    Aguardarei o tòpico.

  6. Geowany disse:

    @Paulo Obrigado pela dica de simplificação, mas a terceira linha não pode ficar mandando "arch". Com o "uname -a | cut -d ‘ ‘ -f 12" ele vai mostrar a arquitetura mesmo! Pra não ficar "igualzinho" o APTonCD, ele não gera o arquivo "Release". Espero que tenha conhecido também o comando "dirsplit" que pode muito bem ser combinado com o wodim.
    Posso até fazer um tópico adiante de como dividir uma pasta "gigante" e gravá-la em volumes de tamanhos iguais em DVD ou outro mídia qualquer.

  7. Paulo disse:

    Legal! eu usava o aptoncd, mas nao sabia fazer o mesmo pelo terminal.

    Ah, o resultado è o mesmo, mas poderia simplificar as 3 primeiras linhas:
    DISTRIBUICAO=`lsb_release -si`
    CODINOME=`lsb_release -sc`
    ARQUITETURA=`arch`

  8. Geowany disse:

    @Celso Se é iniciante, use o AptOnCD! Será bem mais fácil

  9. Celso disse:

    Oi amigão. Sou iniciante em Linux (Ubuntu). Gostei da idéia deste script. No entanto gostaria de saber como proceder para executá-lo.

  10. Geowany disse:

    @André Gondim:
    Primeiro, nem sempre to afim de usar o X.
    Segundo, o aptoncd não faz um cd "completo" baseado no que você tem instalado se você tiver executado um apt-get clean antes de tentar criar o disco.
    Terceiro, o aptoncd instalou um monte de coisa que não queria (exemplo: k3b e cacetada de biblioteca do kde, sendo que uso um lxde com aplicações em gtk).
    Quarto e ultimo (talvez): Postei o script com finalidade de estudo e aprimoramento de shell script para iniciantes, e não como uma solução definitiva para criar um cd de cache. Note que nem escrevi os procedimentos para "incluir o cd nos repositórios". E note também que postei com titulo "Exemplo de shell script .bla bla bla…" ao invés de "Troque seu APTonCD pelo meu script tosco".

  11. Greyson disse:

    Willian funciona sim.. se eu entendi bem é rodar o script numa VM né ? se for isso a resposta é sim

  12. Willian disse:

    Será que funciona em máquinas virtuais??? (VirtualBox)

  13. Willian disse:

    Olá,

    Muito bom o seu script!!!!
    Vai ajudar muito (depois que eu testar)!!! xD

    Obrigado. =D

  14. Greyson disse:

    Sim e não Andre.. este script faz coisas mais avançadas que o aptoncd inclusive é ótimo para servidores já que não roda X nele

  15. André Gondim disse:

    Não seria mais fácil usar um AptOnCD?

    Abraços!! ;)

Deixe um comentário

OfficeFolders theme by Themocracy