You are not logged in.
hi archer's
first .. i want to say that i'am very beginner with bash and also with english .. so sorry if my script is not perfect
I don't know if anyone already speak about this for archlinux but frugalware use a text web navigator to find the latest release of a package. I juste write a litle script for this idea.
I have some PKGBUILD in my local repo , and i really don't like to check every week if a new release is out. But it will be very usefull like for AUR to send mail automatiquely to the maintener of a PKGBUILD if it need to be updated.
So i had a new line in my PKGBUILD like this :
exemple for tuxracer :
MAJ='elinks -dump "http://tuxracer.sourceforge.net/download.html" | grep tuxracer-.*.tar.gz | sed -n "s/.*tuxracer-(.*).tar.gz.*/1/; 1 p"'
the $MAJ value is :
[root@geekitus geekitus]# lynx -dump "http://tuxracer.sourceforge.net/download.html" | grep tuxracer-.*.tar.gz | sed -n "s/.*tuxracer-(.*).tar.gz.*/1/; 1 p"
0.61
Ok, so $MAJ is the latest release number of the package ...
exemples for some others PKGBUILD :
for t1utils :
[/[root@geekitus geekitus]# lynx -dump http://www.lcdf.org/type | grep "t1utils-.*.tar.gz" | tail -n 1 | sed -e "s/.*-(.*).tar.gz.*/1/"
1.32
for ppracer :
[geekitus@geekitus Mail]$ lynx -dump "http://projects.planetpenguin.de/racer/downloads.php" | grep "ppracer-.*.tar.bz2" | tail -n 1 | sed "s/.*ppracer-(.*).tar.bz2.*/1/"
0.3.1
Pour postgresql :
[geekitus@geekitus Mail]$ wget --passive-ftp -O - -q ftp://ftp.postgresql.org/pub/source/|grep '.[0-9]/</a> $'|sed -n 's|.*v([0-9.]*)/</a> $|1|;$ p'
8.0.3
After i just create a very litle script (with my bad bash level) wich read the $pkgver= and $MAJ and wich compares their value.
So this script could be launched with crond in the night or i could be send a mail at the package maintener for exemple.
Results of the script : (the log file)
exemple with the mode "log all" :
(i had some colors , i like the color ! )
***********************************************************************************
check on :dimanche mai 08, 2005 at 05:27:44 CEST
***********************************************************************************
the log file exist OK
check of amarok :
---------------------
pkgver in the PKGBUILD : 1.2.3
latest release : 1.2.3
pkgver of the amarok PKGBUILD is updated : 1.2.3
check of amarok2 :
---------------------
pkgver in the PKGBUILD : 1.2.4
latest release : 1.2.3
pkgver of the amarok2 PKGBUILD is newest : 1.2.4 <-> 1.2.3
check of dillo :
---------------------
pkgver in the PKGBUILD : 0.8.3
latest release : 0.8.4
the dillo PKGBUILD need to be updated : 0.8.3 -> 0.8.4
The script :
the link :
http://perso.wanadoo.fr/cornjump/linux/ … -script.sh
preview :
#!/bin/bash
#define color :
xC1='e[0;37m' # white
xC2='e[1;32m' # green
xC3='e[1;34m' # blue
xC4='e[1;31m' # red
NC='e[0m' # end of color
#-------------------------------
# vérify the user :
#--------------------------------
if [ $UID != 0 ] ; then
echo -e "${xC4} You must be root to exec this script $NC"
exit 0
fi
# where are PKGBUILD and the file log ? :
#-------------------------------------
# directory where are the PKGBUILDs :
rep_PKGBUILD=/home/geekitus/script-MAJ-PKGBUILD #exemple /var/abs/local
# log file :
log=/var/log/check_PKGBUILD_update.log
# verbose : 0: log only the packages wich need to be updated
# 1: log all
verbose=1
# add the date of the check in the log :
#----------------------------------------
echo -e "***********************************************************************************" >> $log
echo -e "check on :`date +%A` `date +%b` `date +%d,` `date +%Y` at `date +%H:%M:%S` `date +%Z`" >> $log
echo -e "***********************************************************************************" >> $log
#test and/or create the log file :
#---------------------------------
# first : test if the log file exist :
if [ -f $log ]; then
echo -en "the log file exist n" >>$log
echo -e " ${xC2}OK$NC" >>$log
# if it don't exist, i create it :
else
echo -en "${xC4}create the log file :$NC n" >>$log
touch $log
# after i test if it was created :
if [ -f $log ]; then
echo -e " ${xC2}OK$NC" >>$log
# if not : there is an error :
else "${xC4} error creating the log file$NC n" >>$log
fi
fi
# check the pkgver and the latest package release
#------------------------------------------------
cd $rep_PKGBUILD # go in the PKGBUILD directory
for PKGBUILD in `find * | grep PKGBUILD`; # find all PKGBUILD in the $rep_PKGBUILD=
do
eval `grep pkgname= $PKGBUILD`; # find the pkgname
eval `grep pkgver= $PKGBUILD`; # find the pkgver
eval `grep MAJ $PKGBUILD`; # find the latest release
# if verbose = 1, we log all messages :
if (( $verbose == 1 )); then
echo "check of $pkgname : " >> $log
echo "---------------------" >> $log
echo "pkgver in the PKGBUILD : $pkgver" >> $log
echo "latest release : $MAJ" >> $log
# if the PKGBUILD release of the package is newest than the latest release :
if (( $((10#${pkgver//[^0-9]})) > $((10#${MAJ//[^0-9]})) )); then
echo -e "${xC3}pkgver of the $pkgname PKGBUILD is newest : $pkgver <-> $MAJ $NC n" >>$log
# if the PKGBUILD is updated :
elif (( $((10#${pkgver//[^0-9]})) == $((10#${MAJ//[^0-9]})) )); then
echo -e "${xC2}pkgver of the $pkgname PKGBUILD is updated : $pkgver $NC n" >>$log
# if the PKGBUILD need to be updated :
elif (( $((10#${pkgver//[^0-9]})) < $((10#${MAJ//[^0-9]})) )); then
echo -e "${xC4}the $pkgname PKGBUILD need to be updated : $pkgver -> $MAJ $NC n" >>$log
# if other : there is an error :
else
echo -e "${xC4}error calculating... $NC n" >>$log
fi
fi
# if we want to log only the package wich need to be updated :
# if verbose = 0 , we log only PKGBUILD we need to be updated
if (( $verbose == '0' )); then
if (( $((10#${pkgver//[^0-9]})) < $((10#${MAJ//[^0-9]})) )); then
echo -e "${xC4}the $pkgname PKGBUILD need to be updated : $pkgver -> $MAJ $NC n" >>$log
fi
fi
unset MAJ
done
Offline
Man, I can't wait to try it out! Doh, where's my PuTTY so I can give it a try right away!
Very nice effort.
A bus station is where a bus stops.
A train station is where a train stops.
On my desk I have a workstation.
Offline
Well, it seems to work: there was a result log in /var/log and all my PKGBUILDs seem up to date. I haven't verified so far tho.
I also have a feature request: after running the script it would be nice to get a little output, something like "go check /var/log/check_PKGBUILD_update.log" .
Maybe it would be cool to use the output layout pacman uses, to give the script the Arch-feel. But that's of course not important right now.
A bus station is where a bus stops.
A train station is where a train stops.
On my desk I have a workstation.
Offline
I've got some bad news: there seems to be a newer version for KRename (3.0.4) but your script reported my version (3.0.3) to be the newest. In your defense, version 3.0.3 is still shown on the website.
[edit]
Other package incorrectly reported to be up to date: Leafnode.
[/edit]
A bus station is where a bus stops.
A train station is where a train stops.
On my desk I have a workstation.
Offline
oh, sorry , i missing to explain something :
the line MAJ= can change for each packages .
Exemple for your package :
lynx -dump "http://www.krename.net/Stable.6.0.html" |grep "krename-.*.tar.bz2" | tail -n 1 | sed -e "s/.*krename-(.*).tar.bz2.*/1/"
3.0.4
Now with the good line it will report the good released
the MAJ line are very often the same or practically the same. Just need a litle "trainning" i think
Offline
I think it's a very origninal idee!
One question out of curiosity, why do you use
lynx -dump | ...
isn't this the same as
wget <file> && cat <file> | ...
?
Cheers,
David
Offline
Hate to break it to you, but our buddies over at http://frugalware.org/ came up with this. Frugalware is an Arch-based distro, and I noticed several months ago that they had this [pretty much exact] mechanism in use.
The suggestion box only accepts patches.
Offline
Hate to break it to you, but our buddies over at http://frugalware.org/ came up with this. Frugalware is an Arch-based distro, and I noticed several months ago that they had this [pretty much exact] mechanism in use.
Arf, i write my first post too quickly ,
My first post for this script was written on the archlinuxfr forum : http://forums.archlinuxfr.org/viewtopic.php?p=1587#1587
(I just research a system to help maintening my PKGBUILD on archlinuxfr.)
On this post, i wrote clearly that i found this idea in frugalware and i just wrote a script to use this idea. I write english with a lot of more difficulty than french and it's true that i should have say ( like on the french forum) that frugalware use this système and i only write a script to use this.
Really sorry for this missing, :oops: (but i didn't thing bad )
I correct this now
Offline
Don't feel bad, I didn't read very carefully, and I didn't mean to accuse, just mention that I've seen it somewhere before, heh.
The suggestion box only accepts patches.
Offline
Don't feel bad, I didn't read very carefully, and I didn't mean to accuse, just mention that I've seen it somewhere before, heh.
no problems
#*******************************************************
An other solution (nore easy to use but not perfect) will be to get the download internet page of a package, calculate the md5sum, and if the md5sum is different , then, mail the maintener .
So the PKGBUILD will contain the url of the download page and a md5sum of this page. The script will get the download page and calculate the md5sum, if it's diffents then it could send a mail to the package maintener.
In some case this is not perfect, but the download page of a package don't change very often.
What do you think about this ?
Offline
wouldn't it be better to pass the pkgname and wildcards to MAJ with a command line option maybe
Offline
wouldn't it be better to pass the pkgname and wildcards to MAJ with a command line option maybe
oh yes, but i'm not very good in bash (i write my first bash script four weeks ago ) .. so if anyone want to continue/modify/ or add some new functions in the script i will be very happy because i think that it's a really good idea and usefull to use it (like for mailling mainteners automatically in AUR).
just one question : how do the mainteners of archlinux (for current and extra ) to know when a new release of a package is out for the 2500 packages !! ? (i think that all morning they don't search for all packages if a new release is out )
Offline
we have to tell them - it's a good system - except when a packge is flagged out of date for about 4 releases then you have to submit a bug report
Offline
oh, sorry , i missing to explain something :
the line MAJ= can change for each packages .
Exemple for your package :
lynx -dump "http://www.krename.net/Stable.6.0.html" |grep "krename-.*.tar.bz2" | tail -n 1 | sed -e "s/.*krename-(.*).tar.bz2.*/1/" 3.0.4
Now with the good line it will report the good released
the MAJ line are very often the same or practically the same. Just need a litle "trainning" i think
So, worst case scenario, I'd have to change the MAJ line for each package?
I'll look into it better later: I'm at home on a Windows laptop right now. :cry:
A bus station is where a bus stops.
A train station is where a train stops.
On my desk I have a workstation.
Offline