#!/bin/sh -e # $Id$ # Copyright 2008, 2009, 2010, 2011 Norbert Preining # This file is licensed under the GNU General Public License version 2 # or any later version. # # Creates a .run file for updating the texlive.infra # packages on Unix, similar to the .exe we create for Windows. Both are # created in the nightly cron from tl-update-tlcritical. TMP=`mktemp -d` CWD=`pwd` TLNET=$1 if test ! -d "$TLNET"; then echo "$0: No tlnet directory given as argument, aborting." >&2 exit 1 fi ARCHIVE=$TLNET/archive if test ! -d "$ARCHIVE"; then echo "$0: subdirectory archive/ in $TLNET not found, aborting." >&2 exit 1 fi TLRELEASE=`sed -n 's!^depend release/!!p' $TLNET/tlpkg/texlive.tlpdb` cd $TMP mkdir master cd master # unpack texlive.infra archives for all platforms, except w32. for pkg in texlive.infra; do for i in $ARCHIVE/$pkg*.tar.xz; do case "$i" in *win32*) ;; *) xzdec <$i | tar -xf - ;; esac done done cd .. # create the script which will be run on the user's machine to do the update. # cat >runme.sh <>runme.sh <<'END_RUNME' ROOT=`kpsewhich --var-value=SELFAUTOPARENT` if test -r "$ROOT/tlpkg/texlive.tlpdb"; then echo "$0: updating in $ROOT..." tlmgrversion=`tlmgr version | grep '^TeX Live.*version' | awk '{print $NF}'` echo "$0: tlmgr version says this is TeX Live $tlmgrversion" if test "x$WORKINGRELEASE" != "x$tlmgrversion"; then if test "x$1" = "x--upgrade"; then echo "$0: upgrading from $tlmgrversion to $WORKINGRELEASE." else echo "$0: upgrading from $tlmgrversion not supported:" >&2 echo "$0: can only upgrade (cautiously) from $WORKINGRELEASE." >&2 exit 1 fi else echo "$0: proceeding with tlmgr update." fi # move the architecture-specific files to the top level. mv ./master/bin . mkdir ./installer mv ./master/tlpkg/installer/xz ./installer mv ./master/tlpkg/installer/wget ./installer # install the architecture-independent files. (cd master && tar cf - *) | (cd $ROOT && tar xf -) # try to get the list of installed architectures by listing the # directories in $ROOT/bin. t_objdir=$ROOT/tlpkg/tlpobj # target tlpobj directory t_instdir=$ROOT/tlpkg/installer # target installer dir # ensure these target directories exist. mkdir -p $t_instdir/xz mkdir -p $t_instdir/wget # start the list of tlpobjs we will install tlpobjs="$t_objdir/texlive.infra.tlpobj" for a in $ROOT/bin/*; do test -d "$a" || continue # skip any cruft files b=`basename $a` # just the architecture name # add the tlpobjs for this platform t the list. tlpobjs="$tlpobjs $t_objdir/texlive.infra.$b.tlpobj" # install the bin dir for this platform. (cd bin && tar cf - $b) | (cd $ROOT/bin && tar xf -) # copy the installer binaries. cp installer/xz/xzdec.$b $t_instdir/xz/ cp installer/xz/xz.$b $t_instdir/xz/ test -r installer/wget/wget.$b \ && cp installer/wget/wget.$b $t_instdir/wget done else cat <&2 $0: Cannot find TeX Live root using kpsewhich --var-value=SELFAUTOPARENT. $0: Please call update-tlmgr-latest.sh --noexec --keep $0: and then call the runme.sh script in the unpacked directory $0: with the directory root as the first argument, something like: $0: sh runme.sh /path/to/your/texlive/installation/2010 END_ABORT_NODIR exit 1 fi # invoke secret tlmgr action with the tlpobjs we found. # Hopefully the result will be a clean tlpdb state. tlmgr -v _include_tlpobj $tlpobjs echo "$0: done." END_RUNME chmod ugo+x runme.sh # make the self-extracting archive back in the directory from where we # were invoked. cd $CWD mydir=`cd \`dirname $0\` && pwd` # Master/tlpkg/bin rev=`svnversion $mydir | sed s/[^0-9].*//` # just the number, no status makeself $TMP update-tlmgr-r$rev.sh "TeX Live Manager Updater" ./runme.sh rm -rf $TMP # vim:set tabstop=2 expandtab: #