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