cookutils view cookiso @ rev 525

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