Author: Kev <klmitch@mit.edu>
[ircu2.10.12-pk.git] / RELEASE.NOTES
1 Release Notes for ircu2.10.11
2 Last Updated: August 17, 2001
3 Written by Kev <klmitch@mit.edu>
4 Based on a document written by Braden <dbtem@yahoo.com>
5
6 This is a brief description of the changes we have made to the server
7 since the release of ircu2.10.10.
8
9 This server is only compatible with other servers that are P10.  It is
10 compatible and is verified to work with Undernet server versions
11 u2.10.10 and above.  Note, however, that some advanced features are
12 only compatible with u2.10.11 and above.
13
14 Enhancements:
15
16 GLINE has been extended to allow IRC operators to issue global
17 G-lines; see doc/readme.gline for more information about how to use
18 this feature.  These extended features should not be used on networks
19 with u2.10.10 servers.
20
21 A new JUPE command has been added to permit servers to be juped in a
22 more reliable fashion.  This command should not be used on networks
23 with u2.10.10 servers.
24
25 Two new channel mode manipulation commands, OPMODE and CLEARMODE, have
26 been added.  OPMODE works exactly like MODE, except that 1) only IRC
27 operators can use it; 2) it ignores whether or not the operator is a
28 channel operator.  CLEARMODE is a reliable means of eradicating
29 certain channel modes; it is given an argument string consisting of
30 the modes to clear.  If that argument string is not given, it defaults
31 to "ovpsmikbl."  These commands should not be used on networks with
32 u2.10.10 servers.
33
34 When a channel MODE command from a remote user must be bounced, a
35 "MODE -o" for the user will also be sent, in order to attempt to
36 "heal" the desync.  Also, the old anti-hack code has been removed,
37 since servers never send MODEs except for bounces.
38
39 Most compile-time options have been converted to run-time options
40 which may be set through the configuration file or through the use of
41 the new commands SET, RESET, and GET; for more information about
42 these, please refer to doc/example.conf (for configuration file
43 information), doc/readme.features (for a list and description of the
44 options), and doc/readme.log (for a description of the logging
45 subsystem configuration).
46
47 A new logging subsystem has been written, making it much easier to get
48 ircd to write out log files, or to use syslog if that's desired.
49
50 The old chroot() code has been removed; that should now be handled via
51 an external wrapper.  Such a wrapper has been included in the tools
52 subdirectory.  PLEASE READ doc/readme.chroot IF YOU WISH TO USE
53 CHROOT-STYLE JAILS WITH IRCD.
54
55 The build system has been completely revamped; since most compile-time
56 options are now run-time, the few remaining ones can be placed in
57 ./configure and set with --with-* and --enable-*.  Please read INSTALL
58 for more information on how to compile and install the daemon.
59
60 All of the old select()- and poll()-based event loop has been
61 completely ripped out and replaced, enabling ircd to use kqueue() and
62 /dev/poll, on systems that support those interfaces.
63
64 All changes made to the u2.10.10 branch have been forward-ported to
65 u2.10.11.
66
67 The server now uses extended numerics exclusively.
68
69 A large number of code clean-ups, changes, and fixes have been made.
70 Some of these should hopefully increase performance; others will make
71 it easier to maintain the code.
72
73
74 Configuration Changes:
75
76 Most compile-time options are now run-time configurable features, and
77 can be set through the daemon configuration file.  Please see
78 doc/example.conf for an illustration of the format (search for
79 F-lines).  Documentation for the logging subsystem is in
80 doc/readme.log, and the list and description of all the features is
81 located in doc/readme.features.
82
83
84 Compile Time Options:
85
86 Again, most compile-time options are now set in the configuration
87 file.  The remaining options are set through arguments to
88 ./configure.  A list of these options is available with ./configure
89 --help; a more detailed description follows:
90
91 --enable-poll
92   The configure script attempts to only use poll on systems where that
93 is a direct system call.  Sometimes, however, it will not properly
94 detect this.  This option is meant to force ircd to use poll on
95 systems where ./configure does not detect that it is a system call.
96
97 --enable-debug
98   This option turns on DEBUGMODE, which enables code useful for
99 debugging the server.  THIS FEATURE SHOULD NOT BE USED ON A PRODUCTION
100 NETWORK; it represents a severe privacy risk.
101
102 --enable-asserts
103   Assertions are a means of checking that certain underlying
104 assumptions are met.  This option enables those assertions.  Note:
105 This option should not be activated on production servers due to
106 debugging code in the server's MyMalloc() implementation which will
107 cause the server to leak memory.
108
109 --disable-symbols
110   By default, the -g compiler option is used to enable symbols on the
111 binary.  These symbols are useful when attempting to track down the
112 cause of a crash.  Please do not use this option.
113
114 --enable-profile
115   This option simply adds the -pg compiler option to enable profiling
116 support.
117
118 --enable-pedantic
119 --enable-warnings
120   The Coder Committee attempts to release code that generates no
121 compile-time warnings or errors.  These two options add gcc-specific
122 warning flags to the compiler flags.  These options should not be used
123 if your compiler is not gcc.
124
125 --disable-inlines
126   Some critical functions are forcefully inlined.  This flag disables
127 that behavior.  It should not be used for performance reasons.
128
129 --disable-devpoll
130   On systems that have /dev/poll, the /dev/poll-based engine is
131 automatically enabled.  This option inhibits that behavior.
132
133 --disable-kqueue
134   On systems that have kqueue(), the kqueue()-based engine is
135 automatically enabled.  This option inhibits that behavior.
136
137 --with-symlink=name
138   When "make install" is executed, the daemon is installed in such a
139 way that old versions are kept, and a symlink is made to the latest
140 installed version.  This option selects the name given to that
141 symlink.  Specify a symlink name of "no" or use "--without-symlink" to
142 disable this behavior.
143
144 --with-mode=mode
145   The daemon binary is installed with permissions 711 by default; this
146 option may be used to specify a different permission set for the
147 binary.
148
149 --with-owner=owner
150   By default, the owner of the installed binary will be the same as
151 the person that compiled it; this option permits a different owner to
152 be specified.
153
154 --with-group=group
155   By default, the group owner of the installed binary will be the same
156 as the primary group of the person that compiled it (at the time it
157 was compiled); this option permits a different group owner to be
158 specified.
159
160 --with-domain=domain
161   The daemon attempts to keep some statistics on the server's user
162 load, including how many local users connect to the server.  A local
163 user is determined by comparing the user's host name to a domain
164 name.  The domain name can be set through the feature subsystem, as
165 documented in doc/readme.features; however, it will default either to
166 the domain specified with this flag, or to a name extracted from
167 /etc/resolv.conf, if it exists.
168
169 --with-chroot=dir
170   Some admins may wish to run ircd within a chroot "jail," to enhance
171 the security of their systems.  Although the chroot() code was removed
172 from ircd, the build system still supports operation of this form.  If
173 you wish to use chroot-based jails, read doc/readme.chroot and give
174 this option to ./configure.
175
176 --with-dpath=dir
177   This option simply specifies the path to the data directory for the
178 daemon.  If --with-chroot has been given, this path must be compatible
179 with the chroot directory.  See doc/readme.chroot for more information
180 about this restriction.
181
182 --with-cpath=file
183   This option simply specifies the path to the configuration file for
184 the daemon, and may be either a relative or absolute path name.  If it
185 is an absolute path, and if --with-chroot has been given, this path
186 must be compatible with the chroot directory.  See doc/readme.chroot
187 for more information about this restriction.
188
189 --with-lpath=file
190   When the server is compiled in DEBUGMODE (--enable-debug), the
191 debugging logs will be sent to the file specified here (defaulting to
192 "ircd.log" in the data directory).  If this is an absolute path,
193 --with-chroot has been given, and if that path is not compatible with
194 the chroot directory, then a warning will be issued and the default
195 will be used.  See doc/readme.chroot for more information about this
196 restriction.
197
198 --with-maxcon=maxcon
199   The maximum number of sockets that the server may open is normally
200 derived from the hard limit on the number of file descriptors.  If
201 desired, a higher value may be used by specifying this option to
202 ./configure.
203
204
205 Undocumented Features:
206
207 Every Undernet server released has had at least one undocumented
208 feature ;-) Here are a few of the ones available in ircu2.10.11.  I'm
209 sure there are a few more we are unaware of, these are the ones we
210 know about.
211
212 To enable these, you need to add them to CFLAGS prior to running
213 ./configure, usually as in: CFLAGS="-O2 -D<option>" ./configure
214
215 -DNICKLEN=15
216   This allows you do override the default nick length to 15
217 characters.  If this has different values on different servers your
218 network *WILL* fall apart.  Only use this option if you know what your
219 doing. If you don't, ask in #coder-com on undernet.
220
221 -DNO_THROTTLE
222   This disables the throttling code.  This is used for debugging
223 *only*.  It lets you connect up to 255 clients from one host with no
224 time considerations.  If this is enabled on a production server I will
225 personally drive your server into the ground.  You have been warned.
226
227
228 Operating System and Kernel Requirements:
229
230 If you plan allowing more than 1000 clients on your server, you may
231 need to adjust your kernel resource limits for networking and
232 I/O. There are two things you will need to pay particular attention
233 to, the number of file descriptors available and the number of buffers
234 the kernel has available to read and write data to the file
235 descriptors.
236
237 To calculate kernel buffer requirements a good place to start is to
238 multiply the expected number connections expected on the machine by
239 the amount of data we buffer for each connection.  Doubling the result
240 of the above calculation and dividing it by the size of the buffers
241 the kernel uses for I/O should give you a starting place.
242
243 The server uses 2K kernel buffers for clients, and 64K kernel buffers
244 for servers (actual use may be somewhat higher).
245
246 c_count - number of clients expected
247 c_q     - number of bytes buffered for each client
248 s_count - number of servers expected
249 s_q     - number of bytes buffered for each server
250
251 buffer count = (2 * (c_count * c_q + s_count * s_q)) / kernel buffer size
252
253 If the client count is 2000 and the server count is 1 (normal leaf)
254 and your server uses 2K as an I/O buffer size:
255
256 You need (2 * (2000 * 2048 + 1 * 65536)) / 2048 or a minimum of 4064
257 buffers available, if the kernel uses 512 byte buffers you will need a
258 minimum of 16256 kernel buffers.
259
260 These settings may be a bit light for net-breaks under full client
261 load you will need to experiment a bit to find the right settings for
262 your server.
263
264 FreeBSD --WildThang
265
266 You may want to increase your kernel resources if you want to put a
267 lot of clients on your machine here are a few values to start with:
268
269 CHILD_MAX=4096
270 OPEN_MAX=4096
271 FD_SETSIZE=4096
272 NMBCLUSTERS=8096
273
274
275 Solaris 2.6  --Tar
276
277 Increase the default hard limit for file descriptors in /etc/system:
278
279 set rlim_fd_max = 4096
280
281 The server will raise the soft limit to the hard limit.
282
283 Linux 2.2 -- [Tri]/Isomer
284
285 The kernel has a kernel destination cache size of 4096.  If the kernel
286 sees more than 4096 IP's in 60s it warns 'dst cache overflow'.  This
287 limit can be changed by modifying /proc/sys/net/ipv4/route/max_size.
288
289 A patch to select is also recommended if you have regular poll/select
290 errors.