summaryrefslogtreecommitdiff
path: root/support/texlive/eitl/eitl.sh
blob: 69e31ed4e4d5a6197f6fe1db20df98632b5f2d8b (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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
#!/bin/bash
# eitl.sh Easy Install of TeXLive
# $Id: eitl.sh 38 2012-11-16 20:05:01Z herbert $
# v 0.04
#
# Rolf Niepraschk <Rolf.Niepraschk@gmx.de>
# Herbert Voß     <hvoss@tug.org>
#
# This script is copyright of the authors and 
# published under the LPPL 
#
# Call the script with the optional installation directory:
# ./eitl.sh 
# ./eitl.sh /opt/texlive
#
#
clear
echo "***************************************************"
echo "***         Easy Install of TeXLive             ***"
echo "***************************************************"
echo ""

TEXLIVE_DEMO=0
# 0 install all
# 1 do not install basic texlive
# 2 do not install getnonfreefonts
# 3 same as option 1 and 2
#
CREATE_PROFILE_FILES=0
# 1 creates files in /etc/profile.d/zzz-texlive.(c)sh

TEXLIVE_VERBOSE=0
# 1 for more output

restoreSystem() {
   mv ~/.bashrc.eitl ~/.bashrc 2> /dev/null
   sudo rm -r /etc/profile.d/zzz-texlive.* 2> /dev/null
}

case $# in
  0) TEXLIVE_DIR="$HOME/texlive" 
     mkdir $TEXLIVE_DIR &> /dev/null ;;
  1) if [ "$1" == "restore" ] ; then
       restoreSystem
       exit 0
     else
       TEXLIVE_DIR=$1 
       sudo mkdir -p $TEXLIVE_DIR &> /dev/null
       sudo chown -R ${LOGNAME}:`groups | cut -d" " -f1` $TEXLIVE_DIR  
     fi ;;
  *) TEXLIVE_DIR="$HOME/texlive" ;;
esac

ExitError() {
    echo "######################################################################";
    echo "### E R R O R                                                      ###";
    echo "######################################################################";
    sleep 1;
    exit 1;
}

createTLProfile() {
cat <<End_Of_File > $PROFILE_NAME
	  selected_scheme scheme-custom
	  TEXDIR $TEXLIVE_DIR/$TEXLIVE_VERSION
	  TEXDIRW $TEXLIVE_DIR/$TEXLIVE_VERSION
	  TEXMFCONFIG ~/.texlive$TEXLIVE_VERSION/texmf-config
	  TEXMFHOME ~/texmf
	  TEXMFLOCAL $TEXLIVE_DIR/texmf-local
	  TEXMFSYSCONFIG $TEXLIVE_DIR/$TEXLIVE_VERSION/texmf-config
	  TEXMFSYSVAR $TEXLIVE_DIR/$TEXLIVE_VERSION/texmf-var
	  TEXMFVAR ~/.texlive$TEXLIVE_VERSION/texmf-var
	  collection-basic 1
	  collection-bibtexextra 1
	  collection-binextra 1
	  collection-context 1
	  collection-documentation-arabic 1
	  collection-documentation-base 1
	  collection-documentation-bulgarian 1
	  collection-documentation-chinese 1
	  collection-documentation-czechslovak 1
	  collection-documentation-dutch 1
	  collection-documentation-english 1
	  collection-documentation-finnish 1
	  collection-documentation-french 1
	  collection-documentation-german 1
	  collection-documentation-italian 1
	  collection-documentation-japanese 1
	  collection-documentation-korean 1
	  collection-documentation-mongolian 1
	  collection-documentation-polish 1
	  collection-documentation-portuguese 1
	  collection-documentation-russian 1
	  collection-documentation-slovenian 1
	  collection-documentation-spanish 1
	  collection-documentation-thai 1
	  collection-documentation-turkish 1
	  collection-documentation-ukrainian 1
	  collection-documentation-vietnamese 1
	  collection-fontsextra 1
	  collection-fontsrecommended 1
	  collection-fontutils 1
	  collection-formatsextra 1
	  collection-games 1
	  collection-genericextra 1
	  collection-genericrecommended 1
	  collection-htmlxml 1
	  collection-humanities 1
	  collection-langafrican 1
	  collection-langarabic 1
	  collection-langarmenian 1
	  collection-langcjk 1
	  collection-langcroatian 1
	  collection-langcyrillic 1
	  collection-langczechslovak 1
	  collection-langdanish 1
	  collection-langdutch 1
	  collection-langfinnish 1
	  collection-langfrench 1
	  collection-langgerman 1
	  collection-langgreek 1
	  collection-langhebrew 1
	  collection-langhungarian 1
	  collection-langindic 1
	  collection-langitalian 1
	  collection-langlatin 1
	  collection-langlatvian 1
	  collection-langlithuanian 1
	  collection-langmongolian 1
	  collection-langnorwegian 1
	  collection-langother 1
	  collection-langpolish 1
	  collection-langportuguese 1
	  collection-langspanish 1
	  collection-langswedish 1
	  collection-langtibetan 1
	  collection-langturkmen 1
	  collection-langvietnamese 1
	  collection-latex 1
	  collection-latex3 1
	  collection-latexextra 1
	  collection-latexrecommended 1
	  collection-luatex 1
	  collection-mathextra 1
	  collection-metapost 1
	  collection-music 1
	  collection-omega 1
	  collection-pictures 1
	  collection-plainextra 1
	  collection-pstricks 1
	  collection-publishers 1
	  collection-science 1
	  collection-texinfo 1
	  collection-texworks 1
	  collection-xetex 1
	  from_dvd 0
	  option_autobackup 1
	  option_backupdir tlpkg/backups
	  option_desktop_integration 1
	  option_doc 1
	  option_file_assocs 1
	  option_fmt 1
	  option_letter 0
	  option_path 0
	  option_post_code 1
	  option_src 1
          option_sys_bin $TEXLIVE_DIR/$TEXLIVE_VERSION/bin/$TL_PLATFORM
          option_sys_info $TEXLIVE_DIR/$TEXLIVE_VERSION/texmf/doc/info
          option_sys_man $TEXLIVE_DIR/$TEXLIVE_VERSION/texmf/doc/man
	  option_w32_multi_user 0
	  option_write18_restricted 1
	  portable 0
End_Of_File
}

createSHProfile() {
cat <<End_Of_File > zzz-texlive.sh
#
#    /etc/profile.d/zzz-texlive.sh 
#
TL_DIR="$TEXLIVE_DIR/$TEXLIVE_VERSION"

arch=\`arch\`
case \$arch in
    i?86) arch=i386;;
esac
export PATH=\${TL_DIR}/bin/\${arch}-linux:\$PATH
export MANPATH=\${TL_DIR}/texmf/doc/man:\$MANPATH
export INFOPATH=\${TL_DIR}/texmf/doc/info:\$INFOPATH
unset TEXINPUTS
unset TEXMFCONFIG

unset x
End_Of_File
}

createCSHProfile() {
cat <<End_Of_File > zzz-texlive.csh
#
#    /etc/profile.d/zzz-texlive.csh 
#

set TL_DIR="$TEXLIVE_DIR/$TEXLIVE_VERSION"

set arch=\`arch\`
switch ( \$arch )
  case i?86: 
    set arch=i386
endsw
setenv PATH \${TL_DIR}/bin/\${arch}-linux:\$PATH
setenv MANPATH \${TL_DIR}/texmf/doc/man:\$MANPATH
setenv INFOPATH \${TL_DIR}/texmf/doc/info:\$INFOPATH
unset TEXINPUTS
unset TEXMFCONFIG
End_Of_File
}

echo -n "Detect the current Linux distribution: "
if [ -e /etc/debian_version ] ; then
  LOCAL_LINUX_DISTRO=1
elif [ -e /etc/SuSE-release ] ; then
#  if [ `grep -c -i suse /etc/os-release` -gt 0 ] ; then
    LOCAL_LINUX_DISTRO=0
#  fi
else
  LOCAL_LINUX_DISTRO=-1 # unknown
fi

case $LOCAL_LINUX_DISTRO in
  0) echo "SuSE Linux" ;;
  1) echo "Debian/Ubuntu Linux" ;;
 -1) echo " We have an unknown Linux distro! We will quit :-("
     exit 1 ;;
esac

TEMP_DIR="/tmp/texlive"
trap "rm -rf $TEMP_DIR" 1 2 3 7 13 15
#voss@shania:~/Linux-Unix/eitl> trap -l
#   1) SIGHUP	 	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
#   6) SIGABRT	 	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
#  11) SIGSEGV		12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
#  16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
#  21) SIGTTIN		22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
#  26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
#  31) SIGSYS		34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
#  38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
#  43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
#  48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
#  53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
#  58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
#  63) SIGRTMAX-1	64) SIGRTMAX	

MAX_WGET_TRIES=5 
TL_INSTALL_SCRIPT="install-tl-unx.tar.gz"
TL_NET="http://mirror.ctan.org/systems/texlive/tlnet"
GENERIC_URL="${TL_NET}/$TL_INSTALL_SCRIPT"
#tl_install_url={$GENERIC_URL}
#LOCAL_SYSTEM=`uname -m`
# A server shouldn't need more than $MAX_TIME sec for download of $TL_INSTALL_SCRIPT
# 2,5MB at 1MB/s =~ 20 sec
MAX_TIME=20
WGET_TIMEOUT=20

# We need english messages from the program calls and the dot for decimals.
unset LC_ALL
LANG=C

echo -n "Create directory $TEMP_DIR"
mkdir -p "$TEMP_DIR"
echo " ... done"
cd "$TEMP_DIR"
if ! command -v wget >/dev/null 2>&1; then
    echo "$0: need the wget package installed to run this. Please install it." >&2
    exit 1
fi

#
# First we get the install script from a mirror with testing of the
# download speed. We save the mirror's URL.
#

for i in `seq 0 $MAX_WGET_TRIES`; do
  while true; do
    x=1
    /bin/rm -f $TL_INSTALL_SCRIPT*
    echo -n "Get the install script from a CTAN mirror ..."
    /usr/bin/wget --timeout=$WGET_TIMEOUT $GENERIC_URL &> wgetLog
    if [ $? -eq 0 ] ; then    
      echo " done"
      thisURL=`grep -i location wgetLog| cut -d" " -f2`
#      thisURL=$(echo $wgetLog | sed -e 's#^.*Found Location: \([^ ]*\) .*$#\1#')
      tl_install_url=${thisURL%/*}
#      tl_install_url=$(echo $thisURL | sed -e "s#\(.*\)$TL_INSTALL_SCRIPT#\1#")
      thisTime=`grep "100%"  wgetLog | cut -d"=" -f2 | tr -d "s"` | cut -d"." -f1
#      thisTime=$(echo $wgetLog | sed -e 's#^.* \([^ ]*\)$#\1#')
#      thisTime=$(printf %0.f $thisTime)
      if [ $TEXLIVE_VERBOSE -gt 0 ]; then
        echo "thisURL: $thisURL"
        echo "tl_install_url: $tl_install_url"
        echo "thisTime: $thisTime sec"
      fi
      if (( thisTime > MAX_TIME )); then
        echo "Slow server! Next try!"
      else
        x=0
        echo -e "Success! This is a good server:\n  $tl_install_url"
        break
      fi
    else
      echo "Server not accessible. Next try!"
    fi
  done
  if [ $x -eq 0 ]; then 
    break
  fi
  echo "I'll use : $tl_install_url"
done

if [ $i -eq $MAX_WGET_TRIES ]; then 
  echo "More than $MAX_WGET_TRIES tries without effect. I'll give it up!"
  ExitError
fi

echo -n "Unpack the shell script"
gzip -d -c < $TL_INSTALL_SCRIPT | tar xf - 
echo " ... done"

#echo -n "Get the current version of TeXLive ... "
#TLCONFIG="${tl_install_url}/tlpkg/TeXLive/TLConfig.pm"
#TEXLIVE_VERSION=`wget -O- -q ${TLCONFIG} | sed -ne '/^ *\$ReleaseYear *=/s/.*= *\([0-9]*\) *;$/\1/p'`
#echo "done"

TEXLIVE_INSTALL_PREFIX="$TEXLIVE_DIR"

echo -n "go into the install directory ... "
workingdir=`tar ztf install-tl-unx.tar.gz | head -1`
cd "$workingdir"
echo "done"
echo -n "get the TeXLive version: "
TEXLIVE_VERSION=`./install-tl -version | grep version | cut -d " " -f 5`
#`./install-tl -version | sed -r 's#^.+ ([^ ]) *#\1#'` 

echo "$TEXLIVE_VERSION"
TL_PLATFORM=`./install-tl -print-platform`
echo "We have the platform: $TL_PLATFORM"
PROFILE_NAME="${TEXLIVE_DIR}/tl-${TEXLIVE_VERSION}.profile"
echo -n "Create profile ${PROFILE_NAME} for TeXLive ... "
createTLProfile
echo "done"

if [ $TEXLIVE_DEMO -eq 0 ]
then
echo "We will delete an existing local TeX installation. Have to run it with sudo ... "
case $LOCAL_LINUX_DISTRO in
  0) sudo zypper rm -y texlive;;
  1) sudo apt-get purge texlive ;;
esac
echo "done"
fi

echo "Now we start the main install procedure. Time enough to get a cup of coffee ... "
echo "Repository: $tl_install_url"
echo "Profile   : $PROFILE_NAME"
if [ $TEXLIVE_DEMO -gt 0 ]
then
  echo "sorry, no cup of coffee, we have only the demonstration mode ... :-)"
else
  ./install-tl -repository $tl_install_url --profile=$PROFILE_NAME
fi
echo "TeXLive installation fished :-)"

echo -n "Create path setting and alias names ... "
if [ $CREATE_PROFILE_FILES -eq 0 ] ; then
  cp ~/.bashrc ~/.bashrc.eitl 2> /dev/null
  echo "export PATH=$TEXLIVE_DIR/$TEXLIVE_VERSION/bin/$TL_PLATFORM:\$PATH" >> ~/.bashrc
  echo "export MANPATH=$TEXLIVE_DIR/$TEXLIVE_VERSION/texmf/doc/man:\$MANPATH" >> ~/.bashrc
  echo "export INFOPATH=$TEXLIVE_DIR/$TEXLIVE_VERSION/texmf/doc/info:\$INFOPATH" >> ~/.bashrc
  echo "unset TEXINPUTS" >> ~/.bashrc
  echo "unset TEXMFCONFIG" >> ~/.bashrc
  source ~/.bashrc
fi
echo "alias updmap='updmap-sys'" >> ~/.alias
echo "alias fmtutil='fmtutil-sys'" >> ~/.alias
echo "done" 
source ~/.alias

echo "Set new path for local actions ... "
export PATH=$TEXLIVE_DIR/$TEXLIVE_VERSION/bin/$TL_PLATFORM:$PATH 
echo $PATH
echo "done"
if [ $TEXLIVE_DEMO -lt 2 ]
then
echo "Now install the non free fonts ..."
wget -q http://tug.org/fonts/getnonfreefonts/install-getnonfreefonts
texlua ./install-getnonfreefonts
getnonfreefonts -a
echo "... done"
fi

rm -f ./install-getnonfreefonts


if [ $TEXLIVE_DEMO -eq 0 ]
then
echo "Now we install two GUIs, TeXmaker and TeXworks ... "
echo "At first we have to fool the system, that its own TeX is installed."
echo "For installing packages we have to be a superuser. Running sudo ... "
case $LOCAL_LINUX_DISTRO in
  0)
     wget -q http://mirror.ctan.org/support/texlive/texlive-dummy/openSUSE/texlive-dummy-2012.9999-1.noarch.rpm
     sudo rpm -U ./texlive-dummy-2012.9999-2.noarch.rpm
     sudo rm -f /etc/profile.d/zzz-texlive*
     sudo zypper install -y texworks
     sudo zypper install -y texmaker ;;
  1) wget http://archiv.dante.de/~herbert/Ubuntu/texlive-dummy_1.0_all.deb
     wget -q http://archiv.dante.de/~herbert/Ubuntu/texlive-dummy.ctl
     sudo dpkg -i texlive-dummy_1.0_all.deb &> /dev/null
     sudo apt-get install ./texlive-dummy_1.0_all.deb 
     sudo apt-get install texworks
     sudo apt-get install texmaker
esac
fi

if [ $CREATE_PROFILE_FILES -gt 0 ] ; then
  echo "Create as root system profiles /etc/zzz-texlive.(c)sh ... "
  createSHProfile
  createCSHProfile
  sudo rm -f /etc/profile.d/zzz-texlive*
  sudo mv zzz-texlive.sh /etc/profile.d/
  sudo mv zzz-texlive.csh /etc/profile.d/
  echo "done"
fi
echo -n "We remove all temporary files and directories ... "
rm -rf "$TEMP_DIR"
echo "... done"

cd ~

#echo "I'll run the TeXLive Update Manager, to get the latest file versions ... "
#$TEXLIVE_DIR/$TL_YEAR/bin/$TL_PLATFORM/tlmgr --self --all update > /dev/null
#echo "... done"
clear
echo "*** Now logout and login again ***"
echo "Then all is done and TeXLive should work!"

exit 0


#http://tug.org/fonts/getnonfreefonts/install-getnonfreefonts
#ftp://dante.ctan.org/tex-archive/support/texlive/texlive-dummy/openSUSE/texlive-dummy-2012.9999-1.noarch.rpm