2018-09-14 01:57:43 +02:00
|
|
|
```
|
|
|
|
---------------------------------------------------------------------------------------------------
|
|
|
|
| |
|
|
|
|
| THE CONSTRUCT HAS NOT BEEN RELEASED FOR PUBLIC USE. THIS IS FOR DEVELOPERS AND DEMONSTRATION |
|
|
|
|
| ONLY. IT IS NOT COMPLETE AND REQUIRES EXPERT KNOWLEDGE TO USE. YOU ARE STILL ENCOURAGED TO TRY |
|
|
|
|
| THIS SOFTWARE AND HELP US, BUT IN AN EXPERIMENTAL SETTING ONLY. |
|
|
|
|
| |
|
|
|
|
---------------------------------------------------------------------------------------------------
|
|
|
|
```
|
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
# This — is The **Construct**
|
2015-02-25 03:32:08 +01:00
|
|
|
|
2018-09-18 12:36:47 +02:00
|
|
|
<a href="share/webapp">
|
|
|
|
<img align="right" src="https://i.imgur.com/TIf8kEC.png" />
|
|
|
|
</a>
|
2017-10-16 06:12:18 +02:00
|
|
|
|
2019-02-16 22:50:23 +01:00
|
|
|
**Fast. Secure. Feature Rich. Community Lead.**
|
2016-01-23 20:52:57 +01:00
|
|
|
|
2017-12-23 04:46:57 +01:00
|
|
|
IRCd was a free and open source server which facilitated real-time communication over the
|
2017-11-05 06:14:33 +01:00
|
|
|
internet. It was started by Jarkko Oikarinen in 1988 at the University of Oulu and [its
|
2017-10-25 18:24:50 +02:00
|
|
|
derivatives](https://upload.wikimedia.org/wikipedia/commons/d/d8/IRCd_software_implementations.png)
|
2017-11-30 19:30:19 +01:00
|
|
|
underpinned the major IRC networks for decades.
|
2017-09-09 14:50:16 +02:00
|
|
|
|
2017-12-23 04:46:57 +01:00
|
|
|
Due to its age and stagnation since the mid-2000's, a growing number of proprietary cloud services
|
|
|
|
are now filling the vacuum of innovation. In 2014 a new approach was proposed to reinvigorate
|
2018-01-18 15:03:59 +01:00
|
|
|
real-time communication for free and open source software: a *federation of networks* known as
|
2018-01-07 06:37:29 +01:00
|
|
|
*the matrix*.
|
2017-08-18 00:33:22 +02:00
|
|
|
|
2018-04-26 03:49:58 +02:00
|
|
|
<h4 align="right">
|
|
|
|
IRCd has been rewritten for the global federation of networks  
|
|
|
|
</h4>
|
2017-08-18 00:33:22 +02:00
|
|
|
|
2018-09-18 12:36:47 +02:00
|
|
|
<a href="https://github.com/vector-im/riot-web/">
|
|
|
|
<img align="right" src="https://i.imgur.com/DUuGSrH.png" />
|
|
|
|
</a>
|
2018-04-21 12:24:50 +02:00
|
|
|
|
2019-02-16 22:50:23 +01:00
|
|
|
**This is the Construct** — the community's own Matrix server. It is designed to be
|
|
|
|
fast and highly scalable, and to be developed by volunteer contributors over
|
2017-12-25 06:41:13 +01:00
|
|
|
the internet. This mission strives to make the software easy to understand, modify, audit,
|
|
|
|
and extend. It remains true to its roots with its modular design and having minimal
|
2018-05-17 01:34:58 +02:00
|
|
|
requirements.
|
|
|
|
|
|
|
|
Even though all of the old code has been rewritten, the same spirit and
|
2017-12-25 06:41:13 +01:00
|
|
|
_philosophy of its predecessors_ is still obvious throughout.
|
2017-09-26 23:10:02 +02:00
|
|
|
|
2018-04-26 03:49:58 +02:00
|
|
|
Similar to the legacy IRC protocol's origins, Matrix wisely leverages technologies in vogue
|
|
|
|
for its day to aid the virility of implementations. A vibrant and growing ecosystem
|
|
|
|
[already exists](https://matrix.org/docs/projects/try-matrix-now.html).
|
2018-09-14 09:28:34 +02:00
|
|
|
|
2018-09-14 09:53:37 +02:00
|
|
|
<h3 align="right">
|
|
|
|
Join us in <a href="https://matrix.to/#/#test:zemos.net">#test:zemos.net</a>
|
|
|
|
/ <a href="https://matrix.to/#/#zemos-test:matrix.org">#zemos-test:matrix.org</a>
|
|
|
|
</h3>
|
2018-04-26 03:49:58 +02:00
|
|
|
|
2018-09-14 09:53:37 +02:00
|
|
|
## Installation
|
2017-08-18 00:33:22 +02:00
|
|
|
|
2018-09-14 09:53:37 +02:00
|
|
|
<a href="https://github.com/tulir/gomuks">
|
|
|
|
<img align="right" src="https://i.imgur.com/YMUAULE.png" />
|
|
|
|
</a>
|
2017-10-01 04:14:45 +02:00
|
|
|
|
2018-09-14 09:53:37 +02:00
|
|
|
### Dependencies
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2019-02-16 22:50:23 +01:00
|
|
|
- **Boost** library 1.66+
|
|
|
|
- **RocksDB** library 5.16.6.
|
|
|
|
- **Sodium** library for curve ed25519.
|
|
|
|
- **OpenSSL** library for HTTPS TLS / X.509.
|
|
|
|
- **magic** library for MIME type recognition.
|
|
|
|
- **zlib** or **lz4** or **snappy** (Optional) Compressions.
|
2017-09-23 07:19:47 +02:00
|
|
|
|
2018-09-14 03:12:22 +02:00
|
|
|
##### Build tools
|
|
|
|
|
2018-09-14 09:53:37 +02:00
|
|
|
- **GNU C++ compiler**, automake, autoconf, autoconf2.13,
|
|
|
|
autoconf-archive, libtool.
|
|
|
|
|
2018-09-14 03:12:22 +02:00
|
|
|
- A platform capable of loading dynamic shared objects at runtime is required.
|
2017-12-02 22:14:30 +01:00
|
|
|
|
2018-09-14 03:12:22 +02:00
|
|
|
<!--
|
2017-08-18 00:33:22 +02:00
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
#### Platforms
|
|
|
|
|
2018-05-17 01:34:58 +02:00
|
|
|
[![Construct](https://img.shields.io/SemVer/v0.0.0-dev.png)](https://github.com/jevolk/charybdis/tree/master)
|
2015-02-25 03:32:08 +01:00
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
| <sub> Continuously Integrated Host </sub> | <sub> Compiler </sub> | <sub> Third party </sub> | <sub> Status </sub> |
|
|
|
|
|:------------------------------------------- |:------------------------ |:------------------------ |:------------------- |
|
2018-05-17 01:34:58 +02:00
|
|
|
| <sub> Linux Ubuntu 16.04 Xenial </sub> | <sub> GCC 6 </sub> | <sub> Boost 1.66 </sub> | [![POSIX Build Status](https://travis-ci.org/jevolk/charybdis.svg?branch=master)](https://travis-ci.org/jevolk/charybdis) |
|
2018-09-14 03:12:22 +02:00
|
|
|
| <sub> Linux Ubuntu 16.04 Xenial </sub> | <sub> GCC 8 </sub> | <sub> Boost 1.66 </sub> | [![POSIX Build Status](https://travis-ci.org/jevolk/charybdis.svg?branch=master)](https://travis-ci.org/jevolk/charybdis) |
|
|
|
|
| <sub> Linux Ubuntu 18.04 Xenial </sub> | <sub> GCC 6 </sub> | <sub> Boost 1.66 </sub> | [![POSIX Build Status](https://travis-ci.org/jevolk/charybdis.svg?branch=master)](https://travis-ci.org/jevolk/charybdis) |
|
|
|
|
|
|
|
|
-->
|
2017-09-23 07:19:47 +02:00
|
|
|
|
2017-08-18 00:33:22 +02:00
|
|
|
|
2018-09-14 01:56:58 +02:00
|
|
|
### DOWNLOAD
|
|
|
|
|
|
|
|
At this phase of development the best thing to do is pull the master branch
|
|
|
|
and use the latest head.
|
|
|
|
|
|
|
|
> The head of the `master` branch is consistent and should be safe to pull
|
|
|
|
without checking out a release tag. When encountering a problem with the latest
|
2018-09-14 11:22:21 +02:00
|
|
|
head on `master` that is when a release tag should be sought.
|
2018-09-14 01:56:58 +02:00
|
|
|
|
2018-09-04 07:03:32 +02:00
|
|
|
### BUILD
|
2018-08-25 23:33:30 +02:00
|
|
|
|
|
|
|
*Please follow the standalone build instructions in the next section until this
|
|
|
|
notice is removed.*
|
2017-09-09 14:50:16 +02:00
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
```
|
|
|
|
./autogen.sh
|
|
|
|
./configure
|
|
|
|
make
|
|
|
|
sudo make install
|
|
|
|
```
|
2017-09-23 07:19:47 +02:00
|
|
|
|
2018-09-14 08:43:54 +02:00
|
|
|
Additional documentation for building can be found in [doc/BUILD.md](doc/BUILD.md)
|
|
|
|
|
2018-09-04 07:03:32 +02:00
|
|
|
### BUILD (standalone)
|
2017-09-09 14:50:16 +02:00
|
|
|
|
2019-02-16 22:50:23 +01:00
|
|
|
This section is intended to allow building with dependencies that have not
|
2019-02-20 18:14:53 +01:00
|
|
|
made their way to mainstream systems. Important notes that may affect you:
|
2019-02-16 22:50:23 +01:00
|
|
|
|
|
|
|
- GCC: Ubuntu Xenial (16.04) users must use a PPA to obtain GCC-7 or greater; don't
|
|
|
|
forget to `export CXX=g++-7` before running `./configure` on that system.
|
|
|
|
|
|
|
|
- Boost: The required version is available through `apt` as `boost-all-dev` on
|
|
|
|
Ubuntu Cosmic (18.10). All earlier releases (including 18.04 LTS) can configure
|
|
|
|
with `--with-included-boost` as instructed below (or obtain that package instead).
|
|
|
|
|
2019-02-20 18:14:53 +01:00
|
|
|
- OpenSSL: We use 1.0.x for now. Systems that default to 1.1.x will need to
|
|
|
|
`./configure` with options that find 1.0.x files. Arch Linux users can use
|
|
|
|
`./configure --with-ssl-includes=/usr/include/openssl-1.0`
|
|
|
|
|
2019-02-16 22:50:23 +01:00
|
|
|
- RocksDB: All users should configure with `--with-included-rocksdb` as
|
|
|
|
instructed below.
|
2017-09-23 07:19:47 +02:00
|
|
|
|
2019-02-20 18:14:53 +01:00
|
|
|
#### STANDALONE BUILD PROCEDURE
|
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
```
|
|
|
|
./autogen.sh
|
|
|
|
mkdir build
|
|
|
|
```
|
|
|
|
|
2017-09-23 07:19:47 +02:00
|
|
|
- The install directory may be this or another place of your choosing.
|
|
|
|
- If you decide elsewhere, make sure to change the `--prefix` in the `./configure`
|
|
|
|
statement below.
|
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
```
|
2018-09-13 15:28:06 +02:00
|
|
|
./configure --prefix=$PWD/build --with-included-boost --with-included-rocksdb
|
2017-11-30 19:30:19 +01:00
|
|
|
```
|
2017-09-23 07:19:47 +02:00
|
|
|
- The `--with-included-*` will fetch, configure **and build** the dependencies included
|
2018-08-25 23:30:55 +02:00
|
|
|
as submodules.
|
2017-09-23 07:19:47 +02:00
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
```
|
|
|
|
make install
|
|
|
|
```
|
2016-03-23 21:10:44 +01:00
|
|
|
|
2018-09-04 07:03:32 +02:00
|
|
|
### SETUP
|
|
|
|
|
2018-09-22 22:20:44 +02:00
|
|
|
- For standalone builds you will need to add the included lib directories
|
2018-09-04 07:03:32 +02:00
|
|
|
in your git repo to the library path:
|
|
|
|
`export LD_LIBRARY_PATH=/path/to/src/deps/boost/lib:$LD_LIBRARY_PATH`
|
2018-09-22 22:20:44 +02:00
|
|
|
`export LD_LIBRARY_PATH=/path/to/src/deps/rocksdb:$LD_LIBRARY_PATH`
|
2018-09-04 07:03:32 +02:00
|
|
|
|
2018-09-05 11:57:23 +02:00
|
|
|
- We will refer to your server as `host.tld`. For those familiar with matrix:
|
2019-03-28 21:07:30 +01:00
|
|
|
this is your _origin_ and mxid `@user:host.tld` hostpart. If you delegate
|
|
|
|
your server's location to something like `matrix.host.tld:1234` we refer to
|
|
|
|
this as your _servername_.
|
|
|
|
|
|
|
|
> Construct clusters all share the same _origin_ but each individual instance
|
|
|
|
of the daemon has a unique _servername_.
|
2018-09-04 07:03:32 +02:00
|
|
|
|
|
|
|
|
|
|
|
1. Execute
|
2019-03-28 21:07:30 +01:00
|
|
|
|
|
|
|
There are two arguments: `<origin> [servername]`. If the _servername_
|
|
|
|
argument is missing, the _origin_ will be used for it instead.
|
|
|
|
|
2018-09-04 07:03:32 +02:00
|
|
|
```
|
|
|
|
bin/construct host.tld
|
|
|
|
````
|
|
|
|
> There is no configuration file.
|
|
|
|
|
|
|
|
> Log messages will appear in terminal concluding with notice `IRCd RUN`.
|
|
|
|
|
|
|
|
|
|
|
|
2. Strike ctrl-c on keyboard
|
|
|
|
> The command-line console will appear.
|
|
|
|
|
|
|
|
|
|
|
|
3. Create a general listener socket by entering the following command:
|
|
|
|
|
|
|
|
```
|
2019-03-25 00:05:24 +01:00
|
|
|
net listen matrix * 8448 privkey.pem cert.pem chain.pem
|
2018-09-04 07:03:32 +02:00
|
|
|
```
|
2019-03-10 21:35:27 +01:00
|
|
|
- `matrix` is your name for this listener; you can use any name.
|
2019-03-25 00:05:24 +01:00
|
|
|
- `*` and `8448` is the local address and port to bind.
|
2019-03-10 21:35:27 +01:00
|
|
|
- `privkey.pem` and `cert.pem` and `chain.pem` are paths (ideally
|
|
|
|
absolute paths) to PEM-format files for the listener's TLS.
|
2018-09-04 07:03:32 +02:00
|
|
|
|
|
|
|
> The Matrix Federation Tester should now pass. Browse to
|
|
|
|
https://matrix.org/federationtester/api/report?server_name=host.tld and
|
|
|
|
verify `"AllChecksOK": true`
|
|
|
|
|
2019-03-10 21:35:27 +01:00
|
|
|
4. To use a web-based client like Riot, configure the "webroot" directory
|
2018-09-04 07:03:32 +02:00
|
|
|
to point at Riot's `webapp/` directory by entering the following:
|
|
|
|
```
|
|
|
|
conf set ircd.webroot.path /path/to/riot-web/webapp/
|
|
|
|
mod reload webroot
|
|
|
|
```
|
|
|
|
|
|
|
|
6. Browse to `https://host.tld:8448/` and register a user.
|
|
|
|
|
2019-03-10 20:49:30 +01:00
|
|
|
#### Additional Notes
|
|
|
|
|
|
|
|
##### Recovering from broken configurations
|
|
|
|
|
|
|
|
If your server ever fails to start from an errant conf item: you can override
|
|
|
|
any item using an environmental variable before starting the program. To do
|
|
|
|
this simply replace the '.' characters with '_' in the name of the item when
|
|
|
|
setting it in the environment. The name is otherwise the same, including its
|
|
|
|
lower case.
|
2018-09-04 07:03:32 +02:00
|
|
|
|
2019-04-17 01:01:28 +02:00
|
|
|
##### Recovering from database corruption
|
|
|
|
|
|
|
|
In very rare cases after a hard crash the journal cannot completely restore
|
|
|
|
data before the crash. Due to the design of rocksdb and the way we apply it
|
|
|
|
for Matrix, data is lost in chronological order starting from the most recent
|
|
|
|
transaction (matrix event). The database is consistent for all events up until
|
|
|
|
the first corrupt event, called the point-in-time.
|
|
|
|
|
|
|
|
When any loss has occurred the daemon will fail to start normally. To enable
|
|
|
|
point-in-time recovery use the command-line option `-pitrecdb` at the next
|
|
|
|
invocation.
|
|
|
|
|
2017-11-30 19:30:19 +01:00
|
|
|
## Developers
|
2015-02-25 03:32:08 +01:00
|
|
|
|
2018-05-22 13:16:45 +02:00
|
|
|
<a href="https://github.com/mujx/nheko">
|
|
|
|
<img align="right" src="https://i.imgur.com/GQ91GOK.png" />
|
2018-05-27 12:14:45 +02:00
|
|
|
<br />
|
2018-05-22 13:16:45 +02:00
|
|
|
</a>
|
|
|
|
|
2017-12-12 22:58:10 +01:00
|
|
|
[![](https://img.shields.io/badge/License-BSD-brightgreen.svg)]() [![](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)]()
|
|
|
|
|
2018-05-24 01:28:47 +02:00
|
|
|
Generate doxygen using `/usr/bin/doxygen tools/doxygen.conf` the target
|
|
|
|
directory is `doc/html`. Browse to `doc/html/index.html`.
|
2016-03-06 00:49:13 +01:00
|
|
|
|
2018-01-18 15:03:59 +01:00
|
|
|
## Plan
|
|
|
|
|
|
|
|
#### Roadmap for service
|
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
- [x] **Phase One**: Matrix clients using HTTPS.
|
2018-05-24 01:28:47 +02:00
|
|
|
- [ ] **Phase Two**: Legacy IRC network TS6 protocol.
|
2018-04-21 12:24:50 +02:00
|
|
|
- [ ] **Phase Three**: Legacy IRC clients using RFC1459 / RFC2812 legacy grammars.
|
2018-01-18 15:03:59 +01:00
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
#### Roadmap for deployments
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
The deployment mode is a macro of configuration variables which tune the daemon
|
|
|
|
for how it is being used. Modes mostly affect aspects of local clients.
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
- [x] **Personal**: One or few users. Few default restrictions; higher log output.
|
|
|
|
- [ ] **Company**: Hundreds of users. Moderate default restrictions.
|
|
|
|
- [ ] **Public**: Thousands of users. Untrusting configuration defaults.
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2018-01-18 15:03:59 +01:00
|
|
|
#### Roadmap for innovation
|
2017-12-25 06:41:13 +01:00
|
|
|
|
2018-04-21 12:24:50 +02:00
|
|
|
- [x] Phase Zero: **Core libircd**: Utils; Modules; Contexts; JSON; Database; HTTP; etc...
|
|
|
|
- [x] Phase One: **Matrix Protocol**: Core VM; Core modules; Protocol endpoints; etc...
|
|
|
|
- [ ] Phase Two: **Construct Cluster**: Kademlia sharding of events; Maymounkov's erasure codes.
|