%
% A new installer for TeX Live
% Norbert Preining, Reinhard Kotucha, Siep Kroonenberg
% Article presented on the 16th BachoTeX meeting, Bachotek ?? May 2008
%
% Copyright 2007 Norbert Preining at al.
% You can redistribute and/or modify this document under the terms of the
% GNU General Public License as published by the Free Software Foundation;
% either version 2 of the License, or (at your option) any later version.
%
%\documentclass{arstexnica}
\documentclass{ltugproc}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[english]{babel}
\usepackage{graphicx}
\usepackage{fancyvrb}
\usepackage{url}
\usepackage{marvosym}
\usepackage{listings}
\lstset{frame=lines,basicstyle=\ttfamily,showspaces=true,prebreak={\Righttorque},postbreak={\Lefttorque},breaklines}
\usepackage{microtype}

\usepackage{hyperref} % should be loaded last because it patches other
                      % packages.

\newcommand{\tl}{\TeX~Live}
\newcommand{\ctan}{CTAN}
\newcommand{\tpm}{\texttt{tpm}}
\newcommand{\tpms}{\tpm{}s}
\newcommand{\tlpsrc}{\texttt{tlpsrc}}
\newcommand{\tlpsrcs}{\tlpsrc{}s}
\newcommand{\tlpobj}{\texttt{tlpobj}}
\newcommand{\tlpobjs}{\tlpobj{}s}
\newcommand{\tlpdb}{\texttt{tlpdb}}
\newcommand{\tlpdbs}{\tlpdb{}s}

\newcommand{\pl}{Perl}
\newcommand{\gs}{Ghostscript}
\newcommand{\tlu}{\texttt{texlua}}
\newcommand{\kpse}{\texttt{kpathsea}}

% from l2tabuen:
\tolerance 1414
\hbadness 1414
\emergencystretch 1.5em
\hfuzz 0.3pt
%\widowpenalty -10000
\vfuzz \hfuzz
%\raggedbottom


\setcounter{topnumber}{4}
\setcounter{bottomnumber}{4}
\setcounter{totalnumber}{10}
\renewcommand{\textfraction}{0.15}
\renewcommand{\topfraction}{0.85}
\renewcommand{\bottomfraction}{0.70}
\renewcommand{\floatpagefraction}{0.66}


\hypersetup{pdftitle={A new installer for \tl},
   pdfauthor={R. Kotucha, S. Kroonenberg, N. Preining},
   pdfsubject={A new installer for \tl},
   pdfkeywords={TeX Live, installer, ...}}

\hyphenation{infra-struc-ture}

%\catcode`>=\active
%\def>#1<{\texttt{#1}}
\DefineShortVerb{\|}
\begin{document}
%\begin{article}
%\selectlanguage{italian}%

\title{A new installer for \tl}%%%\thanks{%
%  Article presented on the 16th Bacho\TeX meeting, Bachotek ?? May 2008}}

\author{Reinhard Kotucha}
\address{Marschnerstr.~25\\
	30167~Hannover, Germany}
\netaddress{reinhard.kotucha@web.de}

\author{Siep Kroonenberg}
\address{Rijksuniversiteit Groningen\\
	Department of Economics\\
        P.O.~Box~800\\
	9700~AV~Groningen, the Netherlands}
\netaddress{siepo@cybercomm.nl}

\author{Norbert Preining}
\address{Vienna University of Technology\\
	Wiedner Hauptstr.\ 10\\
	1040 Wien, Austria}
\netaddress{preining@logic.at}


\begin{abstract}
  \tl\ has a new package infrastructure, primarily developed by
  Norbert Preining, and inspired by the Debian GNU/Linux packaging
  system.

  We shall present a new \tl\ installer, based on the new package
  infrastructure. It includes a text based as well a graphical user
  interface.  Among other new features, installing \tl\ from the
  Internet is now possible. It should work on all platforms
  supported by \tl.
\end{abstract}

\maketitle

%
% does not work in normal arstexnika mode, needs standalone, I leave
% this up to the editors
%\tableofcontents

\section{Introduction}
\label{sec:intro}

In this paper we introduce the new \tl\ installer. Its creation was
necessitated by the new package infrastructure, which is described
elsewhere in these proceedings.

However, there is more news, also from a user's point of view. In
particular:
\begin{itemize}
\item It will be possible to install \tl\ from the Internet.
\item The Windows version is much more in line with Unix versions.
\item There is just one installer, which can run either in text
  mode, emulating the former install-tl.sh shell script,
  or in GUI mode, emulating the former tlpmgui.
\end{itemize}

\begin{figure}[htb]
  \centering
  \resizebox{\columnwidth}{!}{\includegraphics{install08text}}
  \caption{Main menu of the text mode installer}
  \label{fig:text_main_menu}
\end{figure}

\section{\tlu}
\label{sec:texlua}

Nowadays \TeX{} contains a customized copy of Lua as embedded
scripting language. When called as \tlu, it acts as a standalone Lua
interpreter, customized for a \TeX{} environment. This is a very
attractive scripting solution:
\begin{itemize}
\item no version worries: \tlu{} scripts should simply match the
  \TeX{} version they are part of.
\item \tlu{} has \kpse\ compiled in.  In a \tlu{} script \kpse{}
  file searching happens within the same process, which can speed
  things up a lot.
\item An embedded scripting language is immune from the kind of
  bloat suffered by popular scripting languages such as \pl{} and
  Ruby.
\end{itemize}
Under Windows, the |.texlua| extension is made an executable file
type.

\section{Install \tl\ from the Internet}
\label{sec:internet}

It is now possible to install \tl\ from a remote server.  Thanks to
the new infrastructure, the package database which tells the
installer which packages have to be downloaded and how to install
them, is a single file.

Two installers for network downloads are provided.
|install-tl-unx.tar.gz.| supports Unix only.  |install-tl.zip|
additionally contains a small subset of \pl\ for Windows which is
required to bootstrap the system.  The latter works on all platforms
supported by \tl.  The sole reason for providing a separate package
for Unix is its significantly smaller size.


\section{A new compression Algorithm}
\label{sec:lzma}

Using |.tar.lzma| compression instead of |.zip| reduces the size of the
compressed packages by 20\%.  It cannot be assumed that |lzma|
decompressors are available on any platform, hence they have to be
provided for all platforms supported by \tl.  Fortunately there is a
program `|lzmadec|' available for all platforms.  The size of the
executable file is only 12\,kB.

\section{Bringing Windows in line with Unix}

\tl\ 2008 supports Windows 2000 and later. By dropping older Windows
versions, there is much less need to treat Windows specially.

\subsection{\texttt{\$HOME} and multi-user support}
Under Windows 2000 and later, users have a real home directory,
viz. \verb+%USERPROFILE%+, usually
\verb+C:\Documents and Settings\+\textit{username}.

This is now reflected in tilde expansion by \kpse, thanks to Karl
Berry: \verb+~/texmf+ is expanded to \verb+%USERPROFILE%\texmf+
under Windows and to \verb+$HOME/texmf+ under Unix.

It is also possible to differentiate between system settings and
user settings. Now there is no reason any more to have a different
set of \texttt{texmf} trees or to leave out scripts such as
\texttt{fmtutil-sys} and \texttt{updmap-sys}. It also shares the
Unix \texttt{texmf.cnf}.

\subsection{Scripting}
We cannot count on the presence of the usual Unix scripting
languages. We deal with this by including a limited subset of \pl{}
for Windows, which contains just enough modules to run the installer
and the \pl{} scripts which are part of \tl.

To prevent interference with any pre-existing \pl, we make it
invisible to the system by not placing it on the searchpath and by
not creating or changing any \pl-related settings. Instead, the
\tl\ \pl\ scripts are called via wrapper scripts that know how to
find Perl and that create the environment variables it needs for the
duration of the job. In the case of the installer itself, the
wrapper is a simple batchfile (but not so simple that it would have
worked under earlier Windows versions). But in most cases, the
wrapper is written in \tlu; see section \ref{sec:texlua}.

Most likely, there won't be a Bourne-compatible shell either. But in
the new \tl, most shell scripts have been replaced by \pl- and
\tlu{} scripts, which also work under Windows. So we just about got
rid of \texttt{.exe} files replacing Unix scripts.

\subsection{\gs}

\tl{} for Windows also includes a hidden copy of \gs, another
fixture of Unix systems that is usually absent from Windows.  The
most important batch files provided by \gs\ have been ported to
\tlu{}, see \ref{sec:texlua}.

\begin{figure*}[htb]
  \centering
  \resizebox{\textwidth}{!}{\includegraphics{install08gui}}
  \caption{The main menu of the GUI installer}
  \label{fig:gui_main_menu}
\end{figure*}

\section{Testing with virtual machines}
We do much of our testing with virtual machines. With programs such
as VirtualBox or VMware you can run a guest operating system as a
program inside a host operating system.

Even if host and guest are the same operating system, it is a huge
advantage that the host will be unaffected, and that the guest is
free from the idiosyncrasies of the host, which is after all your
own highly tuned private workstation.

Normally, the filesystem of the guest is on a virtual disk, which is
a very large file on the host system.  An installation can simply be
reverted by making a fresh copy from backup of this very large file.

The guest can access the \tl{} files via e.g. a shared folder or
Samba, using a virtual network interface. An Internet install can be
simulated with a webserver or ftp server on the host, also via a
virtual network interface. These server programs can simply use the
\tl{} working copy.

\newpage
\begin{thebibliography}{1}
\bibitem{PreiBT08} Norbert \textsc{Preining} 
\newblock \emph{The new \TeX~Live Infrastructure and Installer}
Talk held at Bacho\TeX\,2008.
\end{thebibliography}

%\bibliographystyle{arstexnica}
%\bibliography{atsample}

%\end{article}

\end{document}
