slitaz-dev-tools rev 1
Import tazdev from wok
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Thu Feb 24 04:02:55 2011 +0100 (2011-02-24) |
parents | 5d5a050f58bd |
children | 752977e5f5bc |
files | AUTHORS README tazdev/tazdev tazdev/tazdev.conf |
line diff
1.1 --- a/AUTHORS Thu Feb 24 03:55:38 2011 +0100 1.2 +++ b/AUTHORS Thu Feb 24 04:02:55 2011 +0100 1.3 @@ -0,0 +1,2 @@ 1.4 +Christophe Lincoln <pankso@slitaz.org> 1.5 +Pascal Bellard <pascal.bellard@slitaz.org>
2.1 --- a/README Thu Feb 24 03:55:38 2011 +0100 2.2 +++ b/README Thu Feb 24 04:02:55 2011 +0100 2.3 @@ -0,0 +1,18 @@ 2.4 +SliTaz developers tools http://www.slitaz.org/ 2.5 +=============================================================================== 2.6 + 2.7 + 2.8 +SliTaz developers and build host tools. This package provides the tazdev utility 2.9 +and tinyutils to help maintain the distribution and automate packages compilation. 2.10 +The package provides 'tazdev' and its default config file: /etc/slitaz/tazdev.conf 2.11 + 2.12 + 2.13 +Website Devel corner: http://www.slitaz.org/en/devel/ 2.14 +Mercurial repositories: http://hg.slitaz.org/ 2.15 +SliTaz Laboratories: http://labs.slitaz.org/ 2.16 +Developers wiki: http://labs.slitaz.org/wiki/distro 2.17 +Build host: http://tank.slitaz.org/ 2.18 +Build bot: http://bb.slitaz.org/ 2.19 + 2.20 + 2.21 +===============================================================================
3.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 3.2 +++ b/tazdev/tazdev Thu Feb 24 04:02:55 2011 +0100 3.3 @@ -0,0 +1,356 @@ 3.4 +#!/bin/sh 3.5 +# Tazdev - SliTaz developers and build host tool. 3.6 +# System wide config file: /etc/slitaz/tazdev.conf 3.7 +# 3.8 +# (c) 2009 SliTaz GNU/Linux - GNU gpl v3 3.9 +# 3.10 +# Authors : Christophe Lincoln (Pankso) <pankso@slitaz.org> 3.11 +# 3.12 + 3.13 +if [ -f /etc/slitaz/tazdev.conf ]; then 3.14 + . /etc/slitaz/tazdev.conf 3.15 + if [ -f $PWD/tazdev.conf ]; then 3.16 + . $PWD/tazdev.conf 3.17 + fi 3.18 +else 3.19 + echo -e "\nNo config file found in /etc/slitaz or the current dir...\n" 3.20 + exit 0 3.21 +fi 3.22 + 3.23 +usage() 3.24 +{ 3.25 + echo -e "\nSliTaz developers and build host tool\n 3.26 +\033[1mUsage: \033[0m `basename $0` [command] [user] [stable|cooking|experimental|path] 3.27 +\033[1mCommands: \033[0m\n 3.28 + usage Print this short usage and command list. 3.29 + projects-stats Display statistics about your projects (-ps). 3.30 + cmplog Log 'tazwok cmp' result (or use tazbb). 3.31 + update-wok Update Hg wok and copy it to the chroot wok. 3.32 + update-www Update SliTaz Website repo from Hg. 3.33 + chroot Mount virtual fs if needed and chroot into the build env. 3.34 + gen-chroot Generate a chroot using the last cooking base rootfs. 3.35 + clean-chroot Clean a chroot environment (skip root/ and home/). 3.36 + purge Remove obsolete packages and obsolete source tarballs. 3.37 + dry-purge Show obsolete packages and obsolete source tarballs. 3.38 + push Upload new packages to the main mirror (-p). 3.39 + dry-push Show what will be uploaded to the mirror. Does nothing (-dp). 3.40 + pull Download new packages from the main mirror. 3.41 + dry-pull Show what will be downloaded from the mirror. Does nothing. 3.42 + relpkg Archive and upload new package/project version.\n" 3.43 +} 3.44 + 3.45 +# Exit if user is not root. 3.46 +check_root() 3.47 +{ 3.48 + if test $(id -u) != 0 ; then 3.49 + echo -e "\nThis program requires being run as root.\n" 3.50 + exit 0 3.51 + fi 3.52 +} 3.53 + 3.54 +status() 3.55 +{ 3.56 + local CHECK=$? 3.57 + echo -en "\033[70G" 3.58 + if [ $CHECK = 0 ]; then 3.59 + echo "Done" 3.60 + else 3.61 + echo "Failed" 3.62 + fi 3.63 + return $CHECK 3.64 +} 3.65 + 3.66 +get_version() 3.67 +{ 3.68 + if [ "$2" = "stable" ]; then 3.69 + VERSION=stable 3.70 + SLITAZ=$STABLE 3.71 + elif [ -n "$2" ]; then 3.72 + # Undigest - custom ? 3.73 + VERSION=$2 3.74 + SLITAZ=/home/slitaz/$2 3.75 + else 3.76 + VERSION=cooking 3.77 + SLITAZ=$COOKING 3.78 + fi 3.79 + ROOTFS=$SLITAZ/chroot 3.80 + HG_WOK=$SLITAZ/wok 3.81 + BUILD_WOK=$SLITAZ/chroot/home/slitaz/wok 3.82 +} 3.83 + 3.84 +check_mirror() 3.85 +{ 3.86 + # ping -c 1 $MIRROR 3.87 + if [ -n "$2" ]; then 3.88 + USER=$2 3.89 + else 3.90 + USER=$USER 3.91 + fi 3.92 + if [ "$2" = "stable" ] || [ "$3" = "stable" ]; then 3.93 + REMOTE_DIR=$MIRROR_PKGS/stable/ 3.94 + LOCAL_DIR=$STABLE/packages/ 3.95 + elif [ "$2" = "experimental" ] || [ "$3" = "experimental" ]; then 3.96 + REMOTE_DIR=$MIRROR_PKGS/experimental/ 3.97 + LOCAL_DIR=$EXPERIMENTAL/packages/ 3.98 + else 3.99 + REMOTE_DIR=$MIRROR_PKGS/cooking/ 3.100 + LOCAL_DIR=$COOKING/packages/ 3.101 + fi 3.102 +} 3.103 + 3.104 +# Mount virtual Kernel file systems and chroot but check that nobody 3.105 +# else has done mounts 3.106 +mount_chroot() 3.107 +{ 3.108 + if [ ! -d $ROOTFS/proc/1 ]; then 3.109 + echo -n "Mounting virtual filesystems..." 3.110 + mount -t proc proc $ROOTFS/proc 3.111 + mount -t sysfs sysfs $ROOTFS/sys 3.112 + mount -t devpts devpts $ROOTFS/dev/pts 3.113 + mount -t tmpfs shm $ROOTFS/dev/shm 3.114 + status 3.115 + fi 3.116 +} 3.117 + 3.118 +# Unmount virtual Kernel file systems on exit and ensure we are the last 3.119 +# user before unmounting ! 3.120 +umount_chroot() 3.121 +{ 3.122 + # Not working. Buggy ps ? 3.123 + #sleep 6 3.124 + ps=$(ps | grep `basename $0` | grep -v grep | wc -l) 3.125 + if [ "$ps" == "1" ]; then 3.126 + echo -ne "\Unmounting virtual filesystems..." 3.127 + umount $ROOTFS/dev/shm 3.128 + umount $ROOTFS/dev/pts 3.129 + umount $ROOTFS/sys 3.130 + umount $ROOTFS/proc 3.131 + status 3.132 + else 3.133 + echo -e "\nProcess: $ps\n" 3.134 + ps | grep `basename $0` | grep -v grep 3.135 + echo -e "\nLeaving virtual filesystems unmounted (`pidof tazdev`)...\n" 3.136 + fi 3.137 +} 3.138 + 3.139 +# Get the last cooking base rootfs, extract and configure. 3.140 +gen_new_chroot() 3.141 +{ 3.142 + echo -e "\nGenerating new chroot in : $ROOTFS" 3.143 + echo "================================================================================" 3.144 + mkdir -p $ROOTFS && cd $ROOTFS 3.145 + wget $DL_URL/boot/cooking/rootfs-base.gz 3.146 + echo -n "Extracting the rootfs..." 3.147 + lzma d rootfs-base.gz -so | cpio -id 3.148 + rm rootfs-base.gz 3.149 + echo -n "Creating resolv.conf..." 3.150 + cat /etc/resolv.conf > etc/resolv.conf 3.151 + status 3.152 + echo "================================================================================" 3.153 + echo -e "Ready to chroot. Use 'tazdev chroot [version|path]'" 3.154 + echo -e "Example: tazdev chroot $ROOTFS\n" 3.155 +} 3.156 + 3.157 +# Remove obsolate slitaz packages 3.158 +purge_packages() 3.159 +{ 3.160 + arg=$1 3.161 + TMP_FILE=/tmp/tazdev.$$ 3.162 + ls $BUILD_WOK | while read pkg; do 3.163 + [ -f $BUILD_WOK/$pkg/taz/*/receipt ] || continue 3.164 + EXTRAVERSION="" 3.165 + . $BUILD_WOK/$pkg/taz/*/receipt 3.166 + echo $PACKAGE-$VERSION$EXTRAVERSION.tazpkg 3.167 + done > $TMP_FILE 3.168 + ls $SLITAZ/chroot/home/slitaz/packages | while read pkg; do 3.169 + case "$pkg" in 3.170 + *.tazpkg) 3.171 + grep -q ^$pkg$ $TMP_FILE && continue 3.172 + echo Remove $pkg 3.173 + [ "$arg" == "purge" ] && 3.174 + rm -f $SLITAZ/chroot/home/slitaz/packages/$pkg ;; 3.175 + esac 3.176 + done 3.177 + rm -f $TMP_FILE 3.178 +} 3.179 + 3.180 +# Remove obsolate source tarballs 3.181 +purge_sources() 3.182 +{ 3.183 + arg=$1 3.184 + TMP_FILE=/tmp/tazdev.$$ 3.185 + ls $BUILD_WOK | while read pkg; do 3.186 + [ -f $BUILD_WOK/$pkg/receipt ] || continue 3.187 + TARBALL="" 3.188 + . $BUILD_WOK/$pkg/receipt 3.189 + [ -n "$TARBALL" ] && echo $TARBALL 3.190 + grep SOURCES_REPOSITORY/ $BUILD_WOK/$pkg/receipt | sed \ 3.191 + -e 's|.*SOURCES_REPOSITORY/\([^ ]*\)\( .*\)$|\1|' \ 3.192 + -e 's|.*SOURCES_REPOSITORY/\([^ ]*\)$|\1|' | sort | uniq | \ 3.193 + sed "s|['\"/]||g" | while read file ; do 3.194 + eval echo $file 2> /dev/null 3.195 + done 3.196 + done > $TMP_FILE 3.197 + ls $SLITAZ/chroot/home/slitaz/src | while read pkg; do 3.198 + grep -q ^$pkg$ $TMP_FILE && continue 3.199 + echo Remove $pkg 3.200 + [ "$arg" == "purge" ] && 3.201 + rm -f $SLITAZ/chroot/home/slitaz/src/$pkg 3.202 + done 3.203 + rm -f $TMP_FILE 3.204 +} 3.205 + 3.206 +case "$1" in 3.207 + cmplog) 3.208 + # Log 'tazwok cmp' for the web interface (can be used via a cron job). 3.209 + check_root 3.210 + echo -e "Starting 'tazwok cmp' (can be long)...\n" 3.211 + tazwok cmp | grep ^[A-Z] | tee $CMP_LOG 3.212 + echo "Date: `date`" >> $CMP_LOG ;; 3.213 + '-ps'|projects-stats) 3.214 + echo -e "\nStatistics for: $PROJECTS\n" 3.215 + echo -n "Project" && echo -ne "\033[24G Size" && echo -ne "\033[38G Revision" 3.216 + echo -ne "\033[48G Version" && echo -e "\033[64G Files" 3.217 + echo "================================================================================" 3.218 + cd $PROJECTS 3.219 + for proj in * 3.220 + do 3.221 + rev="" 3.222 + echo -n "$proj" 3.223 + size=`du -sh $proj | awk '{ print $1 }'` 3.224 + echo -ne "\033[24G $size" 3.225 + if [ -d $proj/.hg ]; then 3.226 + cd $proj 3.227 + rev=`hg head --template '{rev}\n'` 3.228 + vers=`hg tags | head -n 2 | tail -n 1 | cut -d " " -f 1` 3.229 + echo -ne "\033[38G $rev" 3.230 + echo -ne "\033[48G $vers" && cd .. 3.231 + fi 3.232 + files=`find $proj -type f | wc -l` 3.233 + echo -e "\033[64G $files" 3.234 + done 3.235 + echo "================================================================================" 3.236 + echo "" ;; 3.237 + update-wok) 3.238 + # Update the Hg wok and copy it to the chroot env. Hg wok is 3.239 + # copied to the chroot wok to avoid messing with build result 3.240 + # file and so we can also modify receipt directly without affecting 3.241 + # the Hg wok. 3.242 + check_root 3.243 + get_version $@ 3.244 + echo "" 3.245 + echo "Hg wok : $HG_WOK" 3.246 + echo "Build wok : $BUILD_WOK" 3.247 + cd $HG_WOK 3.248 + hg pull && hg update 3.249 + echo -n "Copying Hg wok to the build wok... " 3.250 + cp -a $HG_WOK/* $BUILD_WOK 3.251 + cp -a $HG_WOK/.hg $BUILD_WOK 3.252 + status && echo "" ;; 3.253 + update-www) 3.254 + # Update website from repo. 3.255 + echo "" 3.256 + cd $WEBSITE && hg pull && hg update 3.257 + echo "" ;; 3.258 + chroot) 3.259 + # Chroot into a build env. Default to cooking configured in 3.260 + # tazdev.conf 3.261 + check_root 3.262 + get_version $@ 3.263 + mount_chroot 3.264 + echo -e "\nChrooting in $ROOTFS...\n" 3.265 + chroot $ROOTFS /bin/sh --login 3.266 + umount_chroot 3.267 + echo -e "Exiting $ROOTFS chroot environment...\n" ;; 3.268 + gen-chroot) 3.269 + check_root 3.270 + get_version $@ 3.271 + # Dont break another env. 3.272 + if [ -d $ROOTFS/bin ]; then 3.273 + echo -e "\nA chroot environment already exists in : $ROOTFS\n" 3.274 + exit 1 3.275 + fi 3.276 + gen_new_chroot ;; 3.277 + clean-chroot) 3.278 + # Keep root/ and /home they may have a build wok, custom scripts, etc. 3.279 + check_root 3.280 + if [ -z "$2" ]; then 3.281 + echo -e "\nPlease specify the path to the chroot environment to clean.\n" 3.282 + exit 0 3.283 + else 3.284 + ROOTFS=$2 3.285 + if [ ! -d "$ROOTFS" ]; then 3.286 + echo -e "\nWarning : $ROOTFS doesn't exist!\n" 3.287 + exit 1 3.288 + fi 3.289 + fi 3.290 + if [ -d $ROOTFS/proc/1 ]; then 3.291 + echo -e "\nWarning : $ROOTFS/proc mounted!\n" 3.292 + exit 1 3.293 + fi 3.294 + cd $ROOTFS || exit 1 3.295 + echo -e "\nCleaning chroot in: $ROOTFS" 3.296 + echo "================================================================================" 3.297 + for i in bin dev etc init lib media mnt proc sbin sys tmp usr var 3.298 + do 3.299 + echo -n "Removing: $i (`du -sh $i | awk '{ print $1 }'`)... " 3.300 + rm -rf $i 3.301 + status 3.302 + done 3.303 + echo "================================================================================" 3.304 + echo "" ;; 3.305 + '-p'|push) 3.306 + check_mirror $@ 3.307 + rsync -r -t -l -v -z --delete \ 3.308 + $LOCAL_DIR -e ssh $USER@$MIRROR:$REMOTE_DIR ;; 3.309 + '-dp'|dry-push) 3.310 + check_mirror $@ 3.311 + rsync -r -t -l -v -z --delete --dry-run \ 3.312 + $LOCAL_DIR -e ssh $USER@$MIRROR:$REMOTE_DIR ;; 3.313 + pull) 3.314 + check_mirror $@ 3.315 + rsync -r -t -l -v -z --delete \ 3.316 + -e ssh $USER@$MIRROR:$REMOTE_DIR $LOCAL_DIR ;; 3.317 + dry-pull) 3.318 + check_mirror $@ 3.319 + rsync -r -t -l -v -z --delete --dry-run \ 3.320 + -e ssh $USER@$MIRROR:$REMOTE_DIR $LOCAL_DIR ;; 3.321 + purge|dry-purge) 3.322 + check_root 3.323 + get_version $@ 3.324 + purge_packages $1 3.325 + purge_sources $1 ;; 3.326 + relpkg) 3.327 + [ -z "$MIRROR_SOURCES" ] && MIRROR_SOURCES="/var/www/slitaz/mirror/sources" 3.328 + if [ -z $2 ] || [ -z $3 ]; then 3.329 + echo -e "\nUsage: $0 relpkg package version\n" 3.330 + exit 0 3.331 + fi 3.332 + PACKAGE=$2 3.333 + VERSION=$3 3.334 + echo "" 3.335 + cd $PROJECTS/$PACKAGE 3.336 + # Sanity check 3.337 + if ! grep -q $VERSION$ .hgtags; then 3.338 + echo "Missing Hg tag for version: $VERSION" 3.339 + echo -e "You may want to: hg tag $VERSION && hg push\n" 3.340 + exit 0 3.341 + fi 3.342 + # Archive 3.343 + echo -n "Creating tarball and md5sum for: $PACKAGE-$VERSION... " 3.344 + hg archive -t tgz $PACKAGE-$VERSION.tar.gz 3.345 + md5sum $PACKAGE-$VERSION.tar.gz > $PACKAGE-$VERSION.md5 3.346 + echo "Done" 3.347 + # Upload 3.348 + echo -n "Do you wish to upload tarball to the mirror [N/y] ? " 3.349 + read upload 3.350 + if [ "$upload" = "y" ]; then 3.351 + echo "Uploading to: $MIRROR/sources/${PACKAGE#slitaz-}" 3.352 + scp $PACKAGE-$VERSION.tar.gz $PACKAGE-$VERSION.md5 \ 3.353 + $USER@$MIRROR:$MIRROR_SOURCES/${PACKAGE#slitaz-} 3.354 + fi ;; 3.355 + usage|*) 3.356 + usage ;; 3.357 +esac 3.358 + 3.359 +exit 0
4.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 4.2 +++ b/tazdev/tazdev.conf Thu Feb 24 04:02:55 2011 +0100 4.3 @@ -0,0 +1,20 @@ 4.4 +# tazdev.conf: SliTaz Developers tool configuration file. 4.5 +# 4.6 + 4.7 +# Path to 'tazwok cmp' log file. 4.8 +CMP_LOG="/var/log/tazwok-cmp.log" 4.9 + 4.10 +# Path for the wok, chroot and packages directory of each version. 4.11 +COOKING="/home/slitaz/cooking" 4.12 +STABLE="/home/slitaz/stable" 4.13 +EXPERIMENTAL="/home/slitaz/experimental" 4.14 + 4.15 +# Path to the Website repo. 4.16 +WEBSITE="/home/slitaz/www/website" 4.17 +PROJECTS="$HOME/Projects" 4.18 + 4.19 +# Main mirror to push and download (ISO, rootfs. etc). 4.20 +MIRROR="mirror.slitaz.org" 4.21 +DL_URL="http://mirror.switch.ch/ftp/mirror/slitaz" 4.22 +MIRROR_PKGS="/var/www/slitaz/mirror/packages" 4.23 +MIRROR_SOURCES="/var/www/slitaz/mirror/sources"