diff options
author | Karl Berry <karl@freefriends.org> | 2017-05-08 17:26:47 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-05-08 17:26:47 +0000 |
commit | c43a6e19938380bb01435c9687aaeac2621b962c (patch) | |
tree | d79568fad21501809a8482713ef268fa0a950c92 /Master/tlpkg/bin | |
parent | fb7356be8fc2d630c3c088408799c2dc0d325502 (diff) |
tl-makeself-from-tlnet: rework to support spaces in source and target
directory paths. More checking, reporting, debugging.
tl-test-makeself,
tl-test-install: new test scripts.
tl-update-tlcritical: doc.
tlmgr.pl: ddebug a couple init msgs instead of debug; doc.
dev/profiles: new directory of profiles for assorted (manual) testing.
git-svn-id: svn://tug.org/texlive/trunk@44249 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/tlpkg/bin')
-rwxr-xr-x | Master/tlpkg/bin/tl-makeself-from-tlnet | 167 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tl-try-install | 35 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tl-try-makeself | 27 | ||||
-rwxr-xr-x | Master/tlpkg/bin/tl-update-tlcritical | 3 |
4 files changed, 172 insertions, 60 deletions
diff --git a/Master/tlpkg/bin/tl-makeself-from-tlnet b/Master/tlpkg/bin/tl-makeself-from-tlnet index f3bc140466a..5fa0b9c34f5 100755 --- a/Master/tlpkg/bin/tl-makeself-from-tlnet +++ b/Master/tlpkg/bin/tl-makeself-from-tlnet @@ -1,12 +1,21 @@ #!/bin/sh -e # $Id$ -# Copyright 2008-2014 Norbert Preining +# Copyright 2008-2017 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. +# Creates an executable script update-tlmgr-r*.sh (in the current +# directory) for updating the texlive.infra package and its per-platform +# subpackages on Unix, similar to the .exe we create for Windows. (Both +# are created in the nightly cron from tl-update-tlcritical.) We use +# the makeself utility to create the executable. +# +# The resulting update-tlmgr-*.sh is run (by the user) in the TL +# installation directory to be updated; it uses kpsewhich from PATH to +# determine what to do update. + +mydir=`cd \`dirname "$0"\` && pwd` # Master/tlpkg/bin +PATH=$mydir:$PATH # for tlpkginfo TLNET=$1 if test ! -d "$TLNET"; then @@ -21,55 +30,73 @@ if test ! -d "$ARCHIVE"; then fi # extract some version values from the tlnet tlpdb. -NETRELEASE=`sed -n 's!^depend release/!!p' $TLNET/tlpkg/texlive.tlpdb` -MINRELEASE=`sed -n 's!^depend minrelease/!!p' $TLNET/tlpkg/texlive.tlpdb` +NETRELEASE=`sed -n 's!^depend release/!!p' "$TLNET/tlpkg/texlive.tlpdb"` +MINRELEASE=`sed -n 's!^depend minrelease/!!p' "$TLNET/tlpkg/texlive.tlpdb"` +if test -z "$NETRELEASE" || test -z "$MINRELEASE"; then + echo "$0: could not find release or minrease from $TLNET/tlpkg/texlive.tlpdb"\ + >&2; exit 1 +fi -CWD=`pwd` # save original dir -TMP=`mktemp -d` -cd $TMP +CWD=`pwd` # save original dir +TMP=`mktemp -d` # work in new temp dir +cd "$TMP" mkdir master cd master -maxrev=0 - # unpack texlive.infra archives for all platforms, except w32. -for pkg in texlive.infra; do - pkgrev=`tlpkginfo --revision $pkg $TLNET` - if [ $pkgrev -gt $maxrev ] ; then - maxrev=$pkgrev - fi - for i in $ARCHIVE/$pkg*.tar.xz; do - case "$i" in - *win32*) ;; - *) xzdec <$i | tar -xf - ;; - esac - done +# this gives us the tlpobj files along with the actual content files. +infrapkg=texlive.infra +# +# determine revision of infrastructure while we're here, +# for naming the archive later. +infrarev=`tlpkginfo --revision $infrapkg "$TLNET"` +if test -z "$infrarev"; then + echo "$0: tlpkginfo --revision $infrapkg $TLNET failed, goodbye." >&2 + exit 1 +fi +# +# don't think quotes are needed here, except for possible sh bugs? +for i in "$ARCHIVE"/$infrapkg*.tar.xz; do + case "$i" in + *win32*) ;; + *) xzdec <"$i" | tar -xf - || exit 1;; + esac done -cd .. +cd .. # back to the (temp) dir where we building things up +# # create the script which will be run on the user's machine to do the update. -# +# cat >runme.sh <<END_RUNME #!/bin/sh -# Updater for tlmgr and infrastructure on Unix. +# \$Id$ +# Updater for tlmgr and TL infrastructure on Unix. Public domain. # Runs in unpacked archive directory. +# Created by `basename $0` at `date`. NETRELEASE=$NETRELEASE MINRELEASE=$MINRELEASE - +infrapkg=$infrapkg END_RUNME -# append to runme literally now. +# append to runme literally now -- no more variable expansions. cat >>runme.sh <<'END_RUNME' # see if we can determine where the TL to be upgraded lives. # need tlpdb and a tlpobj dir (i.e., not the svn Master tree) at least. +# We are depending on the user's PATH to find kpsewhich, tlmgr, etc. ROOT=`kpsewhich --var-value=SELFAUTOPARENT` if test -r "$ROOT/tlpkg/texlive.tlpdb" && test -d "$ROOT/tlpkg/tlpobj/"; then echo "$0: updating in $ROOT..." - + tlmgrversion=`tlmgr version | grep '^TeX Live.*version' | awk '{print $NF}'` + if test -z "$tlmgrversion"; then + echo "$0: tlmgr version did not include version, goodbye." >&2 + tlmgr version >&2 + exit 1 + fi + # echo "$0: tlmgr version says this is TeX Live $tlmgrversion" if test "x$1" = "x--upgrade"; then if test "x$NETRELEASE" = "x$tlmgrversion"; then @@ -94,37 +121,45 @@ if test -r "$ROOT/tlpkg/texlive.tlpdb" && test -d "$ROOT/tlpkg/tlpobj/"; then 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 + (cd master && tar cf - *) | (cd "$ROOT" && tar xf -) || exit 1 + t_instdir=$ROOT/tlpkg/installer # target installer dir - + t_xzdir=$t_instdir/xz + t_wgetdir=$t_instdir/wget + # # 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 + mkdir -p "$t_xzdir" "$t_wgetdir" + + # Start the list of tlpobjs we will install with the + # platform-independent part of the infrastructure package. + # + # We use the tlpobjs from our own dir here, using relative names, + # since we constructed this directory tree and thus know there are no + # spaces in the names. That is not true for $ROOT. (The files are the + # same since we just updated $ROOT with the untar above.) + src_tlpobj=master/tlpkg/tlpobj + tlpobjs=$src_tlpobj/$infrapkg.tlpobj + + # for each platform directory of binaries + 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" + b=`basename "$a"` # just the architecture name + + # add the tlpobjs for this platform to the list. + tlpobjs="$tlpobjs $src_tlpobj/$infrapkg.$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/ + (cd bin && tar cf - "$b") | (cd "$ROOT/bin" && tar xf -) || exit 1 + + # copy the installer binaries; not everything provides wget. + cp installer/xz/xzdec."$b" "$t_xzdir/" || exit 1 + cp installer/xz/xz."$b" "$t_xzdir/" || exit 1 test -r installer/wget/wget.$b \ - && cp installer/wget/wget.$b $t_instdir/wget + && { cp installer/wget/wget.$b "$t_wgetdir/" || exit 1; } done + else cat <<END_ABORT_NODIR >&2 $0: Cannot find TeX Live root using kpsewhich --var-value=SELFAUTOPARENT. @@ -133,20 +168,34 @@ END_ABORT_NODIR exit 1 fi -# invoke secret tlmgr action with the tlpobjs we found. +# Invoke special tlmgr action with the tlpobjs we found. # Hopefully the result will be a clean tlpdb state. -tlmgr -v _include_tlpobj $tlpobjs +# We are running the new tlmgr, from our own archive, here, +# due to the untar above. +tlmgr_path=`which tlmgr 2>/dev/null` # provide complete path if we can +test -z "$tlmgr_path" && tlmgr_path=tlmgr # but no biggie if we can't +echo "$0: $tlmgr_path including objects: $tlpobjs" +#debug: (pwd; ls -l $tlpobjs; ls -lR) >/tmp/ls +#debug: -vv here gives more info. (Also -vx on the #! line above.) +if tlmgr -v _include_tlpobj $tlpobjs; then :; else + echo "$0: $tlmgr_path failed, goodbye." >&2 + exit 1 +fi echo "$0: done." END_RUNME +# +#debug: cp -f runme.sh /tmp 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=$maxrev -makeself $TMP update-tlmgr-r$rev.sh "TeX Live Manager Updater" ./runme.sh +# make the self-extracting archive back in the directory from which +# we were invoked. +cd "$CWD" +makeself -q $TMP \ + update-tlmgr-r$infrarev.sh \ + "TeX Live Manager Updater" \ + ./runme.sh + rm -rf $TMP # vim:set tabstop=2 expandtab: # diff --git a/Master/tlpkg/bin/tl-try-install b/Master/tlpkg/bin/tl-try-install new file mode 100755 index 00000000000..4adbccd6682 --- /dev/null +++ b/Master/tlpkg/bin/tl-try-install @@ -0,0 +1,35 @@ +#!/bin/sh +# $Id$ +# Try a TL installation with various profiles into /tmp/ki. Public domain. + +renice 20 $$ >&/dev/null +cd $HOME || exit 1 # don't let cwd interfere + +instdir=/tmp/ki # in .pro files too +rm -rf $instdir* && echo "removed $instdir*." + +# make installations quieter. +TEXLIVE_INSTALL_ENV_NOCHECK=1; export TEXLIVE_INSTALL_ENV_NOCHECK +TEXLIVE_INSTALL_NO_WELCOME=1; export TEXLIVE_INSTALL_NO_WELCOME + +# some director +mydir=`cd \`dirname "$0"\` && pwd` # Master/tlpkg/bin +Master=`cd $mydir/../.. && pwd` +# +thisrel=/usr/local/texlive/`date +%Y` # not necessarily, but whatever +prevrel=/usr/local/texlive/`expr "$(date +%Y)" - 1` + +pro=--profile=$Master/tlpkg/dev/profiles/TLspace.pro #infra min small ... +exec time $Master/install-tl $pro +exec time $lp/install-tl $pro +exec time $lp/install-tl $pro --repo ftp://ftp.cstug.cz/pub/tex/local/tlpretest +exec time $ln/install-tl $pro --repo ctan #--in-place +exec time $thisrel/install-tl $pro +exec time $prevrel/install-tl $pro +exit $? + +# above are just assorted invocations that have been useful from time to +# time, nothing magic. do what's needed. +# +# $lp = pretest, /home/ftp/texlive/tlpretest on tug.org. +# $ln = tlnet, /home/ftp/texlive/tlnet on tug.org. diff --git a/Master/tlpkg/bin/tl-try-makeself b/Master/tlpkg/bin/tl-try-makeself new file mode 100755 index 00000000000..536261666ec --- /dev/null +++ b/Master/tlpkg/bin/tl-try-makeself @@ -0,0 +1,27 @@ +#!/bin/sh -ex +# $Id$ +# Test tl-makeself with spaces in filenames. Public domain. +# Assumes $lc is set to the tlcritical dir; copies from there +# to make the test directory in which we run makeself +# +# Although having the source in a spaceful directory is not really +# needed, might as well test that too. + +# to set up: +mkdir $crit; cp -r $lc/{archive,tlpkg} $crit +crit="/tmp/krit sp" +test -d "$crit" || mkdir "$crit" +rsync -a $lc/{archive,tlpkg} "$crit" + +cd "$crit" # because makeself writes to the current directory +rm -f update*sh # remove previous attempts +tl-makeself-from-tlnet "$crit" +ls -l "$crit" + +# Using ../dev/profiles/TLspace.pro results in: +tl="/tmp/ki sp" +cd "$tl" + +# Now try running the updater in the installed tree. +PATH=$tl/bin/x86_64-linux:$PATH +"$crit"/update-tlmgr-r*.sh # --quiet causes gzip error? diff --git a/Master/tlpkg/bin/tl-update-tlcritical b/Master/tlpkg/bin/tl-update-tlcritical index c07cd7c8f55..b600bee6ccc 100755 --- a/Master/tlpkg/bin/tl-update-tlcritical +++ b/Master/tlpkg/bin/tl-update-tlcritical @@ -3,6 +3,7 @@ # Public domain. Originally written 2008, Karl Berry. # Update the tlcritical mini-repository on tug with the critical # packages. Also listed in tl-update-containers, unfortunately. +# Run from cron.tl once a month, or whenever specified. tlcrit=/home/ftp/texlive/tlcritical recreate= @@ -24,7 +25,7 @@ if test -d "$tlcrit"; then :; else fi mydir=`cd \`dirname $0\` && pwd` -PATH=$mydir:/usr/local/gnu/bin:/usr/local/bin:$PATH # sha256sum+makensis on tug +PATH=$mydir:/usr/local/gnu/bin:/usr/local/bin:$PATH # sha*sum+makensis on tug master=`cd $mydir/../.. && pwd` TMPDIR=${TMPDIR-/tmp} |