1 <!DOCTYPE HTML PUBLIC
"-//IETF//DTD HTML//EN">
4 <link rel=
"stylesheet" href=
"../../mrtg-td/slides.css" type=
"text/css">
5 <meta http-equiv=
"Content-Type" content=
"text/html; charset=iso-8859-1">
6 <meta name=
"Language" content=
"en">
7 <meta name=
"Author" content=
"Petter Reinholdtsen">
11 <h1>Writing enterprise ready software
</h1>
15 <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>
17 <div class=
"presenter">Petter Reinholdtsen
19 <br>Debconf5, Helsinki
2005-
06-
12</div>
25 <li>clues for the clueless
26 <li>multilevel configuration
30 <h2>We are in trouble
</h2>
32 <p>With
60000 users and about
150 home directory file servers
33 available from
12000 machines, users move from file server to file
34 server. This break several applications when the path to the users
35 home directory changes. (example: /mn/hegel/u1/pere to
36 /usit/saruman/u1/pere).
</p>
39 Moving a user from one user disk to another break mozilla and
40 openoffice configuration. - not using relative paths
45 <p>With
900 linux machines with common user database and home
46 directories while running different versions of programs, users will
47 run several versions of a program with the same configuration
50 <!-- Trying to run with KDE 2 and 3 on different machines messes up
51 the configuration - not handling downgrades
53 - handle up/downgrades - people will use different versions on
54 different machines, with common home directories
58 <h2>Some old trouble
</h2>
61 <p>Some users lost the source of their production systems, and need
62 the binaries to keep working for
10-
15 years.
</p>
64 <!-- 15 year old binaries should keep working. The source is lost
65 long time ago, and the program is still used in production. -->
67 <h2>No room for more trouble
</h2>
69 <p>When the file system for the PostgreSQL database in production goes
70 full, one do not want to kick out
30000 users to take down the
71 database and resize the file system.
</p>
75 <p>RAID is only only useful until the last redundancy disk is lost.
77 <p>Automatic RAID status systems need API or command line tools to
78 extract the status. Not like afacli, which go into interactive mode
79 when an error is detected.
81 <h2>Installation trouble
</h2>
83 <p>Trying to compile/install software on Irix, Solaris, Linux, HP-UX,
84 Tru64 Unix, MacOSX and AIX when the process require a sysadmin to sit
85 around to answer questions, change CDs, or insert licenses is both
86 painful and prone to errors.
</p>
88 <h2>Network trouble
</h2>
90 <p>Trying to get some network server to work when it require to use
91 some given port range, which is already taken by some other service
92 and blocked in the router -- or try to get the coorporate network
93 gatekeeper to open up the firewall
</p>
95 <h2>Version trouble
</h2>
97 <p>Given three tcl or php applications, is there one version of TCL or
98 PHP usable with all of these?
100 <h2>Usability trouble
</h2>
102 <p>When starting a program from the meny, where does it go if nothing
103 appear on the screen?
105 <p>Do users always read their ~/.xsession-error file?
108 Providing hooks to the local admins
110 backdoor - alternative way in. fixing
800 machines by hand is not
111 possible. - ssh config fuckup
113 reduce flexibility. trying to support people over the phone when the
114 gui is different for every person is a pain.
117 <h2>Clues for the clueless
</h2>
121 <li>at least three levels of config files; package defaults, site
122 defaults and host defaults
124 <li>never ask questions at compile time. when compiling automatically
125 for
10 platforms, a sysadmin do not want to sit down and answer
128 <li>split installation tasks in two, one for installation, and one for
129 the operations needing root access. (build / configuration as well)
131 <li>make sure the software can be installed anywhere (location
132 independent), avoid hardcoding paths into the binaries.
134 <li>make the source available to make it possible to fix problems on
135 site, and to use it on different platforms (os/hw) in the future
137 <li>Make paths into users home directories relative to ~user/, as users
138 will move from disk to disk, or copy their home directory from site
139 to site. Always convert paths when saving config files.
141 <li>depend on as few libraries as possible, as it is a pain to get every
142 extra library in place
144 <li>use well known libraries instead of making your own implementation.
145 reduses the security risk.
147 <li>make sure libraries, and programming languages are backwards
150 <li>use a well known license. it is a pain to evaluate every new
153 <li>when distributing source, do not use vendor specific compiler
154 features. It will not work with the other vendors compilers used to
157 <li>write portable code, make sure it works the same on all platforms.
159 <li>make the software work out of the box (require as little
160 configuration as possible).
162 <li>avoid resource leaks (memory, shared memory, locks, file
163 descriptors, X server resources, etc). Restarting a long-running
164 server is not always an option.
166 <li>system services should send messages to syslog. always log why when
167 crashing. always log problems and errors.
169 <li>reuse configuration. ktouch have its own x layout setting.
170 better to fetch the current one from X like xkeycaps.
174 <h2>Solving the upgrade problem using multilevel
179 <li>local configuration should be kept during upgrades
</li>
181 <li>easiest to do if the local configration is separate from the
184 <li>several actors what to have a say in the service
185 configuration. allow them to have their own files
187 <li>Example: read config from /usr/share/foo/config,
188 /site/share/foo/config, /etc/foo/config, ~/.foo/config,
189 /etc/foo/config.fixed, /site/share/foo/config.fixed,
190 /usr/share/foo/config.fixed.
192 <li>make it possible to provide package, site, host and user
193 defaults, as well as locking down features on a host, site and
196 <li>always well known where the admin made his changes
202 <h2>Thank you very much
</h2>