Cheap VPS & Xen Server

Residential Proxy Network - Hourly & Monthly Packages

How To Set Up An IRC Server And Anope IRC Services

This tutorial describes how to set up and run an UnrealIRCD server on OpenSuSE 10.2 and Fedora Core 6. It also shows how to install Anope IRC services. Anope is a set of Services for IRC networks that allows users to manage their nicks and channels in a secure and efficient way, and administrators to manage their network with powerful tools.

Before We Start

What we need to get:

  • a DNS name : get one for free from like no-ip or dyndns
  • IF you dont want SSL on the server you gotta edit my .conf files to make them work or you going to have an error on them but it will tell you what line the error is on

This was tested on

  • OpenSuse ver 10.2
  • Fedora Core ver 6 (I386)


Who Did What

Writen / Tested by ZcWorld
Helped / Tested by Craz1
Tested by Granddad


Check List

What we need:

  • Linux OS ( fc 6 or opensuse )
  • UnrealIRCD 3.2
  • Anope services
  • compiler
  • SU access rights (superuser)
  • and a LOT of time
  • and a good signing voice (joke) but im sur eyou will be doing a lot of yelling doing this
  • water and coffee n something to eat as well (there is a lot of waiting at times. .. when its does the compiling and building)

My setup:

I got a personal account on my server pc.

SUB Notes :::

If working in a VM make a backup of the OS – just in case it goes ass up or u can redo the test to make sure you got it down. 🙂

Or if it’s on a real pc .. than arrr good luck and hope it doest stuff up first time around that’s all I can say.


Step 1

Time to get a copy of the UnrealIRC server and a coyp of anope services for the server – in total about 3.5 MB.

My demo .conf files (are in .RAR and .ZIP format :)):

RAR  16 KB                          ZIP   20 KB

If you download them on another pc than the linux pc then copy them over via WinSCP or something else.

If you downloaded them on the pc .. just move them over to a build folder like at /home/zcworld/src/ (you may have to make a build folder ;)).

Make a folder called src then open the folder on server side in WinSCP. Then drag and drop the files over and click copy. It will take an min or two to copy over. Then that’s it.



Step 2

Log in as your normal user, then type

su – <ENTER>
<password> <ENTER>

<< Find the OS you’re using and do what it says here. >>

User info

Username: ircadmin
Password: what you want
Group: ircadmin


Step 1: type


Step 2: then pick from the list Security and Users then tab pick Group Management:


Step 3: alt + a then in the group name box type: ircadmin: then alt +a (make sure you write down what was in there first: normal just users).


Step 3: alt + a then in the group name box type: ircadmin: then alt +a (make sure you write down what was in there first: normal just users).


Step 4: then alt +u then alt + x then enter on Defaults for New Users:



Step 5: pick from the list the ircadmin as default group: nothing in the secondary groups then alt + a:



Step 6: then alt + a: then type the full name for the ircadmin account / account name / password then alt + a:




Step 7: alt + f then wait 10 secs then alt + q.



FC 6

arrr < sorry i don’t know how to add users via command line on FC 🙁 sorry >

Step 3


su –
root password here
(if the bin folder is there than skip this part but do the chown part)
cd /home/ircadmin
make bin
make conf
chown -R ircadmin:ircadmin ./
ls -al


(Note: I’m sure you will see that I don’t have a conf folder in my screenshot < bad me >.)

Exit out of SuperUser access:

to make sure you are in your home folder

cd src
tar -zxf Unreal3.2.6.tar.gz
tar -zxf anope-1.6.5.tar.gz 33
cd Unreal3.2

(Here’s my screen dump when I built mine up. :))

Do you want to enable the server anti-spoof protection?
-> Yes <ENTER>

What directory are all the server configuration files in?
-> /home/ircdadmin/conf

What is the path to the ircd binary including the name of the binary?
-> /home/ircadmin/bin/ircd

Would you like to compile as a hub or as a leaf?
Type Hub to select hub and Leaf to select leaf.
-> hub <ENTER>

What is the hostname of the server running your IRCd?
-> <ENTER>

What should the default permissions for your configuration files be? (Set this to 0 to disable)
It is strongly recommended that you use 0600 to prevent unwanted reading of the file
-> <ENTER>

Do you want to support SSL (Secure Sockets Layer) connections?
-> y <ENTER>

If you know the path to OpenSSL on your system, enter it here. If not
leave this blank
-> <ENTER>

Do you want to enable IPv6 support?
-> <ENTER>

Do you want to enable ziplinks support?
-> y <ENTER>

If you know the path to zlib on your system, enter it here. If not
leave this blank
-> <ENTER>

Do you want to enable remote includes?
-> <ENTER>

Do you want to enable prefixes for chanadmin and chanowner?
This will give +a the & prefix and ~ for +q (just like +o is @)
Supported by the major clients (mIRC, xchat, epic, eggdrop, Klient,
PJIRC, irssi, CGI:IRC, etc.)
This feature should be enabled/disabled network-wide.
-> y <ENTER>

What listen() backlog value do you wish to use? Some older servers
have problems with more than 5, others work fine with many more.
-> <ENTER>

How far back do you want to keep the nickname history?
-> <ENTER>

What is the maximum sendq length you wish to have?
-> <ENTER>

How many buffer pools would you like?
This number will be multiplied by MAXSENDQLENGTH.
-> <ENTER>

How many file descriptors (or sockets) can the IRCd use?
-> <ENTER>

Would you like any more parameters to configure?
Write them here:
-> <ENTER>

./configure –with-showlistmodes –enable-nospoof –enable-hub –enable-ssl –enable-ziplinks –enable-prefixaq –with-listen=5 –with-dpath=/home/ircadmin/conf –with-spath=/home/ircadmin/bin/ircd –with-nick-history=2000 –with-sendq=3000000 –with-bufferpool=18 – –with-permissions=0600 –with-fd-setsize=1024 –enable-dynamic-linking
checking for gcc… gcc

If you enabled SSL than just do what it says on screen. If you didn’t pick that then miss this step.

(Looks like this:)


Step 4

After it’s done type


(Should be in the folder you were in but with SuperUser access.)

make install

(Screen dump:)

zcworld@dhcppc2:~/build/Unreal3.2> su –
dhcppc2:~ # cd /home/zcworld/src/Unreal3.2/
dhcppc2:/home/zcworld/src/Unreal3.2 # make install
Building src
make[1]: Entering directory `/home/zcworld/src/Unreal3.2/src’
cd modules; make ‘CFLAGS=-I../include -I/home/zcworld/src/Unreal3.2/extras/regexp/include -I/home/zcworld/src/Unreal3.2/extras/c-ares/include -L../extras/c-ares/lib -pipe -g -O2 -funsigned-char -fno-strict-aliasing -Wno-pointer-sign -DZIP_LINKS -export-dynamic ‘ ‘CC=gcc’ ‘IRCDLIBS=-lcrypt -lnsl -lz -ldl -L/home/zcworld/src/Unreal3.2/extras/regexp/lib -ltre -lcares’ ‘LDFLAGS=’ ‘IRCDMODE=711’ ‘BINDIR=/home/ircadmin/bin/ircd’ ‘INSTALL=/usr/bin/install’ ‘INCLUDEDIR=../include’ ‘IRCDDIR=/home/ircadmin/conf’ ‘MANDIR=’ ‘RM=/bin/rm’ ‘CP=/bin/cp’ ‘TOUCH=/usr/bin/touch’ ‘RES=’ ‘SHELL=/bin/sh’ ‘STRTOUL=’ ‘CRYPTOLIB=-lssl -lcrypto’ ‘CRYPTOINCLUDES=’ ‘URL=’ all
make[2]: Entering directory `/home/zcworld/src/Unreal3.2/src/modules’
make[2]: Nothing to be done for `all’.
make[2]: Leaving directory `/home/zcworld/src/Unreal3.2/src/modules’
make[1]: Leaving directory `/home/zcworld/src/Unreal3.2/src’
| Compile is now complete. |
| You should now read the documentation and learn |
| how to configure your IRCd. |
| |
| If you really like UnrealIRCd, and would like to |
| make a donation, please read the Donation file in |
| this archive. 🙂 |
| |
| Thanks for using Unreal IRCd! If you are in need |
| for any kind of help regarding the IRCd please |
| read the Unreal.nfo file. |
/usr/bin/install -m 0700 -d /home/ircadmin/conf
/usr/bin/install -m 0700 src/ircd /home/ircadmin/bin/ircd
/usr/bin/install -m 0700 -d /home/ircadmin/conf/networks
/usr/bin/install -m 0600 networks/*.network /home/ircadmin/conf/networks
/usr/bin/install -m 0700 networks/makenet /home/ircadmin/conf/networks
/usr/bin/install -m 0600 networks/networks.ndx /home/ircadmin/conf/networks
/usr/bin/install -m 0700 -d /home/ircadmin/conf/doc
/usr/bin/install -m 0600 doc/Authors doc/example.conf doc/coding-guidelines doc/tao.of.irc doc/unreal32docs.html /home/ircadmin/conf/doc
/usr/bin/install -m 0700 -d /home/ircadmin/conf/aliases
/usr/bin/install -m 0600 aliases/*.conf /home/ircadmin/conf/aliases
/usr/bin/touch /home/ircadmin/conf/unrealircd.conf
chmod 0600 /home/ircadmin/conf/unrealircd.conf
/usr/bin/install -m 0600 spamfilter.conf dccallow.conf /home/ircadmin/conf
/usr/bin/install -m 0600 badwords.*.conf help.conf LICENSE Donation /home/ircadmin/conf
/usr/bin/install -m 0700 unreal /home/ircadmin/conf
/usr/bin/install -m 0700 -d /home/ircadmin/conf/modules
/usr/bin/install -m 0700 src/modules/*.so /home/ircadmin/conf/modules

(If you didn’t do SSL then skip this line.)

cp server.*.pem ~ircadmin/conf/

cd ~ircadmin/

Copy over the conf folder to the /home/ircadmin root and replace any files. (If you are going to use my demo config files for the first run: make sure you log in with the ircadmin account in WinSCP to upload / copy the files over.)

If not:

cp /home/zcworld/src/Unreal3.2/doc/example.conf /home/ircadmin/conf/unrealircd.conf


After that type

cd /home/ircadmin
chown -R ircadmin:ircadmin ./

to set all the files over to the ircadmin user / group.

Open up a new terminal window and log in as ircadmin user / password. Then type

cd conf/
ln -s $(pwd)/unreal ~/bin/unreal
cd ../bin
ls -al

The output should look like this:

total 1928
drwxr-xr-x 2 ircadmin ircadmin 4096 2007-01-20 23:02 .
drwxr-xr-x 10 ircadmin ircadmin 4096 2007-01-20 22:32 ..
-rwx—— 1 ircadmin ircadmin 1959302 2007-01-20 22:20 ircd
lrwxrwxrwx 1 ircadmin ircadmin 26 2007-01-20 23:02 unreal -> /home/ircadmin/conf/unreal

Step 5

ircadmin@dhcppc2:~/bin> ./unreal start

The output should look like this:

Starting UnrealIRCd
_ _ _ ___________ _____ _
| | | | | |_ _| ___ \/ __ \ | |
| | | |_ __ _ __ ___ __ _| | | | | |_/ /| / \/ __| |
| | | | ‘_ \| ‘__/ _ \/ _` | | | | | / | | / _` |
| |_| | | | | | | __/ (_| | |_| |_| |\ \ | \__/\ (_| |
\___/|_| |_|_| \___|\__,_|_|\___/\_| \_| \____/\__,_|
using TRE 0.7.2 (GPL)
using OpenSSL 0.9.8d 28 Sep 2006
using zlib 1.2.3

* Loading IRCd configuration ..
* Configuration loaded without any problems ..
* Initializing SSL.
* Dynamic configuration initialized .. booting IRCd.

Open up an IRC client and try to connect to the servers IP address (like

You will get something like this if it’s working:

* Connecting to (6667) *** Looking up your hostname… *** Couldn’t resolve your hostname; using your IP address instead
«(~ Welcome to the zcworld IRC Network Zc_Au!Zcworld@ ~)»
«(~ Your host is, running version Unreal3.2.6 ~)»
«(~ server was Created This server was created Sat Jan 20 2007 at 23:12:19 CST
«(~ Info ~)
Local host: server (
«(~ Current Server User Statistics for zcworld ~)»
«(~ There are 1 users and 0 invisible on 1 servers ~)»
«(~ Local Users Current Local Users: 1 Max: 1 ~)»
«(~ Global Users Current Global Users: 1 Max: 1 ~)»
MOTD File is missing

Once it’s working type in

su –
cd /home/zcworld/src/
find . |grep -i cron

The output will look like this:


Find the ircdchk file, then type:

cp ./Unreal3.2/ircdcron/ircdchk ~ircadmin/bin/
cd ~ircadmin/bin
chown ircadmin:ircadmin ircdchk
cd ~ircadmin/bin
crontab -e

Type in the window that pops up (push the insert key):

# this is to check the server every 2 mins
*/2 * * * * /home/ircadmin/bin/ircdchk >/dev/null 2>&1

Then push the esc key once or twice, then :wq

crontab: installing new crontab


crontab -l

Now that’s the IRC server itself. Time for the Anope IRC services. What’s the point of an IRC server without the services unless your linking into an network with services then … you are all good to go 🙂 …

Step 6

Anope IRC services:

cd /home/zcworld/src/anope-1.6.5/

**** This is a screen dump for me when I did my config / install: ***

-========================= A N O P E ==========================-
For more detailed information on the features of Anope1.6 please
read the self-named documentation found on the ‘docs’ directory.

Anope is a set of IRC Service expanded upon Lara’s Epona, based
on Andy Church’s IRC Services. For all your Anope needs please
visit our portal at

Please read the INSTALL file for install/upgrade instructions.
Reading the FAQ and README files would be a good idea too. (all
documentation is located on directory ‘docs’).

Beginning Services configuration.

Note: press Return for the default, or enter a new value.
In what directory do you want the binaries to be installed?
[/root/services] /home/ircadmin/services
/home/ircadmin/services does not exist. Create it?
[y] -> y <ENTER>

Where do you want the data files to be installed?
-> /home/ircadmin/services

Which group should all Services data files be owned by? (If Services
should not force files to be owned by a particular group, just press
-> <ENTER>

What should the default umask for data files be (in octal)?
(077 = only accessible by owner; 007 = accessible by owner and group)
-> <ENTER>

Select the closest to the type of server on your IRC network:
1) DreamForge 4.6.7 [dated IRCd, upgrade to a current one]
2) Bahamut 1.4.27 [or later]
3) UnrealIRCd 3.1.1 [or later]
4) UltimateIRCd 2.8.2 [or later]
5) UltimateIRCd 3.0.0 [alpha26 or later]
6) Hybrid IRCd 7.0 [experimental]
7) ViagraIRCd 1.3.x [or later]
8) PTlink 6.15.0 [experimental]
[no default]
-> 3 <ENTER>

Do you want to use the MD5 message-digest algorithm to encrypt passwords?
(Selecting “yes” protects your passwords from being stolen if someone
gains access to the Services databases, but makes it impossible to recover
forgotten passwords. There is no way to reverse this operation, so make
sure you really want to enable it.)
-> <ENTER>

Do you want to compile Anope with threading support?
If you want to use the proxy detector, you MUST have this. If you get
compilation errors, you should disable this feature and try again.
-> <ENTER>

Do you want to compile Anope with MySQL support?
At this time Anope is able to dump all databases into MySQL. That means
you get a read-only copy of the data. If you plan to run any module that
uses MySQL, you should enable this option as well.
-> <ENTER>

Do you want to compile Anope with Module support?
This will allow you to load and unload external modules of code without
restarting services. You can find several Anope modules on our website.
This requires libdl, if you have problems compiling disable this option.
(this option is ignored on OpenBSD for the time being)
-> y <ENTER>

Where do you want the modules installed? (The trailing / is important)
[/home/ircadmin/services/modules/] /home/ircadmin/services/modules
/home/ircadmin/services/modules does not exist. Create it?
-> y <ENTER>

End of interactive configuration.

Searching for a suitable compiler… great, found gcc!
Testing default compiler flags (-O2)… looks good.
Let’s see what libraries are lying around… -lnsl -lresolv
Looking for OS specific needs…
Looking for a 16-bit integer type… short
Looking for a 32-bit integer type… int
Checking for presence of include files (it’s okay if some aren’t there):
strings.h… present
sys/select.h… present
sys/sysproto.h… not present
Seeing if your system defines int16/int32… not found (this is good).
How to complain when something goes wrong… ah, strerror() is here.
Looking for other routines we want that you don’t have…
Checking how to install files… looks like “install” will work.
Checking how to copy directories… /bin/cp -dpr
Creating sysconf.h… done.
Creating… done.
Saving configuration results in config.cache… done.

All done! Now run “make” (or possibly “gmake”) to compile Services.
See the INSTALL, README and FAQ files if you have any problems.
dhcppc2:/home/zcworld/src/anope-1.6.5 #


touch services.h
(cd lang ; make language.h)
make[1]: Entering directory `/home/zcworld/src/anope-1.6.5/lang’
Generating language.h… 1410 strings
make[1]: Leaving directory `/home/zcworld/src/anope-1.6.5/lang’
cp -p lang/language.h .
touch pseudo.h
gcc -O2 -Wall -g -c actions.c
gcc -O2 -Wall -g -c botserv.c
gcc -O2 -Wall -g -c channels.c
gcc -O2 -Wall -g -c chanserv.c
gcc -O2 -Wall -g -c commands.c
gcc -O2 -Wall -g -c compat.c
gcc -O2 -Wall -g -c converter.c
gcc -O2 -Wall -g -c config.c
gcc -O2 -Wall -g -c datafiles.c
gcc -O2 -Wall -g -c encrypt.c
gcc -O2 -Wall -g -c helpserv.c
gcc -O2 -Wall -g -c hostserv.c
gcc -O2 -Wall -g -c init.c
gcc -O2 -Wall -g -c language.c
gcc -O2 -Wall -g -c list.c
gcc -O2 -Wall -g -c log.c
gcc -O2 -Wall -g -c mail.c
gcc -O2 -Wall -g -c main.c
gcc -O2 -Wall -g -c memory.c
gcc -O2 -Wall -g -c memoserv.c
gcc -O2 -Wall -g -c messages.c
gcc -O2 -Wall -g -c misc.c
gcc -O2 -Wall -g -c modules.c
gcc -O2 -Wall -g -c news.c
gcc -O2 -Wall -g -c nickserv.c
nickserv.c: In function âload_old_ns_dbaseâ:
nickserv.c:479: warning: dereferencing type-punned pointer will break strict-aliasing rules
gcc -O2 -Wall -g -c operserv.c
gcc -O2 -Wall -g -c process.c
gcc -O2 -Wall -g -c protocol.c
gcc -O2 -Wall -g -c proxy.c
gcc -O2 -Wall -g -c send.c
gcc -O2 -Wall -g -c sessions.c
gcc -O2 -Wall -g -c slist.c
gcc -O2 -Wall -g -c sockutil.c
gcc -O2 -Wall -g -c timeout.c
gcc -O2 -Wall -g -c users.c
gcc actions.o botserv.o channels.o chanserv.o commands.o compat.o converter.o config.o datafiles.o encrypt.o helpserv.o hostserv.o init.o language.o list.o log.o mail.o main.o memory.o memoserv.o messages.o misc.o modules.o news.o nickserv.o operserv.o process.o protocol.o proxy.o send.o sessions.o slist.o sockutil.o timeout.o users.o -lnsl -lresolv -rdynamic -o services -ldl
(cd lang ; make CFLAGS=” -O2 -Wall -g”)
make[1]: Entering directory `/home/zcworld/src/anope-1.6.5/lang’
gcc -O2 -Wall -g langcomp.c -o langcomp
./langcomp cat.l
./langcomp de.l
./langcomp en_us.l
./langcomp es.l
./langcomp fr.l
./langcomp gr.l
./langcomp nl.l
./langcomp pt.l
./langcomp tr.l
./langcomp it.l
./langcomp ru.l
make[1]: Leaving directory `/home/zcworld/src/anope-1.6.5/lang’
All done! Now run “make” (or possibly “gmake”) to compile your modules.
See the INSTALL, README and FAQ files if you have any problems.
make[1]: Entering directory `/home/zcworld/src/anope-1.6.5/modules’
gcc -O2 -Wall -g -c hs_moo.c
gcc -O2 -Wall -g -c ircd_catserv.c
make[1]: Leaving directory `/home/zcworld/src/anope-1.6.5/modules’
Now run “make install” to install Services.
dhcppc2:/home/zcworld/src/anope-1.6.5 #

make install

(cd lang ; make CFLAGS=” -O2 -Wall -g”)
make[1]: Entering directory `/home/zcworld/src/anope-1.6.5/lang’
make[1]: Nothing to be done for `all’.
make[1]: Leaving directory `/home/zcworld/src/anope-1.6.5/lang’
install -m 700 services /home/ircadmin/services/services
rm -f /home/ircadmin/services/listnicks /home/ircadmin/services/listchans
ln /home/ircadmin/services/services /home/ircadmin/services/listnicks
ln /home/ircadmin/services/services /home/ircadmin/services/listchans
(cd lang ; make install)
make[1]: Entering directory `/home/zcworld/src/anope-1.6.5/lang’
mkdir -p /home/ircadmin/services/languages
chmod 700 /home/ircadmin/services/languages
cp cat de en_us es fr gr nl pt tr it ru /home/ircadmin/services/languages
chmod 600 /home/ircadmin/services/languages/*
make[1]: Leaving directory `/home/zcworld/src/anope-1.6.5/lang’
/bin/cp -dpr data/* /home/ircadmin/services
test -d /home/ircadmin/services/backups || mkdir /home/ircadmin/services/backups
test -d /home/ircadmin/services/logs || mkdir /home/ircadmin/services/logs
make[1]: Entering directory `/home/zcworld/src/anope-1.6.5/modules’
ld -shared hs_moo.o -o
ld -shared ircd_catserv.o -o
/bin/cp -dpr ./*.so /home/ircadmin/services/modules
make[1]: Leaving directory `/home/zcworld/src/anope-1.6.5/modules’

Don’t forget to create/update your services.conf file! See
the README for details.

dhcppc2:/home/zcworld/src/anope-1.6.5 #

Ok now it’s time to reset the access rights. Type

cd ~ircadmin/
chown -R ircadmin:ircadmin ./

Step 7

Ok now it’s time to copy the demo files for the service over. Just copy over the service folder and replace any files that it asks to replace. Then go back to your ircadmin window and type in:

cd ../services/

Now in the IRC client window type:

/oper zcworld zcworld

That will let you see if there are any errors or not (but the two services should auto connect :)).


/msg nickserv help

To see if thats displays anything. If so .. it gives you the normal help info then it works.

That’s the basic of setting a server and services up and running.

One last step to do: in your ircadmin terminal window type:

crontab -e

** Push the insert key ** – copy !!!

*/3 * * * * /home/ircadmin/services/services.chk >/dev/null 2>&1

Push the esc key two times than :wq.



I used on my Windows PC  Context to edit the .conf files and to change a lot of lines at once like from to

And just for fun change the password:

password: opername:

/oper zcworld / zcworld

To restart:

/restart restart

and to die the server it’s:

/die die

(to restart / die you gotta be oper user. :))


When you make changes to the .conf files on the server type in the IRC client when you are oper status:


to reload the conf file.

Do not ask me how to link two servers up, because I don’t know yet and I’ve been working on it for 3 hrs …… Gotta wait for a while to find out some info.

Bigs thanks to Craz1 for his help

and checking my conf files for me …

and grandad ( just a screen name) for his help as well 🙂 to test the server 🙂