wok-current rev 3512

Add Tazbb (SliTaz Build Bot)
author Christophe Lincoln <pankso@slitaz.org>
date Sat Jun 20 04:41:53 2009 +0200 (2009-06-20)
parents fa109a7618aa
children d437ab78ac7c
files tazbb/description.txt tazbb/receipt tazbb/stuff/README tazbb/stuff/tazbb tazbb/stuff/tazbb.conf tazbb/stuff/web/conf.php tazbb/stuff/web/favicon.ico tazbb/stuff/web/index.php tazbb/stuff/web/log.php tazbb/stuff/web/pics/website/content-bl.png tazbb/stuff/web/pics/website/content-br.png tazbb/stuff/web/pics/website/content-tl.png tazbb/stuff/web/pics/website/content-tr.png tazbb/stuff/web/pics/website/header.png tazbb/stuff/web/pics/website/logo.png tazbb/stuff/web/pics/website/xhtml10.png tazbb/stuff/web/slitaz.css
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/tazbb/description.txt	Sat Jun 20 04:41:53 2009 +0200
     1.3 @@ -0,0 +1,10 @@
     1.4 +
     1.5 +SliTaz Build Bot. Tazbb is a tool to automate and test SliTaz building.
     1.6 +Please read the Cookbook documentation for more information and put your
     1.7 +on Tazz Wiki page on the Labs. The package provide tazbb script, config
     1.8 +file and the web interface.
     1.9 +
    1.10 +Tank Build Bot : http://bb.slitaz.org/
    1.11 +Tazbb Wiki     : http://labs.slitaz.org/wiki/distro/Tazbb
    1.12 +Cookbook page  : http://www.slitaz.org/en/doc/cookbook/build-bot.html
    1.13 +
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/tazbb/receipt	Sat Jun 20 04:41:53 2009 +0200
     2.3 @@ -0,0 +1,53 @@
     2.4 +# SliTaz package receipt.
     2.5 +
     2.6 +PACKAGE="tazbb"
     2.7 +VERSION="1.0"
     2.8 +CATEGORY="development"
     2.9 +SHORT_DESC="SliTaz Build bot."
    2.10 +MAINTAINER="pankso@slitaz.org"
    2.11 +DEPENDS="tazpkg tazwok mercurial slitaz-toolchain"
    2.12 +WEB_SITE="http://labs.slitaz.org/wiki/distro/Bb"
    2.13 +
    2.14 +# Rules to gen a SliTaz package suitable for Tazpkg.
    2.15 +genpkg_rules()
    2.16 +{
    2.17 +	mkdir -p \
    2.18 +		$fs/usr/bin \
    2.19 +		$fs/etc/slitaz \
    2.20 +		$fs/var/lib/tazbb \
    2.21 +		$fs/var/lib/tazbb
    2.22 +	cp stuff/tazbb $fs/usr/bin
    2.23 +	cp stuff/tazbb.conf $fs/etc/slitaz
    2.24 +	cp -a stuff/web $fs/var/lib/tazbb
    2.25 +	chmod 755 $fs/usr/bin/*
    2.26 +	chown -R root.root $fs
    2.27 +}
    2.28 +
    2.29 +post_install()
    2.30 +{
    2.31 +	# On Tank we have bb.slitaz.org virtual host in: /home/slitaz/www
    2.32 +	if [ -d $1/home/slitaz/www/bb ]; then
    2.33 +		cp -a $1/var/lib/tazbb/web $1/home/slitaz/www
    2.34 +		chown www.www $1/home/slitaz/www
    2.35 +	else
    2.36 +	mkdir -p $1/var/www/vhosts
    2.37 +	ln -s $1/var/lib/tazbb/web $1/var/www/vhosts/bb
    2.38 +cat << _EOT_
    2.39 +
    2.40 +To have Tazbb web interface on your local system you can add a vhost
    2.41 +to Lighttp (or Apache) and the hostname to /etc/hosts. Example for Lighty:
    2.42 +
    2.43 +$HTTP["host"] =~ "bb" {
    2.44 +  server.document-root = "/var/www/vhost/bb"
    2.45 +}
    2.46 +
    2.47 +Or run: browser http://localhost/vhosts/bb
    2.48 +
    2.49 +_EOT_
    2.50 +	fi
    2.51 +}
    2.52 +
    2.53 +post_remove()
    2.54 +{
    2.55 +	rm -rf /var/www/vhost/bb
    2.56 +}
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/tazbb/stuff/README	Sat Jun 20 04:41:53 2009 +0200
     3.3 @@ -0,0 +1,15 @@
     3.4 +Tazbb Build Bot
     3.5 +===============================================================================
     3.6 +
     3.7 +
     3.8 +Check the description.txt for a brief overview of Tazbb, read the Cookbook doc
     3.9 +and collaborate on the Labs.
    3.10 +
    3.11 +
    3.12 +Tank Build Bot : http://bb.slitaz.org/
    3.13 +Tazbb Wiki     : http://labs.slitaz.org/wiki/distro/Tazbb
    3.14 +Cookbook page  : http://www.slitaz.org/en/doc/cookbook/build-bot.html
    3.15 +
    3.16 +
    3.17 +===============================================================================
    3.18 +
     4.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     4.2 +++ b/tazbb/stuff/tazbb	Sat Jun 20 04:41:53 2009 +0200
     4.3 @@ -0,0 +1,504 @@
     4.4 +#!/bin/sh
     4.5 +# Tazbb - SliTaz Build Bot.
     4.6 +# System wide config file: /etc/slitaz/tazbb.conf
     4.7 +#
     4.8 +# Tazbb is a tool to automate package building, it can be run manually
     4.9 +# or via a cron job. On SliTaz build host, tazbb is run in a chroot env.
    4.10 +#
    4.11 +# (c) 2009 SliTaz GNU/Linux project - GNU gpl v3
    4.12 +#
    4.13 +
    4.14 +# Include config file or exit if no file found.
    4.15 +if [ -f "./tazbb.conf" ]; then
    4.16 +	. ./tazbb.conf
    4.17 +elif [ -f "/etc/slitaz/tazbb.conf" ]; then
    4.18 +	. /etc/slitaz/tazbb.conf
    4.19 +else
    4.20 +	echo -e "\nNo config file found: tazbb.conf...\n" && exit 0
    4.21 +fi
    4.22 +
    4.23 +# Tazbb is only for root.
    4.24 +if test $(id -u) != 0 ; then
    4.25 +   echo -e "\nYou must be root to run: `basename $0`.\n" && exit 0
    4.26 +fi
    4.27 +
    4.28 +# Let tazbb finish is work and make sure needed files exist.
    4.29 +if [ -f $LOCK_FILE ]; then
    4.30 +	case $1 in
    4.31 +		usage|list-*|*block)
    4.32 +			continue ;;
    4.33 +		*)
    4.34 +			echo -e "\nTazbb is already running and locked...\n"
    4.35 +			exit 0 ;;
    4.36 +	esac
    4.37 +else
    4.38 +	mkdir -p $DB_DIR $LOG_DIR
    4.39 +	touch $LOCK_FILE $DB_DIR/blocked
    4.40 +fi
    4.41 +
    4.42 +usage()
    4.43 +{
    4.44 +	echo -e "\nSliTaz developers and build host tool\n
    4.45 +\033[1mUsage: \033[0m `basename $0` [command] [--option]
    4.46 +\033[1mCommands: \033[0m\n
    4.47 +  usage        Print this short usage and command list.
    4.48 +  list-pkgs    List last cooked packages with date.
    4.49 +  report       Run in report mode and dont cook anything [--verbose].
    4.50 +  cook-all     Cook all missing, modified or unbuilt packages.
    4.51 +  cook-commit  Cook all packages affected by a commit in the last update.
    4.52 +  test-pkgs    Execute a test suite on all packages [--verbose].
    4.53 +  [un]block    Block or unblock a package to skip or enable building.
    4.54 +  clean-up     Remove old packages [--verbose|--dry-run].
    4.55 +  clean-log    Remove all generated build log files.\n"
    4.56 +}
    4.57 +
    4.58 +status()
    4.59 +{
    4.60 +	local CHECK=$?
    4.61 +	echo -en "\033[70G"
    4.62 +	if [ $CHECK = 0 ]; then
    4.63 +		echo "Done"
    4.64 +	else
    4.65 +		echo "Failed"
    4.66 +	fi
    4.67 +	return $CHECK
    4.68 +}
    4.69 +
    4.70 +top_summary()
    4.71 +{
    4.72 +	cat > $DB_DIR/summary << _EOT_
    4.73 +Update   : `date`
    4.74 +Revision : $NEW_REV (<a href="$HG_URL/log/$NEW_REV">changelog</a>)
    4.75 +_EOT_
    4.76 +}
    4.77 +
    4.78 +packages_summary()
    4.79 +{
    4.80 +	if ! grep -q "^Packages" $DB_DIR/summary; then
    4.81 +		cat >> $DB_DIR/summary << _EOT_
    4.82 +Packages : `ls $BUILD_WOK | wc -l` in the wok, `cat $DB_DIR/cooklist | wc -l` to cook, \
    4.83 +`cat $DB_DIR/blocked | wc -l` blocked, `cat $DB_DIR/corrupted | wc -l` corrupted
    4.84 +_EOT_
    4.85 +	fi
    4.86 +}
    4.87 +
    4.88 +packages_summary_update()
    4.89 +{
    4.90 +	sed -i s/"[0-9]* in the wok"/"`ls $BUILD_WOK | wc -l` in the wok"/ \
    4.91 +		$DB_DIR/summary
    4.92 +	sed -i s/"[0-9]* to cook"/"`cat $DB_DIR/cooklist | wc -l` to cook"/ \
    4.93 +		$DB_DIR/summary
    4.94 +	sed -i s/"[0-9]* blocked"/"`cat $DB_DIR/blocked | wc -l` blocked"/ \
    4.95 +		$DB_DIR/summary
    4.96 +	sed -i s/"[0-9]* corrupted"/"`cat $DB_DIR/corrupted | wc -l` corrupted"/ \
    4.97 +		$DB_DIR/summary
    4.98 +}
    4.99 +
   4.100 +list_packages()
   4.101 +{
   4.102 +	cd $PACKAGES_REPOSITORY
   4.103 +	ls -1t *.tazpkg | head -20 | \
   4.104 +	while read file
   4.105 +	do
   4.106 +		echo -n $(stat -c '%y' $PACKAGES_REPOSITORY/$file | cut -d. -f1)
   4.107 +		echo "   $file"
   4.108 +	done
   4.109 +}
   4.110 +
   4.111 +show_report()
   4.112 +{
   4.113 +	echo "Cooklist"
   4.114 +	echo "================================================================================"
   4.115 +	cat $DB_DIR/cooklist && echo ""
   4.116 +	echo "Blocked"
   4.117 +	echo "================================================================================"
   4.118 +	cat $DB_DIR/blocked && echo ""
   4.119 +	echo "Corrupted"
   4.120 +	echo ""
   4.121 +}
   4.122 +
   4.123 +update_wok()
   4.124 +{
   4.125 +	echo ""
   4.126 +	echo "(updating wok)" > $DB_DIR/running
   4.127 +	cd $HG_WOK
   4.128 +	LAST_REV=`hg head --template '{rev}\n'`
   4.129 +	hg pull && hg update
   4.130 +	NEW_REV=`hg head --template '{rev}\n'`
   4.131 +	# Gen a new summary and link last revision for the web interface.
   4.132 +	echo -e "\nHg wok    : $HG_WOK ($NEW_REV)"
   4.133 +	echo -e "Build wok : $BUILD_WOK ($LAST_REV)\n"
   4.134 +	top_summary
   4.135 +	# Copy Hg wok if new revision or exit to stop process since nothing
   4.136 +	# have change (--forced can be used).
   4.137 +	if [ "$NEW_REV" != "$LAST_REV" ]; then
   4.138 +		size=`du -sh $HG_WOK | awk '{ print $1 }'`
   4.139 +		echo -n "Copying Hg wok to the build wok ($size)... "
   4.140 +		cp -a $HG_WOK/* $BUILD_WOK
   4.141 +		cp -a $HG_WOK/.hg $BUILD_WOK
   4.142 +		echo -e "Done\n"
   4.143 +	else
   4.144 +		if [ "$1" = "cook-all" ] || [ "$1" = "cook-commit" ]; then
   4.145 +			if [ "$2" != "--forced" ]; then
   4.146 +				echo -e "Nothing to cook...\n"
   4.147 +				packages_summary
   4.148 +				rm -f $LOCK_FILE && exit 0
   4.149 +			fi
   4.150 +		fi
   4.151 +	fi
   4.152 +}
   4.153 +
   4.154 +# Running 'tazbb report' should not cook anything and --verbose option
   4.155 +# can be used to display more messages.
   4.156 +check_wok()
   4.157 +{
   4.158 +	# Clean up last results.
   4.159 +	rm -f $DB_DIR/cooklist && touch $DB_DIR/cooklist
   4.160 +	rm -f $DB_DIR/report && touch $DB_DIR/report
   4.161 +	rm -f $DB_DIR/unbuilt && touch $DB_DIR/unbuilt
   4.162 +	echo "Checking all files in: $HG_WOK"
   4.163 +	echo "================================================================================"
   4.164 +	echo "(checking wok)" > $DB_DIR/running
   4.165 +	for pkg in $HG_WOK/*
   4.166 +	do
   4.167 +		EXTRAVERSION=""
   4.168 +		WANTED=""
   4.169 +		. $pkg/receipt
   4.170 +		[ "$2" = "--verbose" ] && echo "Package : $PACKAGE"
   4.171 +		# Skip blocked packages.
   4.172 +		if grep -qs "^$PACKAGE$" $DB_DIR/blocked; then
   4.173 +			echo "Blocked : $PACKAGE ($VERSION)" && continue
   4.174 +		fi
   4.175 +
   4.176 +		# Bristuff hack until the receipt are improved...
   4.177 +		#[ "$VERSION" = "bristuff" ] && VERSION=`get_version`
   4.178 +		if [ "$VERSION" = "bristuff" ]; then
   4.179 +			. $BUILD_WOK/$PACKAGE/taz/*/receipt
   4.180 +		fi
   4.181 +
   4.182 +		# First check if package exit. Package naming _must_ be in the form of:
   4.183 +		# $PACKAGE-$VERSION or $PACKAGE-${VERSION}$EXTRAVERSION (Kernel string).
   4.184 +		if [ ! -f $PACKAGES_REPOSITORY/$PACKAGE-$VERSION.tazpkg ]; then
   4.185 +			[ -z "$EXTRAVERSION" ] && EXTRAVERSION="_$KERNEL"
   4.186 +			if [ ! -f $PACKAGES_REPOSITORY/$PACKAGE-${VERSION}$EXTRAVERSION.tazpkg ]; then
   4.187 +				[ "$1" = "report" ] && echo "Missing : $PACKAGE ($VERSION)"
   4.188 +				echo "Missing : $PACKAGE ($VERSION)" >> $DB_DIR/report
   4.189 +				echo "$PACKAGE" >> $DB_DIR/cooklist
   4.190 +			fi
   4.191 +		else
   4.192 +			# Check if package is up-to-date.
   4.193 +			PKG_DATE=`date -u -r $PACKAGES_REPOSITORY/$PACKAGE-${VERSION}${EXTRAVERSION}.tazpkg '+%m%d%H%M%Y'`
   4.194 +			for file in `find $pkg -type f`
   4.195 +			do
   4.196 +				FILE_DATE=`date -u -r $file '+%m%d%H%M%Y'`
   4.197 +				[ "$2" = "--verbose" ] && echo " -> Checking: $file"
   4.198 +				if [ "$FILE_DATE" -gt "$PKG_DATE" ] && ! grep -q $PACKAGE $DB_DIR/cooklist; then
   4.199 +					[ "$1" = "report" ] && echo "Refresh : $PACKAGE ($VERSION)"
   4.200 +					echo "Refresh : $PACKAGE ($VERSION)" >> $DB_DIR/report
   4.201 +					echo "$PACKAGE" >> $DB_DIR/cooklist
   4.202 +				fi
   4.203 +			done
   4.204 +		fi
   4.205 +		# Now check if package is built and not already in the list.
   4.206 +		if [ ! -d $BUILD_WOK/$PACKAGE/taz ] && ! grep -q $PACKAGE $DB_DIR/cooklist; then
   4.207 +			[ "$1" = "report" ] && echo "Unbuilt : $PACKAGE ($VERSION)"
   4.208 +			echo "Unbuilt : $PACKAGE ($VERSION)" >> $DB_DIR/report
   4.209 +			echo "$PACKAGE" >> $DB_DIR/cooklist
   4.210 +		fi
   4.211 +		# Rebuild unbuilt packages list with link to log file. This list
   4.212 +		# is also generated by cook_inslall to have real time stats.
   4.213 +		if [ ! -d $BUILD_WOK/$PACKAGE/taz ]; then
   4.214 +			echo "<a href=\"log.php?package=$PACKAGE\">$PACKAGE</a>" \
   4.215 +				>> $DB_DIR/unbuilt
   4.216 +		fi
   4.217 +	done
   4.218 +	packages_summary
   4.219 +}
   4.220 +
   4.221 +# Create a new cooklist and summary (dont modify report) so 'tazbb cook-commit'
   4.222 +# can cook last changes.
   4.223 +check_commit()
   4.224 +{
   4.225 +	echo "(checking commit)" > $DB_DIR/running
   4.226 +	cd $HG_WOK
   4.227 +	# Clean up last results.
   4.228 +	rm -f $DB_DIR/cooklist && touch $DB_DIR/cooklist
   4.229 +	# Get the name of modified packages by the revision range. +1 last
   4.230 +	# commit was build by the previous build.
   4.231 +	LAST_REV=$(($LAST_REV+1))
   4.232 +	echo -e "Will cook from revision $LAST_REV to $NEW_REV\n"
   4.233 +	for file in `hg log --rev=$LAST_REV:$NEW_REV --template '{files}\n'`
   4.234 +	do
   4.235 +		pkg=`echo $file | cut -d "/" -f 1`
   4.236 +		if ! grep -q ^$pkg$ $DB_DIR/cooklist; then
   4.237 +			. $pkg/receipt
   4.238 +			echo "Commit  : $PACKAGE ($VERSION)" >> $DB_DIR/report
   4.239 +			echo "$PACKAGE" >> $DB_DIR/cooklist
   4.240 +		fi
   4.241 +	done
   4.242 +	packages_summary
   4.243 +}
   4.244 +
   4.245 +# Here we cook all packages found in the cooklist.
   4.246 +cook_install()
   4.247 +{
   4.248 +	echo "" > $DB_DIR/unbuilt
   4.249 +	for pkg in `cat $DB_DIR/cooklist | sort`
   4.250 +	do
   4.251 +		EXTRAVERSION=""
   4.252 +		DEPENDS=""
   4.253 +		BUILD_DEPENDS=""
   4.254 +		SOURCE=""
   4.255 +		WANTED=""
   4.256 +		echo "(cooking <a href=\"log.php?package=$pkg\">$pkg</a>)" > $DB_DIR/running
   4.257 +		tazwok clean $pkg
   4.258 +		script -c "echo 'install' | tazwok cook $pkg" $LOG_DIR/$pkg.log
   4.259 +		# Install new package (important for new shared libs). Note
   4.260 +		# that tests are done separatly with 'test_packages' and should
   4.261 +		# be done by tazwok.
   4.262 +		if [ -f $BUILD_WOK/$pkg/taz/*/receipt ]; then
   4.263 +			. $BUILD_WOK/$pkg/taz/*/receipt
   4.264 +			echo "(installing $PACKAGE-${VERSION}$EXTRAVERSION.tazpkg)" \
   4.265 +				> $DB_DIR/running
   4.266 +			yes | tazpkg install \
   4.267 +				$PACKAGES_REPOSITORY/$PACKAGE-${VERSION}$EXTRAVERSION.tazpkg \
   4.268 +				--forced
   4.269 +		else
   4.270 +			# Link to build log.
   4.271 +			echo "<a href=\"log.php?package=$pkg\">$pkg</a>" >> \
   4.272 +				$DB_DIR/unbuilt
   4.273 +		fi
   4.274 +		# Remove package from the cooklist and empty lines for HTML <pre>.
   4.275 +		sed -i /"^$pkg$"/d $DB_DIR/cooklist
   4.276 +		sed -i '/^$/d' $DB_DIR/cooklist
   4.277 +	done
   4.278 +}
   4.279 +
   4.280 +# Remove old packages in the build wok and clean pkgs repository. The
   4.281 +# Hg wok is copied into the build wok so packages removed by hg must be
   4.282 +# removed. To remove old packages in the repository we look into the
   4.283 +# build wok and dont remove unbuilt packages. Clean-up will also remove
   4.284 +# all corrupted packages.
   4.285 +clean_up()
   4.286 +{
   4.287 +	touch $DB_DIR/removed
   4.288 +	echo -e "\nCleaning the build wok, old and corrupted packages...\n"
   4.289 +	echo "(cleaning)" > $DB_DIR/running
   4.290 +	for pkg in `ls $HG_WOK`
   4.291 +	do
   4.292 +		if [ ! -d $BUILD_WOK/$pkg ]; then
   4.293 +			case $2 in
   4.294 +				--dry-run)
   4.295 +					echo "Removing directory : $pkg" ;;
   4.296 +				--verbose)
   4.297 +					echo "Removing directory : $pkg"
   4.298 +					rm -rf $BUILD_WOK/$pkg ;;
   4.299 +				*)
   4.300 +					rm -rf $BUILD_WOK/$pkg ;;
   4.301 +			esac
   4.302 +		fi
   4.303 +	done
   4.304 +	# Build a packages list with EXTRAVERSION so we can grep into it.
   4.305 +	rm -f $DB_DIR/packaged && touch $DB_DIR/packaged
   4.306 +	for receipt in $BUILD_WOK/*/taz/*/receipt
   4.307 +	do
   4.308 +		EXTRAVERSION=""
   4.309 +		. $receipt
   4.310 +		echo "$PACKAGE-${VERSION}$EXTRAVERSION.tazpkg" >> $DB_DIR/packaged
   4.311 +	done
   4.312 +	for pkg in `cd $PACKAGES_REPOSITORY && ls *.tazpkg`
   4.313 +	do
   4.314 +		if ! grep -q "^$pkg$" $DB_DIR/packaged; then
   4.315 +			case $2 in
   4.316 +				--dry-run)
   4.317 +					echo "Removing package : $pkg" ;;
   4.318 +				--verbose)
   4.319 +					echo "Removing package : $pkg"
   4.320 +					echo "$pkg" >> $DB_DIR/removed
   4.321 +					rm -f $PACKAGES_REPOSITORY/$pkg ;;
   4.322 +				*)
   4.323 +					echo "$pkg" >> $DB_DIR/removed
   4.324 +					rm -f $PACKAGES_REPOSITORY/$pkg ;;
   4.325 +			esac
   4.326 +		fi
   4.327 +	done
   4.328 +	# Remove all corrupted packages
   4.329 +	for pkg in `cat $DB_DIR/corrupted | awk '{ print $3 }'`
   4.330 +	do
   4.331 +		case $2 in
   4.332 +			--dry-run)
   4.333 +				echo "Removing corrupted: $pkg" ;;
   4.334 +			--verbose)
   4.335 +				echo "Removing corrupted: $pkg"
   4.336 +				echo "$pkg" >> $DB_DIR/removed
   4.337 +				rm -rf $PACKAGES_REPOSITORY/$pkg ;;
   4.338 +			*)
   4.339 +				echo "$pkg" >> $DB_DIR/removed
   4.340 +				rm -rf $PACKAGES_REPOSITORY/$pkg ;;
   4.341 +		esac
   4.342 +	done
   4.343 +	echo ""
   4.344 +	# Keep the 20 last removed packages list.
   4.345 +	cat $DB_DIR/removed | tail -n 20 > /tmp/removed.tail
   4.346 +	mv -f /tmp/removed.tail $DB_DIR/removed
   4.347 +}
   4.348 +
   4.349 +blocked_urls()
   4.350 +{
   4.351 +	rm -f $DB_DIR/blocked.urls
   4.352 +	for pkg in `cat $DB_DIR/blocked`
   4.353 +	do
   4.354 +		if [ -f $LOG_DIR/$pkg.log ]; then
   4.355 +			echo "<a href=\"log.php?package=$pkg\">$pkg</a>" >> \
   4.356 +				$DB_DIR/blocked.urls
   4.357 +		else
   4.358 +			echo "$pkg" >> $DB_DIR/blocked.urls
   4.359 +		fi
   4.360 +	done
   4.361 +}
   4.362 +
   4.363 +# 4k, not a meta or a get-* package and no files = buggy package
   4.364 +test_packages()
   4.365 +{
   4.366 +	echo -e "\nTesting all packages in: $PACKAGES_REPOSITORY"
   4.367 +	echo "================================================================================"
   4.368 +	echo "(testing packages)" > $DB_DIR/running
   4.369 +	rm -f $DB_DIR/corrupted && touch $DB_DIR/corrupted
   4.370 +	for pkg in $PACKAGES_REPOSITORY/*.tazpkg
   4.371 +	do
   4.372 +		tmp=/tmp/bb-test.$$
   4.373 +		CATEGORY=""
   4.374 +		if du $pkg | grep -qw '^4' && ! echo `basename $pkg` | grep -q '^get-'; then
   4.375 +			mkdir -p $tmp && cd $tmp
   4.376 +			cpio -i receipt 2>/dev/null < $pkg
   4.377 +			. ./receipt
   4.378 +			if [ "$CATEGORY" != "meta" ]; then
   4.379 +				[ "$2" = "--verbose" ] && echo "Testing: $PACKAGE"
   4.380 +				cpio -i fs.cpio.gz 2>/dev/null < $pkg
   4.381 +				if [ ! -f fs.cpio.gz ]; then
   4.382 +					echo "No fs : `basename $pkg`"
   4.383 +					if [ -f $LOG_DIR/$PACKAGE.log ];then
   4.384 +						echo "No fs : `basename $pkg` <a href=\"log.php?package=$PACKAGE\">Log</a>" \
   4.385 +							>> $DB_DIR/corrupted
   4.386 +					else
   4.387 +						echo "No fs : `basename $pkg`" \
   4.388 +							>> $DB_DIR/corrupted
   4.389 +					fi
   4.390 +				else
   4.391 +					zcat fs.cpio.gz | cpio -id 2>/dev/null
   4.392 +					files=`find fs -type f`
   4.393 +					if [ -z "$files" ]; then
   4.394 +						echo "Empty : `basename $pkg`"
   4.395 +						if [ -f $LOG_DIR/$PACKAGE.log ]; then
   4.396 +							echo "Empty : `basename $pkg` <a href=\"log.php?package=$PACKAGE\">Log</a>" \
   4.397 +								>> $DB_DIR/corrupted
   4.398 +						else
   4.399 +							echo "No fs : `basename $pkg`" \
   4.400 +							>> $DB_DIR/corrupted
   4.401 +						fi
   4.402 +					fi
   4.403 +				fi
   4.404 +			fi
   4.405 +			cd .. && rm -rf $tmp
   4.406 +		fi
   4.407 +	done
   4.408 +	packages_summary_update
   4.409 +	echo ""
   4.410 +}
   4.411 +
   4.412 +case "$1" in
   4.413 +	list-pkgs)
   4.414 +		# List last cooked packages.
   4.415 +		list_packages ;;
   4.416 +	report)
   4.417 +		# Run in report mode. If an update is done we must cook-all to
   4.418 +		# rebuild all updated packages.
   4.419 +		[ "$2" == "--update" ] && update_wok $@ || echo ""
   4.420 +		check_wok $@
   4.421 +		test_packages $@
   4.422 +		show_report ;;
   4.423 +	cook-all)
   4.424 +		# Update wok, gen report (with cooklist), cook all packages, test,
   4.425 +		# clean, gen new report and lists.
   4.426 +		update_wok $@
   4.427 +		check_wok $@
   4.428 +		cook_install
   4.429 +		test_packages $@
   4.430 +		clean_up $@
   4.431 +		check_wok $@
   4.432 +		echo "(generating lists)" > $DB_DIR/running
   4.433 +		tazwok gen-list --text
   4.434 +		echo "" ;;
   4.435 +	cook-commit)
   4.436 +		# Cook all packages affected by the last commits in the wok.
   4.437 +		update_wok $@
   4.438 +		check_commit
   4.439 +		cook_install
   4.440 +		test_packages $@
   4.441 +		clean_up $@
   4.442 +		check_wok $@
   4.443 +		echo "(generating lists)" > $DB_DIR/running
   4.444 +		tazwok gen-list --text
   4.445 +		echo "" ;;
   4.446 +	block)
   4.447 +		# Add a pkg name to the list of blocked packages.
   4.448 +		echo ""
   4.449 +		if grep -qs "^$2$" $DB_DIR/blocked; then
   4.450 +			echo -e "$2 is already in the blocked packages list."
   4.451 +		else
   4.452 +			echo -n "Adding $2 to     : $DB_DIR/blocked... "
   4.453 +			echo "$2" >> $DB_DIR/blocked && echo "Done"
   4.454 +			if grep -q "^$2$" $DB_DIR/cooklist; then
   4.455 +				echo -n "Removing $2 from : $DB_DIR/cooklist... "
   4.456 +				sed -i /"^$2$"/d $DB_DIR/cooklist && echo "Done"
   4.457 +				packages_summary_update
   4.458 +			fi
   4.459 +		fi
   4.460 +		blocked_urls
   4.461 +		echo "" ;;
   4.462 +	unblock)
   4.463 +		# Remove a pkg name from the list of blocked packages.
   4.464 +		echo ""
   4.465 +		if grep -qs "^$2$" $DB_DIR/blocked; then
   4.466 +			echo -n "Removing $2 from : $DB_DIR/blocked... "
   4.467 +			sed -i /"^$2$"/d $DB_DIR/blocked
   4.468 +			sed -i '/^$/d' $DB_DIR/blocked && echo "Done"
   4.469 +			echo -n "Adding $2 to     : $DB_DIR/cooklist... "
   4.470 +			echo "$2" >> $DB_DIR/cooklist && echo "Done"
   4.471 +			packages_summary_update
   4.472 +		else
   4.473 +			echo -e "$2 is not in the blocked packages list."
   4.474 +		fi
   4.475 +		blocked_urls
   4.476 +		echo "" ;;
   4.477 +	test-pkgs)
   4.478 +		# Start a test suite on all builded packages.
   4.479 +		test_packages $@ ;;
   4.480 +	test-suite)
   4.481 +		# Start a test suite on all builded package and the wok using
   4.482 +		# the great 'tazwok check'.
   4.483 +		#
   4.484 +		# test_packages > $LOG_DIR/test-suite.log
   4.485 +		# tazwok check >> $LOG_DIR/test-suite.log
   4.486 +		#
   4.487 +		test_packages $@
   4.488 +		script -c "tazwok check" $LOG_DIR/test-suite.log ;;
   4.489 +	clean-up)
   4.490 +		# Remove old packages and generate new packages lists.
   4.491 +		update_wok $@
   4.492 +		clean_up $@
   4.493 +		packages_summary_update
   4.494 +		[ "$2" != "--dry-run" ] && tazwok gen-list --text ;;
   4.495 +	clean-log)
   4.496 +		logs=`ls $LOG_DIR | wc -l`
   4.497 +		echo -n "Cleaning: $LOG_DIR... "
   4.498 +		rm -rf $LOG_DIR/*
   4.499 +		echo "$logs log removed" ;;
   4.500 +	*)
   4.501 +		usage ;;
   4.502 +esac
   4.503 +
   4.504 +echo "" > $DB_DIR/running
   4.505 +rm -f $LOCK_FILE
   4.506 +
   4.507 +exit 0
     5.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     5.2 +++ b/tazbb/stuff/tazbb.conf	Sat Jun 20 04:41:53 2009 +0200
     5.3 @@ -0,0 +1,19 @@
     5.4 +# tazbb.conf - SliTaz Build Bot configuration file.
     5.5 +#
     5.6 +
     5.7 +# Wok's and packages path.
     5.8 +HG_WOK="/home/slitaz/undigest/bb/hg/wok"
     5.9 +BUILD_WOK="/home/slitaz/undigest/bb/wok"
    5.10 +PACKAGES_REPOSITORY="/home/slitaz/undigest/bb/packages"
    5.11 +
    5.12 +# Log files, database and lock file.
    5.13 +LOG_DIR="/home/slitaz/undigest/bb/log"
    5.14 +DB_DIR="/var/lib/tazbb"
    5.15 +LOCK_FILE="/var/lock/tazbb.lock"
    5.16 +
    5.17 +# Path to Hg repo and the web interface.
    5.18 +HG_URL="http://hg.slitaz.org/wok"
    5.19 +WEB_INTERFACE="/home/slitaz/www/bb"
    5.20 +
    5.21 +# Kernel for EXTRAVERSION.
    5.22 +KERNEL="2.6.29.3"
     6.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     6.2 +++ b/tazbb/stuff/web/conf.php	Sat Jun 20 04:41:53 2009 +0200
     6.3 @@ -0,0 +1,12 @@
     6.4 +<?php
     6.5 +
     6.6 +// Tazbb web interface configuration
     6.7 +
     6.8 +$chroot     = "/home/slitaz/cooking/chroot";
     6.9 +$lockfile   = "$chroot/var/lock/tazbb.lock";
    6.10 +$db_dir     = "$chroot/var/lib/tazbb";
    6.11 +$log_dir    = "$chroot/var/log/tazbb";
    6.12 +$packages   = "$chroot/home/slitaz/packages";
    6.13 +$hgurl      = "http://hg.slitaz.org/wok";
    6.14 +
    6.15 +?>
     7.1 Binary file tazbb/stuff/web/favicon.ico has changed
     8.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     8.2 +++ b/tazbb/stuff/web/index.php	Sat Jun 20 04:41:53 2009 +0200
     8.3 @@ -0,0 +1,159 @@
     8.4 +<?php
     8.5 +include("conf.php");
     8.6 +?>
     8.7 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     8.8 +    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     8.9 +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    8.10 +<head>
    8.11 +    <title>SliTaz Build Bot</title>
    8.12 +    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
    8.13 +    <meta name="description" content="Tazbb web interface" />
    8.14 +    <meta name="robots" content="index nofollow" />
    8.15 +    <link rel="shortcut icon" href="favicon.ico" />
    8.16 +    <link rel="stylesheet" type="text/css" href="slitaz.css" />
    8.17 +</head>
    8.18 +
    8.19 +<body bgcolor="#ffffff">
    8.20 +<!-- Header -->
    8.21 +<div id="header">
    8.22 +    <a name="top"></a>
    8.23 +<!-- Access -->
    8.24 +<div id="access">
    8.25 +	<a href="http://forum.slitaz.org/">Forum</a>
    8.26 +	<a href="http://wiki.slitaz.org/">Wiki</a>
    8.27 +	<a href="http://art.slitaz.org/">Art</a>
    8.28 +	<a href="http://labs.slitaz.org/">Labs</a>
    8.29 +	<a href="http://pkgs.slitaz.org/">Packages</a>
    8.30 +	<a href="http://hg.slitaz.org/">Hg</a>
    8.31 +</div>
    8.32 +    <a href="http://bb.slitaz.org/"><img id="logo"
    8.33 +    src="pics/website/logo.png" title="bb.slitaz.org" alt="bb.slitaz.org"
    8.34 +    style="border: 0px solid ; width: 200px; height: 74px;" /></a>
    8.35 +    <p id="titre">#!/bb/packages</p>
    8.36 +</div>
    8.37 +
    8.38 +<!-- Content top. -->
    8.39 +<div id="content_top">
    8.40 +<div class="top_left"></div>
    8.41 +<div class="top_right"></div>
    8.42 +</div>
    8.43 +
    8.44 +<!-- Content -->
    8.45 +<div id="content">
    8.46 +
    8.47 +<h1><font color="#3E1220">Build Bot</font></h1>
    8.48 +<h2><font color="#DF8F06">/usr/bin/tazbb</font></h2>
    8.49 +
    8.50 +<p>
    8.51 +Tazbb is <a href="http://www.slitaz.org/">SliTaz GNU/Linux</a> Build Bot,
    8.52 +it automaticaly cook and test packages commited in the wok. SliTaz
    8.53 +<a href="http://pkgs.slitaz.org/">packages</a> are cooked on the project
    8.54 +main server: code name <a href="http://tank.slitaz.org">Tank</a>. This
    8.55 +web interface give the current status of the build bot and the last report
    8.56 +about all packages modified by SliTaz contributors in the Mercurial
    8.57 +repository, aka <a href="http://hg.slitaz.org/">Hg repos</a>.
    8.58 +</p>
    8.59 +
    8.60 +<p>
    8.61 +<form action="log.php" method="get">
    8.62 +	Show cooklog: <input type="text" name="package" />
    8.63 +	<!-- <input type="submit" value="Show" /> -->
    8.64 +</form>
    8.65 +</p>
    8.66 +
    8.67 +<h3>Summary</h3>
    8.68 +<pre class="package">
    8.69 +<?php
    8.70 +
    8.71 +// Check curent status (update in real time) and display summary.
    8.72 +
    8.73 +if (file_exists($lockfile)) {
    8.74 +	echo "Status   : Running ";
    8.75 +	include("$db_dir/running");
    8.76 +}
    8.77 +else {
    8.78 +	echo "Status   : Not currently running\n";
    8.79 +}
    8.80 +include("$db_dir/summary");
    8.81 +
    8.82 +?>
    8.83 +</pre>
    8.84 +
    8.85 +<h3>Report</h3>
    8.86 +<pre class="package">
    8.87 +<?php
    8.88 +include("$db_dir/report");
    8.89 +?>
    8.90 +</pre>
    8.91 +
    8.92 +<h3>Cooklist</h3>
    8.93 +<pre class="package">
    8.94 +<?php
    8.95 +include("$db_dir/cooklist");
    8.96 +?>
    8.97 +</pre>
    8.98 +
    8.99 +<h3>Unbuilt</h3>
   8.100 +<pre class="package">
   8.101 +<?php
   8.102 +include("$db_dir/unbuilt.urls");
   8.103 +?>
   8.104 +</pre>
   8.105 +
   8.106 +<h3>Blocked</h3>
   8.107 +<pre class="package">
   8.108 +<?php
   8.109 +include("$db_dir/blocked.urls");
   8.110 +?>
   8.111 +</pre>
   8.112 +
   8.113 +<h3>Corrupted</h3>
   8.114 +<pre class="package">
   8.115 +<?php
   8.116 +include("$db_dir/corrupted");
   8.117 +?>
   8.118 +</pre>
   8.119 +
   8.120 +<h3>Last cooked packages</h3>
   8.121 +<pre class="package">
   8.122 +<?php
   8.123 +system("cd $packages && ls -1t *.tazpkg | head -20 | \
   8.124 +	while read file; do echo -n \$(stat -c '%y' $packages/\$file | \
   8.125 +	cut -d. -f1); echo '   '\$file; done"); ?>
   8.126 +</pre>
   8.127 +
   8.128 +<h3>Last removed packages</h3>
   8.129 +<pre class="package">
   8.130 +<?php
   8.131 +include("$db_dir/removed");
   8.132 +?>
   8.133 +</pre>
   8.134 +
   8.135 +<!-- End of content with round corner -->
   8.136 +</div>
   8.137 +<div id="content_bottom">
   8.138 +<div class="bottom_left"></div>
   8.139 +<div class="bottom_right"></div>
   8.140 +</div>
   8.141 +
   8.142 +<!-- Start of footer and copy notice -->
   8.143 +<div id="copy">
   8.144 +<p>
   8.145 +Copyright &copy; 2009 <a href="http://www.slitaz.org/">SliTaz</a> -
   8.146 +<a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a>
   8.147 +</p>
   8.148 +<!-- End of copy -->
   8.149 +</div>
   8.150 +
   8.151 +<!-- Bottom and logo's -->
   8.152 +<div id="bottom">
   8.153 +<p>
   8.154 +<a href="http://validator.w3.org/check?uri=referer"><img
   8.155 +   src="pics/website/xhtml10.png" alt="Valid XHTML 1.0"
   8.156 +   title="Code validé XHTML 1.0"
   8.157 +   style="width: 80px; height: 15px;" /></a>
   8.158 +</p>
   8.159 +</div>
   8.160 +
   8.161 +</body>
   8.162 +</html>
     9.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     9.2 +++ b/tazbb/stuff/web/log.php	Sat Jun 20 04:41:53 2009 +0200
     9.3 @@ -0,0 +1,101 @@
     9.4 +<?php
     9.5 +include("conf.php");
     9.6 +?>
     9.7 +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     9.8 +    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     9.9 +<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    9.10 +<head>
    9.11 +    <title>Tazbb cooklog <?php echo $_GET['package']; ?></title>
    9.12 +    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
    9.13 +    <meta name="description" content="Tazbb web interface cooklog" />
    9.14 +    <meta name="robots" content="index nofollow" />
    9.15 +    <link rel="shortcut icon" href="favicon.ico" />
    9.16 +    <link rel="stylesheet" type="text/css" href="slitaz.css" />
    9.17 +</head>
    9.18 +
    9.19 +<body bgcolor="#ffffff">
    9.20 +<!-- Header -->
    9.21 +<div id="header">
    9.22 +    <a name="top"></a>
    9.23 +<!-- Access -->
    9.24 +<div id="access">
    9.25 +	<a href="http://forum.slitaz.org/">Forum</a>
    9.26 +	<a href="http://wiki.slitaz.org/">Wiki</a>
    9.27 +	<a href="http://art.slitaz.org/">Art</a>
    9.28 +	<a href="http://labs.slitaz.org/">Labs</a>
    9.29 +	<a href="http://pkgs.slitaz.org/">Packages</a>
    9.30 +	<a href="http://hg.slitaz.org/">Hg</a>
    9.31 +</div>
    9.32 +    <a href="http://bb.slitaz.org/"><img id="logo"
    9.33 +    src="pics/website/logo.png" title="bb.slitaz.org" alt="bb.slitaz.org"
    9.34 +    style="border: 0px solid ; width: 200px; height: 74px;" /></a>
    9.35 +    <p id="titre">#!/bb/packages</p>
    9.36 +</div>
    9.37 +
    9.38 +<!-- Content top. -->
    9.39 +<div id="content_top">
    9.40 +<div class="top_left"></div>
    9.41 +<div class="top_right"></div>
    9.42 +</div>
    9.43 +
    9.44 +<!-- Content -->
    9.45 +<div id="content">
    9.46 +
    9.47 +<h1><font color="#3E1220">Build Bot</font></h1>
    9.48 +<h2><font color="#DF8F06">Cooklog</font></h2>
    9.49 +
    9.50 +<p>
    9.51 +<form action="log.php" method="get">
    9.52 +	Show cooklog: <input type="text" name="package" />
    9.53 +	<!-- <input type="submit" value="Show" /> -->
    9.54 +<?php
    9.55 +
    9.56 +if ($_GET['package']) {
    9.57 +	$pkg = $_GET["package"];
    9.58 +	if (file_exists("$log_dir/$pkg.log")) {
    9.59 +		echo " Package $pkg: ";
    9.60 +		echo '<a href="' . "log/$pkg.log" . '">Raw log</a> ' . "\n";
    9.61 +		echo '</form></p>';
    9.62 +		echo '<pre class="log">' . "\n";
    9.63 +		include("$log_dir/$pkg.log");
    9.64 +		echo '</pre>';
    9.65 +	}
    9.66 +	else {
    9.67 +		echo " No log file found for: $pkg";
    9.68 +		echo '</form></p>';
    9.69 +	}
    9.70 +}
    9.71 +else {
    9.72 +	echo '</form></p>';
    9.73 +}
    9.74 +
    9.75 +?>
    9.76 +
    9.77 +<!-- End of content with round corner -->
    9.78 +</div>
    9.79 +<div id="content_bottom">
    9.80 +<div class="bottom_left"></div>
    9.81 +<div class="bottom_right"></div>
    9.82 +</div>
    9.83 +
    9.84 +<!-- Start of footer and copy notice -->
    9.85 +<div id="copy">
    9.86 +<p>
    9.87 +Copyright &copy; 2009 <a href="http://www.slitaz.org/">SliTaz</a> -
    9.88 +<a href="http://www.gnu.org/licenses/gpl.html">GNU General Public License</a>
    9.89 +</p>
    9.90 +<!-- End of copy -->
    9.91 +</div>
    9.92 +
    9.93 +<!-- Bottom and logo's -->
    9.94 +<div id="bottom">
    9.95 +<p>
    9.96 +<a href="http://validator.w3.org/check?uri=referer"><img
    9.97 +   src="pics/website/xhtml10.png" alt="Valid XHTML 1.0"
    9.98 +   title="Code validé XHTML 1.0"
    9.99 +   style="width: 80px; height: 15px;" /></a>
   9.100 +</p>
   9.101 +</div>
   9.102 +
   9.103 +</body>
   9.104 +</html>
    10.1 Binary file tazbb/stuff/web/pics/website/content-bl.png has changed
    11.1 Binary file tazbb/stuff/web/pics/website/content-br.png has changed
    12.1 Binary file tazbb/stuff/web/pics/website/content-tl.png has changed
    13.1 Binary file tazbb/stuff/web/pics/website/content-tr.png has changed
    14.1 Binary file tazbb/stuff/web/pics/website/header.png has changed
    15.1 Binary file tazbb/stuff/web/pics/website/logo.png has changed
    16.1 Binary file tazbb/stuff/web/pics/website/xhtml10.png has changed
    17.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    17.2 +++ b/tazbb/stuff/web/slitaz.css	Sat Jun 20 04:41:53 2009 +0200
    17.3 @@ -0,0 +1,340 @@
    17.4 +/*
    17.5 +	CSS style for SliTaz GNU/Linux website
    17.6 +	www.slitaz.org - (c) 2007 Pankso
    17.7 +*/
    17.8 +
    17.9 +body {
   17.10 +	background: #222222;
   17.11 +	color: black;
   17.12 +	font: 13px sans-serif, vernada, arial;
   17.13 +	margin: 0;
   17.14 +	padding-bottom: 100%;
   17.15 +}
   17.16 +
   17.17 +/* Accessibility */
   17.18 +
   17.19 +#access {
   17.20 +	position: absolute;
   17.21 +	top: 1px;
   17.22 +	right: 6px;
   17.23 +	text-align: right;
   17.24 +	width: 100%;
   17.25 +	margin: 0;
   17.26 +	font-size: 12px;
   17.27 +	font-weight: bold;
   17.28 +}
   17.29 +
   17.30 +#access a {
   17.31 +	background: inherit;
   17.32 +	color: white;
   17.33 +	text-decoration: none;
   17.34 +	padding-left: 2px;
   17.35 +}
   17.36 +
   17.37 +#access a:hover {
   17.38 +	background: inherit;
   17.39 +	color: #222222;
   17.40 +}
   17.41 +
   17.42 +/* Header and title */
   17.43 +
   17.44 +#header {
   17.45 +	background: #f0ba08 url(pics/website/header.png) repeat-x top;
   17.46 +	color: black;
   17.47 +	width: 100%;
   17.48 +	height: 50px ;
   17.49 +	border-top: 1px solid black;
   17.50 +	border-bottom: 1px solid black;
   17.51 +	margin-bottom: 30px;
   17.52 +}
   17.53 +
   17.54 +#header form {
   17.55 +	position: absolute;
   17.56 +	top: 22px;
   17.57 +	right: 6px;
   17.58 +	background: transparent;
   17.59 +	
   17.60 +}
   17.61 +
   17.62 +#header input { 
   17.63 +	border: 1px solid #eeeeee;
   17.64 +}
   17.65 +
   17.66 +#titre {
   17.67 +	font-size: 16px;
   17.68 +	font-weight: bolder ;
   17.69 +	margin-left: 232px;
   17.70 +	margin-top: 4px;
   17.71 +	padding-top: 25px ;
   17.72 +}
   17.73 +
   17.74 +#logo {
   17.75 +	position: absolute;
   17.76 +	float: left;
   17.77 +	margin-left: 32px;
   17.78 +	margin-right: 20px;
   17.79 +	margin-top: 0px;
   17.80 +}
   17.81 +
   17.82 +/* Navigation */
   17.83 +
   17.84 +#nav {
   17.85 +	position: absolute;
   17.86 +	top: 100px;
   17.87 +	right: 6px;
   17.88 +	background: #eaeaea url(pics/website/nav-tr.png) no-repeat top right;
   17.89 +	color: black;
   17.90 +	float: right;
   17.91 +	width: 152px;
   17.92 +	line-height: 1.3em;
   17.93 +	text-align: left;
   17.94 +	font-size: 12px;
   17.95 +	font-weight: bold;
   17.96 +}
   17.97 +
   17.98 +#nav_top {
   17.99 +	background: transparent url(pics/website/nav-tl.png) no-repeat top left;
  17.100 +	height: 12px;
  17.101 +}
  17.102 +
  17.103 +#nav_bottom {
  17.104 +	background: transparent url(pics/website/nav-bl.png) no-repeat bottom left;
  17.105 +	height: 12px;
  17.106 +}
  17.107 +
  17.108 +#nav_bottom_img {
  17.109 +	background: transparent url(pics/website/nav-br.png) no-repeat bottom right;
  17.110 +	height: 12px;
  17.111 +}
  17.112 +
  17.113 +#nav ul{
  17.114 +	list-style-type: none;
  17.115 +	margin: 0px 0px 0px 6px;
  17.116 +	padding: 3px 2px 3px 2px;
  17.117 +}
  17.118 +
  17.119 +#nav li {
  17.120 +	display: inline;
  17.121 +}
  17.122 +
  17.123 +#nav a {
  17.124 +	color: #3E1220;
  17.125 +	background: inherit;
  17.126 +	display: block;
  17.127 +	padding: 0.5px;
  17.128 +	text-decoration: none;
  17.129 +}
  17.130 +
  17.131 +#nav a:hover {
  17.132 +	color: #DF8F06;
  17.133 +	text-decoration: none;
  17.134 +	display: block;
  17.135 +}
  17.136 +
  17.137 +#nav hr {
  17.138 +	margin: 2px 0px 1px 0px;
  17.139 +	border: 0px;
  17.140 +	border-top: 1px solid #BDBDBD;
  17.141 +	
  17.142 +}
  17.143 +/* Page content */
  17.144 +
  17.145 +#content, #content_bottom, #content_top {
  17.146 +	background: white;
  17.147 +	color: black;
  17.148 +	text-align: justify;
  17.149 +}
  17.150 +
  17.151 +#content_top {
  17.152 +	height: 14px;
  17.153 +	margin: 0px 100px 0px 100px;
  17.154 +}
  17.155 +
  17.156 +#content {
  17.157 +	height: auto;
  17.158 +	margin: -6px 100px 0px 100px;
  17.159 +	padding: 0px 72px 72px 72px;
  17.160 +	/*background: white;
  17.161 +	color: #333333;*/
  17.162 +}
  17.163 +
  17.164 +#content_bottom {
  17.165 +	height: 14px;
  17.166 +	margin: 0px 100px 0px 100px;
  17.167 +	/*clear: both;*/
  17.168 +}
  17.169 +
  17.170 +#content li {
  17.171 +	line-height: 1.5em;
  17.172 +	text-align: left;
  17.173 +}
  17.174 +
  17.175 +/* Legal informations */
  17.176 +
  17.177 +#copy {
  17.178 +	font-size: 11px ;
  17.179 +	text-align: center ;
  17.180 +	background: transparent;
  17.181 +	color: #a8a8a8;
  17.182 +	padding-top: 10px;
  17.183 +}
  17.184 +
  17.185 +#copy a {
  17.186 +	background: inherit;
  17.187 +	color: #a8a8a8;
  17.188 +}
  17.189 +
  17.190 +#copy a:hover {
  17.191 +	background: inherit;
  17.192 +	color: #EDEDED;
  17.193 +}
  17.194 +
  17.195 +/* Footer */
  17.196 +
  17.197 +#bottom {
  17.198 +	float: none;
  17.199 +	background: inherit;
  17.200 +	color: black;
  17.201 +	width: auto;
  17.202 +	clear: both;
  17.203 +	padding: 0;
  17.204 +	margin: 0;
  17.205 +	text-align: center;
  17.206 +	vertical-align: middle;
  17.207 +}
  17.208 +
  17.209 +/* CSS class. */
  17.210 +
  17.211 +.top_left, .top_right, .bottom_left, .bottom_right {
  17.212 +	height: 14px;
  17.213 +	width: 14px;
  17.214 +	color: white;
  17.215 +	background-color: #333333;
  17.216 +	background-repeat: no-repeat;
  17.217 +}
  17.218 +
  17.219 +.top_left {
  17.220 +	background-image: url(pics/website/content-tl.png);
  17.221 +	background-position: left top;
  17.222 +	position: absolute;
  17.223 +}
  17.224 +
  17.225 +.top_right {
  17.226 +	background-image: url(pics/website/content-tr.png);
  17.227 +	float: right;
  17.228 +}
  17.229 +
  17.230 +.bottom_left {
  17.231 +	background-image: url(pics/website/content-bl.png);
  17.232 +	position: absolute;
  17.233 +}
  17.234 +
  17.235 +.bottom_right {
  17.236 +	background-image: url(pics/website/content-br.png);
  17.237 +	float: right;
  17.238 +}
  17.239 +
  17.240 +/* HTML styles */
  17.241 +
  17.242 +h1 {
  17.243 +	color: #3E1220;
  17.244 +	background: inherit;
  17.245 +	text-align: left;
  17.246 +	margin: 0px 0px 16px -58px;
  17.247 +}
  17.248 +
  17.249 +h2 {
  17.250 +    color: #DF8F06;
  17.251 +    border-left: 10px solid #F3F3F3;
  17.252 +    padding: 4px 0px 4px 4px;
  17.253 +    margin: 0;
  17.254 +}
  17.255 +
  17.256 +h3 {
  17.257 +	font-weight: bold;
  17.258 +	color: #6c0023;
  17.259 +	background: inherit;
  17.260 +}
  17.261 +
  17.262 +a {
  17.263 +	text-decoration: underline;
  17.264 +	color: #0F314E;
  17.265 +	background: inherit;
  17.266 +}
  17.267 +
  17.268 +a:hover {
  17.269 +	text-decoration: none;
  17.270 +	color: blue;
  17.271 +	background: inherit;
  17.272 +}
  17.273 +
  17.274 +code {
  17.275 +	font-size: 12px;
  17.276 +	color: #669900;
  17.277 +	background: inherit;
  17.278 +}
  17.279 +
  17.280 +tt {
  17.281 +	color: #15EE15;
  17.282 +	background: inherit;
  17.283 +}
  17.284 +
  17.285 +img {
  17.286 +	border: 0pt none;
  17.287 +}
  17.288 +
  17.289 +fieldset {
  17.290 +	background: #eeeeee;
  17.291 +	color: black;
  17.292 +	margin-top: 25px;
  17.293 +	border: 1px solid black;
  17.294 +}
  17.295 +
  17.296 +legend {
  17.297 +	border: 1px solid black;
  17.298 +	color: #6c0023;
  17.299 +	background: #eaeaea;
  17.300 +	font-weight: bold;
  17.301 +}
  17.302 +
  17.303 +pre {
  17.304 +	padding: 5px;
  17.305 +	color: black;
  17.306 +	background: #E1E0B0;
  17.307 +}
  17.308 +
  17.309 +pre.script {
  17.310 +	padding: 10px;
  17.311 +	color: black;
  17.312 +	background: #E8E8E8;
  17.313 +	border: 1px inset #606060;
  17.314 +}
  17.315 +
  17.316 +/* Packages pages */
  17.317 +
  17.318 +.pkg_nav {
  17.319 +	border-top: 1px solid black;
  17.320 +	margin-top: 10px;
  17.321 +	padding-top: 10px;
  17.322 +}
  17.323 +
  17.324 +pre.package {
  17.325 +	padding: 0px;
  17.326 +	color: black;
  17.327 +	background: white;
  17.328 +}
  17.329 +
  17.330 +p.get {
  17.331 +	text-align: center;
  17.332 +	padding: 10px;
  17.333 +	color: black;
  17.334 +	background: #F3F3F3;
  17.335 +	border: 1px solid #DEDEDE;
  17.336 +}
  17.337 +
  17.338 +pre.log {
  17.339 +	padding: 10px;
  17.340 +	color: black;
  17.341 +	background: #eeeeee;
  17.342 +	border: 1px solid black;
  17.343 +}