I have often had cause to run versions of eggdrop in the now-obsolete 1.3 series (the current being 1.6). You might be doing something like this if:
- You already have a botnet consisting entirely of bots running the older version. Such a net could be scattered over many different shell accounts owned by as many people. Upgrading would mean getting everyone together at the same time and that's simply not going to happen when everyone lives in a different time zone.
- You prefer an older, well known version of eggdrop (with older, well known bugs) to a newer, more bloated version with newer, unknown (and more likely security-related) bugs.
This brings me to the point of this write-up: Older versions of eggdrop require older versions of TCL in order to compile. Newer operating system versions are not distributed with older versions of TCL however they do come with newer versions. Here is a workaround I devised for this problem while using Red Hat linux 7.1. It's not pretty. You (obviously) need to have root access to accomplish it. It doesn't take into account programs that require a newer version of TCL, however when it comes to getting things done under linux I am a pretty firm believer in if it's stupid and it works, it isn't stupid because there are only so many hours in the day. Please /msg me if you have anything to add.
Update: MrFurious has informed me that "you could just grab tcl7.6 source, eggsource and link the stuff statically without touching the main distribution". This sounds like a much better way of going about it, assuming you know what you're doing.
Second Update: More details from MrFurious: "When you ./configure, the autoconf creates the makefile based on your particular system setup. Usually if the package was designed well you'll be able to specify where the headers that are required by the program will be. This is essentially all there is to it." I will poke around and update this w/u further when I can.
Third Update: Should you find the need to compile tcl7.6 yourself on a FreeBSD 4.7 system (and quite probably various other kinds of systems) you may find make failing with "duplicate case value" errors when it attempts to compile tclPosixStr.c. Should this occur simply modify tclPosixStr.c to comment out the lines defining ENOTSUP like so:
- Basic things: Start with a freshly un-tar'ed copy of the source. The file is in the generic subdirectory. Because it is write-protected you will need to fix that with a simple chmod +w tclPosixStr.c
- Once you have opened the file in the text editor of your choice do a search for ENOTSUP. Edit the first definition you find so it looks like this:
Then edit the second one to look like this:
case ENOTSUP: return "ENOTSUP";
case ENOTSUP: return "operation not supported";
- Now try that make again. If it works edit Makefile so that prefix and exec_prefix point to the correct directory (if you don't have root this should be a directory you own) and run make install. Now run eggdrop's configure with the flags --with-tcllib=/your/path/here/lib/libtcl76.a and --with-tclinc=/your/path/here/include/tcl.h
Okay, I now return you to the old ultra-kludgy way of accomplishing this that originally caused me to create this write-up:
1. Get the RPM for the version of TCL you wish to install. I used tcl-7.6p2-16.i386.rpm
because it's the version that the documentation for eggdrop 1.3.22 endorses. I found
the file by using Lycos' FTP search.
2. Back up the following files:
3. Install the old version of TCL like so:
rpm -i -nodeps -force tcl-7.6p2-16.i386.rpm
4. If /usr/lib/libtcl7.?.so exists, delete /usr/lib/libtcl.so and rename libtcl7.?.so to
libtcl.so. Do the same thing with /usr/include/tcl.h
5. Run the configure script for eggdrop as follows:
./configure --with-tcllib=/usr/lib/libtcl.so --with-tclinc=/usr/include/tcl.h
6. Run make and go have a pizza.
7. Move *.so from the base eggdrop directory into the modules/ directory.
(YMMV -- I remember having to do it when I originally created this w/u but since
then it seems as if I remember doing it then having to undo it because it
effectively broke things...)