cookutils view cookiso @ rev 330

cookiso: Small redirection fix
author Christophe Lincoln <pankso@slitaz.org>
date Fri Mar 16 12:06:55 2012 +0100 (2012-03-16)
parents 461c9664ef91
children 0f298b388313
line source
1 #!/bin/sh
2 #
3 # Cookiso utility - Build official ISOs in a chroot environment.
4 # The goal is to have a tool well integrated with cookutils but which
5 # can run on its own and automate official SliTaz ISO creation.
6 #
8 [ -f "/etc/slitaz/cook.conf" ] && . /etc/slitaz/cook.conf
9 [ -f "cook.conf" ] && . ./cook.conf
11 # --> cook.conf
12 # SSH/RSA configuration to upload on a server.
13 SSH_CMD="dbclient -i /root/.ssh/id_rsa.dropbear"
14 SSH_ISO="/var/www/slitaz/mirror/iso"
15 SSH_HOST="slitaz@mirror.slitaz.org"
16 #BWLIMIT="--bwlimit=40"
18 # Cookiso DB files.
19 cache="$CACHE/cookiso"
20 repo="$SLITAZ/flavors"
21 iso="$SLITAZ/iso"
22 activity="$cache/activity"
23 command="$cache/command"
24 rollog="$cache/rolling.log"
25 synclog="$cache/rsync.log"
26 commits="$cache/commits"
28 # Parse cmdline options.
29 for opt in "$@"
30 do
31 case "$opt" in
32 --pkgdb)
33 cook pkgdb --flavors ;;
34 --push)
35 echo "TODO: Upload isos to mirror"
36 exit 0 ;;
37 --flavors=*)
38 flavors=${opt#--flavors=} ;;
39 --version=*)
40 version=${opt#--version=} ;;
41 esac
42 done
44 # Default to rolling, or: cookiso [cmd] --version=stable
45 case "$version" in
46 stable)
47 string=$(cat /etc/slitaz-release) ;;
48 cooking)
49 string=cooking ;;
50 *)
51 version=cooking
52 string=rolling ;;
53 esac
55 # Running command
56 [ -d "$cache" ] && echo "$@" > $command
57 trap 'rm -f $command && exit 1' INT TERM
59 #
60 # Functions
61 #
63 usage() {
64 cat << EOT
66 $(echo -e "\033[1mUsage:\033[0m") cookiso [command] [--option]
68 $(echo -e "\033[1mCommands:\033[0m")
69 usage Display this short usage.
70 setup Setup Cookiso build environment.
71 push Manually push ISO to a server via SSH.
72 gen Generate specified flavors.
73 4in1 Generate all 4in1 flavors.
74 rolling Build the rolling ISOs if any changes.
76 $(echo -e "\033[1mOptions:\033[0m")
77 --pkgdb Generate packages DB before building ISO.
78 --push Upload freshly generated ISO to a server.
79 --flavors= List of flavors to generate with 'gen' command.
80 --version= Specify SliTaz version: [rolling|cooking|stable]
82 EOT
83 }
85 spider() {
86 echo ' // \\'
87 echo ' _\\()//_'
88 echo '/ // \\ \\'
89 echo ' | \__/ |'
90 }
92 # Check for some flavors on cmdline
93 flavors_list() {
94 if [ "$flavors" == "all" ]; then
95 flavors=$(ls $SLITAZ/flavors)
96 fi
97 if [ ! "$flavors" ]; then
98 echo "No flavor specified on cmdline. Use: --flavors="
99 rm -f $command && exit 0
100 fi
101 }
103 # Log activities, we want first letter capitalized.
104 log() {
105 grep ^[A-Z] | \
106 sed s"#^[A-Z]\([^']*\)#$(date '+%Y-%m-%d %H:%M') : \0#" >> $activity
107 }
109 log_bot() {
110 sed '/^.\//'d | sed '/^.hg/'d | tee -a $rollog
111 }
113 # Generate requested flavors.
114 gen_flavors() {
115 cd $SLITAZ/flavors && hg pull -u
116 mkdir -p $cache && cd $cache
117 rm -rf *.flavor *.list *.conf
118 for flavor in $flavors
119 do
120 if [ "$flavor" != "core-4in1" ]; then
121 name="slitaz-$string-$flavor"
122 else
123 name="slitaz-$string"
124 fi
125 log=$iso/$name.log
126 rm -f $log && touch $log
127 echo "Building $string <a href='?distro=$string-$flavor'>$flavor</a>" | log
128 echo "Cookiso started: $(date '+%Y-%m-%d %H:%M')" | tee -a $log
129 tazlito pack-flavor $flavor | tee -a $log
130 tazlito get-flavor $flavor | tee -a $log
131 # BUG: script sometimes screws up conspy on Tank
132 #script -c "yes '' | tazlito gen-distro" -a $log
133 yes '' | tazlito gen-distro 2>&1 | tee -a $log
134 # Rename ISO and md5
135 mv -f $SLITAZ/distro/slitaz-$flavor.iso $iso/$name.iso
136 cd $iso && md5sum $name.iso > $name.md5
137 echo "Cookiso ended: $(date '+%Y-%m-%d %H:%M')" | tee -a $log
138 done && echo ""
139 }
141 # Push an ISO to a server.
142 push_iso() {
143 echo "Pushing to host: ${SSH_HOST}"
144 export DROPBEAR_PASSWORD=none
145 for flavor in $flavors
146 do
147 rsync $BWLIMIT -vtP -e "$SSH_CMD" \
148 $iso/slitaz-$string-$flavor.* \
149 ${SSH_HOST}:$SSH_ISO/$string 2>&1 | tee $synclog
150 done
151 }
153 #
154 # Commands
155 #
157 case "$1" in
158 setup)
159 # Setup Hg repo and dirs
160 echo -e "\nSetting up Cookiso environment..."
161 cd $SLITAZ
162 if [ ! -d "flavors" ]; then
163 case $version in
164 cooking|rolling)
165 hg clone http://hg.slitaz.org/flavors ;;
166 stable)
167 hg clone http://hg.slitaz.org/flavors-stable flavors ;;
168 esac
169 fi
170 # Needed packages
171 for pkg in mercurial tazlito rsync dropbear
172 do
173 [ -d "/var/lib/tazpkg/installed/$pkg" ] || tazpkg -gi $pkg
174 done
175 echo "Creating directories and files..."
176 mkdir -p $cache $iso
177 touch $activity
178 sed -i s'/^WORK_DIR=.*/WORK_DIR="\/home\/slitaz"/' \
179 /etc/tazlito/tazlito.conf
180 echo ""
181 echo "Flavors files : $SLITAZ/flavors"
182 echo "Cache files : $cache"
183 echo "ISO images : $iso"
184 echo "" ;;
185 push)
186 # Manually upload an ISO to a server.
187 flavors_list
188 push_iso ;;
189 gen)
190 # Build one or more flavors.
191 flavors_list
192 echo -e "\nGenerating flavors:\n$flavors"
193 gen_flavors ;;
194 4in1)
195 echo -e "\nGenerating 4in1 distros..."
196 flavors="base justx gtkonly core core-4in1"
197 gen_flavors ;;
198 rolling)
199 #
200 # Official SliTaz rolling release flavors are automatically built.
201 #
202 # Check if packages list was modified or if any commits have been
203 # done in one of the rolling flavors and rebuild ISOs if needed.
204 #
205 pkgs=$SLITAZ/packages/packages.md5
206 last=$cache/packages.md5
207 diff=$cache/packages.diff
208 cook="preinit justx core-4in1"
210 # Log stuff
211 rm -f $rollog && touch $rollog
212 rm -f $commit $commits.tmp && touch $commits.tmp
213 echo "Rolling tracking for changes" | log
214 echo "Cookiso rolling started: $(date '+%Y-%m-%d %H:%M')" | log_bot
216 # Packages changes
217 [ -f "$last" ] || cp -f $pkgs $cache
218 diff $last $pkgs > $diff
219 if [ -s "$diff" ]; then
220 echo "Found new or rebuilt packages" | log_bot
221 cat $diff >> $rollog
222 #
223 # TODO: Check new pkg and see if it's part of one of the rolling
224 # flavors, if not we have nothing to build.
225 #
226 for flavor in $cook
227 do
228 echo "$flavor" >> $commits.tmp
229 echo "New packages for : $flavor" | log_bot
230 done
231 else
232 echo "No changes found in packages MD5 sum" | log_bot
233 echo "" > $commits.tmp
234 fi
235 cp -f $pkgs $cache
237 # Hg changes
238 cd $repo || exit 1
239 cur=$(hg head --template '{rev}\n')
240 echo "Updating wok : $repo (rev $cur)" | log_bot
241 cd $repo && hg pull -u | log_bot
242 new=$(hg head --template '{rev}\n')
243 cur=$(($cur + 1))
244 for rev in $(seq $cur $new)
245 do
246 for file in $(hg log --rev=$rev --template "{files}")
247 do
248 flavor=$(echo $file | cut -d "/" -f 1)
249 desc=$(hg log --rev=$rev --template "{desc}" $file)
250 echo "Committed flavor : $flavor - $desc" | log_bot
251 # Build only rolling flavor
252 if echo "$cook" | fgrep -q $flavor; then
253 echo $flavor >> $commits.tmp
254 fi
255 done
256 done
258 # Keep previous commit and discard duplicate lines
259 cat $commits.tmp | sed /"^$"/d > $commits.new
260 uniq $commits.new > $commits && rm $commits.*
261 nb=$(cat $commits | wc -l)
262 echo "Flavors to cook : $nb" | log_bot
263 flavors=$(cat $commits)
264 gen_flavors ;;
265 spider)
266 # SliTaz Easter egg command :-)
267 spider ;;
268 *)
269 usage ;;
270 esac
272 rm -f $command
273 exit 0