% tools-slides.tex -- Slides for talk on software maintenance in AFS.
% $Id: pubsw-slides.tex 3178 2007-09-23 04:47:32Z eagle $
%
% Written by Russ Allbery <rra@stanford.edu>

\documentclass[landscape,semhelv]{seminar}
\usepackage{url}
\usepackage{hyperref}

\newpagestyle{mypagestyle}%
  {Stanford University \hfil \thedate \hfil \thepage}%
  {\hfil Russ Allbery (rra@stanford.edu) \hfil}
\pagestyle{mypagestyle}

\begin{document}

\begin{slide}
  \begin{center}
    {\Large Sitewide Unix Software Installation}

    \vspace{1in}
    
    Russ Allbery \\
    March 20, 2004
  \end{center}
\end{slide}

\begin{slide}
  \section*{Introduction}

  \begin{itemize}
  \item Manage 550 packages for seven architectures (alpha\_dux40,
    hp\_ux110, i386\_linux24, rs\_aix43, sgi\_65, sun4x\_58, sun4x\_59).

  \item Both free software (most of it) and licensed software, including a
    licensed software tree for only one Unix cluster.
    
  \item Three trees: pubsw for campus-wide software, newsw for software
    testing, and sweet for licensed software for one Unix cluster.

  \item Better Linux distributions making some of this obsolete.  Expect
    to significantly decrease the amount of software that we support in
    the near future in favor of using software packaged by distributions.

  \item Something like this needed for some time for Solaris and licensed
    software.
    
  \item Method originally developed by Larry Schwimmer.
  \end{itemize}
\end{slide}

\begin{slide}
  \section*{Contents}

  \begin{itemize}
  \item Basic layout concepts and @sys
  \item Volume naming and release management
  \item Compiling the software
  \item Installing the software
  \item Handling software with its own layout
  \item Other interesting problems
  \end{itemize}
\end{slide}

\begin{slide}
  \section*{Basic Layout}

  \begin{itemize}
  \item How @sys works and why it's important
  \item Central area organized by software package
  \item @sys and share directories inside each package directory
  \item Organized to match the standard file system layout, in each
    software package directory
  \item Symbolic link trees for each platform into package
  \item package an additional mount point for central area
  \item Single /usr/pubsw to /afs/ir/systems/@sys/pubsw link on each client
  \end{itemize}
\end{slide}

\begin{slide}
  \section*{Naming and Release Management}

  \begin{itemize}
  \item Everything must have a version number
  \item Every package gets its own volume, no matter how small
  \item Packages are upgraded just by changing the symlinks, making it
    easy to back out of an upgrade
  \item Use \texttt{frak} to check for changes before release
  \item Can add a new minor platform by copying the link tree
  \end{itemize}
\end{slide}

\begin{slide}
  \section*{Freezing a Platform}

  \begin{itemize}
  \item Why you would want to do a freeze
  \item Copying the entire software pool
  \item Copying the link trees (not actually necessary)
  \item Can keep the frozen platform around as long as you want
  \end{itemize}
\end{slide}

\begin{slide}
  \section*{Compiling}

  \begin{itemize}
  \item Software compiled to look in /usr/pubsw for everything
  \item Shared vs. static libraries and library versioning
  \item Making sure shared libraries are found (LD\_RUN\_PATH)
  \item Be careful to compile on the oldest system
  \item Automating the compilation process (\texttt{wrap})
  \item Special case: Perl and site module directories
  \end{itemize}
\end{slide}

\begin{slide}
  \section*{Installing}

  \begin{itemize}
  \item Two regular choices: make prefix= vs. make DESTDIR=
  \item libtool and library or binary relinking
  \item @sys directory vs. share directory
  \item Testing out of the read/write volumes
  \item Testing using the separate newsw tree (and when you can't)
  \item ACLs: public, site-licensed, only some machines?
  \item Be careful of inodes and shared libraries
  \item share vs. lib and how much you want to fiddle
  \end{itemize}
\end{slide}

\begin{slide}
  \section*{Packages with a Special Layout}

  \begin{itemize}
  \item The basic idea of /usr/pubsw/apps
  \item Examples: Oracle, most licensed software, Java JDK
  \item Still create symlinks for particular binaries
  \item Alternative: use wrapper scripts
  \item It's possible to edit paths inside binaries
  \end{itemize}
\end{slide}

\begin{slide}
  \section*{Other Problems}

  \begin{itemize}
  \item When you might need to change the @sys value for a platform
  \item Displaying information about installed packages
  \item Reverting changes to the same version (\texttt{frak})
  \item man page indexes and info dir files
  \item X libraries: don't do this yourself
  \item Where you want to avoid doing this, and the future of Linux, BSD
    ports, and other alternatives
  \end{itemize}
\end{slide}

\end{document}
