slitaz-pizza annotate pizza @ rev 45
Tiny edits
author | Paul Issott <paul@slitaz.org> |
---|---|
date | Tue Mar 27 18:27:10 2012 +0100 (2012-03-27) |
parents | fc0563855ade |
children | 09561bb06ef4 |
rev | line source |
---|---|
pankso@2 | 1 #!/bin/sh |
pankso@2 | 2 # |
paul@9 | 3 # SliTaz Pizza host cmdline utility - Create environment, chroot, clean. |
pankso@2 | 4 # Backup and purge should be done via cron jobs. |
pankso@2 | 5 # |
pankso@2 | 6 |
pankso@2 | 7 [ -f "/etc/slitaz/pizza.conf" ] && . /etc/slitaz/pizza.conf |
pankso@2 | 8 [ -f "pizza.conf" ] && . ./pizza.conf |
pankso@2 | 9 |
pankso@2 | 10 # Pizza DB files. |
pankso@2 | 11 chroot="$PIZZA/chroot" |
pankso@2 | 12 pkgs="${chroot}$SLITAZ/packages" |
pankso@2 | 13 cache="${chroot}$SLITAZ/cache" |
pankso@2 | 14 queue="${chroot}$SLITAZ/queue" |
pankso@2 | 15 tmp="${chroot}$SLITAZ/tmp" |
pankso@2 | 16 feeds="${chroot}$SLITAZ/xml" |
pankso@2 | 17 activity="$cache/activity" |
pankso@2 | 18 builds="$cache/builds" |
pankso@2 | 19 public="$VHOST/public" |
pankso@2 | 20 bindpub="${chroot}$SLITAZ/public" |
pankso@22 | 21 hgflavors="$cache/flavors" |
pankso@2 | 22 |
pankso@2 | 23 # |
pankso@2 | 24 # Functions |
pankso@2 | 25 # |
pankso@2 | 26 |
pankso@2 | 27 usage() { |
pankso@2 | 28 cat << EOT |
pankso@2 | 29 |
pankso@2 | 30 $(echo -e "\033[1mUsage:\033[0m") pizza [command] |
pankso@2 | 31 |
pankso@2 | 32 $(echo -e "\033[1mCommands:\033[0m") |
pankso@2 | 33 usage Display this short usage. |
pankso@2 | 34 setup Setup Pizza build environment. |
pankso@2 | 35 up-files Update chroot and web files from datadir. |
pankso@2 | 36 exec Execute a command in chroot. |
pankso@2 | 37 chroot Chroot in Pizza environment. |
pankso@2 | 38 start Start Pizza bot and mount packages. |
pankso@2 | 39 stop Stop Pizza and unmount packages. |
pankso@22 | 40 get-lists Get latest flavor skel from Hg. |
pankso@2 | 41 sync-pkgs Sync packages from SliTaz mirror. |
pankso@2 | 42 purge Purge Pizza tmp directory. |
paul@9 | 43 clean Complete chroot clean-up. |
pankso@2 | 44 |
pankso@2 | 45 EOT |
pankso@2 | 46 } |
pankso@2 | 47 |
pankso@2 | 48 # Status function. |
pankso@2 | 49 status() { |
pankso@2 | 50 if [ $? = 0 ]; then |
pankso@2 | 51 echo " OK" |
pankso@2 | 52 else |
pankso@2 | 53 echo " Failed" |
pankso@2 | 54 fi |
pankso@2 | 55 } |
pankso@2 | 56 |
pankso@22 | 57 # Get latest flavor skel packages list. We use Hg to get latest list |
paul@45 | 58 # and addfiles. Then build a HTML list with version from the local |
pankso@22 | 59 # packages mirror. |
pankso@2 | 60 get_pkgs_lists() { |
pankso@22 | 61 cd $hgflavors && hg pull -u |
pankso@2 | 62 for skel in base justx gtkonly core |
pankso@2 | 63 do |
pankso@22 | 64 echo -n "Creating $skel packages.desc... " |
pankso@22 | 65 allpkgs="$SLITAZ/$SLITAZ_VERSION/packages/packages.desc" |
pankso@22 | 66 pkgsdesc="$skel/packages.desc" |
pankso@22 | 67 rm -f $pkgsdesc && touch $pkgsdesc |
pankso@22 | 68 for pkg in $(cat $skel/packages.list) |
pankso@22 | 69 do |
pankso@22 | 70 IFS="|" |
pankso@22 | 71 grep "^$pkg |" $allpkgs | cut -f 1,2,3 -d "|" | \ |
pankso@22 | 72 while read PACKAGE VERSION SHORT_DESC |
pankso@22 | 73 do |
pankso@22 | 74 echo "$PACKAGE $VERSION \"$SHORT_DESC\"" >> $pkgsdesc |
pankso@22 | 75 done |
pankso@22 | 76 done |
pankso@22 | 77 status |
pankso@2 | 78 done |
pankso@2 | 79 } |
pankso@2 | 80 |
pankso@2 | 81 # The Bot is chrooted and can't access main pizza.conf |
pankso@2 | 82 bot_config() |
pankso@2 | 83 { |
pankso@2 | 84 config=$chroot/etc/slitaz/pizza-bot.conf |
pankso@2 | 85 echo '# Pizza Bot configuration.' > $config |
pankso@2 | 86 grep ^PIZZA_URL /etc/slitaz/pizza.conf >> $config |
pankso@2 | 87 grep ^MAIL_DOMAIN /etc/slitaz/pizza.conf >> $config |
pankso@2 | 88 grep ^MAIL_SERVER /etc/slitaz/pizza.conf >> $config |
pankso@2 | 89 } |
pankso@2 | 90 |
pankso@18 | 91 # Log activities, we want first letter capitalized. |
pankso@18 | 92 log() { |
pankso@18 | 93 grep ^[A-Z] | \ |
pankso@18 | 94 sed s"#^[A-Z]\([^']*\)#$(date '+%Y-%m-%d %H:%M') : \0#" >> $activity |
pankso@18 | 95 } |
pankso@18 | 96 |
pankso@2 | 97 # |
pankso@2 | 98 # Commands |
pankso@2 | 99 # |
pankso@2 | 100 |
pankso@2 | 101 case "$1" in |
pankso@2 | 102 setup) |
pankso@2 | 103 # Setup build host. |
pankso@2 | 104 crontabs="$chroot/var/spool/cron/crontabs" |
pankso@2 | 105 if [ -d "$chroot/proc" ]; then |
paul@9 | 106 echo "Chroot already exists: $chroot" && exit 0 |
pankso@2 | 107 fi |
pankso@2 | 108 echo "" |
pankso@2 | 109 echo "Setting up Pizza environment..." |
pankso@2 | 110 mkdir -p $crontabs $cache $pkgs $tmp $queue $bindpub $feeds |
pankso@2 | 111 touch $activity $builds |
pankso@2 | 112 chmod 0777 $tmp $queue $cache |
pankso@2 | 113 chmod 0666 $activity |
pankso@11 | 114 for pkg in slitaz-base-files busybox tazlito tazpkg postfix \ |
pankso@11 | 115 shared-mime-info |
pankso@2 | 116 do |
pankso@2 | 117 echo "Installing package: $pkg" |
pankso@2 | 118 tazpkg -gi $pkg --root=$chroot >/dev/null |
pankso@2 | 119 done |
pankso@2 | 120 |
pankso@2 | 121 # Files |
pankso@2 | 122 echo -n "Creating needed files..." |
pankso@2 | 123 cp -f /etc/resolv.conf $chroot/etc |
pankso@2 | 124 mkdir -p $chroot/etc/init.d |
pankso@2 | 125 bot_config |
pankso@2 | 126 # No more needed when slitaz-base-files have rc.functions |
pankso@2 | 127 cp -f /etc/init.d/rc.functions $chroot/etc/init.d |
pankso@22 | 128 echo '# Check pizza queue every 15 mins' > $crontabs/root |
pankso@22 | 129 echo '*/15 * * * * /usr/bin/pizza-bot' >> $crontabs/root |
pankso@2 | 130 status |
pankso@2 | 131 |
paul@45 | 132 # We want Tazlito to build ISOs in /home/slitaz |
pankso@2 | 133 echo -n "Updating Tazlito default configuration..." |
pankso@2 | 134 sed -i s'/^WORK_DIR=.*/WORK_DIR="\/home\/slitaz"/' \ |
pankso@2 | 135 $chroot/etc/tazlito/tazlito.conf |
pankso@2 | 136 status |
pankso@2 | 137 |
pankso@2 | 138 echo -n "Installing Pizza Bot..." |
pankso@2 | 139 cp -a $DATA/pizza-bot $chroot/usr/bin |
pankso@2 | 140 status |
pankso@22 | 141 cd $cache |
pankso@22 | 142 |
paul@45 | 143 # We use files from Hg repo defined in pizza.conf. |
pankso@22 | 144 if [ ! -d "$hgflavors" ]; then |
pankso@22 | 145 cd $cache && hg clone $HG && cd - |
pankso@22 | 146 fi |
pankso@22 | 147 get_pkgs_lists |
pankso@2 | 148 |
pankso@2 | 149 # Web interface and public dir |
pankso@2 | 150 echo -n "Installing the web interface..." |
pankso@2 | 151 mkdir -p $public && chmod 0777 $public |
pankso@2 | 152 cp -a $DATA/web/* $VHOST |
pankso@2 | 153 status |
pankso@2 | 154 echo "Pizza chroot : $chroot" |
pankso@2 | 155 echo "Vhost path : $VHOST" |
pankso@2 | 156 echo "" |
pankso@2 | 157 echo "To start Pizza Bot: $(basename $0) start" |
pankso@2 | 158 echo "" ;; |
pankso@2 | 159 up-files) |
paul@9 | 160 # Update files in chroot when pizza is updated on host. |
pankso@2 | 161 echo -n "Updating chroot and virtual host..." |
pankso@2 | 162 cp -a $DATA/web/* $VHOST |
pankso@2 | 163 cp -a $DATA/pizza-bot $chroot/usr/bin |
pankso@2 | 164 bot_config |
pankso@2 | 165 status ;; |
pankso@2 | 166 exec) |
pankso@2 | 167 # Execute a command in chroot. |
pankso@2 | 168 [ "$2" ] || exit 0 |
pankso@2 | 169 chroot $chroot $2 ;; |
pankso@2 | 170 chroot) |
pankso@2 | 171 # Chroot in Pizza environment. |
pankso@2 | 172 echo -e "\nChrooting to: $chroot\n" |
pankso@2 | 173 chroot $chroot /bin/sh --login |
pankso@2 | 174 echo -e "\nExiting Pizza chroot...\n" ;; |
pankso@2 | 175 start) |
pankso@2 | 176 # Mount and start Pizza |
pankso@2 | 177 if ! mount | fgrep -q "pizza/chroot"; then |
pankso@2 | 178 gettext -e "Mounting packages and public...\n" |
pankso@2 | 179 mount -o bind $SLITAZ/$SLITAZ_VERSION/packages $pkgs |
pankso@2 | 180 mount -o bind $public $bindpub |
pankso@2 | 181 fi |
pankso@2 | 182 chroot $chroot /etc/init.d/crond start |
pankso@2 | 183 [ "$MAIL_DOMAIN" ] && chroot $chroot /etc/init.d/postfix start ;; |
pankso@2 | 184 stop) |
pankso@2 | 185 # unmount and stop Pizza |
pankso@2 | 186 if mount | fgrep -q "pizza/chroot"; then |
pankso@2 | 187 gettext -e "Unmounting packages and public...\n" |
pankso@2 | 188 umount $pkgs |
pankso@2 | 189 umount $bindpub |
pankso@2 | 190 fi |
pankso@2 | 191 chroot $chroot /etc/init.d/crond stop |
pankso@2 | 192 [ "$MAIL_DOMAIN" ] && chroot $chroot /etc/init.d/postfix stop ;; |
pankso@2 | 193 get-lists) |
pankso@2 | 194 get_pkgs_lists ;; |
pankso@2 | 195 sync-pkgs) |
pankso@2 | 196 echo "Syncing all $SLITAZ_VERSION packages..." |
pankso@30 | 197 echo "Syncing all $SLITAZ_VERSION packages" | log |
pankso@30 | 198 rsync -azHv --delete $RSYNC_PKGS $LOCAL_PKGS |
pankso@30 | 199 du -sh $LOCAL_PKGS ;; |
pankso@2 | 200 backup) |
pankso@2 | 201 echo "Creating Pizza backup..." |
pankso@2 | 202 bak="pizza-$(date "+%Y%m%d")" |
pankso@2 | 203 dir="$PIZZA/backups/$bak" |
pankso@2 | 204 mkdir -p $dir && cd $PIZZA/backups |
pankso@2 | 205 cp -a $cache $dir |
pankso@2 | 206 cp -a $chroot/home/slitaz/xml $dir |
pankso@2 | 207 for flavor in $(ls $public) |
pankso@2 | 208 do |
pankso@2 | 209 if [ -f "$public/$flavor/receipt" ]; then |
pankso@2 | 210 mkdir -p $dir/public/$flavor |
pankso@2 | 211 . $public/$flavor/receipt |
pankso@2 | 212 cp -f $public/$flavor/$FLAVOR.flavor \ |
pankso@2 | 213 $dir/public/$flavor 2>/dev/null |
pankso@2 | 214 fi |
pankso@2 | 215 done |
pankso@2 | 216 tar cf $bak.tar $bak && rm -rf $bak |
pankso@2 | 217 lzma e $bak.tar $bak.tar.lzma |
pankso@2 | 218 du -sh $bak.tar.lzma ;; |
pankso@2 | 219 purge) |
pankso@2 | 220 # Remove tmp file older than 24 hours and ISO older than 15 days. |
pankso@2 | 221 # TODO: Improve and use configs from pizza.conf |
pankso@18 | 222 echo "Purging temporary files and old flavors" | log |
pankso@2 | 223 echo "Purging tmp files..." |
pankso@33 | 224 find $tmp -mtime +1 | xargs rm -rf |
pankso@2 | 225 echo "Purging ISO's..." |
pankso@33 | 226 find $public -mtime +15 | xargs rm -rf ;; |
pankso@2 | 227 clean) |
pankso@2 | 228 # Clean all chroot. |
pankso@2 | 229 echo -e "\nCleaning: $chroot" |
pankso@2 | 230 cd $chroot || exit 1 |
pankso@2 | 231 for i in * |
pankso@2 | 232 do |
pankso@2 | 233 [ "$i" == "home" ] || rm -rf $i |
pankso@2 | 234 done && echo "" ;; |
pankso@2 | 235 *) |
pankso@2 | 236 usage ;; |
pankso@2 | 237 esac |
pankso@2 | 238 exit 0 |