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 --disable-asserts
103   Assertions are a means of checking that certain underlying
104 assumptions are met.  This option disables those assertions.
105
106 --disable-symbols
107   By default, the -g compiler option is used to enable symbols on the
108 binary.  These symbols are useful when attempting to track down the
109 cause of a crash.  Please do not use this option.
110
111 --enable-profile
112   This option simply adds the -pg compiler option to enable profiling
113 support.
114
115 --enable-pedantic
116 --enable-warnings
117   The Coder Committee attempts to release code that generates no
118 compile-time warnings or errors.  These two options add gcc-specific
119 warning flags to the compiler flags.  These options should not be used
120 if your compiler is not gcc.
121
122 --disable-inlines
123   Some critical functions are forcefully inlined.  This flag disables
124 that behavior.  It should not be used for performance reasons.
125
126 --disable-devpoll
127   On systems that have /dev/poll, the /dev/poll-based engine is
128 automatically enabled.  This option inhibits that behavior.
129
130 --disable-kqueue
131   On systems that have kqueue(), the kqueue()-based engine is
132 automatically enabled.  This option inhibits that behavior.
133
134 --with-symlink=name
135   When "make install" is executed, the daemon is installed in such a
136 way that old versions are kept, and a symlink is made to the latest
137 installed version.  This option selects the name given to that
138 symlink.  Specify a symlink name of "no" or use "--without-symlink" to
139 disable this behavior.
140
141 --with-mode=mode
142   The daemon binary is installed with permissions 711 by default; this
143 option may be used to specify a different permission set for the
144 binary.
145
146 --with-owner=owner
147   By default, the owner of the installed binary will be the same as
148 the person that compiled it; this option permits a different owner to
149 be specified.
150
151 --with-group=group
152   By default, the group owner of the installed binary will be the same
153 as the primary group of the person that compiled it (at the time it
154 was compiled); this option permits a different group owner to be
155 specified.
156
157 --with-domain=domain
158   The daemon attempts to keep some statistics on the server's user
159 load, including how many local users connect to the server.  A local
160 user is determined by comparing the user's host name to a domain
161 name.  The domain name can be set through the feature subsystem, as
162 documented in doc/readme.features; however, it will default either to
163 the domain specified with this flag, or to a name extracted from
164 /etc/resolv.conf, if it exists.
165
166 --with-chroot=dir
167   Some admins may wish to run ircd within a chroot "jail," to enhance
168 the security of their systems.  Although the chroot() code was removed
169 from ircd, the build system still supports operation of this form.  If
170 you wish to use chroot-based jails, read doc/readme.chroot and give
171 this option to ./configure.
172
173 --with-dpath=dir
174   This option simply specifies the path to the data directory for the
175 daemon.  If --with-chroot has been given, this path must be compatible
176 with the chroot directory.  See doc/readme.chroot for more information
177 about this restriction.
178
179 --with-cpath=file
180   This option simply specifies the path to the configuration file for
181 the daemon, and may be either a relative or absolute path name.  If it
182 is an absolute path, and if --with-chroot has been given, this path
183 must be compatible with the chroot directory.  See doc/readme.chroot
184 for more information about this restriction.
185
186 --with-lpath=file
187   When the server is compiled in DEBUGMODE (--enable-debug), the
188 debugging logs will be sent to the file specified here (defaulting to
189 "ircd.log" in the data directory).  If this is an absolute path,
190 --with-chroot has been given, and if that path is not compatible with
191 the chroot directory, then a warning will be issued and the default
192 will be used.  See doc/readme.chroot for more information about this
193 restriction.
194
195 --with-maxcon=maxcon
196   The maximum number of sockets that the server may open is normally
197 derived from the hard limit on the number of file descriptors.  If
198 desired, a higher value may be used by specifying this option to
199 ./configure.
200
201
202 Undocumented Features:
203
204 Every Undernet server released has had at least one undocumented
205 feature ;-) Here are a few of the ones available in ircu2.10.11.  I'm
206 sure there are a few more we are unaware of, these are the ones we
207 know about.
208
209 To enable these, you need to add them to CFLAGS prior to running
210 ./configure, usually as in: CFLAGS="-O2 -D<option>" ./configure
211
212 -DNICKLEN=15
213   This allows you do override the default nick length to 15
214 characters.  If this has different values on different servers your
215 network *WILL* fall apart.  Only use this option if you know what your
216 doing. If you don't, ask in #coder-com on undernet.
217
218 -DNO_THROTTLE
219   This disables the throttling code.  This is used for debugging
220 *only*.  It lets you connect up to 255 clients from one host with no
221 time considerations.  If this is enabled on a production server I will
222 personally drive your server into the ground.  You have been warned.
223
224
225 Operating System and Kernel Requirements:
226
227 If you plan allowing more than 1000 clients on your server, you may
228 need to adjust your kernel resource limits for networking and
229 I/O. There are two things you will need to pay particular attention
230 to, the number of file descriptors available and the number of buffers
231 the kernel has available to read and write data to the file
232 descriptors.
233
234 To calculate kernel buffer requirements a good place to start is to
235 multiply the expected number connections expected on the machine by
236 the amount of data we buffer for each connection.  Doubling the result
237 of the above calculation and dividing it by the size of the buffers
238 the kernel uses for I/O should give you a starting place.
239
240 The server uses 2K kernel buffers for clients, and 64K kernel buffers
241 for servers (actual use may be somewhat higher).
242
243 c_count - number of clients expected
244 c_q     - number of bytes buffered for each client
245 s_count - number of servers expected
246 s_q     - number of bytes buffered for each server
247
248 buffer count = (2 * (c_count * c_q + s_count * s_q)) / kernel buffer size
249
250 If the client count is 2000 and the server count is 1 (normal leaf)
251 and your server uses 2K as an I/O buffer size:
252
253 You need (2 * (2000 * 2048 + 1 * 65536)) / 2048 or a minimum of 4064
254 buffers available, if the kernel uses 512 byte buffers you will need a
255 minimum of 16256 kernel buffers.
256
257 These settings may be a bit light for net-breaks under full client
258 load you will need to experiment a bit to find the right settings for
259 your server.
260
261 FreeBSD --WildThang
262
263 You may want to increase your kernel resources if you want to put a
264 lot of clients on your machine here are a few values to start with:
265
266 CHILD_MAX=4096
267 OPEN_MAX=4096
268 FD_SETSIZE=4096
269 NMBCLUSTERS=8096
270
271 If you have trouble connecting *out* from your machine try:
272  sysctl -w net.inet.ip.portrange.last=10000
273
274 Solaris 2.6  --Tar
275
276 Increase the default hard limit for file descriptors in /etc/system:
277
278 set rlim_fd_max = 4096
279
280 The server will raise the soft limit to the hard limit.
281
282 Linux 2.2 -- [Tri]/Isomer
283
284 The kernel has a kernel destination cache size of 4096.  If the kernel
285 sees more than 4096 IP's in 60s it warns 'dst cache overflow'.  This
286 limit can be changed by modifying /proc/sys/net/ipv4/route/max_size.
287
288 A patch to select is also recommended if you have regular poll/select
289 errors.