Browse Source

changelog, documentation, and distrib updates for ergo 2.7

tags/v2.7.0-rc1
Shivaram Lingamneni 2 years ago
parent
commit
6ff0486aa0
5 changed files with 206 additions and 164 deletions
  1. 42
    0
      CHANGELOG.md
  2. 4
    4
      distrib/systemd/ergo.service
  3. 132
    133
      docs/MANUAL.md
  4. 26
    26
      docs/USERGUIDE.md
  5. 2
    1
      irc/server.go

+ 42
- 0
CHANGELOG.md View File

1
 # Changelog
1
 # Changelog
2
 All notable changes to Ergo will be documented in this file.
2
 All notable changes to Ergo will be documented in this file.
3
 
3
 
4
+## [2.7.0-rc1] - 2021-05-30
5
+
6
+We're pleased to be publishing Ergo 2.7.0-rc1, our first release candidate under our new name of Ergo. This release contains bug fixes and minor enhancements.
7
+
8
+This release includes changes to the config file format, all of which are fully backwards-compatible and do not require updating the file before upgrading. This release includes no changes to the database format.
9
+
10
+Because the name of the executable has changed from `oragono` to `ergo` (`ergo.exe` on Windows), you may need to update your system configuration (e.g., scripts or systemd unit files that reference the executable).
11
+
12
+Many thanks to [@ajaspers](https://github.com/ajaspers) and [@jesopo](https://github.com/jesopo) for contributing patches, to [@ajaspers](https://github.com/ajaspers), [@ChrisTX](https://github.com/ChrisTX), [@emersion](https://github.com/emersion), [@jwheare](https://github.com/jwheare), [@kylef](https://github.com/kylef), [@Mikaela](https://github.com/Mikaela), [@mogad0n](https://github.com/mogad0n), and [@ProgVal](https://github.com/ProgVal) for reporting issues and helping test, and to our translators for contributing translations.
13
+
14
+### Changed
15
+* The project was renamed from "Oragono" to "Ergo" (#897, thanks to everyone who contributed feedback or voted in the poll)
16
+
17
+### Config changes
18
+* Entries in `server.listeners` now take a new key, `min-tls-version`, that can be used to set the minimum required TLS version; the recommended default value is `1.2` (#1611, thanks [@ChrisTX](https://github.com/ChrisTX)!)
19
+* Added `max-conns` (maximum connection count) and `max-conn-lifetime` (maximum lifetime of a connection before it is cycled) to `datastore.mysql` (#1622)
20
+* Added `massmessage` operator capability to allow sending NOTICEs to all connected users (#1153, #1629, thanks [@jesopo](https://github.com/jesopo)!)
21
+
22
+### Security
23
+* If `require-sasl.enabled` is set to `true`, `tor-listeners.require-sasl` will be automatically set to `true` as well (#1636)
24
+* It is now possible to set the minimum required TLS version, using the `min-tls-version` key in listener configuration
25
+* Configurations that require SASL but allow user registration now produce a warning (#1637)
26
+
27
+### Added:
28
+* Operators with the correct permissions can now send "mass messages", e.g. `/NOTICE $$*` will send a `NOTICE` to all users (#1153, #1629, thanks [@jesopo](https://github.com/jesopo)!)
29
+* Operators can now extend the maximum (non-tags) length of the IRC line using the `server.max-line-len` configuration key. This is not recommended for use outside of "closed-circuit" deployments where IRC operators have full control of all client software. (#1651)
30
+
31
+### Fixed
32
+* `RELAYMSG` now sends a full NUH ("nick-user-host"), instead of only the relay nickname, as the message source (#1647, thanks [@ProgVal](https://github.com/ProgVal), [@jwheare](https://github.com/jwheare), and [@Mikaela](https://github.com/Mikaela)!)
33
+* Fixed a case where channels would remain visible in `/LIST` after unregistration (#1619, thanks [@ajaspers](https://github.com/ajaspers)!)
34
+* Fixed incorrect tags on `JOIN` lines in `+u` ("auditorium") channels (#1642)
35
+* Fixed an issue where LUSERS counts could get out of sync (#1617)
36
+* It was impossible to add a restricted set of snomasks to an operator's permissions; this has been fixed (#1618)
37
+* Fixed incorrect language in `NS INFO` responses (#1627, thanks [@ajaspers](https://github.com/ajaspers)!)
38
+* Fixed a case where the `REGISTER` command would emit an invalid error message (#1633, thanks [@ajaspers](https://github.com/ajaspers)!)
39
+
40
+### Removed
41
+* Removed the `draft/resume-0.5` capability, and the associated `RESUME` and `BRB` commands (#1624)
42
+
43
+### Internal
44
+* Optimized MySQL storage of direct messages (#1615)
45
+
4
 ## [2.6.1] - 2021-04-26
46
 ## [2.6.1] - 2021-04-26
5
 
47
 
6
 Oragono 2.6.1 is a bugfix release, fixing a security issue that is critical for some private server configurations. We regret the oversight.
48
 Oragono 2.6.1 is a bugfix release, fixing a security issue that is critical for some private server configurations. We regret the oversight.

distrib/systemd/oragono.service → distrib/systemd/ergo.service View File

1
 [Unit]
1
 [Unit]
2
-Description=oragono
2
+Description=ergo
3
 After=network.target
3
 After=network.target
4
 # If you are using MySQL for history storage, comment out the above line
4
 # If you are using MySQL for history storage, comment out the above line
5
 # and uncomment these two instead (you must independently install and configure
5
 # and uncomment these two instead (you must independently install and configure
9
 
9
 
10
 [Service]
10
 [Service]
11
 Type=simple
11
 Type=simple
12
-User=oragono
13
-WorkingDirectory=/home/oragono
14
-ExecStart=/home/oragono/oragono run --conf /home/oragono/ircd.yaml
12
+User=ergo
13
+WorkingDirectory=/home/ergo
14
+ExecStart=/home/ergo/ergo run --conf /home/ergo/ircd.yaml
15
 ExecReload=/bin/kill -HUP $MAINPID
15
 ExecReload=/bin/kill -HUP $MAINPID
16
 Restart=on-failure
16
 Restart=on-failure
17
 LimitNOFILE=1048576
17
 LimitNOFILE=1048576

+ 132
- 133
docs/MANUAL.md View File

1
+      ___ _ __ __ _  ___  
2
+     / _ \ '__/ _` |/ _ \ 
3
+    |  __/ | | (_| | (_) |
4
+     \___|_|  \__, |\___/ 
5
+               __/ |      
6
+              |___/     
1
 
7
 
2
-          ▄▄▄   ▄▄▄·  ▄▄ •        ▐ ▄       
3
-    ▪     ▀▄ █·▐█ ▀█ ▐█ ▀ ▪▪     •█▌▐█▪     
4
-     ▄█▀▄ ▐▀▀▄ ▄█▀▀█ ▄█ ▀█▄ ▄█▀▄▪▐█▐▐▌ ▄█▀▄ 
5
-    ▐█▌.▐▌▐█•█▌▐█ ▪▐▌▐█▄▪▐█▐█▌ ▐▌██▐█▌▐█▌.▐▌
6
-     ▀█▄▀▪.▀  ▀ ▀  ▀ ·▀▀▀▀  ▀█▄▀ ▀▀ █▪ ▀█▄▀▪
8
+       Ergo IRCd Manual
9
+      https://ergo.chat/
7
 
10
 
8
-              Oragono IRCd Manual
9
-              https://oragono.io/
10
 
11
 
11
 _Copyright © Daniel Oaks <daniel@danieloaks.net>, Shivaram Lingamneni <slingamn@cs.stanford.edu>_
12
 _Copyright © Daniel Oaks <daniel@danieloaks.net>, Shivaram Lingamneni <slingamn@cs.stanford.edu>_
12
 
13
 
28
     - [Environment variables](#environment-variables)
29
     - [Environment variables](#environment-variables)
29
     - [Productionizing with systemd](#productionizing-with-systemd)
30
     - [Productionizing with systemd](#productionizing-with-systemd)
30
     - [Using valid TLS certificates](#using-valid-tls-certificates)
31
     - [Using valid TLS certificates](#using-valid-tls-certificates)
31
-    - [Upgrading to a new version of Oragono](#upgrading-to-a-new-version-of-oragono)
32
+    - [Upgrading to a new version of Ergo](#upgrading-to-a-new-version-of-ergo)
32
 - [Features](#features)
33
 - [Features](#features)
33
     - [User Accounts](#user-accounts)
34
     - [User Accounts](#user-accounts)
34
     - [Account/Nick Modes](#accountnick-modes)
35
     - [Account/Nick Modes](#accountnick-modes)
70
 
71
 
71
 # Introduction
72
 # Introduction
72
 
73
 
73
-This document goes over the Oragono IRC server, how to get it running and how to use it once it is up and running!
74
+This document goes over the Ergo IRC server, how to get it running and how to use it once it is up and running!
74
 
75
 
75
-If you have any suggestions, issues or questions, feel free to submit an issue on our [GitHub repo](https://github.com/oragono/oragono/) or ask in our channel [`#oragono` on freenode](ircs://irc.freenode.net:6697/#oragono).
76
+If you have any suggestions, issues or questions, feel free to submit an issue on our [GitHub repo](https://github.com/ergochat/ergo) or ask in our channel [`#ergo` on irc.ergo.chat](ircs://irc.ergo.chat:6697/#ergo) or [`#ergo` on irc.libera.chat](ircs://irc.libera.chat:6697/#ergo).
76
 
77
 
77
 
78
 
78
 ## Project Basics
79
 ## Project Basics
79
 
80
 
80
-Oragono is an ircd written "from scratch" in the [Go](https://en.wikipedia.org/wiki/Go_%28programming_language%29) language, i.e., it [shares no code](https://github.com/grawity/irc-docs/blob/master/family-tree.txt) with the original ircd implementation or any other major ircd. It began as [ergonomadic](https://github.com/jlatt/ergonomadic), which was developed by Jeremy Latt between 2012 and 2014. In 2016, Daniel Oaks forked the project under its current name Oragono, in order to prototype [IRCv3](https://ircv3.net/) features and for use as a reference implementation of the [Modern IRC specification](https://modern.ircdocs.horse). Oragono 1.0.0 was released in February 2019, and as of 2020 the project is under active development by multiple contributors.
81
+Ergo is an ircd written "from scratch" in the [Go](https://en.wikipedia.org/wiki/Go_%28programming_language%29) language, i.e., it [shares no code](https://github.com/grawity/irc-docs/blob/master/family-tree.txt) with the original ircd implementation or any other major ircd. It began as [ergonomadic](https://github.com/jlatt/ergonomadic), which was developed by Jeremy Latt between 2012 and 2014. In 2016, Daniel Oaks forked the project under the name Oragono, in order to prototype [IRCv3](https://ircv3.net/) features and for use as a reference implementation of the [Modern IRC specification](https://modern.ircdocs.horse). Oragono 1.0.0 was released in February 2019; the project switched to its current name of Ergo in June 2021.
81
 
82
 
82
-Oragono's core design goals are:
83
+Ergo's core design goals are:
83
 
84
 
84
 * Being simple to set up and use
85
 * Being simple to set up and use
85
 * Combining the features of an ircd, a services framework, and a bouncer (integrated account management, history storage, and bouncer functionality)
86
 * Combining the features of an ircd, a services framework, and a bouncer (integrated account management, history storage, and bouncer functionality)
86
 * Bleeding-edge [IRCv3 support](http://ircv3.net/software/servers.html), suitable for use as an IRCv3 reference implementation
87
 * Bleeding-edge [IRCv3 support](http://ircv3.net/software/servers.html), suitable for use as an IRCv3 reference implementation
87
 * Highly customizable via a rehashable (i.e., reloadable at runtime) YAML config
88
 * Highly customizable via a rehashable (i.e., reloadable at runtime) YAML config
88
 
89
 
89
-In addition to its unique features (integrated services and bouncer, comprehensive internationalization), Oragono also strives for feature parity with other major servers. Oragono is a mature project with multiple communities using it as a day-to-day chat server --- we encourage you to consider it for your organization or community!
90
+In addition to its unique features (integrated services and bouncer, comprehensive internationalization), Ergo also strives for feature parity with other major servers. Ergo is a mature project with multiple communities using it as a day-to-day chat server --- we encourage you to consider it for your organization or community!
90
 
91
 
91
 ## Scalability
92
 ## Scalability
92
 
93
 
93
-We believe Oragono should scale comfortably to 10,000 clients and 2,000 clients per channel, making it suitable for small to medium-sized teams and communities. Oragono does not currently support server-to-server linking (federation), meaning that all clients must connect to the same instance. However, since Oragono is implemented in Go, it is reasonably effective at distributing work across multiple cores on a single server; in other words, it should "scale up" rather than "scaling out". (Federation is [planned](https://github.com/oragono/oragono/issues/26) but is not scheduled for development in the near term.)
94
+We believe Ergo should scale comfortably to 10,000 clients and 2,000 clients per channel, making it suitable for small to medium-sized teams and communities. Ergo does not currently support server-to-server linking (federation), meaning that all clients must connect to the same instance. However, since Ergo is implemented in Go, it is reasonably effective at distributing work across multiple cores on a single server; in other words, it should "scale up" rather than "scaling out". (Horizontal scalability is [planned](https://github.com/ergochat/ergo/issues/1532) but is not scheduled for development in the near term.)
94
 
95
 
95
-Even though it runs as a single instance, Oragono can be deployed for high availability (i.e., with no single point of failure) using Kubernetes. This technique uses a k8s [LoadBalancer](https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/) to receive external traffic and a [Volume](https://kubernetes.io/docs/concepts/storage/volumes/) to store the embedded database file. See [Hashbang's implementation](https://github.com/hashbang/gitops/tree/master/ircd) for a "worked example".
96
+Even though it runs as a single instance, Ergo can be deployed for high availability (i.e., with no single point of failure) using Kubernetes. This technique uses a k8s [LoadBalancer](https://kubernetes.io/docs/tasks/access-application-cluster/create-external-load-balancer/) to receive external traffic and a [Volume](https://kubernetes.io/docs/concepts/storage/volumes/) to store the embedded database file. See [Hashbang's implementation](https://github.com/hashbang/gitops/tree/master/ircd) for a "worked example".
96
 
97
 
97
-If you're interested in deploying Oragono at scale or for high availability, or want performance tuning advice, come find us on [`#oragono` on freenode](ircs://irc.freenode.net:6697/#oragono), we're very interested in what our software can do!
98
+If you're interested in deploying Ergo at scale or for high availability, or want performance tuning advice, come find us on [`#ergo` on Libera](ircs://irc.libera.chat:6697/#ergo), we're very interested in what our software can do!
98
 
99
 
99
 
100
 
100
 --------------------------------------------------------------------------------------------
101
 --------------------------------------------------------------------------------------------
102
 
103
 
103
 # Installing
104
 # Installing
104
 
105
 
105
-In this section, we'll explain how to install and use the Oragono IRC server.
106
+In this section, we'll explain how to install and use the Ergo IRC server.
106
 
107
 
107
 
108
 
108
 ## Windows
109
 ## Windows
109
 
110
 
110
-To get started with Oragono on Windows:
111
+To get started with Ergo on Windows:
111
 
112
 
112
-1. Make sure you have the [latest release](https://github.com/oragono/oragono/releases/latest) downloaded.
113
+1. Make sure you have the [latest release](https://github.com/ergochat/ergo/releases/latest) downloaded.
113
 1. Extract the zip file to a folder.
114
 1. Extract the zip file to a folder.
114
 1. Copy and rename `default.yaml` to `ircd.yaml`.
115
 1. Copy and rename `default.yaml` to `ircd.yaml`.
115
 1. Open up `ircd.yaml` using any text editor, and then save it once you're happy.
116
 1. Open up `ircd.yaml` using any text editor, and then save it once you're happy.
116
-1. Open up a `cmd.exe` window, then `cd` to where you have Oragono extracted.
117
-1. Run `oragono.exe mkcerts` if you want to generate new self-signed SSL/TLS certificates (note that you can't enable STS if you use self-signed certs).
117
+1. Open up a `cmd.exe` window, then `cd` to where you have Ergo extracted.
118
+1. Run `ergo mkcerts` if you want to generate new self-signed SSL/TLS certificates (note that you can't enable STS if you use self-signed certs).
118
 
119
 
119
-To start the server, type `oragono.exe run` and hit enter, and the server should start!
120
+To start the server, type `ergo run` and hit enter, and the server should start!
120
 
121
 
121
 
122
 
122
 ## macOS / Linux / Raspberry Pi
123
 ## macOS / Linux / Raspberry Pi
123
 
124
 
124
-To get started with Oragono on macOS, Linux, or on a Raspberry Pi:
125
+To get started with Ergo on macOS, Linux, or on a Raspberry Pi:
125
 
126
 
126
-1. Make sure you have the [latest release](https://github.com/oragono/oragono/releases/latest) for your OS/distro downloaded.
127
+1. Make sure you have the [latest release](https://github.com/ergochat/ergo/releases/latest) for your OS/distro downloaded.
127
 1. Extract the tar.gz file to a folder.
128
 1. Extract the tar.gz file to a folder.
128
 1. Copy and rename `default.yaml` to `ircd.yaml`.
129
 1. Copy and rename `default.yaml` to `ircd.yaml`.
129
 1. Open up `ircd.yaml` using any text editor, and then save it once you're happy.
130
 1. Open up `ircd.yaml` using any text editor, and then save it once you're happy.
130
-1. Open up a Terminal window, then `cd` to where you have Oragono extracted.
131
-1. Run `./oragono mkcerts` if you want to generate new self-signed SSL/TLS certificates (note that you can't enable STS if you use self-signed certs).
131
+1. Open up a Terminal window, then `cd` to where you have Ergo extracted.
132
+1. Run `./ergo mkcerts` if you want to generate new self-signed SSL/TLS certificates (note that you can't enable STS if you use self-signed certs).
132
 
133
 
133
-To start the server, type `./oragono run` and hit enter, and the server should be ready to use!
134
-
135
-If you're using Arch Linux, you can also install the [`oragono` package](https://aur.archlinux.org/packages/oragono/) from the AUR.
134
+To start the server, type `./ergo run` and hit enter, and the server should be ready to use!
136
 
135
 
137
 
136
 
138
 ## Docker
137
 ## Docker
139
 
138
 
140
-1. Pull the latest version of Oragono: `docker pull oragono/oragono:latest`
139
+1. Pull the latest version of Ergo: `docker pull oragono/oragono:latest`
141
 1. Create a volume for persistent data: `docker volume create oragono-data`
140
 1. Create a volume for persistent data: `docker volume create oragono-data`
142
 1. Run the container, exposing the default ports: `docker run -d --name oragono -v oragono-data:/ircd-data -p 6667:6667 -p 6697:6697 oragono/oragono:latest`
141
 1. Run the container, exposing the default ports: `docker run -d --name oragono -v oragono-data:/ircd-data -p 6667:6667 -p 6697:6697 oragono/oragono:latest`
143
 
142
 
146
 
145
 
147
 ## Building from source
146
 ## Building from source
148
 
147
 
149
-You'll need an [up-to-date distribution of the Go language for your OS and architecture](https://golang.org/dl/). Once you have that, just clone the repository and run `make build`. If everything goes well, you should now have an executable named `oragono` in the base directory of the project.
148
+You'll need an [up-to-date distribution of the Go language for your OS and architecture](https://golang.org/dl/). Once you have that, just clone the repository and run `make build`. If everything goes well, you should now have an executable named `ergo` in the base directory of the project.
150
 
149
 
151
 
150
 
152
 ## Becoming an operator
151
 ## Becoming an operator
153
 
152
 
154
-Many administrative actions on an IRC server are performed "in-band" as IRC commands sent from a client. The client in question must be an IRC operator ("oper", "ircop"). The easiest way to become an operator on your new Oragono instance is first to pick a strong, secure password, then "hash" it using the `oragono genpasswd` command (run `oragono genpasswd` from the command line, then enter your password twice), then copy the resulting hash into the `opers` section of your `ircd.yaml` file. Then you can become an operator by issuing the IRC command: `/oper admin mysecretpassword`.
153
+Many administrative actions on an IRC server are performed "in-band" as IRC commands sent from a client. The client in question must be an IRC operator ("oper", "ircop"). The easiest way to become an operator on your new Ergo instance is first to pick a strong, secure password, then "hash" it using the `ergo genpasswd` command (run `ergo genpasswd` from the command line, then enter your password twice), then copy the resulting hash into the `opers` section of your `ircd.yaml` file. Then you can become an operator by issuing the IRC command: `/oper admin mysecretpassword`.
155
 
154
 
156
 
155
 
157
 ## Rehashing
156
 ## Rehashing
158
 
157
 
159
-The primary way of configuring Oragono is by modifying the configuration file. Most changes to the configuration file can be applied at runtime by "rehashing", i.e., reloading the configuration file without restarting the server process. This has the advantage of not disconnecting users. There are two ways to rehash Oragono:
158
+The primary way of configuring Ergo is by modifying the configuration file. Most changes to the configuration file can be applied at runtime by "rehashing", i.e., reloading the configuration file without restarting the server process. This has the advantage of not disconnecting users. There are two ways to rehash Ergo:
160
 
159
 
161
 1. If you are an operator with the `rehash` capability, you can issue the `/REHASH` command (you may have to `/quote rehash`, depending on your client)
160
 1. If you are an operator with the `rehash` capability, you can issue the `/REHASH` command (you may have to `/quote rehash`, depending on your client)
162
-1. You can send the `SIGHUP` signal to Oragono, e.g., via `killall -HUP oragono`
161
+1. You can send the `SIGHUP` signal to Ergo, e.g., via `killall -HUP ergo`
163
 
162
 
164
 Rehashing also reloads TLS certificates and the MOTD. Some configuration settings cannot be altered by rehash. You can monitor either the response to the `/REHASH` command, or the server logs, to see if your rehash was successful.
163
 Rehashing also reloads TLS certificates and the MOTD. Some configuration settings cannot be altered by rehash. You can monitor either the response to the `/REHASH` command, or the server logs, to see if your rehash was successful.
165
 
164
 
166
 
165
 
167
 ## Environment variables
166
 ## Environment variables
168
 
167
 
169
-Oragono can also be configured using environment variables, using the following technique:
168
+Ergo can also be configured using environment variables, using the following technique:
170
 
169
 
171
 1. Find the "path" of the config variable you want to override in the YAML file, e.g., `server.websockets.allowed-origins`
170
 1. Find the "path" of the config variable you want to override in the YAML file, e.g., `server.websockets.allowed-origins`
172
 1. Convert each path component from "kebab case" to "screaming snake case", e.g., `SERVER`, `WEBSOCKETS`, and `ALLOWED_ORIGINS`.
171
 1. Convert each path component from "kebab case" to "screaming snake case", e.g., `SERVER`, `WEBSOCKETS`, and `ALLOWED_ORIGINS`.
178
 
177
 
179
 ## Productionizing with systemd
178
 ## Productionizing with systemd
180
 
179
 
181
-The recommended way to operate oragono as a service on Linux is via systemd. This provides a standard interface for starting, stopping, and rehashing (via `systemctl reload`) the service. It also captures oragono's loglines (sent to stderr in the default configuration) and writes them to the system journal.
180
+The recommended way to operate ergo as a service on Linux is via systemd. This provides a standard interface for starting, stopping, and rehashing (via `systemctl reload`) the service. It also captures ergo's loglines (sent to stderr in the default configuration) and writes them to the system journal.
182
 
181
 
183
-The only major distribution that currently packages Oragono is Arch Linux; the aforementioned AUR package includes a systemd unit file. However, it should be fairly straightforward to set up a productionized Oragono on any Linux distribution. Here's a quickstart guide for Debian/Ubuntu:
182
+The only major distribution that currently packages Ergo is Arch Linux; the aforementioned AUR package includes a systemd unit file. However, it should be fairly straightforward to set up a productionized Ergo on any Linux distribution. Here's a quickstart guide for Debian/Ubuntu:
184
 
183
 
185
-1. Create a dedicated, unprivileged role user who will own the oragono process and all its associated files: `adduser --system --group oragono`. This user now has a home directory at `/home/oragono`. To prevent other users from viewing Oragono's configuration file, database, and certificates, restrict the permissions on the home directory: `chmod 0700 /home/oragono`.
186
-1. Copy the executable binary `oragono`, the config file `ircd.yaml`, the database `ircd.db`, and the self-signed TLS certificate (`fullchain.pem` and `privkey.pem`) to `/home/oragono`. (If you don't have an `ircd.db`, it will be auto-created as `/home/oragono/ircd.db` on first launch.) Ensure that they are all owned by the new oragono role user: `sudo chown oragono:oragono /home/oragono/*`. Ensure that the configuration file logs to stderr.
187
-1. Install our example [oragono.service](https://github.com/oragono/oragono/blob/master/distrib/systemd/oragono.service) file to `/etc/systemd/system/oragono.service`.
184
+1. Create a dedicated, unprivileged role user who will own the ergo process and all its associated files: `adduser --system --group ergo`. This user now has a home directory at `/home/ergo`. To prevent other users from viewing Ergo's configuration file, database, and certificates, restrict the permissions on the home directory: `chmod 0700 /home/ergo`.
185
+1. Copy the executable binary `ergo`, the config file `ircd.yaml`, the database `ircd.db`, and the self-signed TLS certificate (`fullchain.pem` and `privkey.pem`) to `/home/ergo`. (If you don't have an `ircd.db`, it will be auto-created as `/home/ergo/ircd.db` on first launch.) Ensure that they are all owned by the new ergo role user: `sudo chown ergo:ergo /home/ergo/*`. Ensure that the configuration file logs to stderr.
186
+1. Install our example [ergo.service](https://github.com/ergochat/ergo/blob/master/distrib/systemd/ergo.service) file to `/etc/systemd/system/ergo.service`.
188
 1. Enable and start the new service with the following commands:
187
 1. Enable and start the new service with the following commands:
189
     1. `systemctl daemon-reload`
188
     1. `systemctl daemon-reload`
190
-    1. `systemctl enable oragono.service`
191
-    1. `systemctl start oragono.service`
192
-    1. Confirm that the service started correctly with `systemctl status oragono.service`
189
+    1. `systemctl enable ergo.service`
190
+    1. `systemctl start ergo.service`
191
+    1. Confirm that the service started correctly with `systemctl status ergo.service`
193
 
192
 
194
 
193
 
195
-On a non-systemd system, oragono can be configured to log to a file and used [logrotate(8)](https://linux.die.net/man/8/logrotate), since it will reopen its log files (as well as rehashing the config file) upon receiving a SIGHUP. To rehash manually outside the context of log rotation, you can use `killall -HUP oragono` or `pkill -HUP oragono`.
194
+On a non-systemd system, ergo can be configured to log to a file and used [logrotate(8)](https://linux.die.net/man/8/logrotate), since it will reopen its log files (as well as rehashing the config file) upon receiving a SIGHUP. To rehash manually outside the context of log rotation, you can use `killall -HUP ergo` or `pkill -HUP ergo`.
196
 
195
 
197
 
196
 
198
 ## Using valid TLS certificates
197
 ## Using valid TLS certificates
200
 The other major hurdle for productionizing (but one well worth the effort) is obtaining valid TLS certificates for your domain, if you haven't already done so:
199
 The other major hurdle for productionizing (but one well worth the effort) is obtaining valid TLS certificates for your domain, if you haven't already done so:
201
 
200
 
202
 1. The simplest way to get valid TLS certificates is from [Let's Encrypt](https://letsencrypt.org/) with [Certbot](https://certbot.eff.org/). The correct procedure will depend on whether you are already running a web server on port 80. If you are, follow the guides on the Certbot website; if you aren't, you can use `certbot certonly --standalone --preferred-challenges http -d example.com` (replace `example.com` with your domain).
201
 1. The simplest way to get valid TLS certificates is from [Let's Encrypt](https://letsencrypt.org/) with [Certbot](https://certbot.eff.org/). The correct procedure will depend on whether you are already running a web server on port 80. If you are, follow the guides on the Certbot website; if you aren't, you can use `certbot certonly --standalone --preferred-challenges http -d example.com` (replace `example.com` with your domain).
203
-1. At this point, you should have certificates available at `/etc/letsencrypt/live/example.com` (replacing `example.com` with your domain). You should serve `fullchain.pem` as the certificate and `privkey.pem` as its private key. However, these files are owned by root and the private key is not readable by the oragono role user, so you won't be able to use them directly in their current locations. You can write a post-renewal hook for certbot to make copies of these certificates accessible to the oragono role user. For example, install the following script as `/etc/letsencrypt/renewal-hooks/post/install-oragono-certificates`, again replacing `example.com` with your domain name, and chmod it 0755:
202
+1. At this point, you should have certificates available at `/etc/letsencrypt/live/example.com` (replacing `example.com` with your domain). You should serve `fullchain.pem` as the certificate and `privkey.pem` as its private key. However, these files are owned by root and the private key is not readable by the ergo role user, so you won't be able to use them directly in their current locations. You can write a post-renewal hook for certbot to make copies of these certificates accessible to the ergo role user. For example, install the following script as `/etc/letsencrypt/renewal-hooks/post/install-ergo-certificates`, again replacing `example.com` with your domain name, and chmod it 0755:
204
 
203
 
205
 ````bash
204
 ````bash
206
 #!/bin/bash
205
 #!/bin/bash
208
 set -eu
207
 set -eu
209
 
208
 
210
 umask 077
209
 umask 077
211
-cp /etc/letsencrypt/live/example.com/fullchain.pem /home/oragono/
212
-cp /etc/letsencrypt/live/example.com/privkey.pem /home/oragono/
213
-chown oragono:oragono /home/oragono/*.pem
214
-# rehash oragono, which will reload the certificates:
215
-systemctl reload oragono.service
210
+cp /etc/letsencrypt/live/example.com/fullchain.pem /home/ergo/
211
+cp /etc/letsencrypt/live/example.com/privkey.pem /home/ergo/
212
+chown ergo:ergo /home/ergo/*.pem
213
+# rehash ergo, which will reload the certificates:
214
+systemctl reload ergo.service
216
 ````
215
 ````
217
 
216
 
218
 Executing this script manually will install the certificates for the first time and perform a rehash, enabling them.
217
 Executing this script manually will install the certificates for the first time and perform a rehash, enabling them.
219
 
218
 
220
-If you are using Certbot 0.29.0 or higher, you can also change the ownership of the files under `/etc/letsencrypt` so that the oragono user can read them, as described in the [UnrealIRCd documentation](https://www.unrealircd.org/docs/Setting_up_certbot_for_use_with_UnrealIRCd#Tweaking_permissions_on_the_key_file).
219
+If you are using Certbot 0.29.0 or higher, you can also change the ownership of the files under `/etc/letsencrypt` so that the ergo user can read them, as described in the [UnrealIRCd documentation](https://www.unrealircd.org/docs/Setting_up_certbot_for_use_with_UnrealIRCd#Tweaking_permissions_on_the_key_file).
221
 
220
 
222
 
221
 
223
-## Upgrading to a new version of Oragono
222
+## Upgrading to a new version of Ergo
224
 
223
 
225
-As long as you are using official releases or release candidates of Oragono, any backwards-incompatible changes should be described in the changelog.
224
+As long as you are using official releases or release candidates of Ergo, any backwards-incompatible changes should be described in the changelog.
226
 
225
 
227
-In general, the config file format should be fully backwards and forwards compatible. Unless otherwise noted, no config file changes should be necessary when upgrading Oragono. However, the "config changes" section of the changelog will typically describe new sections that can be added to your config to enable new functionality, as well as changes in the recommended values of certain fields.
226
+In general, the config file format should be fully backwards and forwards compatible. Unless otherwise noted, no config file changes should be necessary when upgrading Ergo. However, the "config changes" section of the changelog will typically describe new sections that can be added to your config to enable new functionality, as well as changes in the recommended values of certain fields.
228
 
227
 
229
 The database is versioned; upgrades that involve incompatible changes to the database require updating the database. If you have `datastore.autoupgrade` enabled in your config, the database will be backed up and upgraded when you restart your server when required. Otherwise, you can apply upgrades manually:
228
 The database is versioned; upgrades that involve incompatible changes to the database require updating the database. If you have `datastore.autoupgrade` enabled in your config, the database will be backed up and upgraded when you restart your server when required. Otherwise, you can apply upgrades manually:
230
 
229
 
231
 1. Stop your server
230
 1. Stop your server
232
 1. Make a backup of your database file
231
 1. Make a backup of your database file
233
-1. Run `oragono upgradedb` (from the same working directory and with the same arguments that you would use when running `oragono run`)
232
+1. Run `ergo upgradedb` (from the same working directory and with the same arguments that you would use when running `ergo run`)
234
 1. Start the server again
233
 1. Start the server again
235
 
234
 
236
 If you want to run our master branch as opposed to our releases, come find us in our channel and we can guide you around any potential pitfalls.
235
 If you want to run our master branch as opposed to our releases, come find us in our channel and we can guide you around any potential pitfalls.
241
 
240
 
242
 # Features
241
 # Features
243
 
242
 
244
-In this section, we'll explain and go through using various features of the Oragono IRC server.
243
+In this section, we'll explain and go through using various features of the Ergo IRC server.
245
 
244
 
246
 
245
 
247
 ## User Accounts
246
 ## User Accounts
248
 
247
 
249
-In most IRC servers you can use `NickServ` to register an account. You can do the same thing with Oragono, by default, with no other software needed!
248
+In most IRC servers you can use `NickServ` to register an account. You can do the same thing with Ergo, by default, with no other software needed!
250
 
249
 
251
 To register an account, use:
250
 To register an account, use:
252
 
251
 
264
 
263
 
265
 ## Account/Nick Modes
264
 ## Account/Nick Modes
266
 
265
 
267
-Oragono supports several different modes of operation with respect to accounts and nicknames.
266
+Ergo supports several different modes of operation with respect to accounts and nicknames.
268
 
267
 
269
 ### Nick equals account
268
 ### Nick equals account
270
 
269
 
302
 
301
 
303
 ### No nick reservation
302
 ### No nick reservation
304
 
303
 
305
-This makes Oragono's services act similar to Quakenet's Q bot. In this mode, users cannot own or reserve nicknames. In other words, there is no connection between account names and nicknames. Anyone can use any nickname (as long as it's not already in use by another running client). However, accounts are still useful: they can be used to register channels (see below), and some IRCv3-capable clients (with the `account-tag` or `extended-join` capabilities) may be able to take advantage of them.
304
+This makes Ergo's services act similar to Quakenet's Q bot. In this mode, users cannot own or reserve nicknames. In other words, there is no connection between account names and nicknames. Anyone can use any nickname (as long as it's not already in use by another running client). However, accounts are still useful: they can be used to register channels (see below), and some IRCv3-capable clients (with the `account-tag` or `extended-join` capabilities) may be able to take advantage of them.
306
 
305
 
307
 To enable this mode, set the following configs:
306
 To enable this mode, set the following configs:
308
 
307
 
312
 
311
 
313
 ### SASL-only mode
312
 ### SASL-only mode
314
 
313
 
315
-This mode is comparable to Slack, Mattermost, or similar products intended as internal chat servers for an organization or team. In this mode, clients cannot connect to the server unless they log in with SASL as part of the initial handshake. This allows Oragono to be deployed facing the public Internet, with fine-grained control over who can log in.
314
+This mode is comparable to Slack, Mattermost, or similar products intended as internal chat servers for an organization or team. In this mode, clients cannot connect to the server unless they log in with SASL as part of the initial handshake. This allows Ergo to be deployed facing the public Internet, with fine-grained control over who can log in.
316
 
315
 
317
 In this mode, clients must not be allowed to register their own accounts, so user-initiated account registration must be disabled. Accordingly, an operator must do the initial account creation, using the `SAREGISTER` command of NickServ. (For more details, `/msg NickServ help saregister`.) To bootstrap this process, you can make an initial connection from localhost, which is exempt (by default) from the requirement, or temporarily add your own IP to the exemption list. You can also use a more permissive configuration for bootstrapping, then switch to this one once you have your account. Another possibility is permanently exempting an internal network, e.g., `10.0.0.0/8`, that only trusted people can access.
316
 In this mode, clients must not be allowed to register their own accounts, so user-initiated account registration must be disabled. Accordingly, an operator must do the initial account creation, using the `SAREGISTER` command of NickServ. (For more details, `/msg NickServ help saregister`.) To bootstrap this process, you can make an initial connection from localhost, which is exempt (by default) from the requirement, or temporarily add your own IP to the exemption list. You can also use a more permissive configuration for bootstrapping, then switch to this one once you have your account. Another possibility is permanently exempting an internal network, e.g., `10.0.0.0/8`, that only trusted people can access.
318
 
317
 
323
 
322
 
324
 ## Email verification
323
 ## Email verification
325
 
324
 
326
-By default, account registrations complete immediately and do not require a verification step. However, like other service frameworks, Oragono's NickServ can be configured to require email verification of registrations. The main challenge here is to prevent your emails from being marked as spam, which you can do by configuring [SPF](https://en.wikipedia.org/wiki/Sender_Policy_Framework), [DKIM](https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail), and [DMARC](https://en.wikipedia.org/wiki/DMARC). For example, this configuration (when added to the `accounts.registration` section) enables email verification, with the emails being signed with a DKIM key and sent directly from Oragono:
325
+By default, account registrations complete immediately and do not require a verification step. However, like other service frameworks, Ergo's NickServ can be configured to require email verification of registrations. The main challenge here is to prevent your emails from being marked as spam, which you can do by configuring [SPF](https://en.wikipedia.org/wiki/Sender_Policy_Framework), [DKIM](https://en.wikipedia.org/wiki/DomainKeys_Identified_Mail), and [DMARC](https://en.wikipedia.org/wiki/DMARC). For example, this configuration (when added to the `accounts.registration` section) enables email verification, with the emails being signed with a DKIM key and sent directly from Ergo:
327
 
326
 
328
 ```yaml
327
 ```yaml
329
         email-verification:
328
         email-verification:
355
 
354
 
356
 ## Language
355
 ## Language
357
 
356
 
358
-Oragono supports multiple languages! Specifically, once you connect you're able to get server messages in other languages (messages from other users will still be in their original languages, though).
357
+Ergo supports multiple languages! Specifically, once you connect you're able to get server messages in other languages (messages from other users will still be in their original languages, though).
359
 
358
 
360
 To see which languages are supported, run this command:
359
 To see which languages are supported, run this command:
361
 
360
 
390
 
389
 
391
 ## Multiclient ("Bouncer")
390
 ## Multiclient ("Bouncer")
392
 
391
 
393
-Traditionally, every connection to an IRC server is separate must use a different nickname. [Bouncers](https://en.wikipedia.org/wiki/BNC_%28software%29#IRC) are used to work around this, by letting multiple clients connect to a single nickname. With Oragono, if the server is configured to allow it, multiple clients can share a single nickname without needing a bouncer. To use this feature, both connections must authenticate with SASL to the same user account and then use the same nickname during connection registration (while connecting to the server) – once you've logged-in, you can't share another nickname.
392
+Traditionally, every connection to an IRC server is separate must use a different nickname. [Bouncers](https://en.wikipedia.org/wiki/BNC_%28software%29#IRC) are used to work around this, by letting multiple clients connect to a single nickname. With Ergo, if the server is configured to allow it, multiple clients can share a single nickname without needing a bouncer. To use this feature, both connections must authenticate with SASL to the same user account and then use the same nickname during connection registration (while connecting to the server) – once you've logged-in, you can't share another nickname.
394
 
393
 
395
 To enable this functionality, set `accounts.multiclient.enabled` to `true`. Setting `accounts.multiclient.allowed-by-default` to `true` will allow this for everyone. If `allowed-by-default` is `false` (but `enabled` is still `true`), users can opt in to shared connections using `/msg NickServ SET multiclient true`.
394
 To enable this functionality, set `accounts.multiclient.enabled` to `true`. Setting `accounts.multiclient.allowed-by-default` to `true` will allow this for everyone. If `allowed-by-default` is `false` (but `enabled` is still `true`), users can opt in to shared connections using `/msg NickServ SET multiclient true`.
396
 
395
 
397
 You can see a list of your active sessions and their idle times with `/msg NickServ sessions` (network operators can use `/msg NickServ sessions nickname` to see another user's sessions).
396
 You can see a list of your active sessions and their idle times with `/msg NickServ sessions` (network operators can use `/msg NickServ sessions nickname` to see another user's sessions).
398
 
397
 
399
-Oragono now supports "always-on clients" that remain present on the server (holding their nickname, subscribed to channels, able to receive DMs, etc.) even when no actual clients are connected. To enable this as a server operator, set `accounts.multiclient.always-on` to either `opt-in`, `opt-out`, or `mandatory`. To enable or disable it as a client (if the server setting is `opt-in` or `opt-out` respectively), use `/msg NickServ set always-on true` (or `false`).
398
+Ergo now supports "always-on clients" that remain present on the server (holding their nickname, subscribed to channels, able to receive DMs, etc.) even when no actual clients are connected. To enable this as a server operator, set `accounts.multiclient.always-on` to either `opt-in`, `opt-out`, or `mandatory`. To enable or disable it as a client (if the server setting is `opt-in` or `opt-out` respectively), use `/msg NickServ set always-on true` (or `false`).
400
 
399
 
401
 
400
 
402
 ## History
401
 ## History
403
 
402
 
404
-Oragono supports two methods of storing history, an in-memory buffer with a configurable maximum number of messages, and persistent history stored in MySQL (with no fixed limits on message capacity). To enable in-memory history, configure `history.enabled` and associated settings in the `history` section. To enable persistent history, enter your MySQL server information in `datastore.mysql` and then enable persistent history storage in `history.persistent`.
403
+Ergo supports two methods of storing history, an in-memory buffer with a configurable maximum number of messages, and persistent history stored in MySQL (with no fixed limits on message capacity). To enable in-memory history, configure `history.enabled` and associated settings in the `history` section. To enable persistent history, enter your MySQL server information in `datastore.mysql` and then enable persistent history storage in `history.persistent`.
405
 
404
 
406
 Unfortunately, client support for history playback is still patchy. In descending order of support:
405
 Unfortunately, client support for history playback is still patchy. In descending order of support:
407
 
406
 
408
 1. The [IRCv3 chathistory specification](https://ircv3.net/specs/extensions/chathistory) offers the most fine-grained control over history replay. It is supported by [Kiwi IRC](https://github.com/kiwiirc/kiwiirc), and hopefully other clients soon.
407
 1. The [IRCv3 chathistory specification](https://ircv3.net/specs/extensions/chathistory) offers the most fine-grained control over history replay. It is supported by [Kiwi IRC](https://github.com/kiwiirc/kiwiirc), and hopefully other clients soon.
409
 1. We emulate the [ZNC playback module](https://wiki.znc.in/Playback) for clients that support it. You may need to enable support for it explicitly in your client (see the "ZNC" section below).
408
 1. We emulate the [ZNC playback module](https://wiki.znc.in/Playback) for clients that support it. You may need to enable support for it explicitly in your client (see the "ZNC" section below).
410
-1. If you set your client to always-on (see the previous section for details), you can set a "device ID" for each device you use. Oragono will then remember the last time your device was present on the server, and each time you sign on, it will attempt to replay exactly those messages you missed. There are a few ways to set your device ID when connecting:
409
+1. If you set your client to always-on (see the previous section for details), you can set a "device ID" for each device you use. Ergo will then remember the last time your device was present on the server, and each time you sign on, it will attempt to replay exactly those messages you missed. There are a few ways to set your device ID when connecting:
411
     - You can add it to your SASL username with an `@`, e.g., if your SASL username is `alice` you can send `alice@phone`
410
     - You can add it to your SASL username with an `@`, e.g., if your SASL username is `alice` you can send `alice@phone`
412
     - You can add it in a similar way to your IRC protocol username ("ident"), e.g., `alice@phone`
411
     - You can add it in a similar way to your IRC protocol username ("ident"), e.g., `alice@phone`
413
     - If login to user accounts via the `PASS` command is enabled on the server, you can provide it there, e.g., by sending `alice@phone:hunter2` as the server password
412
     - If login to user accounts via the `PASS` command is enabled on the server, you can provide it there, e.g., by sending `alice@phone:hunter2` as the server password
423
 1. Install the `mysql-server` package
422
 1. Install the `mysql-server` package
424
 1. Run `mysql_secure_installation` as root; this corrects some insecure package defaults
423
 1. Run `mysql_secure_installation` as root; this corrects some insecure package defaults
425
 1. Connect to your new MySQL server as root with `mysql --user root`
424
 1. Connect to your new MySQL server as root with `mysql --user root`
426
-1. In the MySQL prompt, create a new `oragono` user (substitute a strong password of your own for `hunter2`): `CREATE USER 'oragono'@'localhost' IDENTIFIED BY 'hunter2';`
427
-1. Create the database that history will be stored in: `CREATE DATABASE oragono_history;`
428
-1. Grant privileges on the database to the new user: `GRANT ALL PRIVILEGES ON oragono_history.* to 'oragono'@'localhost';`
429
-1. Enable persistent history in your Oragono config file. At a minimum, you must set `history.persistent.enabled = true`. You may want to modify the other options under `history.persistent` and `history`.
430
-1. Configure Oragono to talk to MySQL (again, substitute the strong password you chose previously for `hunter2`):
425
+1. In the MySQL prompt, create a new `ergo` user (substitute a strong password of your own for `hunter2`): `CREATE USER 'ergo'@'localhost' IDENTIFIED BY 'hunter2';`
426
+1. Create the database that history will be stored in: `CREATE DATABASE ergo_history;`
427
+1. Grant privileges on the database to the new user: `GRANT ALL PRIVILEGES ON ergo_history.* to 'ergo'@'localhost';`
428
+1. Enable persistent history in your Ergo config file. At a minimum, you must set `history.persistent.enabled = true`. You may want to modify the other options under `history.persistent` and `history`.
429
+1. Configure Ergo to talk to MySQL (again, substitute the strong password you chose previously for `hunter2`):
431
 
430
 
432
 ```yaml
431
 ```yaml
433
     mysql:
432
     mysql:
434
         enabled: true
433
         enabled: true
435
         socket-path: "/var/run/mysqld/mysqld.sock"
434
         socket-path: "/var/run/mysqld/mysqld.sock"
436
-        user: "oragono"
435
+        user: "ergo"
437
         password: "hunter2"
436
         password: "hunter2"
438
-        history-database: "oragono_history"
437
+        history-database: "ergo_history"
439
         timeout: 3s
438
         timeout: 3s
440
 ```
439
 ```
441
 
440
 
446
 
445
 
447
 IP cloaking is a way of balancing these concerns about abuse with concerns about user privacy. With cloaking, the user's IP address is deterministically "scrambled", typically via a cryptographic [MAC](https://en.wikipedia.org/wiki/Message_authentication_code), to form a "cloaked" hostname that replaces the usual reverse-DNS-based hostname. Users cannot reverse the scrambling to learn each other's IPs, but can ban a scrambled address the same way they would ban a regular hostname.
446
 IP cloaking is a way of balancing these concerns about abuse with concerns about user privacy. With cloaking, the user's IP address is deterministically "scrambled", typically via a cryptographic [MAC](https://en.wikipedia.org/wiki/Message_authentication_code), to form a "cloaked" hostname that replaces the usual reverse-DNS-based hostname. Users cannot reverse the scrambling to learn each other's IPs, but can ban a scrambled address the same way they would ban a regular hostname.
448
 
447
 
449
-Oragono supports cloaking, which is enabled by default (via the `server.ip-cloaking` section of the config). However, Oragono's cloaking behavior differs from other IRC software. Rather than scrambling each of the 4 bytes of the IPv4 address (or each 2-byte pair of the 8 such pairs of the IPv6 address) separately, the server administrator configures a CIDR length (essentially, a fixed number of most-significant-bits of the address). The CIDR (i.e., only the most significant portion of the address) is then scrambled atomically to produce the cloaked hostname. This errs on the side of user privacy, since knowing the cloaked hostname for one CIDR tells you nothing about the cloaked hostnames of other CIDRs --- the scheme reveals only whether two users are coming from the same CIDR. We suggest using 32-bit CIDRs for IPv4 (i.e., the whole address) and 64-bit CIDRs for IPv6, since these are the typical assignments made by ISPs to individual customers.
448
+Ergo supports cloaking, which is enabled by default (via the `server.ip-cloaking` section of the config). However, Ergo's cloaking behavior differs from other IRC software. Rather than scrambling each of the 4 bytes of the IPv4 address (or each 2-byte pair of the 8 such pairs of the IPv6 address) separately, the server administrator configures a CIDR length (essentially, a fixed number of most-significant-bits of the address). The CIDR (i.e., only the most significant portion of the address) is then scrambled atomically to produce the cloaked hostname. This errs on the side of user privacy, since knowing the cloaked hostname for one CIDR tells you nothing about the cloaked hostnames of other CIDRs --- the scheme reveals only whether two users are coming from the same CIDR. We suggest using 32-bit CIDRs for IPv4 (i.e., the whole address) and 64-bit CIDRs for IPv6, since these are the typical assignments made by ISPs to individual customers.
450
 
449
 
451
 Setting `server.ip-cloaking.num-bits` to 0 gives users cloaks that don't depend on their IP address information at all, which is an option for deployments where privacy is a more pressing concern than abuse. Holders of registered accounts can also use the vhost system (for details, `/msg HostServ HELP`.)
450
 Setting `server.ip-cloaking.num-bits` to 0 gives users cloaks that don't depend on their IP address information at all, which is an option for deployments where privacy is a more pressing concern than abuse. Holders of registered accounts can also use the vhost system (for details, `/msg HostServ HELP`.)
452
 
451
 
453
 
452
 
454
 ## Moderation
453
 ## Moderation
455
 
454
 
456
-Oragono shares some server operator moderation tools with other ircds. In particular:
455
+Ergo shares some server operator moderation tools with other ircds. In particular:
457
 
456
 
458
 1. `/SAMODE` can be used to grant or remove channel privileges. For example, to create an operator in a channel that has no operators: `/SAMODE #channel +o nickname`
457
 1. `/SAMODE` can be used to grant or remove channel privileges. For example, to create an operator in a channel that has no operators: `/SAMODE #channel +o nickname`
459
 2. `/SAJOIN` lets operators join channels despite restrictions, or forcibly join another user to a channel. For example, `/SAJOIN #channel` or `/SAJOIN nickname #channel`.
458
 2. `/SAJOIN` lets operators join channels despite restrictions, or forcibly join another user to a channel. For example, `/SAJOIN #channel` or `/SAJOIN nickname #channel`.
460
 
459
 
461
-However, Oragono's multiclient and always-on features mean that abuse prevention (at the server operator level) requires different techniques than a traditional IRC network. Server operators have two principal tools for abuse prevention:
460
+However, Ergo's multiclient and always-on features mean that abuse prevention (at the server operator level) requires different techniques than a traditional IRC network. Server operators have two principal tools for abuse prevention:
462
 
461
 
463
 1. `/UBAN`, which can disable user accounts and/or ban offending IPs and networks
462
 1. `/UBAN`, which can disable user accounts and/or ban offending IPs and networks
464
 2. `/DEFCON`, which can impose emergency restrictions on user activity in response to attacks
463
 2. `/DEFCON`, which can impose emergency restrictions on user activity in response to attacks
486
 
485
 
487
 There are two ways to make suggestions, either:
486
 There are two ways to make suggestions, either:
488
 
487
 
489
-- Submit an issue on our [bug tracker](https://github.com/oragono/oragono/issues).
490
-- Talk to us in the `#oragono` channel on Freenode.
488
+- Submit an issue on our [bug tracker](https://github.com/ergochat/ergo/issues).
489
+- Talk to us in the `#ergo` channel on irc.ergo.chat or irc.libera.chat.
491
 
490
 
492
 
491
 
493
 ## Why can't I oper?
492
 ## Why can't I oper?
494
 
493
 
495
-If you try to oper unsuccessfully, Oragono will disconnect you from the network. If you're unable to oper, here are some things to double-check:
494
+If you try to oper unsuccessfully, Ergo will disconnect you from the network. If you're unable to oper, here are some things to double-check:
496
 
495
 
497
-1. Did you correctly generate the hashed password with `oragono genpasswd`?
496
+1. Did you correctly generate the hashed password with `ergo genpasswd`?
498
 1. Did you add the password hash to the correct config file, then save the file?
497
 1. Did you add the password hash to the correct config file, then save the file?
499
-1. Did you rehash or restart Oragono after saving the file?
498
+1. Did you rehash or restart Ergo after saving the file?
500
 
499
 
501
-The config file accepts hashed passwords, not plaintext passwords. You must run `oragono genpasswd`, type your actual password in, and then receive a hashed blob back (it will look like `$2a$04$GvCFlShLZQjId3dARzwOWu9Nvq6lndXINw2Sdm6mUcwxhtx1U/hIm`). Enter that into the relevant `opers` block in your config file, then save the file.
500
+The config file accepts hashed passwords, not plaintext passwords. You must run `ergo genpasswd`, type your actual password in, and then receive a hashed blob back (it will look like `$2a$04$GvCFlShLZQjId3dARzwOWu9Nvq6lndXINw2Sdm6mUcwxhtx1U/hIm`). Enter that into the relevant `opers` block in your config file, then save the file.
502
 
501
 
503
-After that, you must rehash or restart Oragono to apply the config change. If a rehash didn't accomplish the desired effects, you might want to try a restart instead.
502
+After that, you must rehash or restart Ergo to apply the config change. If a rehash didn't accomplish the desired effects, you might want to try a restart instead.
504
 
503
 
505
 
504
 
506
-## Why is Oragono ignoring my ident response / USER command?
505
+## Why is Ergo ignoring my ident response / USER command?
507
 
506
 
508
-The default/recommended configuration of Oragono does not query remote ident servers, and furthermore ignores any user/ident sent with the `USER` command. All user/ident fields are set to a constant `~u`. There are a few reasons for this:
507
+The default/recommended configuration of Ergo does not query remote ident servers, and furthermore ignores any user/ident sent with the `USER` command. All user/ident fields are set to a constant `~u`. There are a few reasons for this:
509
 
508
 
510
 1. Remote ident lookups slow down connection initiation and pose privacy and security concerns (since they transmit usernames over the Internet in plaintext).
509
 1. Remote ident lookups slow down connection initiation and pose privacy and security concerns (since they transmit usernames over the Internet in plaintext).
511
-2. Ignoring user/ident simplifies bans; in general, a channel ban in Oragono should target either the nickname or the hostname. As a channel operator, `/msg ChanServ HOWTOBAN #channel nick` will recommend a way of banning any given user.
512
-3. Ident is commonly used to distinguish users connecting from the same trusted shell host or shared bouncer. This is less important with Oragono, which can act as a bouncer itself.
510
+2. Ignoring user/ident simplifies bans; in general, a channel ban in Ergo should target either the nickname or the hostname. As a channel operator, `/msg ChanServ HOWTOBAN #channel nick` will recommend a way of banning any given user.
511
+3. Ident is commonly used to distinguish users connecting from the same trusted shell host or shared bouncer. This is less important with Ergo, which can act as a bouncer itself.
513
 4. Because of limitations of the IRC protocol, every character of the user/ident field counts against the maximum size of a message that can be sent.
512
 4. Because of limitations of the IRC protocol, every character of the user/ident field counts against the maximum size of a message that can be sent.
514
 
513
 
515
 As an operator, you can modify this behavior if desired; see the `check-ident` and `coerce-ident` settings in the config file.
514
 As an operator, you can modify this behavior if desired; see the `check-ident` and `coerce-ident` settings in the config file.
517
 
516
 
518
 ## Why can't I change nicknames?
517
 ## Why can't I change nicknames?
519
 
518
 
520
-The default/recommended configuration of Oragono does not allow authenticated users to change their nicknames; an authenticated user must use their account name as their nickname. There are a few reasons for this:
519
+The default/recommended configuration of Ergo does not allow authenticated users to change their nicknames; an authenticated user must use their account name as their nickname. There are a few reasons for this:
521
 
520
 
522
-1. Assigning a consistent nickname prevents certain "split-brain" scenarios that break Oragono's "multiclient" functionality. In brief, if two clients are connecting to the same account/identity, but only one of them issues a `/NICK` command, and then one of them subsequently loses and regains its connection to the server, they "break apart": they will have separate identities and channel memberships on the network, and it's difficult to bring them back together again.
521
+1. Assigning a consistent nickname prevents certain "split-brain" scenarios that break Ergo's "multiclient" functionality. In brief, if two clients are connecting to the same account/identity, but only one of them issues a `/NICK` command, and then one of them subsequently loses and regains its connection to the server, they "break apart": they will have separate identities and channel memberships on the network, and it's difficult to bring them back together again.
523
 2. The use of a consistent nickname reduces the possibility of edge cases in history playback.
522
 2. The use of a consistent nickname reduces the possibility of edge cases in history playback.
524
 3. The use of a consistent nickname simplifies offline messaging (which is a first-class concept for always-on clients).
523
 3. The use of a consistent nickname simplifies offline messaging (which is a first-class concept for always-on clients).
525
-4. Oragono eliminates the cases in conventional IRC servers that necessitate nickname changes. In particular, you can always claim your nickname, even if the server is still waiting for an old client to time out, and you can connect arbitrarily many clients to the same nickname.
524
+4. Ergo eliminates the cases in conventional IRC servers that necessitate nickname changes. In particular, you can always claim your nickname, even if the server is still waiting for an old client to time out, and you can connect arbitrarily many clients to the same nickname.
526
 
525
 
527
 As an operator, you can disable this behavior using the `force-nick-equals-account` setting, but this is discouraged because it has no effect on always-on clients; always-on clients must use their account names as their nicknames regardless of this setting.
526
 As an operator, you can disable this behavior using the `force-nick-equals-account` setting, but this is discouraged because it has no effect on always-on clients; always-on clients must use their account names as their nicknames regardless of this setting.
528
 
527
 
583
 
582
 
584
 ## Reverse proxies
583
 ## Reverse proxies
585
 
584
 
586
-Oragono supports the use of reverse proxies (such as nginx, or a Kubernetes [LoadBalancer](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)) that sit between it and the client. In these deployments, the [PROXY protocol](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt) is used to pass the end user's IP through to Oragono. These proxies can be used to terminate TLS externally to Oragono, e.g., if you need to support versions of the TLS protocol that are not implemented natively by Go, or if you want to consolidate your certificate management into a single nginx instance.
585
+Ergo supports the use of reverse proxies (such as nginx, or a Kubernetes [LoadBalancer](https://kubernetes.io/docs/concepts/services-networking/service/#loadbalancer)) that sit between it and the client. In these deployments, the [PROXY protocol](https://www.haproxy.org/download/1.8/doc/proxy-protocol.txt) is used to pass the end user's IP through to Ergo. These proxies can be used to terminate TLS externally to Ergo, e.g., if you need to support versions of the TLS protocol that are not implemented natively by Go, or if you want to consolidate your certificate management into a single nginx instance.
587
 
586
 
588
 The first step is to add the reverse proxy's IP to `proxy-allowed-from` and `ip-limits.exempted`. (Use `localhost` to exempt all loopback IPs and Unix domain sockets.)
587
 The first step is to add the reverse proxy's IP to `proxy-allowed-from` and `ip-limits.exempted`. (Use `localhost` to exempt all loopback IPs and Unix domain sockets.)
589
 
588
 
590
 After that, there are two possibilities:
589
 After that, there are two possibilities:
591
 
590
 
592
-* If you're using a proxy like nginx or stunnel that terminates TLS, then forwards a PROXY v1 (ASCII) header ahead of a plaintext connection, no further Oragono configuration is required. You need only configure your proxy to send the PROXY header. Here's an [example nginx config](https://github.com/oragono/testnet.oragono.io/blob/master/nginx_stream.conf).
593
-* If you're using a cloud load balancer that either sends a PROXY v1 header ahead of unterminated TLS (like [DigitalOcean](https://www.digitalocean.com/docs/networking/load-balancers/#proxy-protocol)) or sends a PROXY v2 (binary) header (like the [AWS "Network Load Balancer"](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html#proxy-protocol)), Oragono must be configured to expect a PROXY header ahead of the connection. Add `proxy: true` to the listener config block, e.g.,
591
+* If you're using a proxy like nginx or stunnel that terminates TLS, then forwards a PROXY v1 (ASCII) header ahead of a plaintext connection, no further Ergo configuration is required. You need only configure your proxy to send the PROXY header. Here's an [example nginx config](https://github.com/ergochat/testnet.ergo.chat/blob/master/nginx_stream.conf).
592
+* If you're using a cloud load balancer that either sends a PROXY v1 header ahead of unterminated TLS (like [DigitalOcean](https://www.digitalocean.com/docs/networking/load-balancers/#proxy-protocol)) or sends a PROXY v2 (binary) header (like the [AWS "Network Load Balancer"](https://docs.aws.amazon.com/elasticloadbalancing/latest/network/load-balancer-target-groups.html#proxy-protocol)), Ergo must be configured to expect a PROXY header ahead of the connection. Add `proxy: true` to the listener config block, e.g.,
594
 
593
 
595
 ```yaml
594
 ```yaml
596
         ":6697":
595
         ":6697":
603
 
602
 
604
 ## Client certificates
603
 ## Client certificates
605
 
604
 
606
-Oragono supports authenticating to user accounts via TLS client certificates. The end user must enable the client certificate in their client and also enable SASL with the `EXTERNAL` method. To register an account using only a client certificate for authentication, connect with the client certificate and use `/NS REGISTER *` (or `/NS REGISTER * email@example.com` if email verification is enabled on the server). To add a client certificate to an existing account, obtain the SHA-256 fingerprint of the certificate (either by connecting with it and looking at your own `/WHOIS` response, in particular the `276 RPL_WHOISCERTFP` line, or using the openssl command `openssl x509 -noout -fingerprint -sha256 -in example_client_cert.pem`), then use the `/NS CERT` command).
605
+Ergo supports authenticating to user accounts via TLS client certificates. The end user must enable the client certificate in their client and also enable SASL with the `EXTERNAL` method. To register an account using only a client certificate for authentication, connect with the client certificate and use `/NS REGISTER *` (or `/NS REGISTER * email@example.com` if email verification is enabled on the server). To add a client certificate to an existing account, obtain the SHA-256 fingerprint of the certificate (either by connecting with it and looking at your own `/WHOIS` response, in particular the `276 RPL_WHOISCERTFP` line, or using the openssl command `openssl x509 -noout -fingerprint -sha256 -in example_client_cert.pem`), then use the `/NS CERT` command).
607
 
606
 
608
 Client certificates are not supported over websockets due to a [Chrome bug](https://bugs.chromium.org/p/chromium/issues/detail?id=329884).
607
 Client certificates are not supported over websockets due to a [Chrome bug](https://bugs.chromium.org/p/chromium/issues/detail?id=329884).
609
 
608
 
610
 ## SNI
609
 ## SNI
611
 
610
 
612
-Oragono supports [SNI](https://en.wikipedia.org/wiki/Server_Name_Indication); this is useful if you have multiple domain names for your server, with different certificates covering different domain names. Configure your TLS listener like this:
611
+Ergo supports [SNI](https://en.wikipedia.org/wiki/Server_Name_Indication); this is useful if you have multiple domain names for your server, with different certificates covering different domain names. Configure your TLS listener like this:
613
 
612
 
614
 ```yaml
613
 ```yaml
615
         ":6697":
614
         ":6697":
631
 
630
 
632
 On IRC, you can set modes on users and on channels. Modes are basically extra information that changes how users and channels work.
631
 On IRC, you can set modes on users and on channels. Modes are basically extra information that changes how users and channels work.
633
 
632
 
634
-In this section, we give an overview of the modes Oragono supports.
633
+In this section, we give an overview of the modes Ergo supports.
635
 
634
 
636
 
635
 
637
 ## User Modes
636
 ## User Modes
900
 
899
 
901
 # Commands
900
 # Commands
902
 
901
 
903
-The best place to look for command help is on a running copy or Oragono itself!
902
+The best place to look for command help is on a running copy or Ergo itself!
904
 
903
 
905
-To see the integrated command help, simply spin up a copy of Oragono and then run this command:
904
+To see the integrated command help, simply spin up a copy of Ergo and then run this command:
906
 
905
 
907
     /HELPOP <command>
906
     /HELPOP <command>
908
 
907
 
918
 
917
 
919
 # Working with other software
918
 # Working with other software
920
 
919
 
921
-Oragono should interoperate with most IRC-based software, including bots. If you have problems getting your preferred software to work with Oragono, feel free to report it to us. If the root cause is a bug in Oragono, we'll fix it.
920
+Ergo should interoperate with most IRC-based software, including bots. If you have problems getting your preferred software to work with Ergo, feel free to report it to us. If the root cause is a bug in Ergo, we'll fix it.
922
 
921
 
923
 One exception is services frameworks like [Anope](https://github.com/anope/anope) or [Atheme](https://github.com/atheme/atheme); we have our own services implementations built directly into the server, and since we don't support federation, there's no place to plug in an alternative implementation. (If you are already using Anope or Atheme, we support migrating your database --- see below.)
922
 One exception is services frameworks like [Anope](https://github.com/anope/anope) or [Atheme](https://github.com/atheme/atheme); we have our own services implementations built directly into the server, and since we don't support federation, there's no place to plug in an alternative implementation. (If you are already using Anope or Atheme, we support migrating your database --- see below.)
924
 
923
 
926
 
925
 
927
 ## Kiwi IRC
926
 ## Kiwi IRC
928
 
927
 
929
-[Kiwi IRC](https://github.com/kiwiirc/kiwiirc/) is a web-based IRC client with excellent IRCv3 support. In particular, it is the only major client to fully support Oragono's server-side history features. For a demonstration of these features, see the [Oragono testnet](https://testnet.oragono.io/kiwi).
928
+[Kiwi IRC](https://github.com/kiwiirc/kiwiirc/) is a web-based IRC client with excellent IRCv3 support. In particular, it is the only major client to fully support Ergo's server-side history features. For a demonstration of these features, see the [Ergo testnet](https://testnet.ergo.chat/kiwi).
930
 
929
 
931
-Current versions of Kiwi are 100% static files (HTML and Javascript), running entirely in the end user's browser without the need for a separate server-side backend. This frontend can connect directly to Oragono, using Oragono's support for native websockets. For best interoperability with firewalls, you should run an externally facing web server on port 443 that can serve both the static files and the websocket path, then have it reverse-proxy the websocket path to Oragono. For example, configure the following listener in ircd.yaml:
930
+Current versions of Kiwi are 100% static files (HTML and Javascript), running entirely in the end user's browser without the need for a separate server-side backend. This frontend can connect directly to Ergo, using Ergo's support for native websockets. For best interoperability with firewalls, you should run an externally facing web server on port 443 that can serve both the static files and the websocket path, then have it reverse-proxy the websocket path to Ergo. For example, configure the following listener in ircd.yaml:
932
 
931
 
933
 ```yaml
932
 ```yaml
934
         "127.0.0.1:8067":
933
         "127.0.0.1:8067":
935
             websocket: true
934
             websocket: true
936
 ```
935
 ```
937
 
936
 
938
-then the following location block in your nginx config (this proxies only `/webirc` on your server to Oragono's websocket listener):
937
+then the following location block in your nginx config (this proxies only `/webirc` on your server to Ergo's websocket listener):
939
 
938
 
940
 ```
939
 ```
941
 	location /webirc {
940
 	location /webirc {
949
 	}
948
 	}
950
 ```
949
 ```
951
 
950
 
952
-then add the following `startupOptions` to Kiwi's `static/config.json` file (see the [Oragono testnet's config.json](https://testnet.oragono.io/kiwi/static/config.json) for a fully functional example):
951
+then add the following `startupOptions` to Kiwi's `static/config.json` file (see the [Ergo testnet's config.json](https://testnet.ergo.chat/kiwi/static/config.json) for a fully functional example):
953
 
952
 
954
 ```
953
 ```
955
     "startupOptions" : {
954
     "startupOptions" : {
961
 
960
 
962
 ## Migrating from Anope or Atheme
961
 ## Migrating from Anope or Atheme
963
 
962
 
964
-You can import user and channel registrations from an Anope or Atheme database into a new Oragono database (not all features are supported). Use the following steps:
963
+You can import user and channel registrations from an Anope or Atheme database into a new Ergo database (not all features are supported). Use the following steps:
965
 
964
 
966
-1. Obtain the relevant migration tool from the latest stable release: [anope2json.py](https://github.com/oragono/oragono/blob/stable/distrib/anope/anope2json.py) or [atheme2json.py](https://github.com/oragono/oragono/blob/stable/distrib/atheme/atheme2json.py) respectively.
965
+1. Obtain the relevant migration tool from the latest stable release: [anope2json.py](https://github.com/ergochat/ergo/blob/stable/distrib/anope/anope2json.py) or [atheme2json.py](https://github.com/ergochat/ergo/blob/stable/distrib/atheme/atheme2json.py) respectively.
967
 1. Make a copy of your Anope or Atheme database file. (You may have to stop and start the services daemon to get it to commit all its changes.)
966
 1. Make a copy of your Anope or Atheme database file. (You may have to stop and start the services daemon to get it to commit all its changes.)
968
 1. Convert the database to JSON, e.g., with `python3 ./anope2json.py anope.db output.json`
967
 1. Convert the database to JSON, e.g., with `python3 ./anope2json.py anope.db output.json`
969
-1. Copy your desired Oragono config to `./ircd.yaml` (make any desired edits)
970
-1. Run `oragono importdb ./output.json`
971
-1. Run `oragono mkcerts` if necessary to generate self-signed TLS certificates
972
-1. Run `oragono run` to bring up your new Oragono instance
968
+1. Copy your desired Ergo config to `./ircd.yaml` (make any desired edits)
969
+1. Run `ergo importdb ./output.json`
970
+1. Run `ergo mkcerts` if necessary to generate self-signed TLS certificates
971
+1. Run `ergo run` to bring up your new Ergo instance
973
 
972
 
974
 ## Hybrid Open Proxy Monitor (HOPM)
973
 ## Hybrid Open Proxy Monitor (HOPM)
975
 
974
 
976
-[hopm](https://github.com/ircd-hybrid/hopm) can be used to monitor your server for connections from open proxies, then automatically ban them. To configure hopm to work with oragono, add operator blocks like this to your oragono config file, which grant hopm the necessary privileges:
975
+[hopm](https://github.com/ircd-hybrid/hopm) can be used to monitor your server for connections from open proxies, then automatically ban them. To configure hopm to work with Ergo, add operator blocks like this to your Ergo config file, which grant hopm the necessary privileges:
977
 
976
 
978
 ````yaml
977
 ````yaml
979
 # operator classes
978
 # operator classes
1003
         modes: +is c
1002
         modes: +is c
1004
 
1003
 
1005
         # password to login with /OPER command
1004
         # password to login with /OPER command
1006
-        # generated using  "oragono genpasswd"
1005
+        # generated using  "ergo genpasswd"
1007
         password: "$2a$04$JmsYDY6kX3/wwyK3ao0L7.aGJEto0Xm4DyL6/6zOmCpzeweIb8kdO"
1006
         password: "$2a$04$JmsYDY6kX3/wwyK3ao0L7.aGJEto0Xm4DyL6/6zOmCpzeweIb8kdO"
1008
 ````
1007
 ````
1009
 
1008
 
1010
 Then configure hopm like this:
1009
 Then configure hopm like this:
1011
 
1010
 
1012
 ````
1011
 ````
1013
-/* oragono */
1012
+/* ergo */
1014
 connregex = ".+-.+CONNECT.+-.+ Client Connected \\[([^ ]+)\\] \\[u:([^ ]+)\\] \\[h:([^ ]+)\\] \\[ip:([^ ]+)\\] .+";
1013
 connregex = ".+-.+CONNECT.+-.+ Client Connected \\[([^ ]+)\\] \\[u:([^ ]+)\\] \\[h:([^ ]+)\\] \\[ip:([^ ]+)\\] .+";
1015
 
1014
 
1016
-/* A DLINE example for oragono */
1015
+/* A DLINE example for ergo */
1017
 kline = "DLINE ANDKILL 2h %i :Open proxy found on your host.";
1016
 kline = "DLINE ANDKILL 2h %i :Open proxy found on your host.";
1018
 ````
1017
 ````
1019
 
1018
 
1020
 ## Tor
1019
 ## Tor
1021
 
1020
 
1022
-Oragono has code support for adding an .onion address to an IRC server, or operating an IRC server as a Tor onion service ("hidden service"). This is subtle, so you should be familiar with the [Tor Project](https://www.torproject.org/) and the concept of an [onion service](https://www.torproject.org/docs/tor-onion-service.html.en).
1021
+Ergo has code support for adding an .onion address to an IRC server, or operating an IRC server as a Tor onion service ("hidden service"). This is subtle, so you should be familiar with the [Tor Project](https://www.torproject.org/) and the concept of an [onion service](https://www.torproject.org/docs/tor-onion-service.html.en).
1023
 
1022
 
1024
-There are two possible ways to serve Oragono over Tor. One is to add a .onion address to a server that also serves non-Tor clients, and whose IP address is public information. This is relatively straightforward. Add a separate listener, for example `127.0.0.2:6668`, to Oragono's `server.listeners`, then configure it with `tor: true`. Then configure Tor like this:
1023
+There are two possible ways to serve Ergo over Tor. One is to add a .onion address to a server that also serves non-Tor clients, and whose IP address is public information. This is relatively straightforward. Add a separate listener, for example `127.0.0.2:6668`, to Ergo's `server.listeners`, then configure it with `tor: true`. Then configure Tor like this:
1025
 
1024
 
1026
 ````
1025
 ````
1027
-HiddenServiceDir /var/lib/tor/oragono_hidden_service
1026
+HiddenServiceDir /var/lib/tor/ergo_hidden_service
1028
 HiddenServicePort 6667 127.0.0.2:6668
1027
 HiddenServicePort 6667 127.0.0.2:6668
1029
 
1028
 
1030
 # these are optional, but can be used to speed up the circuits in the case
1029
 # these are optional, but can be used to speed up the circuits in the case
1033
 HiddenServiceSingleHopMode 1
1032
 HiddenServiceSingleHopMode 1
1034
 ````
1033
 ````
1035
 
1034
 
1036
-Tor provides end-to-end encryption for onion services, so there's no need to enable TLS in Oragono for the listener (`127.0.0.2:6668` in this example). Doing so is not recommended, given the difficulty in obtaining a TLS certificate valid for an .onion address.
1035
+Tor provides end-to-end encryption for onion services, so there's no need to enable TLS in Ergo for the listener (`127.0.0.2:6668` in this example). Doing so is not recommended, given the difficulty in obtaining a TLS certificate valid for an .onion address.
1037
 
1036
 
1038
-The second way is to run Oragono as a true hidden service, where the server's actual IP address is a secret. This requires hardening measures on the Oragono side:
1037
+The second way is to run Ergo as a true hidden service, where the server's actual IP address is a secret. This requires hardening measures on the Ergo side:
1039
 
1038
 
1040
-* Oragono should not accept any connections on its public interfaces. You should remove any listener that starts with the address of a public interface, or with `:`, which means "listen on all available interfaces". You should listen only on `127.0.0.1:6667` and a Unix domain socket such as `/hidden_service_sockets/oragono_tor_sock`.
1039
+* Ergo should not accept any connections on its public interfaces. You should remove any listener that starts with the address of a public interface, or with `:`, which means "listen on all available interfaces". You should listen only on `127.0.0.1:6667` and a Unix domain socket such as `/hidden_service_sockets/ergo_tor_sock`.
1041
 * In this mode, it is especially important that all operator passwords are strong and all operators are trusted (operators have a larger attack surface to deanonymize the server).
1040
 * In this mode, it is especially important that all operator passwords are strong and all operators are trusted (operators have a larger attack surface to deanonymize the server).
1042
-* Onion services are at risk of being deanonymized if a client can trick the server into performing a non-Tor network request. Oragono should not perform any such requests (such as hostname resolution or ident lookups) in response to input received over a correctly configured Tor listener. However, Oragono has not been thoroughly audited against such deanonymization attacks --- therefore, Oragono should be deployed with additional sandboxing to protect against this:
1043
-  * Oragono should run with no direct network connectivity, e.g., by running in its own Linux network namespace. systemd implements this with the [PrivateNetwork](https://www.freedesktop.org/software/systemd/man/systemd.exec.html) configuration option: add `PrivateNetwork=true` to Oragono's systemd unit file.
1044
-  * Since the loopback adapters are local to a specific network namespace, and the Tor daemon will run in the root namespace, Tor will be unable to connect to Oragono over loopback TCP. Instead, Oragono must listen on a named Unix domain socket that the Tor daemon can connect to. However, distributions typically package Tor with its own hardening profiles, which restrict which sockets it can access. Below is a recipe for configuring this with the official Tor packages for Debian:
1041
+* Onion services are at risk of being deanonymized if a client can trick the server into performing a non-Tor network request. Ergo should not perform any such requests (such as hostname resolution or ident lookups) in response to input received over a correctly configured Tor listener. However, Ergo has not been thoroughly audited against such deanonymization attacks --- therefore, Ergo should be deployed with additional sandboxing to protect against this:
1042
+  * Ergo should run with no direct network connectivity, e.g., by running in its own Linux network namespace. systemd implements this with the [PrivateNetwork](https://www.freedesktop.org/software/systemd/man/systemd.exec.html) configuration option: add `PrivateNetwork=true` to Ergo's systemd unit file.
1043
+  * Since the loopback adapters are local to a specific network namespace, and the Tor daemon will run in the root namespace, Tor will be unable to connect to Ergo over loopback TCP. Instead, Ergo must listen on a named Unix domain socket that the Tor daemon can connect to. However, distributions typically package Tor with its own hardening profiles, which restrict which sockets it can access. Below is a recipe for configuring this with the official Tor packages for Debian:
1045
 
1044
 
1046
 1. Create a directory with `0777` permissions such as `/hidden_service_sockets`.
1045
 1. Create a directory with `0777` permissions such as `/hidden_service_sockets`.
1047
-1. Configure Oragono to listen on `/hidden_service_sockets/oragono_tor_sock`, with `tor: true`.
1048
-1. Ensure that Oragono has no direct network access as described above, e.g., with `PrivateNetwork=true`.
1046
+1. Configure Ergo to listen on `/hidden_service_sockets/ergo_tor_sock`, with `tor: true`.
1047
+1. Ensure that Ergo has no direct network access as described above, e.g., with `PrivateNetwork=true`.
1049
 1. Next, modify Tor's apparmor profile so that it can connect to this socket, by adding the line `  /hidden_service_sockets/** rw,` to `/etc/apparmor.d/local/system_tor`.
1048
 1. Next, modify Tor's apparmor profile so that it can connect to this socket, by adding the line `  /hidden_service_sockets/** rw,` to `/etc/apparmor.d/local/system_tor`.
1050
 1. Finally, configure Tor with:
1049
 1. Finally, configure Tor with:
1051
 
1050
 
1052
 ````
1051
 ````
1053
-HiddenServiceDir /var/lib/tor/oragono_hidden_service
1054
-HiddenServicePort 6667 unix:/hidden_service_sockets/oragono_tor_sock
1052
+HiddenServiceDir /var/lib/tor/ergo_hidden_service
1053
+HiddenServicePort 6667 unix:/hidden_service_sockets/ergo_tor_sock
1055
 # DO NOT enable HiddenServiceNonAnonymousMode
1054
 # DO NOT enable HiddenServiceNonAnonymousMode
1056
 ````
1055
 ````
1057
 
1056
 
1063
 
1062
 
1064
 ## ZNC
1063
 ## ZNC
1065
 
1064
 
1066
-ZNC 1.6.x (still pretty common in distros that package old versions of IRC software) has a [bug](https://github.com/znc/znc/issues/1212) where it fails to recognize certain SASL messages. Oragono supports a compatibility mode that works around this to let ZNC complete the SASL handshake: this can be enabled with `server.compatibility.send-unprefixed-sasl`.
1065
+ZNC 1.6.x (still pretty common in distros that package old versions of IRC software) has a [bug](https://github.com/znc/znc/issues/1212) where it fails to recognize certain SASL messages. Ergo supports a compatibility mode that works around this to let ZNC complete the SASL handshake: this can be enabled with `server.compatibility.send-unprefixed-sasl`.
1067
 
1066
 
1068
-Oragono can emulate certain capabilities of the ZNC bouncer for the benefit of clients, in particular the third-party [playback](https://wiki.znc.in/Playback) module. This enables clients with specific support for ZNC to receive selective history playback automatically. To configure this in [Textual](https://www.codeux.com/textual/), go to "Server properties", select "Vendor specific", uncheck "Do not automatically join channels on connect", and check "Only play back messages you missed". Other clients with support are listed on ZNC's wiki page.
1067
+Ergo can emulate certain capabilities of the ZNC bouncer for the benefit of clients, in particular the third-party [playback](https://wiki.znc.in/Playback) module. This enables clients with specific support for ZNC to receive selective history playback automatically. To configure this in [Textual](https://www.codeux.com/textual/), go to "Server properties", select "Vendor specific", uncheck "Do not automatically join channels on connect", and check "Only play back messages you missed". Other clients with support are listed on ZNC's wiki page.
1069
 
1068
 
1070
 ## External authentication systems
1069
 ## External authentication systems
1071
 
1070
 
1072
-Oragono can be configured to call arbitrary scripts to authenticate users; see the `auth-script` section of the config. The API for these scripts is as follows: Oragono will invoke the script with a configurable set of arguments, then send it the authentication data as JSON on the first line (`\n`-terminated) of stdin. The input is a JSON dictionary with the following keys:
1071
+Ergo can be configured to call arbitrary scripts to authenticate users; see the `auth-script` section of the config. The API for these scripts is as follows: Ergo will invoke the script with a configurable set of arguments, then send it the authentication data as JSON on the first line (`\n`-terminated) of stdin. The input is a JSON dictionary with the following keys:
1073
 
1072
 
1074
 * `accountName`: during passphrase-based authentication, this is a string, otherwise omitted
1073
 * `accountName`: during passphrase-based authentication, this is a string, otherwise omitted
1075
 * `passphrase`: during passphrase-based authentication, this is a string, otherwise omitted
1074
 * `passphrase`: during passphrase-based authentication, this is a string, otherwise omitted
1098
 print(json.dumps({"success": success}))
1097
 print(json.dumps({"success": success}))
1099
 ```
1098
 ```
1100
 
1099
 
1101
-Note that after a failed script invocation, Oragono will proceed to check the credentials against its local database.
1100
+Note that after a failed script invocation, Ergo will proceed to check the credentials against its local database.
1102
 
1101
 
1103
 ## DNSBLs and other IP checking systems
1102
 ## DNSBLs and other IP checking systems
1104
 
1103
 
1105
-Similarly, Oragono can be configured to call arbitrary scripts to validate user IPs. These scripts can either reject the connection, or require that the user log in with SASL. In particular, we provide an [oragono-dnsbl](https://github.com/oragono/oragono-dnsbl) plugin for querying DNSBLs.
1104
+Similarly, Ergo can be configured to call arbitrary scripts to validate user IPs. These scripts can either reject the connection, or require that the user log in with SASL. In particular, we provide an [oragono-dnsbl](https://github.com/oragono/oragono-dnsbl) plugin for querying DNSBLs.
1106
 
1105
 
1107
 The API is similar to the auth-script API described above (one line of JSON in, one line of JSON out). The input is a JSON dictionary with the following keys:
1106
 The API is similar to the auth-script API described above (one line of JSON in, one line of JSON out). The input is a JSON dictionary with the following keys:
1108
 
1107
 
1119
 
1118
 
1120
 # Acknowledgements
1119
 # Acknowledgements
1121
 
1120
 
1122
-Oragono's past and present maintainers and core contributors are:
1121
+Ergo's past and present maintainers and core contributors are:
1123
 
1122
 
1124
 * Jeremy Latt (2012-2014)
1123
 * Jeremy Latt (2012-2014)
1125
 * Edmund Huber (2014-2015)
1124
 * Edmund Huber (2014-2015)
1126
 * Daniel Oaks (2016-present)
1125
 * Daniel Oaks (2016-present)
1127
 * Shivaram Lingamneni (2017-present)
1126
 * Shivaram Lingamneni (2017-present)
1128
 
1127
 
1129
-In addition, Oragono has benefited tremendously from its community of contributors, users, and translators, not to mention collaborations with the wider IRCv3 community. There are too many people to name here --- but we try to credit people for individual contributions in the changelog, please reach out to us if we forgot you :-)
1128
+In addition, Ergo has benefited tremendously from its community of contributors, users, and translators, not to mention collaborations with the wider IRCv3 community. There are too many people to name here --- but we try to credit people for individual contributions in the changelog, please reach out to us if we forgot you :-)

+ 26
- 26
docs/USERGUIDE.md View File

1
+      ___ _ __ __ _  ___  
2
+     / _ \ '__/ _` |/ _ \ 
3
+    |  __/ | | (_| | (_) |
4
+     \___|_|  \__, |\___/ 
5
+               __/ |      
6
+              |___/     
1
 
7
 
2
-          ▄▄▄   ▄▄▄·  ▄▄ •        ▐ ▄       
3
-    ▪     ▀▄ █·▐█ ▀█ ▐█ ▀ ▪▪     •█▌▐█▪     
4
-     ▄█▀▄ ▐▀▀▄ ▄█▀▀█ ▄█ ▀█▄ ▄█▀▄▪▐█▐▐▌ ▄█▀▄ 
5
-    ▐█▌.▐▌▐█•█▌▐█ ▪▐▌▐█▄▪▐█▐█▌ ▐▌██▐█▌▐█▌.▐▌
6
-     ▀█▄▀▪.▀  ▀ ▀  ▀ ·▀▀▀▀  ▀█▄▀ ▀▀ █▪ ▀█▄▀▪
7
-
8
-            Oragono IRCd User Guide
9
-              https://oragono.io/
8
+     Ergo IRCd User Guide
9
+      https://ergo.chat/
10
 
10
 
11
 _Copyright © Daniel Oaks <daniel@danieloaks.net>, Shivaram Lingamneni <slingamn@cs.stanford.edu>_
11
 _Copyright © Daniel Oaks <daniel@danieloaks.net>, Shivaram Lingamneni <slingamn@cs.stanford.edu>_
12
 
12
 
18
 
18
 
19
 - [Introduction](#introduction)
19
 - [Introduction](#introduction)
20
 - [About IRC](#about-irc)
20
 - [About IRC](#about-irc)
21
-- [How Oragono is different](#how-oragono-is-different)
21
+- [How Ergo is different](#how-ergo-is-different)
22
 - [Account registration](#account-registration)
22
 - [Account registration](#account-registration)
23
 - [Channel registration](#channel-registration)
23
 - [Channel registration](#channel-registration)
24
 - [Always-on](#always-on)
24
 - [Always-on](#always-on)
30
 
30
 
31
 # Introduction
31
 # Introduction
32
 
32
 
33
-Welcome to Oragono, a modern IRC server!
33
+Welcome to Ergo, a modern IRC server!
34
 
34
 
35
-This guide is for end users of Oragono (people using Oragono to chat). If you're installing your own Oragono instance, you should consult the official manual instead (a copy should be bundled with your release, in the `docs/` directory).
35
+This guide is for end users of Ergo (people using Ergo to chat). If you're installing your own Ergo instance, you should consult the official manual instead (a copy should be bundled with your release, in the `docs/` directory).
36
 
36
 
37
-This guide assumes that Oragono is in its default or recommended configuration; Oragono server administrators can change settings to make the server behave differently. If something isn't working as expected, ask your server administrator for help.
37
+This guide assumes that Ergo is in its default or recommended configuration; Ergo server administrators can change settings to make the server behave differently. If something isn't working as expected, ask your server administrator for help.
38
 
38
 
39
 # About IRC
39
 # About IRC
40
 
40
 
47
 * [Fedora Magazine: Beginner's Guide to IRC](https://fedoramagazine.org/beginners-guide-irc/)
47
 * [Fedora Magazine: Beginner's Guide to IRC](https://fedoramagazine.org/beginners-guide-irc/)
48
 * [IRCHelp's IRC Tutorial](https://www.irchelp.org/faq/irctutorial.html) (in particular, section 3, "Beyond the Basics")
48
 * [IRCHelp's IRC Tutorial](https://www.irchelp.org/faq/irctutorial.html) (in particular, section 3, "Beyond the Basics")
49
 
49
 
50
-# How Oragono is different
50
+# How Ergo is different
51
 
51
 
52
-Oragono differs in many ways from conventional IRC servers. If you're *not* familiar with other IRC servers, you may want to skip this section. Here are some of the most salient differences:
52
+Ergo differs in many ways from conventional IRC servers. If you're *not* familiar with other IRC servers, you may want to skip this section. Here are some of the most salient differences:
53
 
53
 
54
-* Oragono integrates a "bouncer" into the server. In particular:
55
-    * Oragono stores message history for later retrieval.
54
+* Ergo integrates a "bouncer" into the server. In particular:
55
+    * Ergo stores message history for later retrieval.
56
     * You can be "present" on the server (joined to channels, able to receive DMs) without having an active client connection to the server.
56
     * You can be "present" on the server (joined to channels, able to receive DMs) without having an active client connection to the server.
57
     * Conversely, you can use multiple clients to view / control the same presence (nickname) on the server, as long as you authenticate with SASL when connecting.
57
     * Conversely, you can use multiple clients to view / control the same presence (nickname) on the server, as long as you authenticate with SASL when connecting.
58
-* Oragono integrates "services" into the server.  In particular:
59
-    * Nicknames are strictly reserved: once you've registered your nickname, you must log in in order to use it. Consequently, SASL is more important when using Oragono than in other systems.
58
+* Ergo integrates "services" into the server.  In particular:
59
+    * Nicknames are strictly reserved: once you've registered your nickname, you must log in in order to use it. Consequently, SASL is more important when using Ergo than in other systems.
60
     * All properties of registered channels are protected without the need for `ChanServ` to be joined to the channel.
60
     * All properties of registered channels are protected without the need for `ChanServ` to be joined to the channel.
61
-* Oragono "cloaks", i.e., cryptographically scrambles, end user IPs so that they are not displayed publicly.
62
-* By default, the user/ident field is inoperative in Oragono: it is always set to `~u`, regardless of the `USER` command or the client's support for identd. This is because it is not in general a reliable or trustworthy way to distinguish users coming from the same IP. Oragono's integrated bouncer features should reduce the need for shared shell hosts and hosted bouncers (one of the main remaining use cases for identd).
63
-* By default, Oragono is only accessible via TLS.
61
+* Ergo "cloaks", i.e., cryptographically scrambles, end user IPs so that they are not displayed publicly.
62
+* By default, the user/ident field is inoperative in Ergo: it is always set to `~u`, regardless of the `USER` command or the client's support for identd. This is because it is not in general a reliable or trustworthy way to distinguish users coming from the same IP. Ergo's integrated bouncer features should reduce the need for shared shell hosts and hosted bouncers (one of the main remaining use cases for identd).
63
+* By default, Ergo is only accessible via TLS.
64
 
64
 
65
 # Account registration
65
 # Account registration
66
 
66
 
67
-Although (as in other IRC systems) basic chat functionality is available without creating an account, most of Oragono's features require an account. You can create an account by sending a direct message to `NickServ`. (In IRC jargon, `NickServ` is a "network service", but if you're not familiar with the concept you can just think of it as a bot or a text user interface.) In a typical client, this will be:
67
+Although (as in other IRC systems) basic chat functionality is available without creating an account, most of Ergo's features require an account. You can create an account by sending a direct message to `NickServ`. (In IRC jargon, `NickServ` is a "network service", but if you're not familiar with the concept you can just think of it as a bot or a text user interface.) In a typical client, this will be:
68
 
68
 
69
 ```
69
 ```
70
 /msg NickServ register mySecretPassword validEmailAddress@example.com
70
 /msg NickServ register mySecretPassword validEmailAddress@example.com
88
 
88
 
89
 # Always-on
89
 # Always-on
90
 
90
 
91
-By default, if you lose your connection to the IRC server, you are no longer present on the server; other users will see that you have "quit", you will no longer appear in channel lists, and you will not be able to receive direct messages. Oragono supports "always-on clients", where you remain on the server even when you are disconnected. To enable this, you can send a message to `NickServ`:
91
+By default, if you lose your connection to the IRC server, you are no longer present on the server; other users will see that you have "quit", you will no longer appear in channel lists, and you will not be able to receive direct messages. Ergo supports "always-on clients", where you remain on the server even when you are disconnected. To enable this, you can send a message to `NickServ`:
92
 
92
 
93
 ```
93
 ```
94
 /msg NickServ set always-on true
94
 /msg NickServ set always-on true
96
 
96
 
97
 # Multiclient
97
 # Multiclient
98
 
98
 
99
-Oragono natively supports attaching multiple clients to the same nickname (this normally requires the use of an external bouncer, like ZNC or WeeChat's "relay" functionality). To use this feature, simply authenticate with SASL (or the PASS workaround, if necessary) when connecting. In the recommended configuration of Oragono, you will receive the nickname associated with your account, even if you have other clients already using it.
99
+Ergo natively supports attaching multiple clients to the same nickname (this normally requires the use of an external bouncer, like ZNC or WeeChat's "relay" functionality). To use this feature, simply authenticate with SASL (or the PASS workaround, if necessary) when connecting. In the recommended configuration of Ergo, you will receive the nickname associated with your account, even if you have other clients already using it.
100
 
100
 
101
 # History
101
 # History
102
 
102
 
103
-Oragono stores message history on the server side (typically not an unlimited amount --- consult your server's FAQ, or your server administrator, to find out how much is being stored and how long it's being retained).
103
+Ergo stores message history on the server side (typically not an unlimited amount --- consult your server's FAQ, or your server administrator, to find out how much is being stored and how long it's being retained).
104
 
104
 
105
 1. The [IRCv3 chathistory specification](https://ircv3.net/specs/extensions/chathistory) offers the most fine-grained control over history replay. It is supported by [Kiwi IRC](https://github.com/kiwiirc/kiwiirc), and hopefully other clients soon.
105
 1. The [IRCv3 chathistory specification](https://ircv3.net/specs/extensions/chathistory) offers the most fine-grained control over history replay. It is supported by [Kiwi IRC](https://github.com/kiwiirc/kiwiirc), and hopefully other clients soon.
106
 1. We emulate the [ZNC playback module](https://wiki.znc.in/Playback) for clients that support it. You may need to enable support for it explicitly in your client. For example, in [Textual](https://www.codeux.com/textual/), go to "Server properties", select "Vendor specific", uncheck "Do not automatically join channels on connect", and check "Only play back messages you missed". ZNC's wiki page covers other common clients (although if the feature is only supported via a script or third-party extension, the following option may be easier).
106
 1. We emulate the [ZNC playback module](https://wiki.znc.in/Playback) for clients that support it. You may need to enable support for it explicitly in your client. For example, in [Textual](https://www.codeux.com/textual/), go to "Server properties", select "Vendor specific", uncheck "Do not automatically join channels on connect", and check "Only play back messages you missed". ZNC's wiki page covers other common clients (although if the feature is only supported via a script or third-party extension, the following option may be easier).
107
-1. If you set your client to always-on (see the previous section for details), you can set a "device ID" for each device you use. Oragono will then remember the last time your device was present on the server, and each time you sign on, it will attempt to replay exactly those messages you missed. There are a few ways to set your device ID when connecting:
107
+1. If you set your client to always-on (see the previous section for details), you can set a "device ID" for each device you use. Ergo will then remember the last time your device was present on the server, and each time you sign on, it will attempt to replay exactly those messages you missed. There are a few ways to set your device ID when connecting:
108
     - You can add it to your SASL username with an `@`, e.g., if your SASL username is `alice` you can send `alice@phone`
108
     - You can add it to your SASL username with an `@`, e.g., if your SASL username is `alice` you can send `alice@phone`
109
     - You can add it in a similar way to your IRC protocol username ("ident"), e.g., `alice@phone`
109
     - You can add it in a similar way to your IRC protocol username ("ident"), e.g., `alice@phone`
110
     - If login to user accounts via the `PASS` command is enabled on the server, you can provide it there, e.g., by sending `alice@phone:hunter2` as the server password
110
     - If login to user accounts via the `PASS` command is enabled on the server, you can provide it there, e.g., by sending `alice@phone:hunter2` as the server password

+ 2
- 1
irc/server.go View File

1061
 		"            __/ |      ",
1061
 		"            __/ |      ",
1062
 		"           |___/       ",
1062
 		"           |___/       ",
1063
 		"",
1063
 		"",
1064
-		"    https://ergo.chat/",
1064
+		"https://ergo.chat/ ",
1065
 		"https://github.com/ergochat/ergo ",
1065
 		"https://github.com/ergochat/ergo ",
1066
+		"",
1066
 	}
1067
 	}
1067
 	infoString2 = strings.Split(`    Daniel Oakley,          DanielOaks,    <daniel@danieloaks.net>
1068
 	infoString2 = strings.Split(`    Daniel Oakley,          DanielOaks,    <daniel@danieloaks.net>
1068
     Shivaram Lingamneni,    slingamn,      <slingamn@cs.stanford.edu>
1069
     Shivaram Lingamneni,    slingamn,      <slingamn@cs.stanford.edu>

Loading…
Cancel
Save