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