Este apéndice describe cómo descargar binarios para \emph{ksh93}, así como cómo descargar el código fuente para \emph{ksh93} y construir una versión funcional. Deberías hacer esto si tu sistema no tiene \emph{ksh93} en absoluto o si necesitas alguna de las características que solo están disponibles en las versiones más recientes.

\section{Sitios web de Korn Shell}
El punto de partida para todo lo relacionado con el shell Korn es \url{http://www.kornshell.com}, mantenido por David Korn, con enlaces agrupados en las siguientes categorías:

\begin{description}
	\item[Información] Al hacer clic en este enlace, se accede a una descripción general de una página sobre el shell Korn.
	\item[Software] Al hacer clic en este enlace, se encuentran enlaces al sitio de descargas de AT\&T (ver la siguiente sección), algún código de ejemplo, un artículo en línea para \emph{dtksh} y un enlace para \emph{tksh}. Estos dos últimos se describen en el Apéndice A.
	\item[Documentación] Este enlace lleva a una página con enlaces a información en línea, incluida información general, páginas de manual tanto para \emph{ksh88} como para \emph{ksh93}, libros y referencias sobre el shell Korn, y documentos sobre el shell Korn de diversas conferencias.
	\item[Recursos] Una lista de enlaces a otros recursos en la web para \emph{ksh} y muchos de los otros shells descritos en el Apéndice A, como \emph{bash} y \emph{dtksh}.
	\item[Diversión] David G. Korn, el programador, se encuentra con KoRN, el grupo de rock. Dicho y hecho.
\end{description}

\section{Lo que puedes descargar}
\url{http://www.research.att.com/sw/download} es el punto de partida para descargar el software de \emph{ksh}. El software está cubierto por una licencia de estilo de código abierto. La versión actual de la licencia se encuentra en \url{http://www.research.att.com/sw/license/ast-open.html}. Esta licencia se reproduce en el Apéndice D. Deberías leerla y entenderla primero; si sus términos no son aceptables para ti, no deberías descargar el código fuente o binarios del software desde el sitio web de AT\&T.

El software en el sitio web de AT\&T está disponible en diferentes <<paquetes>>, la mayoría de los cuales tienen nombres con el prefijo <<ast>>, que significa \emph{Advanced Software Tools} (Herramientas de Software Avanzado). Los paquetes de origen vienen como archivos tar comprimidos con \emph{gzip}, usando el sufijo de nombre de archivo \emph{.tgz}. Elige uno o más de los siguientes paquetes para descargar:

\begin{description}
	\item[ratz] Un programa ejecutable independiente para leer archivos tar comprimidos con \emph{gzip}. Úsalo si no tienes \emph{gzip} en tu sistema y no quieres molestarte en descargar y compilar \emph{gzip} primero. Puedes descargar el código fuente para este paquete o un ejecutable binario para cualquiera de las arquitecturas enumeradas en la Tabla \ref{Tab:C-1}.
	\item[ksh] Esta es la forma más rápida de obtener un ejecutable de \emph{ksh93}. Hay versiones disponibles para las arquitecturas enumeradas en la Tabla \ref{Tab:C-1}.
	\item[INIT] Este paquete debe descargarse al construir cualquiera de los siguientes paquetes fuente. Contiene los archivos y estructuras de directorio en los que dependen las herramientas y el sistema de construcción de AST.
	\item[ast-ksh] Este paquete construye solo la infraestructura de soporte (bibliotecas, programas de prueba de entorno, etc.) para \emph{ksh} y el ejecutable \emph{ksh}. Es lo más sencillo de construir.
	\item[ast-base] Este paquete construye todo en el paquete \emph{ast-ksh} y algunas herramientas AST básicas adicionales. En particular, incluye \emph{pax}, una herramienta de archivado que combina funciones de \emph{tar(1)} y \emph{cpio(1)}, y \emph{nmake}, una versión significativamente mejorada del programa estándar \emph{make(1)} de Unix. También incluye las bibliotecas \emph{sfio} (Safe Fast I/O) y \emph{ast}, que puedes usar para tus propios programas.
	\item[ast-open] Este paquete construye todo en el paquete ast-base y muchas herramientas adicionales. Ten en cuenta que \emph{tksh} (ver Apéndice A) está incluido en este paquete.
\end{description}

Cada uno de los paquetes (excepto \emph{INIT}) también está disponible como binarios precompilados. La Tabla C-1 enumera las arquitecturas disponibles para estos paquetes. También hay traducciones de locales para algunos locales y algunos programas.

\begin{table}[h]
	\center
	\caption{Arquitecturas admitidas para programas AST}
	\label{Tab:C-1}
	\begin{tabular}{|m{3cm}|m{12cm}|} \hline
		\textbf{Nombre} & \textbf{SO/Arquitectura} \\ \hline
darwin.ppc & Apple's MacOS X (también conocido como Darwin) para Motorola Power PC \\\hline
hp.pa & Hewlett-Packard HP-UX para HP Precision Architecture \\\hline
ibm.risc & AIX de IBM para RS/6000 \\\hline
linux.i386 & GNU/Linux en Intel 80386 y superior \\\hline
linux.s390 & GNU/Linux en el mainframe IBM S/390 \\\hline
mvs.390 & MVS de IBM en el mainframe IBM S/390 \\\hline
netbsd.i386 & NetBSD en Intel 80386 y superior (ver \url{http://www.netbsd.org}) \\\hline
openbsd.i386 & OpenBSD en Intel 80386 y superior (ver \url{http://www.openbsd.org}) \\\hline
osf.alpha & OSF/1 en el procesador Compaq (anteriormente Digital) Alpha \\\hline
sgi.mips3 & Silicon Graphics (SGI) Irix en el procesador MIPS \\\hline
sol.sun4 & Solaris 5.4 en la arquitectura Sun SPARC \\\hline
sol6.sun4 & Solaris 5.6 en la arquitectura Sun SPARC \\\hline
sol7.i386 & Solaris 7 en Intel 80386 y superior \\\hline
sol7.sun4 & Solaris 7 en la arquitectura Sun SPARC \\\hline
sol8.sun4 & Solaris 8 en la arquitectura Sun SPARC \\\hline
sun4 & SunOS 4.x en la arquitectura Sun SPARC \\\hline
unixware.i386 & UnixWare (la última versión oficial de System V) en Intel 80386 y superior \\\hline
	\end{tabular}
\end{table}

\section{Construcción de ksh (Shell Korn)}
Construir cualquiera de los paquetes a partir del código fuente es bastante sencillo. Todos los detalles, junto con preguntas frecuentes y notas, se encuentran en el sitio web de AT\&T. Aquí tienes una guía paso a paso de los pasos. Mostramos los pasos para el paquete \emph{ast-open}, pero son idénticos para los demás paquetes de código fuente.

\begin{enumerate}
	\item Asegúrate de tener un compilador de C para tu sistema. Se prefiere un compilador de C ANSI/ISO, pero un compilador K\&R también funcionará. Obtener un compilador de C si no tienes uno está más allá del alcance de este libro; contacta a tu administrador de sistema local.
	\item Descarga el/los paquete(s) que deseas construir en un directorio vacío. Aquí, construimos el paquete ast-open del 31 de octubre de 2001:

\begin{lstlisting}[language=bash]
$ ls 
INIT.2001-10-31.tgz ast-open.2001-10-31.tgz
\end{lstlisting}

	\item Crea el directorio \texttt{lib/package/tgz} y mueve los archivos allí:

\begin{lstlisting}[language=bash]
$ mkdir lib lib/package lib/package/tgz
$ mv *.tgz lib/package/tgz
\end{lstlisting}

	\item Extrae el paquete \emph{INIT} manualmente:

\begin{lstlisting}[language=bash]
$ gzip -d < lib/package/tgz/INIT.2001-10-31.tgz | tar -xvpf - 
\r\v\vNOTICE -- LICENSED SOFTWARE -- SEE README FOR DETAILS\r\v\v 
README 
src/Makefile 
src/cmd/Makefile 
src/lib/Makefile 
...
\end{lstlisting}

Si no tienes \emph{gzip}, usa el programa \emph{ratz}, como se describió anteriormente.

	\item Inicializa la lista de paquetes disponibles:

\begin{lstlisting}[language=bash]
$ bin/package read 
\r\v\vNOTICE -- LICENSED SOFTWARE -- SEE README FOR DETAILS\r\v\v 
README 
src/Makefile 
src/cmd/Makefile 
src/lib/Makefile 
src/Mamfile 
...
\end{lstlisting}

	\item Inicia la compilación. Este paso es bastante detallado y llevará un tiempo. La duración exacta depende de la velocidad de tu sistema y compilador, y del paquete que estás construyendo:

\begin{lstlisting}[language=bash]
$ bin/package make 
package: initialize the /home/arnold/ast-open/arch/linux.i386 view 
package: update /home/arnold/ast-open/arch/linux.i386/bin/proto 
package: update /home/arnold/ast-open/arch/linux.i386/bin/mamake 
package: update /home/arnold/ast-open/arch/linux.i386/bin/ratz 
package: update /home/arnold/ast-open/arch/linux.i386/bin/release 
...
\end{lstlisting}

	\item Instala los archivos creados. Esto se puede hacer con el comando \texttt{bin/package install directory}, donde \emph{directory} es la ubicación para colocar las cosas.

Alternativamente, si todo lo que te interesa es el binario de \emph{ksh}, simplemente puedes copiarlo. El binario compilado estará en un directorio llamado \texttt{arch/ARCH/bin}, donde \emph{ARCH} representa tu arquitectura, como \emph{linux.i386}:

\begin{lstlisting}[language=bash]
cp arch/linux.i386/bin/ksh $HOME/bin/ksh93
\end{lstlisting}

	\item{¡Disfruta!}
\end{enumerate}
