wok 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 © 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 © 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 +}