--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+ <head>
+ <link rel="stylesheet" href="../../mrtg-td/slides.css" type="text/css">
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+ <meta name="Language" content="en">
+ <meta name="Author" content="Petter Reinholdtsen">
+ </head>
+ <body>
+
+ <h1>Writing enterprise ready software</h1>
+
+ <p></p>
+
+ <p><tt><a href="http://www.hungry.com/~pere/mypapers/enterprise-software/enterprise-software.html">http://www.hungry.com/~pere/mypapers/enterprise-software/enterprise-software.html</a></tt></p>
+
+ <div class="presenter">Petter Reinholdtsen
+ <br>pere@hungry.com
+ <br>Debconf5, Helsinki 2005-06-12</div>
+
+ <h2>Overview</h2>
+ <ul>
+
+ <li>we are in trouble
+ <li>clues for the clueless
+ <li>multilevel configuration
+
+ </ul>
+
+<h2>We are in trouble</h2>
+
+<p>With 60000 users and about 150 home directory file servers
+ available from 12000 machines, users move from file server to file
+ server. This break several applications when the path to the users
+ home directory changes. (example: /mn/hegel/u1/pere to
+ /usit/saruman/u1/pere).</p>
+
+<!--
+Moving a user from one user disk to another break mozilla and
+openoffice configuration. - not using relative paths
+-->
+
+<h2>More trouble</h2>
+
+<p>With 900 linux machines with common user database and home
+directories while running different versions of programs, users will
+run several versions of a program with the same configuration
+files.</p>
+
+<!-- Trying to run with KDE 2 and 3 on different machines messes up
+the configuration - not handling downgrades
+
+- handle up/downgrades - people will use different versions on
+different machines, with common home directories
+
+ -->
+
+<h2>Some old trouble</h2>
+
+
+<p>Some users lost the source of their production systems, and need
+the binaries to keep working for 10-15 years.</p>
+
+<!-- 15 year old binaries should keep working. The source is lost
+long time ago, and the program is still used in production. -->
+
+<h2>No room for more trouble</h2>
+
+<p>When the file system for the PostgreSQL database in production goes
+full, one do not want to kick out 30000 users to take down the
+database and resize the file system.</p>
+
+<h2>Disktrouble</h2>
+
+<p>RAID is only only useful until the last redundancy disk is lost.
+
+<p>Automatic RAID status systems need API or command line tools to
+extract the status. Not like afacli, which go into interactive mode
+when an error is detected.
+
+<h2>Installation trouble</h2>
+
+<p>Trying to compile/install software on Irix, Solaris, Linux, HP-UX,
+Tru64 Unix, MacOSX and AIX when the process require a sysadmin to sit
+around to answer questions, change CDs, or insert licenses is both
+painful and prone to errors.</p>
+
+<h2>Network trouble</h2>
+
+<p>Trying to get some network server to work when it require to use
+some given port range, which is already taken by some other service
+and blocked in the router -- or try to get the coorporate network
+gatekeeper to open up the firewall</p>
+
+<h2>Version trouble</h2>
+
+<p>Given three tcl or php applications, is there one version of TCL or
+PHP usable with all of these?
+
+<h2>Usability trouble</h2>
+
+<p>When starting a program from the meny, where does it go if nothing
+appear on the screen?
+
+<p>Do users always read their ~/.xsession-error file?
+
+
+Providing hooks to the local admins
+
+backdoor - alternative way in. fixing 800 machines by hand is not
+possible. - ssh config fuckup
+
+reduce flexibility. trying to support people over the phone when the
+gui is different for every person is a pain.
+
+
+<h2>Clues for the clueless</h2>
+
+<ul>
+
+<li>at least three levels of config files; package defaults, site
+ defaults and host defaults
+
+<li>never ask questions at compile time. when compiling automatically
+ for 10 platforms, a sysadmin do not want to sit down and answer
+ questions.
+
+<li>split installation tasks in two, one for installation, and one for
+ the operations needing root access. (build / configuration as well)
+
+<li>make sure the software can be installed anywhere (location
+ independent), avoid hardcoding paths into the binaries.
+
+<li>make the source available to make it possible to fix problems on
+ site, and to use it on different platforms (os/hw) in the future
+
+<li>Make paths into users home directories relative to ~user/, as users
+ will move from disk to disk, or copy their home directory from site
+ to site. Always convert paths when saving config files.
+
+<li>depend on as few libraries as possible, as it is a pain to get every
+ extra library in place
+
+<li>use well known libraries instead of making your own implementation.
+ reduses the security risk.
+
+<li>make sure libraries, and programming languages are backwards
+ compatible.
+
+<li>use a well known license. it is a pain to evaluate every new
+ license
+
+<li>when distributing source, do not use vendor specific compiler
+ features. It will not work with the other vendors compilers used to
+ compile on site.
+
+<li>write portable code, make sure it works the same on all platforms.
+
+<li>make the software work out of the box (require as little
+ configuration as possible).
+
+<li>avoid resource leaks (memory, shared memory, locks, file
+ descriptors, X server resources, etc). Restarting a long-running
+ server is not always an option.
+
+<li>system services should send messages to syslog. always log why when
+ crashing. always log problems and errors.
+
+<li>reuse configuration. ktouch have its own x layout setting.
+ better to fetch the current one from X like xkeycaps.
+
+</ul>
+
+ <h2>Solving the upgrade problem using multilevel
+ configuration</h2>
+
+ <ul>
+
+ <li>local configuration should be kept during upgrades</li>
+
+ <li>easiest to do if the local configration is separate from the
+ package default
+
+ <li>several actors what to have a say in the service
+ configuration. allow them to have their own files
+
+ <li>Example: read config from /usr/share/foo/config,
+ /site/share/foo/config, /etc/foo/config, ~/.foo/config,
+ /etc/foo/config.fixed, /site/share/foo/config.fixed,
+ /usr/share/foo/config.fixed.
+
+ <li>make it possible to provide package, site, host and user
+ defaults, as well as locking down features on a host, site and
+ package level.
+
+ <li>always well known where the admin made his changes
+
+ </ul>
+
+
+
+ <h2>Thank you very much</h2>
+
+ <h3>Questions?</h3>
+
+ </body>
+</html>