vABS: veja o código e entenda como ele funciona

3/08/2011

O vABS foi criado para rodar no servidor e por isso não houve necessidade de empacotá-lo e disponibilizá-lo. Assim sendo, várias pessoas me perguntaram sobre o código, em que foi feito, como funciona, etc.

Então segue abaixo o código, que foi feito em Bash Script. Você verá que é um caso típico de quando a idéia é maior do que a implementação.

Perceba que este script é responsável pelo versionamento de diretórios e demais tarefas administrativas (ele é a parte principal do vABS), mas que além dele, existem configurações de directory listing no Apache, CSS, html, etc (que fogem do escopo deste post).

Se você ainda não conhece o vABS e não sabe para que ele serve, os links a seguir tirarão as suas dúvidas:

Por favor deixe um comentário caso você tenha alguma dúvida ou sugestão em relação ao script.  Um abraço! :)

 

#!/bin/sh
# vABS - Versioned Arch Build System
# Version - 1.0
# Estêvão Valadão - estevao@archlinux-br.org
 
##
# Constants
##
DATE=`date`
VABS_ARCH="x86_64"
WORKDIR="$HOME/vabs/vabs_x86_64"
ENABLED_REPOS=(core extra community multilib multilib-testing testing community-testing kde-unstable)
 
##
# Preparation tasks
##
 
# Running abs twice to prevent sync errors
$WORKDIR/bin/abs
$WORKDIR/bin/abs
 
# Checking if tree.md5 exists
if [ ! -f $WORKDIR/tree.md5 ]; then
  touch $WORKDIR/tree.md5
fi
 
# Creating new md5 file for the tree
cd $WORKDIR
find tree -type f -print0 | xargs -0 md5sum > tree.md5.new
 
##
# Versioning
##
 
# Checking for changes in the tree
diff $WORKDIR/tree.md5 $WORKDIR/tree.md5.new > /dev/null
 
# If files/trees are different...
if [ "$?" = 1 ]; then
 
  # Deleting trash in tree_temp (for precaution)
  rm -rf $WORKDIR/tree_temp/*
 
  # Copying files from tree to tree_temp for processing
  cp -r $WORKDIR/tree/* $WORKDIR/tree_temp
 
  for repo in ${ENABLED_REPOS[@]}
  do
 
    DIRNAMES=(`ls $WORKDIR/tree_temp/$repo | xargs`)
 
    for name in ${DIRNAMES[@]}
    do
 
      # Creating directories with first letter of given package (uppercase)
      dir_letter=`echo $name | awk '{ print substr( $0, 0, 1 ) }'`
      dir_letter=`echo $dir_letter | tr '[:lower:]' '[:upper:]'`
      mkdir -p $WORKDIR/tree_temp/$repo/$dir_letter
 
      cd $WORKDIR/tree_temp/$repo/$name
 
      # Creating PKGBUILD.tmp till "pkgver="
      while read line
      do
        echo "$line" | grep pkgrel= > /dev/null
        if [ "$?" = 0 ]; then
          echo "$line" >> PKGBUILD.tmp
          break
        else
          echo "$line" >> PKGBUILD.tmp
        fi
      done <PKGBUILD
 
      # Sourcing PKGBUILD.tmp and removing it
      source PKGBUILD.tmp
      rm PKGBUILD.tmp
 
      # Leaving just the pure version
      pkgver=${pkgver##*=}
 
      # Adding version and pkgrel to the directory name
      cd ../
      mv $name $name-$pkgver-$pkgrel
 
      # Compressing all files in a tarball
      tar -zcvf $name-$pkgver-$pkgrel/$name-$pkgver-$pkgrel.tgz $name-$pkgver-$pkgrel/* > /dev/null  
 
      # Moving directory to the correct category/letter directory
      mv $name-$pkgver-$pkgrel $dir_letter
 
    done
 
  done
 
  # Copying just new files without overwriting old ones (-n option) for directory listing in Apache
  $HOME/bin/cp -rvn $WORKDIR/tree_temp/* $HOME/vabs.archlinux-br.org/$VABS_ARCH
 
  # Renaming md5 file
  mv $WORKDIR/tree.md5.new $WORKDIR/tree.md5
 
  # Deleting files in tree_temp
  rm -rf $WORKDIR/tree_temp/*
 
  # Making git commit and pushing changes to GitHub
  cd $HOME/vabs.archlinux-br.org/$VABS_ARCH
  git add .
  git commit -m "Updated on $DATE"
  git push origin master
 
else
 
  # Removing md5 file
  rm $WORKDIR/tree.md5.new
 
fi

 

Categorizado em: Arch Linux

Acompanhe os comentários através da feed | Deixe um comentário | Trackback URL

10 comentários sobre "vABS: veja o código e entenda como ele funciona"

  1. Magnun escreveu:

    Realmente é um código bem simples, mas a ideia é poderosa!

  2. Estêvão escreveu:

    Verdade Magnun. Vamos deixar para complicar o que precisa ser complicado! :)

  3. Maycon escreveu:

    Show de bola! Já consigo fazer o downgrade do gnome3? ^^

  4. Estêvão escreveu:

    Fala Maycon, infelizmente não. O vABS começou a armazenar PKGBUILDs no dia 22/07, portanto não tem os arquivos antigos. E mesmo se tivesse acho que seria complicado fazer o downgrade do Gnome por inteiro, com certeza alguma coisa ficaria quebrada no sistema. O vABS é mais útil para downgrade de pacotes mais flexíveis e com menos dependências. Um abraço!

  5. Sérgio Berlotto escreveu:

    Estevão, muito bom mesmo cara ! Script prático e completo ! Achei muito bom seu trabalho !
    Parabéns !

  6. Estêvão escreveu:

    Valeu Sérgio! Um abraço cara! :)

  7. Lucas escreveu:

    os apuros que pessoas passam quando dao upgrade e quebra o sistema foi solucionado ! é só procurar o vabs

    otimo trabalho estevão!

  8. Estêvão escreveu:

    Grande Lucas! Espero que vABS ajude bastante nesse sentido… eu mesmo já fui “salvo” por ele algumas vezes :)

    Um abraço!

  9. Danilo Vilas Boas escreveu:

    Muito interessante como um script simples pode ser tão funcional.
    Show de bola, Estêvão.

  10. Estêvão escreveu:

    É verdade Danilo, tentei seguir ao máximo a filosofia KISS. Se você der uma olhada no código do ABS, verá que também é um código simples. Um abraço!

Deixe um comentário

 



Este site usa Wordpress com uma customização do tema openark-blog.