slitaz-pizza annotate pizza @ rev 55
Fix: when a simple 'unset IFS' break the tool... Now all packages.desc are correctly created
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Sat May 19 17:45:33 2012 +0200 (2012-05-19) |
parents | b67d1c5107c9 |
children | a56361bbb30e |
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@55 | 76 unset IFS |
pankso@22 | 77 done |
pankso@22 | 78 status |
pankso@2 | 79 done |
pankso@2 | 80 } |
pankso@2 | 81 |
pankso@2 | 82 # The Bot is chrooted and can't access main pizza.conf |
pankso@2 | 83 bot_config() |
pankso@2 | 84 { |
pankso@2 | 85 config=$chroot/etc/slitaz/pizza-bot.conf |
pankso@2 | 86 echo '# Pizza Bot configuration.' > $config |
pankso@2 | 87 grep ^PIZZA_URL /etc/slitaz/pizza.conf >> $config |
pankso@2 | 88 grep ^MAIL_DOMAIN /etc/slitaz/pizza.conf >> $config |
pankso@2 | 89 grep ^MAIL_SERVER /etc/slitaz/pizza.conf >> $config |
pankso@2 | 90 } |
pankso@2 | 91 |
pankso@18 | 92 # Log activities, we want first letter capitalized. |
pankso@18 | 93 log() { |
pankso@18 | 94 grep ^[A-Z] | \ |
pankso@18 | 95 sed s"#^[A-Z]\([^']*\)#$(date '+%Y-%m-%d %H:%M') : \0#" >> $activity |
pankso@18 | 96 } |
pankso@18 | 97 |
pankso@2 | 98 # |
pankso@2 | 99 # Commands |
pankso@2 | 100 # |
pankso@2 | 101 |
pankso@2 | 102 case "$1" in |
pankso@2 | 103 setup) |
pankso@2 | 104 # Setup build host. |
pankso@2 | 105 crontabs="$chroot/var/spool/cron/crontabs" |
pankso@2 | 106 if [ -d "$chroot/proc" ]; then |
paul@9 | 107 echo "Chroot already exists: $chroot" && exit 0 |
pankso@2 | 108 fi |
pankso@2 | 109 echo "" |
pankso@2 | 110 echo "Setting up Pizza environment..." |
pankso@2 | 111 mkdir -p $crontabs $cache $pkgs $tmp $queue $bindpub $feeds |
pankso@2 | 112 touch $activity $builds |
pankso@2 | 113 chmod 0777 $tmp $queue $cache |
pankso@2 | 114 chmod 0666 $activity |
pankso@11 | 115 for pkg in slitaz-base-files busybox tazlito tazpkg postfix \ |
pankso@11 | 116 shared-mime-info |
pankso@2 | 117 do |
pankso@2 | 118 echo "Installing package: $pkg" |
pankso@53 | 119 tazpkg get-install $pkg --root=$chroot >/dev/null |
pankso@2 | 120 done |
pankso@55 | 121 |
pankso@2 | 122 # Files |
pankso@2 | 123 echo -n "Creating needed files..." |
pankso@2 | 124 cp -f /etc/resolv.conf $chroot/etc |
pankso@2 | 125 mkdir -p $chroot/etc/init.d |
pankso@2 | 126 bot_config |
pankso@2 | 127 # No more needed when slitaz-base-files have rc.functions |
pankso@2 | 128 cp -f /etc/init.d/rc.functions $chroot/etc/init.d |
pankso@22 | 129 echo '# Check pizza queue every 15 mins' > $crontabs/root |
pankso@22 | 130 echo '*/15 * * * * /usr/bin/pizza-bot' >> $crontabs/root |
pankso@2 | 131 status |
pankso@55 | 132 |
paul@45 | 133 # We want Tazlito to build ISOs in /home/slitaz |
pankso@2 | 134 echo -n "Updating Tazlito default configuration..." |
pankso@2 | 135 sed -i s'/^WORK_DIR=.*/WORK_DIR="\/home\/slitaz"/' \ |
pankso@2 | 136 $chroot/etc/tazlito/tazlito.conf |
pankso@2 | 137 status |
pankso@55 | 138 |
pankso@55 | 139 echo -n "Installing Pizza Bot..." |
pankso@2 | 140 cp -a $DATA/pizza-bot $chroot/usr/bin |
pankso@2 | 141 status |
pankso@22 | 142 cd $cache |
pankso@55 | 143 |
paul@45 | 144 # We use files from Hg repo defined in pizza.conf. |
pankso@22 | 145 if [ ! -d "$hgflavors" ]; then |
pankso@22 | 146 cd $cache && hg clone $HG && cd - |
pankso@22 | 147 fi |
pankso@22 | 148 get_pkgs_lists |
pankso@55 | 149 |
pankso@2 | 150 # Web interface and public dir |
pankso@2 | 151 echo -n "Installing the web interface..." |
pankso@2 | 152 mkdir -p $public && chmod 0777 $public |
pankso@2 | 153 cp -a $DATA/web/* $VHOST |
pankso@2 | 154 status |
pankso@2 | 155 echo "Pizza chroot : $chroot" |
pankso@2 | 156 echo "Vhost path : $VHOST" |
pankso@2 | 157 echo "" |
pankso@2 | 158 echo "To start Pizza Bot: $(basename $0) start" |
pankso@2 | 159 echo "" ;; |
pankso@2 | 160 up-files) |
paul@9 | 161 # Update files in chroot when pizza is updated on host. |
pankso@2 | 162 echo -n "Updating chroot and virtual host..." |
pankso@2 | 163 cp -a $DATA/web/* $VHOST |
pankso@55 | 164 cp -a $DATA/pizza-bot $chroot/usr/bin |
pankso@2 | 165 bot_config |
pankso@2 | 166 status ;; |
pankso@2 | 167 exec) |
pankso@2 | 168 # Execute a command in chroot. |
pankso@2 | 169 [ "$2" ] || exit 0 |
pankso@2 | 170 chroot $chroot $2 ;; |
pankso@2 | 171 chroot) |
pankso@2 | 172 # Chroot in Pizza environment. |
pankso@2 | 173 echo -e "\nChrooting to: $chroot\n" |
pankso@2 | 174 chroot $chroot /bin/sh --login |
pankso@2 | 175 echo -e "\nExiting Pizza chroot...\n" ;; |
pankso@2 | 176 start) |
pankso@2 | 177 # Mount and start Pizza |
pankso@2 | 178 if ! mount | fgrep -q "pizza/chroot"; then |
pankso@2 | 179 gettext -e "Mounting packages and public...\n" |
pankso@2 | 180 mount -o bind $SLITAZ/$SLITAZ_VERSION/packages $pkgs |
pankso@2 | 181 mount -o bind $public $bindpub |
pankso@2 | 182 fi |
pankso@55 | 183 chroot $chroot /etc/init.d/crond start |
pankso@2 | 184 [ "$MAIL_DOMAIN" ] && chroot $chroot /etc/init.d/postfix start ;; |
pankso@2 | 185 stop) |
pankso@2 | 186 # unmount and stop Pizza |
pankso@2 | 187 if mount | fgrep -q "pizza/chroot"; then |
pankso@2 | 188 gettext -e "Unmounting packages and public...\n" |
pankso@2 | 189 umount $pkgs |
pankso@2 | 190 umount $bindpub |
pankso@55 | 191 fi |
pankso@55 | 192 chroot $chroot /etc/init.d/crond stop |
pankso@2 | 193 [ "$MAIL_DOMAIN" ] && chroot $chroot /etc/init.d/postfix stop ;; |
pankso@2 | 194 get-lists) |
pankso@2 | 195 get_pkgs_lists ;; |
pankso@2 | 196 sync-pkgs) |
pankso@2 | 197 echo "Syncing all $SLITAZ_VERSION packages..." |
pankso@30 | 198 echo "Syncing all $SLITAZ_VERSION packages" | log |
pankso@30 | 199 rsync -azHv --delete $RSYNC_PKGS $LOCAL_PKGS |
pankso@30 | 200 du -sh $LOCAL_PKGS ;; |
pankso@2 | 201 backup) |
pankso@2 | 202 echo "Creating Pizza backup..." |
pankso@2 | 203 bak="pizza-$(date "+%Y%m%d")" |
pankso@2 | 204 dir="$PIZZA/backups/$bak" |
pankso@2 | 205 mkdir -p $dir && cd $PIZZA/backups |
pankso@2 | 206 cp -a $cache $dir |
pankso@2 | 207 cp -a $chroot/home/slitaz/xml $dir |
pankso@2 | 208 for flavor in $(ls $public) |
pankso@2 | 209 do |
pankso@2 | 210 if [ -f "$public/$flavor/receipt" ]; then |
pankso@2 | 211 mkdir -p $dir/public/$flavor |
pankso@2 | 212 . $public/$flavor/receipt |
pankso@2 | 213 cp -f $public/$flavor/$FLAVOR.flavor \ |
pankso@2 | 214 $dir/public/$flavor 2>/dev/null |
pankso@2 | 215 fi |
pankso@2 | 216 done |
pankso@2 | 217 tar cf $bak.tar $bak && rm -rf $bak |
pankso@55 | 218 lzma e $bak.tar $bak.tar.lzma |
pankso@2 | 219 du -sh $bak.tar.lzma ;; |
pankso@2 | 220 purge) |
pankso@2 | 221 # Remove tmp file older than 24 hours and ISO older than 15 days. |
pankso@2 | 222 # TODO: Improve and use configs from pizza.conf |
pankso@18 | 223 echo "Purging temporary files and old flavors" | log |
pankso@2 | 224 echo "Purging tmp files..." |
pankso@33 | 225 find $tmp -mtime +1 | xargs rm -rf |
pankso@2 | 226 echo "Purging ISO's..." |
pankso@33 | 227 find $public -mtime +15 | xargs rm -rf ;; |
pankso@2 | 228 clean) |
pankso@2 | 229 # Clean all chroot. |
pankso@2 | 230 echo -e "\nCleaning: $chroot" |
pankso@2 | 231 cd $chroot || exit 1 |
pankso@2 | 232 for i in * |
pankso@2 | 233 do |
pankso@2 | 234 [ "$i" == "home" ] || rm -rf $i |
pankso@2 | 235 done && echo "" ;; |
pankso@2 | 236 *) |
pankso@2 | 237 usage ;; |
pankso@2 | 238 esac |
pankso@2 | 239 exit 0 |