]> pere.pagekite.me Git - homepage.git/blob - mypapers/enterprise-software/enterprise-software.html
First draft.
[homepage.git] / mypapers / enterprise-software / enterprise-software.html
1 <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
2 <html>
3 <head>
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">
8 </head>
9 <body>
10
11 <h1>Writing enterprise ready software</h1>
12
13 <p></p>
14
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>
16
17 <div class="presenter">Petter Reinholdtsen
18 <br>pere@hungry.com
19 <br>Debconf5, Helsinki 2005-06-12</div>
20
21 <h2>Overview</h2>
22 <ul>
23
24 <li>we are in trouble
25 <li>clues for the clueless
26 <li>multilevel configuration
27
28 </ul>
29
30 <h2>We are in trouble</h2>
31
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>
37
38 <!--
39 Moving a user from one user disk to another break mozilla and
40 openoffice configuration. - not using relative paths
41 -->
42
43 <h2>More trouble</h2>
44
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
48 files.</p>
49
50 <!-- Trying to run with KDE 2 and 3 on different machines messes up
51 the configuration - not handling downgrades
52
53 - handle up/downgrades - people will use different versions on
54 different machines, with common home directories
55
56 -->
57
58 <h2>Some old trouble</h2>
59
60
61 <p>Some users lost the source of their production systems, and need
62 the binaries to keep working for 10-15 years.</p>
63
64 <!-- 15 year old binaries should keep working. The source is lost
65 long time ago, and the program is still used in production. -->
66
67 <h2>No room for more trouble</h2>
68
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>
72
73 <h2>Disktrouble</h2>
74
75 <p>RAID is only only useful until the last redundancy disk is lost.
76
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.
80
81 <h2>Installation trouble</h2>
82
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>
87
88 <h2>Network trouble</h2>
89
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>
94
95 <h2>Version trouble</h2>
96
97 <p>Given three tcl or php applications, is there one version of TCL or
98 PHP usable with all of these?
99
100 <h2>Usability trouble</h2>
101
102 <p>When starting a program from the meny, where does it go if nothing
103 appear on the screen?
104
105 <p>Do users always read their ~/.xsession-error file?
106
107
108 Providing hooks to the local admins
109
110 backdoor - alternative way in. fixing 800 machines by hand is not
111 possible. - ssh config fuckup
112
113 reduce flexibility. trying to support people over the phone when the
114 gui is different for every person is a pain.
115
116
117 <h2>Clues for the clueless</h2>
118
119 <ul>
120
121 <li>at least three levels of config files; package defaults, site
122 defaults and host defaults
123
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
126 questions.
127
128 <li>split installation tasks in two, one for installation, and one for
129 the operations needing root access. (build / configuration as well)
130
131 <li>make sure the software can be installed anywhere (location
132 independent), avoid hardcoding paths into the binaries.
133
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
136
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.
140
141 <li>depend on as few libraries as possible, as it is a pain to get every
142 extra library in place
143
144 <li>use well known libraries instead of making your own implementation.
145 reduses the security risk.
146
147 <li>make sure libraries, and programming languages are backwards
148 compatible.
149
150 <li>use a well known license. it is a pain to evaluate every new
151 license
152
153 <li>when distributing source, do not use vendor specific compiler
154 features. It will not work with the other vendors compilers used to
155 compile on site.
156
157 <li>write portable code, make sure it works the same on all platforms.
158
159 <li>make the software work out of the box (require as little
160 configuration as possible).
161
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.
165
166 <li>system services should send messages to syslog. always log why when
167 crashing. always log problems and errors.
168
169 <li>reuse configuration. ktouch have its own x layout setting.
170 better to fetch the current one from X like xkeycaps.
171
172 </ul>
173
174 <h2>Solving the upgrade problem using multilevel
175 configuration</h2>
176
177 <ul>
178
179 <li>local configuration should be kept during upgrades</li>
180
181 <li>easiest to do if the local configration is separate from the
182 package default
183
184 <li>several actors what to have a say in the service
185 configuration. allow them to have their own files
186
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.
191
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
194 package level.
195
196 <li>always well known where the admin made his changes
197
198 </ul>
199
200
201
202 <h2>Thank you very much</h2>
203
204 <h3>Questions?</h3>
205
206 </body>
207 </html>