cookutils annotate cookiso @ rev 322

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