105 lines
3.9 KiB
Plaintext
105 lines
3.9 KiB
Plaintext
goircd -- minimalistic simple Internet Relay Chat (IRC) server
|
|
==============================================================
|
|
|
|
DESCRIPTION
|
|
|
|
goircd is very simple IRC server, written on Go.
|
|
It was heavily inspired by miniircd daemon written on Python.
|
|
goircd is free software: see the file COPYING for copying conditions.
|
|
It does not aim to replace full featured mass scalable IRC networks:
|
|
|
|
* It can not connect to other servers. Just standalone installation
|
|
* It has few basic IRC commands
|
|
* There is no support for channel operators, many modes, votes, invites
|
|
* No ident lookups
|
|
|
|
But it has some convincing features:
|
|
|
|
* Only standard Go libraries, no external requirements
|
|
* Single executable binary
|
|
* No configuration file, just few command line arguments
|
|
* IPv6 out-of-box support
|
|
* Ability to additionally listen on TLS-capable ports
|
|
* Optional channels logging to plain text files
|
|
* Optional permanent channel's state saving in plain text files
|
|
(so you can reload daemon and all channels topics and keys won't
|
|
disappear)
|
|
* Optional ability to authenticate users by nickname and password
|
|
|
|
Some remarks and recommendations related to it's simplicity:
|
|
|
|
* Use daemontools to daemonize, setuid/gid it
|
|
* Just plaintext logging to stdout, without syslog support -- use
|
|
daemontool's multilog
|
|
|
|
SUPPORTED IRC COMMANDS
|
|
|
|
* PASS/NICK/USER during registration workflow
|
|
* PING/PONGs
|
|
* NOTICE/PRIVMSG, ISON
|
|
* AWAY, MOTD, LUSERS, NAMES, WHO, WHOIS, VERSION, WALLOPS, QUIT
|
|
* LIST, JOIN, TOPIC, +k/-k channel MODE
|
|
|
|
USAGE
|
|
|
|
Just execute goircd daemon. It has following optional arguments:
|
|
|
|
-hostname: hostname to show for client's connections
|
|
-bind: address to bind to (:6667 by default)
|
|
-cloak: cloak user's host with the given hostname
|
|
-motd: absolute path to MOTD file. It is reread every time
|
|
MOTD is requested
|
|
-logdir: directory where all channels messages will be saved. If
|
|
omitted, then no logs will be kept
|
|
-statedir: directory where all channels states will be saved and
|
|
loaded during startup. If omitted, then states will be
|
|
lost after daemon termination
|
|
-tlsbind: enable TLS, specify address to listen on and path
|
|
-tlspem: to PEM file with certificate and private key
|
|
-passwd: enable client authentication and specify path to
|
|
passwords file
|
|
-timestamped: enabled timestamps for stderr messages
|
|
-verbose: increase verbosity
|
|
-debug: also show traffic messages
|
|
-perm-state-dir: permission (before umask) for newly created state directory
|
|
-perm-state-file: permission (before umask) for newly created state file
|
|
-perm-log-file: permission (before umask) for newly created log file
|
|
|
|
TLS
|
|
|
|
If you specify -bind and -tlsbind simultaneously, then you will have
|
|
both raw and encrypted listening sockets. You can use -bind "" to
|
|
disable raw socket.
|
|
|
|
AUTHENTICATION
|
|
|
|
You can turn on optional client authentication by preparing passwords
|
|
file and using the -passwords argument. Format of passwords file is:
|
|
|
|
login1:hex(sha256(password1))\n
|
|
login2:hex(sha256(password2))\n
|
|
...
|
|
|
|
You can get hashed password value using: echo -n password | sha256
|
|
|
|
LOG FILES
|
|
|
|
Log files are not opened all the time, but only during each message
|
|
saving. That is why you can safely rename them for rotation purposes.
|
|
|
|
STATE FILES
|
|
|
|
Room's state is created/saved when either topic or key is set. State is
|
|
a directory (room's name) with "topic" and "key" plaintext files.
|
|
|
|
LICENCE
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, version 3 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|