#!/bin/bash -e # Creates missing repositories so that they can be urpmi.addmedia'ed # before any rpms are released. # Also regenerates media.cfg files. # # Intended to be run when changes are made to media.cfg generation or when # a new tree is added, usually when a new release is forked. dir=~plf/ftp/mandrake distros="cooker 2011 2010.1 2010.0 2009.1 2009.0 2008.1 2008.0 2007.1 2007.0" sections="free non-free" modes="release backports" # new stable distros should have the same archs as the last cooker cycle archs_2007_0="i586 x86_64 ppc" archs_2007_1="${archs_2007_0}" archs_2008_0="${archs_2007_0}" archs_2008_1="${archs_2007_0} mipsel" archs_2009_0="${archs_2007_0}" archs_2009_1="${archs_2007_0}" archs_2010_0="${archs_2007_0}" archs_2010_1="${archs_2007_0}" archs_2011="i586 x86_64" archs_cooker="i586 x86_64" descr_free="PLF Free" descr_non_free="PLF Non-free" descr_release="" descr_backports=" backports" # pubkey or location of hardlinkable file pubkey="$dir/cooker/free/binary/i586/media_info/pubkey" #pubkey="CABA22AE" umask 022 cd $dir check_hdlists() { local repodir=$1 local olddistro=$2 echo -n "$1 " # for new distros we want versioned metadata, so check for that if [ ! -e $repodir/media_info/$([ $olddistro -eq 0 ] && echo -n "*-")hdlist.cz ]; then if [ $olddistro -eq 0 ]; then genhdlist2 --allow-empty-media --xml-info --versioned $repodir else genhdlist-old --dest $repodir || : if [ ! -e $repodir/hdlist.cz ]; then # old genhdlist does not create empty repos, however we need # hdlists for validity, so we produce manually the ones a newer genhdlist would produce printf 'cz[0\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000gzip' > $repodir/hdlist.cz printf ' -d\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000' >> $repodir/hdlist.cz printf '\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\0000]cz' >> $repodir/hdlist.cz cat /dev/null | gzip -9 > $repodir/synthesis.hdlist.cz fi pushd $repodir >/dev/null md5sum synthesis.hdlist.cz hdlist.cz > MD5SUM popd >/dev/null mkdir -p $repodir/media_info for file in hdlist.cz synthesis.hdlist.cz MD5SUM; do [ ! -f $repodir/media_info/$file ] || rm -f $repodir/media_info/$file [ ! -f $repodir/$file ] || cp -l $repodir/$file $repodir/media_info done fi echo echo "Fixed media_info: $1" fi if [ ! -e $repodir/media_info/pubkey ]; then mkdir -p $repodir/media_info if [ -f "$pubkey" ]; then cp -l $pubkey $repodir/media_info/pubkey else gpg --export -a $pubkey > $repodir/media_info/pubkey fi if [ $olddistro -eq 1 ]; then [ ! -f $repodir/pubkey ] || rm -f $repodir/pubkey cp -l $repodir/media_info/pubkey $repodir/pubkey fi echo echo "Fixed pubkey: $1" fi return 0 } for distro in $distros; do olddistro=0 case " 2008.0 2007.1 2007.0 " in *"${distro}"*) olddistro=1 esac eval archs=\${archs_${distro/./_}} echo -n "Checking: " for section in $sections; do for mode in $([ $distro = cooker ] && echo "." || echo "$modes"); do mkdir -p $distro/$section/$mode/source check_hdlists $distro/$section/$mode/source $olddistro for arch in $archs; do mkdir -p $distro/$section/$mode/{binary,debug}/$arch check_hdlists $distro/$section/$mode/binary/$arch $olddistro check_hdlists $distro/$section/$mode/debug/$arch $olddistro done done done echo ": OK" for arch in $archs; do echo -n "Checking media.cfg for $distro/$arch... " mkdir -p cfg/$distro/$arch/media/media_info pushd cfg/$distro/$arch/media/media_info >/dev/null echo '[media_info]' > media.cfg.new echo "version=$distro" >> media.cfg.new # our medias are compatible with version=2 # xmlinfo can be safely ignored by old parsers echo "mediacfg_version=2" >> media.cfg.new echo "arch=$arch" >> media.cfg.new echo "product=PLF Mandriva" >> media.cfg.new [ $olddistro -eq 1 ] || echo "xml-info=1" >> media.cfg.new echo "" >> media.cfg.new for section in $sections; do for mode in $([ $distro = cooker ] && echo "." || echo "$modes"); do modedir=/${mode} modedir=${modedir#/.} mode=${mode#.} echo "[../../../../$distro/$section$modedir/binary/$arch]" >> media.cfg.new echo "hdlist=../../../../../$distro/$section$modedir/binary/$arch/media_info/hdlist.cz" >> media.cfg.new echo "synthesis=../../../../../$distro/$section$modedir/binary/$arch/media_info/synthesis.hdlist.cz" >> media.cfg.new echo "pubkey=../../../../../$distro/$section$modedir/binary/$arch/media_info/pubkey" >> media.cfg.new eval echo "name=\${descr_$(echo $section | tr - _)}\${descr_$mode}" >> media.cfg.new echo "srpms=../../../../$distro/$section$modedir/source" >> media.cfg.new media_type="plf:$section" if [ "$mode" = "release" ]; then # We provide updates for ourselves. This is so that this gets added as # update media in order to catch security updates etc. echo "updates_for=../../../../$distro/$section$modedir/binary/$arch" >> media.cfg.new media_type="$media_type:updates" fi if [ "$mode" = "backports" ]; then echo "noauto=1" >> media.cfg.new media_type="$media_type:backports" fi [ $olddistro -eq 0 ] && echo "media_type=$media_type" >> media.cfg.new echo "" >> media.cfg.new echo "[../../../../$distro/$section$modedir/debug/$arch]" >> media.cfg.new echo "hdlist=../../../../../$distro/$section$modedir/debug/$arch/media_info/hdlist.cz" >> media.cfg.new echo "synthesis=../../../../../$distro/$section$modedir/debug/$arch/media_info/synthesis.hdlist.cz" >> media.cfg.new echo "pubkey=../../../../../$distro/$section$modedir/debug/$arch/media_info/pubkey" >> media.cfg.new eval echo "name=\${descr_$(echo $section | tr - _)}\${descr_$mode} debug" >> media.cfg.new echo "debug_for=../../../../$distro/$section$modedir/binary/$arch" >> media.cfg.new echo "srpms=../../../../$distro/$section$modedir/source" >> media.cfg.new echo "noauto=1" >> media.cfg.new [ $olddistro -eq 0 ] && echo "media_type=$media_type:debug" >> media.cfg.new echo "" >> media.cfg.new echo "[../../../../$distro/$section$modedir/source]" >> media.cfg.new echo "hdlist=../../../../../$distro/$section$modedir/source/media_info/hdlist.cz" >> media.cfg.new echo "synthesis=../../../../../$distro/$section$modedir/source/media_info/synthesis.hdlist.cz" >> media.cfg.new echo "pubkey=../../../../../$distro/$section$modedir/source/media_info/pubkey" >> media.cfg.new eval echo "name=\${descr_$(echo $section | tr - _)}\${descr_$mode} sources" >> media.cfg.new echo "rpms=../../../../$distro/$section$modedir/binary/$arch ../../../../$distro/$section$modedir/debug/$arch" >> media.cfg.new echo "noauto=1" >> media.cfg.new [ $olddistro -eq 0 ] && echo "media_type=$media_type:source" >> media.cfg.new echo "" >> media.cfg.new done done if cmp -s media.cfg.new media.cfg; then rm -f media.cfg.new else mv -f media.cfg.new media.cfg echo -n "regenerated, " fi popd >/dev/null echo "OK" done done