Port upgrading - my way

Joshua Tinnin krinklyfig at spymac.com
Sat Sep 25 00:04:54 PDT 2004

On Friday 24 September 2004 03:55 pm, "W. D." <WD at us-webmasters.com> wrote:
> OK, how about adding a cron job by root like this?
> (Line will wrap.  Everything between '===' on one line)
> ==========================================================
> 15 3 * * * /usr/local/bin/cvsup -h cvsup7.FreeBSD.org /usr/share/examples/cvsup/ports-supfile && portsdb -Uu && pkgdb -fu && cd /usr/ports && make index
> ==========================================================
> Then in the morning running:
> portversion -l "<"
> Would this automate things without causing problems?
> Any other safe ways to automate the process?

I run a script in a cron job every day (I changed the name of the user
in the script to username - just use whatever path points to your ports 
supfile). I am new at scripting, so the out to /dev/null on every 
command might be redundant or unnecessary, and some of it probably
isn't coded efficiently, but it works. Also, I still use portindex, 
which has been removed from ports, but the script can easily be 
modified to use portsdb -Uu. The script also depends on fastest_cvsup 
to pick the fastest server (/usr/ports/sysutils/fastest_cvsup).

Here's root's crontab:

# mail any output to username, no matter whose crontab this is
# run 4am, every day
1       4       *       *       *       /bin/sh /home/username/supfiles/sup > /var/log/crontab.log 2&>1

Here's the script:

# modified from script found:
# http://www.freebsdforums.org/forums/showthread.php?s=&threadid=1162
# posted by ajr
TODAY=$(date +"%d-%m-%y")
touch /var/log/supscript-$TODAY
SERVER=`/usr/local/bin/fastest_cvsup -q -c us`

if [ "${SERVER}" != "" ]; then
        # update ports, for cvsup-without-gui
        /usr/local/bin/cvsup -L 2 -h $SERVER /home/username/supfiles/ports-supfile 2>&1 | tee -a /var/log/supscript-$TODAY > /dev/null

        # update /usr/ports/INDEX and create INDEX.db; machines with lots
        # of RAM (>64Mb) and swap can use 'portsdb -Uu' as one command, 
 # but portindex is faster
        # !!! portindex is no longer in ports
        /usr/local/bin/portindex 2>&1 | tee -a /var/log/supscript-$TODAY > /dev/null && /usr/local/sbin/portsdb -u 2>&1 | tee -a /var/log/supscript-$TODAY > /dev/null

        # check to see if we need any ports upgrading
        BODY=`/usr/local/sbin/portversion -v | grep needs`

        if [ "${BODY}" != "" ]; then
                echo "$BODY" | mail -s "Ports that need upgrading" username | tee -a /var/log/supscript-$TODAY > /dev/null

        # clean out /usr/ports/*/*/work and any outdated distfiles
        # prefer to run this manually
        # /usr/local/sbin/portsclean -CD 2>&1 | tee -a /var/log/supscript-$TODAY > /dev/null

Here's my ports-supfile:

#*default host=cvsup10.freebsd.org
# sup script uses output of fastest-cvsup to determine host
*default base=/usr/local/etc/cvsup
*default prefix=/usr
*default release=cvs tag=.
*default delete use-rel-suffix
*default compress

I get two emails every day, one of which is the output of the the cron 
job, and the other is a verbose list of ports which have newer versions 
available. Everything is logged to /var/log/supscript-$TODAY (date on
the end in dd-mm-yy). I run portupgrade manually, as I want to be able 
to choose what to upgrade first (and, depending on the changes, it 
might not be necessary to upgrade at all).

- jt

More information about the freebsd-questions mailing list