We have released ircu2.10.11, as I announced earlier. The tar ball is available at http://coder-com.undernet.org/, as are the release notes. For your convenience, I have included a text version of the release notes here. They are also in the RELEASE.NOTES file in the source tree. It is very important that anyone upgrading from u2.10.10 read these notes and README. In particular, please note that "make config" has been deprecated--most of those features are now specified by an argument to ./configure or via an F-line in the ircd.conf. The notes will give instructions on how to use the transition script to make the appropriate changes to your configuration.
-------------------------------- RELEASE.NOTES --------------------------------- Release Notes for ircu2.10.11 Last Updated: August 17, 2001 Written by Kev <[EMAIL PROTECTED]> Based on a document written by Braden <[EMAIL PROTECTED]> This is a brief description of the changes we have made to the server since the release of ircu2.10.10. This server is only compatible with other servers that are P10. It is compatible and is verified to work with Undernet server versions u2.10.10 and above. Note, however, that some advanced features are only compatible with u2.10.11 and above. Enhancements: GLINE has been extended to allow IRC operators to issue global G-lines; see doc/readme.gline for more information about how to use this feature. These extended features should not be used on networks with u2.10.10 servers. A new JUPE command has been added to permit servers to be juped in a more reliable fashion. This command should not be used on networks with u2.10.10 servers. Two new channel mode manipulation commands, OPMODE and CLEARMODE, have been added. OPMODE works exactly like MODE, except that 1) only IRC operators can use it; 2) it ignores whether or not the operator is a channel operator. CLEARMODE is a reliable means of eradicating certain channel modes; it is given an argument string consisting of the modes to clear. If that argument string is not given, it defaults to "ovpsmikbl." These commands should not be used on networks with u2.10.10 servers. When a channel MODE command from a remote user must be bounced, a "MODE -o" for the user will also be sent, in order to attempt to "heal" the desync. Also, the old anti-hack code has been removed, since servers never send MODEs except for bounces. Most compile-time options have been converted to run-time options which may be set through the configuration file or through the use of the new commands SET, RESET, and GET; for more information about these, please refer to doc/example.conf (for configuration file information), doc/readme.features (for a list and description of the options), and doc/readme.log (for a description of the logging subsystem configuration). A new logging subsystem has been written, making it much easier to get ircd to write out log files, or to use syslog if that's desired. The old chroot() code has been removed; that should now be handled via an external wrapper. Such a wrapper has been included in the tools subdirectory. PLEASE READ doc/readme.chroot IF YOU WISH TO USE CHROOT-STYLE JAILS WITH IRCD. The build system has been completely revamped; since most compile-time options are now run-time, the few remaining ones can be placed in ./configure and set with --with-* and --enable-*. Please read INSTALL for more information on how to compile and install the daemon. All of the old select()- and poll()-based event loop has been completely ripped out and replaced, enabling ircd to use kqueue() and /dev/poll, on systems that support those interfaces. All changes made to the u2.10.10 branch have been forward-ported to u2.10.11. The server now uses extended numerics exclusively. A large number of code clean-ups, changes, and fixes have been made. Some of these should hopefully increase performance; others will make it easier to maintain the code. Configuration Changes: Most compile-time options are now run-time configurable features, and can be set through the daemon configuration file. Please see doc/example.conf for an illustration of the format (search for F-lines). Documentation for the logging subsystem is in doc/readme.log, and the list and description of all the features is located in doc/readme.features. Compile Time Options: Again, most compile-time options are now set in the configuration file. The remaining options are set through arguments to ./configure. A list of these options is available with ./configure --help; a more detailed description follows: --enable-poll The configure script attempts to only use poll on systems where that is a direct system call. Sometimes, however, it will not properly detect this. This option is meant to force ircd to use poll on systems where ./configure does not detect that it is a system call. --enable-debug This option turns on DEBUGMODE, which enables code useful for debugging the server. THIS FEATURE SHOULD NOT BE USED ON A PRODUCTION NETWORK; it represents a severe privacy risk. --disable-asserts Assertions are a means of checking that certain underlying assumptions are met. This option disables those assertions. --disable-symbols By default, the -g compiler option is used to enable symbols on the binary. These symbols are useful when attempting to track down the cause of a crash. Please do not use this option. --enable-profile This option simply adds the -pg compiler option to enable profiling support. --enable-pedantic --enable-warnings The Coder Committee attempts to release code that generates no compile-time warnings or errors. These two options add gcc-specific warning flags to the compiler flags. These options should not be used if your compiler is not gcc. --disable-inlines Some critical functions are forcefully inlined. This flag disables that behavior. It should not be used for performance reasons. --disable-devpoll On systems that have /dev/poll, the /dev/poll-based engine is automatically enabled. This option inhibits that behavior. --disable-kqueue On systems that have kqueue(), the kqueue()-based engine is automatically enabled. This option inhibits that behavior. --with-symlink=name When "make install" is executed, the daemon is installed in such a way that old versions are kept, and a symlink is made to the latest installed version. This option selects the name given to that symlink. Specify a symlink name of "no" or use "--without-symlink" to disable this behavior. --with-mode=mode The daemon binary is installed with permissions 711 by default; this option may be used to specify a different permission set for the binary. --with-owner=owner By default, the owner of the installed binary will be the same as the person that compiled it; this option permits a different owner to be specified. --with-group=group By default, the group owner of the installed binary will be the same as the primary group of the person that compiled it (at the time it was compiled); this option permits a different group owner to be specified. --with-domain=domain The daemon attempts to keep some statistics on the server's user load, including how many local users connect to the server. A local user is determined by comparing the user's host name to a domain name. The domain name can be set through the feature subsystem, as documented in doc/readme.features; however, it will default either to the domain specified with this flag, or to a name extracted from /etc/resolv.conf, if it exists. --with-chroot=dir Some admins may wish to run ircd within a chroot "jail," to enhance the security of their systems. Although the chroot() code was removed from ircd, the build system still supports operation of this form. If you wish to use chroot-based jails, read doc/readme.chroot and give this option to ./configure. --with-dpath=dir This option simply specifies the path to the data directory for the daemon. If --with-chroot has been given, this path must be compatible with the chroot directory. See doc/readme.chroot for more information about this restriction. --with-cpath=file This option simply specifies the path to the configuration file for the daemon, and may be either a relative or absolute path name. If it is an absolute path, and if --with-chroot has been given, this path must be compatible with the chroot directory. See doc/readme.chroot for more information about this restriction. --with-lpath=file When the server is compiled in DEBUGMODE (--enable-debug), the debugging logs will be sent to the file specified here (defaulting to "ircd.log" in the data directory). If this is an absolute path, --with-chroot has been given, and if that path is not compatible with the chroot directory, then a warning will be issued and the default will be used. See doc/readme.chroot for more information about this restriction. --with-maxcon=maxcon The maximum number of sockets that the server may open is normally derived from the hard limit on the number of file descriptors. If desired, a higher value may be used by specifying this option to ./configure. Undocumented Features: Every Undernet server released has had at least one undocumented feature ;-) Here are a few of the ones available in ircu2.10.11. I'm sure there are a few more we are unaware of, these are the ones we know about. To enable these, you need to add them to CFLAGS prior to running ./configure, usually as in: CFLAGS="-O2 -D<option>" ./configure -DNICKLEN=15 This allows you do override the default nick length to 15 characters. If this has different values on different servers your network *WILL* fall apart. Only use this option if you know what your doing. If you don't, ask in #coder-com on undernet. -DNO_THROTTLE This disables the throttling code. This is used for debugging *only*. It lets you connect up to 255 clients from one host with no time considerations. If this is enabled on a production server I will personally drive your server into the ground. You have been warned. Operating System and Kernel Requirements: If you plan allowing more than 1000 clients on your server, you may need to adjust your kernel resource limits for networking and I/O. There are two things you will need to pay particular attention to, the number of file descriptors available and the number of buffers the kernel has available to read and write data to the file descriptors. To calculate kernel buffer requirements a good place to start is to multiply the expected number connections expected on the machine by the amount of data we buffer for each connection. Doubling the result of the above calculation and dividing it by the size of the buffers the kernel uses for I/O should give you a starting place. The server uses 2K kernel buffers for clients, and 64K kernel buffers for servers (actual use may be somewhat higher). c_count - number of clients expected c_q - number of bytes buffered for each client s_count - number of servers expected s_q - number of bytes buffered for each server buffer count = (2 * (c_count * c_q + s_count * s_q)) / kernel buffer size If the client count is 2000 and the server count is 1 (normal leaf) and your server uses 2K as an I/O buffer size: You need (2 * (2000 * 2048 + 1 * 65536)) / 2048 or a minimum of 4064 buffers available, if the kernel uses 512 byte buffers you will need a minimum of 16256 kernel buffers. These settings may be a bit light for net-breaks under full client load you will need to experiment a bit to find the right settings for your server. FreeBSD --WildThang You may want to increase your kernel resources if you want to put a lot of clients on your machine here are a few values to start with: CHILD_MAX=4096 OPEN_MAX=4096 FD_SETSIZE=4096 NMBCLUSTERS=8096 Solaris 2.6 --Tar Increase the default hard limit for file descriptors in /etc/system: set rlim_fd_max = 4096 The server will raise the soft limit to the hard limit. Linux 2.2 -- [Tri]/Isomer The kernel has a kernel destination cache size of 4096. If the kernel sees more than 4096 IP's in 60s it warns 'dst cache overflow'. This limit can be changed by modifying /proc/sys/net/ipv4/route/max_size. A patch to select is also recommended if you have regular poll/select errors. -------------------------------------------------------------------------------- -- Kevin L. Mitchell <[EMAIL PROTECTED]>