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:
- http://archlinux-br.org/vabs/
- http://blogs.codecommunity.org/mindbending/usando-o-vabs-para-instalar-o-wine-1-3-24/
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
Realmente é um código bem simples, mas a ideia é poderosa!
Link | Comentário postado em 3/08/2011
Verdade Magnun. Vamos deixar para complicar o que precisa ser complicado! :)
Link | Comentário postado em 3/08/2011
Show de bola! Já consigo fazer o downgrade do gnome3? ^^
Link | Comentário postado em 3/08/2011
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!
Link | Comentário postado em 3/08/2011
Estevão, muito bom mesmo cara ! Script prático e completo ! Achei muito bom seu trabalho !
Parabéns !
Link | Comentário postado em 3/08/2011
Valeu Sérgio! Um abraço cara! :)
Link | Comentário postado em 3/08/2011
os apuros que pessoas passam quando dao upgrade e quebra o sistema foi solucionado ! é só procurar o vabs
otimo trabalho estevão!
Link | Comentário postado em 4/08/2011
Grande Lucas! Espero que vABS ajude bastante nesse sentido… eu mesmo já fui “salvo” por ele algumas vezes :)
Um abraço!
Link | Comentário postado em 4/08/2011
Muito interessante como um script simples pode ser tão funcional.
Show de bola, Estêvão.
Link | Comentário postado em 4/08/2011
É 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!
Link | Comentário postado em 4/08/2011