slitaz-pizza rev 2
Add pizza cmdline utility
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Sat Mar 24 22:54:44 2012 +0100 (2012-03-24) |
parents | 154e0522d7aa |
children | 2eef72f5b3fb |
files | pizza |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/pizza Sat Mar 24 22:54:44 2012 +0100 1.3 @@ -0,0 +1,210 @@ 1.4 +#!/bin/sh 1.5 +# 1.6 +# SliTaz Pizza host cmdline utility - Create environment, chroot, clean 1.7 +# Backup and purge should be done via cron jobs. 1.8 +# 1.9 + 1.10 +[ -f "/etc/slitaz/pizza.conf" ] && . /etc/slitaz/pizza.conf 1.11 +[ -f "pizza.conf" ] && . ./pizza.conf 1.12 + 1.13 +# Pizza DB files. 1.14 +chroot="$PIZZA/chroot" 1.15 +pkgs="${chroot}$SLITAZ/packages" 1.16 +cache="${chroot}$SLITAZ/cache" 1.17 +queue="${chroot}$SLITAZ/queue" 1.18 +tmp="${chroot}$SLITAZ/tmp" 1.19 +feeds="${chroot}$SLITAZ/xml" 1.20 +activity="$cache/activity" 1.21 +builds="$cache/builds" 1.22 +public="$VHOST/public" 1.23 +bindpub="${chroot}$SLITAZ/public" 1.24 + 1.25 +# 1.26 +# Functions 1.27 +# 1.28 + 1.29 +usage() { 1.30 + cat << EOT 1.31 + 1.32 +$(echo -e "\033[1mUsage:\033[0m") pizza [command] 1.33 + 1.34 +$(echo -e "\033[1mCommands:\033[0m") 1.35 + usage Display this short usage. 1.36 + setup Setup Pizza build environment. 1.37 + up-files Update chroot and web files from datadir. 1.38 + exec Execute a command in chroot. 1.39 + chroot Chroot in Pizza environment. 1.40 + start Start Pizza bot and mount packages. 1.41 + stop Stop Pizza and unmount packages. 1.42 + get-lists Get latest skel packages list from Hg. 1.43 + sync-pkgs Sync packages from SliTaz mirror. 1.44 + purge Purge Pizza tmp directory. 1.45 + clean Complet chroot clean-up. 1.46 + 1.47 +EOT 1.48 +} 1.49 + 1.50 +# Status function. 1.51 +status() { 1.52 + if [ $? = 0 ]; then 1.53 + echo " OK" 1.54 + else 1.55 + echo " Failed" 1.56 + fi 1.57 +} 1.58 + 1.59 +# Get latest skel packages list 1.60 +get_pkgs_lists() { 1.61 + cd $cache 1.62 + for skel in base justx gtkonly core 1.63 + do 1.64 + echo -n "Getting $skel packages list... " 1.65 + wget -O packages.$skel \ 1.66 + $HG/raw-file/tip/$skel/packages.list 2>/dev/null 1.67 + echo "Done" 1.68 + done 1.69 +} 1.70 + 1.71 +# The Bot is chrooted and can't access main pizza.conf 1.72 +bot_config() 1.73 +{ 1.74 + config=$chroot/etc/slitaz/pizza-bot.conf 1.75 + echo '# Pizza Bot configuration.' > $config 1.76 + grep ^PIZZA_URL /etc/slitaz/pizza.conf >> $config 1.77 + grep ^MAIL_DOMAIN /etc/slitaz/pizza.conf >> $config 1.78 + grep ^MAIL_SERVER /etc/slitaz/pizza.conf >> $config 1.79 +} 1.80 + 1.81 +# 1.82 +# Commands 1.83 +# 1.84 + 1.85 +case "$1" in 1.86 + setup) 1.87 + # Setup build host. 1.88 + crontabs="$chroot/var/spool/cron/crontabs" 1.89 + if [ -d "$chroot/proc" ]; then 1.90 + echo "Chroot already exist: $chroot" && exit 0 1.91 + fi 1.92 + echo "" 1.93 + echo "Setting up Pizza environment..." 1.94 + mkdir -p $crontabs $cache $pkgs $tmp $queue $bindpub $feeds 1.95 + touch $activity $builds 1.96 + chmod 0777 $tmp $queue $cache 1.97 + chmod 0666 $activity 1.98 + for pkg in slitaz-base-files busybox tazlito tazpkg postfix 1.99 + do 1.100 + echo "Installing package: $pkg" 1.101 + tazpkg -gi $pkg --root=$chroot >/dev/null 1.102 + done 1.103 + 1.104 + # Files 1.105 + echo -n "Creating needed files..." 1.106 + cp -f /etc/resolv.conf $chroot/etc 1.107 + mkdir -p $chroot/etc/init.d 1.108 + bot_config 1.109 + # No more needed when slitaz-base-files have rc.functions 1.110 + cp -f /etc/init.d/rc.functions $chroot/etc/init.d 1.111 + echo '# Check pizza queue each 5 min' > $crontabs/root 1.112 + echo '*/20 * * * * /usr/bin/pizza-bot' >> $crontabs/root 1.113 + status 1.114 + 1.115 + # We want Tazlito to build ISO's in /home/slitaz 1.116 + echo -n "Updating Tazlito default configuration..." 1.117 + sed -i s'/^WORK_DIR=.*/WORK_DIR="\/home\/slitaz"/' \ 1.118 + $chroot/etc/tazlito/tazlito.conf 1.119 + status 1.120 + 1.121 + echo -n "Installing Pizza Bot..." 1.122 + cp -a $DATA/pizza-bot $chroot/usr/bin 1.123 + status 1.124 + cd $cache && get_pkgs_lists 1.125 + 1.126 + # Web interface and public dir 1.127 + echo -n "Installing the web interface..." 1.128 + mkdir -p $public && chmod 0777 $public 1.129 + cp -a $DATA/web/* $VHOST 1.130 + status 1.131 + echo "Pizza chroot : $chroot" 1.132 + echo "Vhost path : $VHOST" 1.133 + echo "" 1.134 + echo "To start Pizza Bot: $(basename $0) start" 1.135 + echo "" ;; 1.136 + up-files) 1.137 + # Update files in chroot when pizza is update on host. 1.138 + echo -n "Updating chroot and virtual host..." 1.139 + cp -a $DATA/web/* $VHOST 1.140 + cp -a $DATA/pizza-bot $chroot/usr/bin 1.141 + bot_config 1.142 + status ;; 1.143 + exec) 1.144 + # Execute a command in chroot. 1.145 + [ "$2" ] || exit 0 1.146 + chroot $chroot $2 ;; 1.147 + chroot) 1.148 + # Chroot in Pizza environment. 1.149 + echo -e "\nChrooting to: $chroot\n" 1.150 + chroot $chroot /bin/sh --login 1.151 + echo -e "\nExiting Pizza chroot...\n" ;; 1.152 + start) 1.153 + # Mount and start Pizza 1.154 + if ! mount | fgrep -q "pizza/chroot"; then 1.155 + gettext -e "Mounting packages and public...\n" 1.156 + mount -o bind $SLITAZ/$SLITAZ_VERSION/packages $pkgs 1.157 + mount -o bind $public $bindpub 1.158 + fi 1.159 + chroot $chroot /etc/init.d/crond start 1.160 + [ "$MAIL_DOMAIN" ] && chroot $chroot /etc/init.d/postfix start ;; 1.161 + stop) 1.162 + # unmount and stop Pizza 1.163 + if mount | fgrep -q "pizza/chroot"; then 1.164 + gettext -e "Unmounting packages and public...\n" 1.165 + umount $pkgs 1.166 + umount $bindpub 1.167 + fi 1.168 + chroot $chroot /etc/init.d/crond stop 1.169 + [ "$MAIL_DOMAIN" ] && chroot $chroot /etc/init.d/postfix stop ;; 1.170 + get-lists) 1.171 + get_pkgs_lists ;; 1.172 + sync-pkgs) 1.173 + echo "Syncing all $SLITAZ_VERSION packages..." 1.174 + rsync -azH --delete rsync://mirror.slitaz.org/slitaz-$SLITAZ_VERSION/ 1.175 + $SLITAZ/$SLITAZ_VERSION/packages/ ;; 1.176 + backup) 1.177 + echo "Creating Pizza backup..." 1.178 + bak="pizza-$(date "+%Y%m%d")" 1.179 + dir="$PIZZA/backups/$bak" 1.180 + mkdir -p $dir && cd $PIZZA/backups 1.181 + cp -a $cache $dir 1.182 + cp -a $chroot/home/slitaz/xml $dir 1.183 + for flavor in $(ls $public) 1.184 + do 1.185 + if [ -f "$public/$flavor/receipt" ]; then 1.186 + mkdir -p $dir/public/$flavor 1.187 + . $public/$flavor/receipt 1.188 + cp -f $public/$flavor/$FLAVOR.flavor \ 1.189 + $dir/public/$flavor 2>/dev/null 1.190 + fi 1.191 + done 1.192 + tar cf $bak.tar $bak && rm -rf $bak 1.193 + lzma e $bak.tar $bak.tar.lzma 1.194 + du -sh $bak.tar.lzma ;; 1.195 + purge) 1.196 + # Remove tmp file older than 24 hours and ISO older than 15 days. 1.197 + # TODO: Improve and use configs from pizza.conf 1.198 + echo "Purging tmp files..." 1.199 + find $tmp -mtime +1 | xargs rm -f 1.200 + echo "Purging ISO's..." 1.201 + find $public -mtime +15 | xargs rm -f ;; 1.202 + clean) 1.203 + # Clean all chroot. 1.204 + echo -e "\nCleaning: $chroot" 1.205 + cd $chroot || exit 1 1.206 + for i in * 1.207 + do 1.208 + [ "$i" == "home" ] || rm -rf $i 1.209 + done && echo "" ;; 1.210 + *) 1.211 + usage ;; 1.212 +esac 1.213 +exit 0