ircd/README.md

85 lines
2.6 KiB
Markdown
Raw Normal View History

2012-04-18 04:24:26 +00:00
# Ergonomadic
2012-04-18 04:23:12 +00:00
2014-03-18 22:20:10 +00:00
Ergonomadic is an IRC daemon written from scratch in Go. Pull requests and
2014-03-18 22:29:31 +00:00
issues are welcome. Discuss it here or on Freenode in [#ergonomadic][irc].
2012-04-18 04:23:12 +00:00
## Some Features
2014-03-18 22:45:51 +00:00
- follows the RFCs where possible
2014-03-18 23:48:33 +00:00
- UTF-8 nick and channel names
2014-03-18 22:45:51 +00:00
- [gcfg][gcfg] gitconfig-style configuration
2014-03-01 22:45:23 +00:00
- server password (PASS command)
- channels with most standard modes
- IRC operators (OPER command)
2014-03-18 22:29:31 +00:00
- haproxy [PROXY protocol][proxy-proto] header for hostname setting
2014-03-18 22:45:51 +00:00
- passwords stored in [bcrypt][go-crypto] format
- channels that [persist][go-sqlite] between restarts (+P)
- messages are queued in the same order to all connected clients
2014-04-28 21:28:36 +00:00
## Users
If anyone is running and using this software, I'd love to link to you here with
any details you deem appropriate.
## Why?
2012-04-18 04:58:26 +00:00
I wanted to learn Go.
## What's with the name?
2012-04-18 04:58:26 +00:00
"Ergonomadic" is an anagram of "Go IRC Daemon".
2012-12-09 20:51:50 +00:00
2014-03-01 22:45:23 +00:00
## What about SSL/TLS support?
2014-03-18 22:29:31 +00:00
Go has a not-yet-verified-as-safe TLS 1.2 implementation. Sadly, many popular
IRC clients will negotiate nothing newer than SSLv2. If you want to use SSL to
protect traffic, I recommend using [stunnel][stunnel] version 4.56 with
haproxy's [PROXY protocol][proxy-proto]. This will allow the server to get the
client's original addresses for hostname lookups.
## What about federation?
IRC federation solves a problem that was more likely to occur on the internet of
1991 than today. We are exploring alternatives to federation that avoid nickname
and channel sync issues created during netsplits.
2014-03-01 22:45:23 +00:00
2014-02-27 06:25:10 +00:00
## Installation
2014-02-09 23:15:02 +00:00
```sh
go get
2014-02-09 23:15:02 +00:00
go install
2014-03-13 19:40:33 +00:00
ergonomadic initdb -conf ergonomadic.conf
2014-02-27 06:25:10 +00:00
```
## Configuration
See the example [`ergonomadic.conf`](ergonomadic.conf). Passwords are base64-encoded bcrypted byte
2014-03-18 22:29:31 +00:00
strings. You can generate them with the `genpasswd` subcommand.
2014-02-27 06:25:10 +00:00
```sh
2014-03-13 19:40:33 +00:00
ergonomadic genpasswd 'hunter2!'
2014-02-27 06:25:10 +00:00
```
## Running the Server
```sh
2014-03-13 19:40:33 +00:00
ergonomadic run -conf ergonomadic.conf
```
2014-02-27 19:07:21 +00:00
2014-03-13 19:40:33 +00:00
## IRC Documentation
2014-02-27 19:07:21 +00:00
- [RFC 1459: Internet Relay Chat Protocol](http://tools.ietf.org/html/rfc1459)
- [RFC 2811: IRC Channel Management](http://tools.ietf.org/html/rfc2811)
- [RFC 2812: IRC Client Protocol](http://tools.ietf.org/html/rfc2812)
- [RFC 2813: IRC Server Protocol](http://tools.ietf.org/html/rfc2813)
- [IRC/2 Numeric List](https://www.alien.net.au/irc/irc2numerics.html)
2014-03-18 22:29:31 +00:00
2014-03-18 22:45:51 +00:00
[conf]: blob/master/ergonomadic.conf
[gcfg]: https://code.google.com/p/gcfg/
[go-crypto]: http://godoc.org/code.google.com/p/go.crypto
[go-sqlite]: https://github.com/mattn/go-sqlite3
2014-03-18 22:29:31 +00:00
[irc]: irc://chat.freenode.net/#ergonomadic
2014-03-18 22:45:51 +00:00
[proxy-proto]: http://haproxy.1wt.eu/download/1.5/doc/proxy-protocol.txt
2014-03-18 22:29:31 +00:00
[stunnel]: https://www.stunnel.org/index.html