Exemplo de shell script para criar imagem de disco de cache do APT
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"`
echo "Pode fazer o favor de atualizar seu sistema?[y/N]"
read ATUALIZAR
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
echo "Excluir pacotes de versões antigas?[y/N]"
read EXCLUIRANTIGA
if [ "$ATUALIZAR" == "y" ]
then
apt-get update
apt-get dist-upgrade -y
apt-get autoremove -y
fi
if [ "$BAIXARTODOS" == "y" ]
then
for package in `dpkg --get-selections | grep install | cut -f 1`
do
apt-get install $package -d
done
fi
if [ "$EXCLUIRANTIGA" == "y" ]
then
apt-get autoclean
fi
echo "Copiando pacotes..."
mkdir packages
cp -v /var/cache/apt/archives/*.deb packages/
echo "Pacotes copiados!"
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
echo "Dividindo os pacotes em volumes"
dirsplit -s $TAMANHO -m -p cache_ packages/
rm -r packages/
echo "Pacotes divididos em volumes!"
i=0
#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 > 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" > 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" > 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