slitaz-pizza view pizza @ rev 91

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