#!/bin/sh -e # Copyright 2008 Norbert Preining # This file is licensed under the GNU General Public License version 2 # or any later version. # # Update a TeX Live tlnet distribution, with testing. # # TODO: # - only remove the old tlnet and move the newly one to the old place in case # that actually something has changed. OTOH we have to check the output # of tl-update-containers (is that trustworthy?), OTOH the install packages # size (md5sums?) # - other tests with the installed system? # - help msg. vc_id='$Id$' unset CDPATH unset LS_COLORS chicken=false while test $# -gt 0; do case $1 in --dry-run|-n) chicken=true;; --master) shift; Master=$1;; --testlocation) shift; tlwebtrybase=$1;; --help) echo "xxtodo. Sorry."; exit 0;; --version) echo "$vc_id"; exit 0;; --*) echo "$0: unrecognized option \`$1'." >&2 exit 1;; *) tlweb=$1;; esac shift done test -z "$tlweb" && tlweb=/home/ftp/texlive/tlnet/2008 if test -z "$Master"; then mydir=`dirname $0` Master=`cd $mydir/../.. && pwd` fi if test ! -r "$tlweb/tlpkg/texlive.tlpdb"; then echo "$0: no tlpdb in $tlweb/tlpkg, goodbye." >&2 exit 1 fi test -z "$tlwebtrybase" \ && tlwebtrybase=`cd $tlweb/../.. && pwd`/tlnet-trial-`date +%y%m%d` tlwebtry=$tlwebtrybase/tlsrc.try echo "$0: using tlweb=$tlweb" echo "$0: using tlwebtry=$tlwebtry" # # Be sure we're starting clean. rm -rf $tlwebtrybase mkdir -p $tlwebtry cp -al $tlweb/* $tlwebtry # assuming GNU cp echo "$0: Updating $tlwebtry in cow-shell..." cd $tlwebtry cow-shell <texlive.profile echo "$0: Running test install (log: `pwd`/install.log)..." perl install-tl -location $tlwebtry -profile texlive.profile >install.log 2>&1\ || true # install-tl can fail, but we test the output!! # the following long grep command should filter away all *normal* # installation messages. # if there are any other messages they will end up on stdout and # thus be noticed. unexpected_output=`cat install.log \ | grep -Ev '^Automated TeX Live installation using profile' \ | grep -Ev '^Platform: ' \ | grep -Ev '^Distribution: inst' \ | grep -Ev '^Directory for temporary files' \ | grep -Ev '^Installer directory:' \ | grep -Ev '^Loading ' \ | grep -Ev '^Installing: ' \ | grep -Ev '^(re-)?running mktexlsr' \ | grep -Ev '^mktexlsr: Updating ' \ | grep -Ev '^mktexlsr: Done' \ | grep -Ev '^writing fmtutil.cnf data to' \ | grep -Ev '^writing updmap.cfg to' \ | grep -Ev '^writing language.(dat|def) data to' \ | grep -Ev '^running updmap-sys' \ | grep -Ev '^pre-generating all format file' \ | grep -Ev 'running post install action for' \ | grep -Ev '^ See \./index.html for links to documentati' \ | grep -Ev '^ (http://tug.org/texlive/) contains any upda' \ | grep -Ev '^ TeX Live is a joint project of the TeX user groups' \ | grep -Ev '^ please consider supporting it by joining the group b' \ | grep -Ev '^ list of groups is available on the web at' \ | grep -Ev '^ Add ' \ | grep -Ev '^ Most importantly, add ' \ | grep -Ev '^ to your PATH for current and future sessions' \ | grep -Ev '^ Welcome to TeX Live' \ | grep -Ev 'install-tl: done' \ | cat` if test -z "$unexpected_output"; then # no unexpected output, so ship the new packages. cd $tlwebtrybase if $chicken; then echo "$0: Chicken mode, not updating anything." else rm -rf $tlweb mv $tlwebtry $tlweb echo "$0: Updated, removing test installation in $tlwebtrybase." rm -rf $tlwebtrybase echo "$0: Done." fi exit 0 else echo "$0: Test installation failed, not removing anything!" >&2 echo "$0: Here is the unexpected output:" >&2 echo "$unexpected_output" >&2 echo echo "$0: For the full transcript file, see:" >&2 echo "`pwd`/install.log" >&2 echo echo "$0: For install-tl's log file itself, with even more, see:" >&2 echo "$0: $tlwebtryinst/$yyyy/install-tl.log" exit 1 fi