blob: f3bc140466ad3556b2b41d6a76fc2318b6b19130 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
|
#!/bin/sh -e
# $Id$
# Copyright 2008-2014 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.
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
# 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`
CWD=`pwd` # save original dir
TMP=`mktemp -d`
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
done
cd ..
# 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.
# Runs in unpacked archive directory.
NETRELEASE=$NETRELEASE
MINRELEASE=$MINRELEASE
END_RUNME
# append to runme literally now.
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.
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}'`
echo "$0: tlmgr version says this is TeX Live $tlmgrversion"
if test "x$1" = "x--upgrade"; then
if test "x$NETRELEASE" = "x$tlmgrversion"; then
echo "$0: have TL $tlmgrversion, new version also $NETRELEASE;">&2
echo "$0: using --upgrade doesn't make sense; terminating." >&2
exit 1
elif test "$tlmgrversion" -lt "$MINRELEASE"; then
echo "$0: upgrading from $tlmgrversion not supported;" >&2
echo "$0: can only upgrade from $MINRELEASE to $NETRELEASE." >&2
echo "$0: terminating." >&2
exit 1
else
echo "$0: ok, doing full release upgrade " \
"from $tlmgrversion to $NETRELEASE."
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 <<END_ABORT_NODIR >&2
$0: Cannot find TeX Live root using kpsewhich --var-value=SELFAUTOPARENT.
$0: Please set your PATH as needed, otherwise it's hopeless.
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=$maxrev
makeself $TMP update-tlmgr-r$rev.sh "TeX Live Manager Updater" ./runme.sh
rm -rf $TMP
# vim:set tabstop=2 expandtab: #
|