finished initial hybrid config for hub

This commit is contained in:
*****DEAD ACCOUNT 2020-11-07 04:04:25 +00:00
commit 562f4b4090
No known key found for this signature in database
GPG Key ID: 6682B58F2E96EA33
40 changed files with 794 additions and 0 deletions

5
etc/hub.admin.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/admin.conf>

21
etc/hub.auth.conf Normal file

@ -0,0 +1,21 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/auth.conf>
auth {
spoof = "b0unc3.n3tw3rk.1ns3cur1ty.c0rp";
user = "*@198.18.70.75";
class = "bounce_oper";
flags = need_ident, exceed_limit, kline_exempt,
xline_exempt, resv_exempt, can_flood;
};
auth {
spoof = "c0ns0l3.n3tw3rk.1ns3cur1ty.c0rp";
user = "*@198.18.70.34";
class = "console_admin";
flags = need_password, exceed_limit, kline_exempt,
xline_exempt, resv_exempt, can_flood, no_tilde;
};

5
etc/hub.channels.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/channels.conf>

66
etc/hub.classes.conf Normal file

@ -0,0 +1,66 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/user.classes.conf>
class {
name = "bounce_oper";
ping_time = 2 seconds;
number_per_ip_local = 5;
max_number = 5;
sendq = 1 megabyte;
max_channels = 60;
max_idle = 30 minutes;
};
class {
name = "console_admin";
ping_time = 2 seconds;
number_per_ip_local = 1;
max_number = 10240;
sendq = 1 megabyte;
max_channels = 60;
max_idle = 1000 years;
};
class {
name = "edge_hub";
ping_time = 2 seconds;
connectfreq = 2 seconds;
max_number = 1;
sendq = 32 megabytes;
};
class {
name = "tor_dmz_leaf";
ping_time = 2 seconds;
connectfreq = 2 seconds;
max_number = 1;
sendq = 32 megabytes;
};
class {
name = "proxy_dmz_leaf";
ping_time = 2 seconds;
connectfreq = 2 seconds;
max_number = 1;
sendq = 32 megabytes;
};
class {
name = "general_leaf";
ping_time = 2 seconds;
connectfreq = 2 seconds;
max_number = 1;
sendq = 32 megabytes;
};
class {
name = "services_leaf";
ping_time = 2 seconds;
connectfreq = 2 seconds;
max_number = 1;
sendq = 32 megabytes;
};

5
etc/hub.cluster.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/cluster.conf>

5
etc/hub.deny.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/deny.conf>

5
etc/hub.exempt.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/exempt.conf>

5
etc/hub.gecos.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/gecos.conf>

9
etc/hub.general.conf Normal file

@ -0,0 +1,9 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*
* Note: some of these settings need to remain consistent globally so
* be careful when changing them or just use include/general.conf
*
*/
.include <hb_conf/include/general.conf>

5
etc/hub.kill.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/kill.conf>

5
etc/hub.log.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/log.conf>

5
etc/hub.modules.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/modules.conf>

5
etc/hub.motd.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/motd.conf>

28
etc/hub.oper.conf Normal file

@ -0,0 +1,28 @@
#.include <hb_conf/include/oper.conf>
operator {
user = "*@b0unc3.n3tw3rk.1ns3cur1ty.c0rp";
password = "password";
whois = "I'm too lame to read BitchX.doc";
class = "bounce_oper";
umodes = locops, servnotice, wallop, softcallerid, hidden,
invisible, external, debug, rej, skill, hideidle,
wallop, expiration;
flags = admin, connect, connect:remote, die, globops, kill, kill:remote,
kline, module, rehash, restart, set, unkline, unxline, xline;
};
operator {
user = "*@c0ns0l3.n3tw3rk.1ns3cur1ty.c0rp";
password = "password";
whois = "I'm too lame to read BitchX.doc";
class = "console_admin";
umodes = locops, servnotice, wallop, softcallerid, hidden,
invisible, external, debug, rej, skill, hideidle,
wallop, expiration;
flags = admin, connect, connect:remote, die, globops, kill, kill:remote,
kline, module, rehash, restart, set, unkline, unxline, xline;
};

5
etc/hub.pseudo.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/pseudo.conf>

5
etc/hub.resv.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/resv.conf>

5
etc/hub.services.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/services.conf>

5
etc/hub.shared.conf Normal file

@ -0,0 +1,5 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/include/shared.conf>

9
etc/include/admin.conf Normal file

@ -0,0 +1,9 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
admin {
name = "";
description = "𝓪𝓭𝓶𝓲𝓷";
email = "<>";
};

3
etc/include/auth.conf Normal file

@ -0,0 +1,3 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/

25
etc/include/channels.conf Normal file

@ -0,0 +1,25 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
channel {
enable_extbans = yes;
disable_fake_channels = yes;
invite_client_count = 16;
invite_client_time = 5 minutes;
invite_delay_channel = 5 seconds;
invite_expire_time = 1 hour;
knock_client_count = 4;
knock_client_time = 5 minutes;
knock_delay_channel = 1 minute;
/*
* max_channels: the maximum number of channels a user can join/be on.
* This is a default value which can be overriden with class {} blocks.
*/
max_channels = 192;
max_invites = 32;
max_bans = 128;
max_bans_large = 512;
default_join_flood_count = 16;
default_join_flood_time = 6 seconds;
};

3
etc/include/cluster.conf Normal file

@ -0,0 +1,3 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/

13
etc/include/deny.conf Normal file

@ -0,0 +1,13 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
deny {
ip = "*@198.18.0.0/20";
reason = "Connections to/from the 198.18.0.0/20 network should be null-routed/filtered/dropped, except for connections to 198.18.16.0/20";
};
deny {
ip = "*@127.0.0.0/8";
reason = "We do not use connections over loop-back and containers should run a single isolated process per container";
};

8
etc/include/exempt.conf Normal file

@ -0,0 +1,8 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
exempt {
ip = "198.18.70.0/25";
ip = "198.18.71.0/25";
};

13
etc/include/gecos.conf Normal file

@ -0,0 +1,13 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
gecos {
name = "*sex*";
reason = "Possible sexbot, if you have found this in error please change your GECOS and re-connect";
};
gecos {
name = "sub7server";
reason = "sub7 is forbidden here, come back when you have back oriface 2000 figured out";
};

53
etc/include/general.conf Normal file

@ -0,0 +1,53 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
general {
cycle_on_host_change = yes;
max_watch = 64;
max_accept = 64;
whowas_history_length = 10240;
dline_min_cidr = 16;
dline_min_cidr6 = 48;
kline_min_cidr = 16;
kline_min_cidr6 = 48;
invisible_on_connect = yes;
kill_chase_time_limit = 30 seconds;
disable_auth = no;
default_floodcount = 16;
default_floodtime = 1 second;
failed_oper_notice = no;
dots_in_ident = 2;
min_nonwildcard = 4;
min_nonwildcard_simple = 3;
anti_nick_flood = yes;
max_nick_changes = 4;
max_nick_time = 20 seconds;
away_count = 2;
away_time = 10 seconds;
anti_spam_exit_message_time = 5 minutes;
ts_warn_delta = 3 seconds;
ts_max_delta = 15 seconds;
warn_no_connect_block = yes;
stats_e_disabled = no;
stats_m_oper_only = yes;
stats_o_oper_only = yes;
stats_P_oper_only = yes;
stats_u_oper_only = no;
stats_i_oper_only = yes;
stats_k_oper_only = yes;
caller_id_wait = 1 minute;
opers_bypass_callerid = no;
pace_wait_simple = 1 second;
pace_wait = 10 seconds;
short_motd = yes;
ping_cookie = no;
no_oper_flood = yes;
max_targets = 4;
oper_only_umodes = cconn, debug, external, farconnect, flood, hidden,
locops, nchange, rej, skill, spy, expiration;
oper_umodes = flood, locops, servnotice, wallop;
throttle_count = 1;
throttle_time = 2 seconds;
};

@ -0,0 +1,5 @@
.include <include/deny.conf>
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/

8
etc/include/kill.conf Normal file

@ -0,0 +1,8 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
kill {
user = "*@*.gov";
reason = "you are forbidden from connecting to this network";
};

3
etc/include/log.conf Normal file

@ -0,0 +1,3 @@
log {
use_logging = yes;
};

10
etc/include/modules.conf Normal file

@ -0,0 +1,10 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
modules {
path = "lib/ircd-hybrid/modules";
path = "lib/ircd-hybrid/modules/extra";
path = "lib/ircd-hybrid/modules/autoload";
};

8
etc/include/motd.conf Normal file

@ -0,0 +1,8 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
motd {
mask = "*";
file = "hub.motd";
};

3
etc/include/oper.conf Normal file

@ -0,0 +1,3 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/

82
etc/include/pseudo.conf Normal file

@ -0,0 +1,82 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
pseudo {
command = "IDENTIFY";
prepend = "IDENTIFY ";
name = "NickServ";
target = "NickServ@s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};
pseudo {
command = "CHANSERV";
name = "ChanServ";
target = "ChanServ@s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};
pseudo {
command = "CS";
name = "ChanServ";
target = "ChanServ@s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};
pseudo {
command = "NICKSERV";
name = "NickServ";
target = "NickServ@s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};
pseudo {
command = "NS";
name = "NickServ";
target = "NickServ@s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};
pseudo {
command = "MEMOSERV";
name = "MemoServ";
target = "MemoServ@s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};
pseudo {
command = "MS";
name = "MemoServ";
target = "MemoServ@s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};
pseudo {
command = "OPERSERV";
name = "OperServ";
target = "OperServ@s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};
pseudo {
command = "OS";
name = "OperServ";
target = "OperServ@s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};
pseudo {
command = "HOSTSERV";
name = "HostServ";
target = "HostServ@s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};
pseudo {
command = "HS";
name = "HostServ";
target = "HostServ@s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};
pseudo {
command = "BOTSERV";
name = "BotServ";
target = "BotServ@s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};
pseudo {
command = "BS";
name = "BotServ";
target = "BotServ@s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};

69
etc/include/resv.conf Normal file

@ -0,0 +1,69 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
resv {
mask = "&partyline";
reason = "it's mine and you can't use it";
exempt = "*@b0unc3.*.n3tw3rk.1ns3cur1ty.c0rp";
exempt = "*@c0ns0l3.*.n3tw3rk.1ns3cur1ty.c0rp";
};
resv {
mask = "#partyline";
reason = "it's mine and you can't use it";
exempt = "*@b0unc3.*.n3tw3rk.1ns3cur1ty.c0rp";
exempt = "*@c0ns0l3.*.n3tw3rk.1ns3cur1ty.c0rp";
exempt = "*@0p3r.*.n3tw3rk.1ns3cur1ty.c0rp";
};
resv {
mask = "GLOBAL";
reason = "Reserved for services";
};
resv {
mask = "CHANSERV";
reason = "Reserved for services";
};
resv {
mask = "NICKSERV";
reason = "Reserved for services";
};
resv {
mask = "OPERSERV";
reason = "Reserved for services";
};
resv {
mask = "MEMOSERV";
reason = "Reserved for services";
};
resv {
mask = "BOTSERV";
reason = "Reserved for services";
};
resv {
mask = "HELPSERV";
reason = "Reserved for services";
};
resv {
mask = "HOSTSERV";
reason = "Reserved for services";
};
resv {
mask = "STATSERV";
reason = "Reserved for services";
};
resv {
mask = "#*services*";
reason = "Reserved for services";
};

10
etc/include/services.conf Normal file

@ -0,0 +1,10 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
service {
name = "s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
};

3
etc/include/shared.conf Normal file

@ -0,0 +1,3 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/

@ -0,0 +1,42 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
class {
name = "general_users";
ping_time = 90 seconds;
number_per_ip_local = 2;
number_per_ip_global = 8;
max_number = 1024000;
cidr_bitlen_ipv4 = 24;
cidr_bitlen_ipv6 = 120;
number_per_cidr = 16;
sendq = 100 kbytes;
recvq = 2560 bytes;
};
class {
name = "tor_dmz_users";
ping_time = 90 seconds;
number_per_ip_local = 2;
number_per_ip_global = 8;
max_number = 1024000;
cidr_bitlen_ipv4 = 24;
cidr_bitlen_ipv6 = 120;
number_per_cidr = 16;
sendq = 100 kbytes;
recvq = 2560 bytes;
};
class {
name = "proxy_dmz_users";
ping_time = 90 seconds;
number_per_ip_local = 2;
number_per_ip_global = 8;
max_number = 1024000;
cidr_bitlen_ipv4 = 24;
cidr_bitlen_ipv6 = 120;
number_per_cidr = 16;
sendq = 100 kbytes;
recvq = 2560 bytes;
};

100
hb_hub/docker-compose.yml Normal file

@ -0,0 +1,100 @@
# https://docs.docker.com/compose/compose-file/
# 100.64.0.0/30 100.64.64.0/25
version: "3.8"
networks:
hub_default:
ipam:
driver: default
config:
- subnet: 100.64.0.0/30
general_leaf:
ipam:
driver: default
config:
- subnet: 100.64.64.0/29
internal: true
tor_leaf:
ipam:
driver: default
config:
- subnet: 100.64.64.8/29
internal: true
proxy_leaf:
ipam:
driver: default
config:
- subnet: 100.64.64.16/29
internal: true
edge_leaf:
ipam:
driver: default
config:
- subnet: 100.64.64.24/29
internal: true
services:
ipam:
driver: default
config:
- subnet: 100.64.64.32/29
internal: true
bounce:
ipam:
driver: default
config:
- subnet: 100.64.64.40/29
internal: true
console:
ipam:
driver: default
config:
- subnet: 100.64.64.48/29
internal: true
services:
hub:
restart: unless-stopped
hostname: hub.n3tw3rk.1ns3cur1ty.c0rp
build:
context: ../hybrid
dockerfile: Dockerfile
image: hybrid:latest
command: "/usr/local/ircd/bin/ircd -foreground -pidfile /dev/shm/ircd.pid -configfile /usr/local/ircd/etc/ircd.conf -logfile /dev/stdout"
environment:
LANG: en_US.utf8
TZ: UTC
ulimits:
nproc: 65535
nofile:
soft: 1024000
hard: 1024000
networks:
hub_default:
ipv4_address: 100.64.0.2
general_leaf:
ipv4_address: 100.64.64.2
tor_leaf:
ipv4_address: 100.64.64.10
proxy_leaf:
ipv4_address: 100.64.64.18
edge_leaf:
ipv4_address: 100.64.64.26
services:
ipv4_address: 100.64.64.34
bounce:
ipv4_address: 100.64.64.42
console:
ipv4_address: 100.64.64.50
volumes:
- type: volume
source: hb_hub_ephemeral
target: /usr/local/ircd/var
volume:
nocopy: false
- ../etc/:/usr/local/ircd/etc/hb_conf:ro
- ./ircd.conf:/usr/local/ircd/etc/ircd.conf:ro
volumes:
hb_hub_ephemeral:

113
hb_hub/ircd.conf Executable file

@ -0,0 +1,113 @@
/* Configuration example located at
* https://github.com/ircd-hybrid/ircd-hybrid/blob/master/doc/reference.conf
*/
.include <hb_conf/hub.admin.conf>
.include <hb_conf/hub.auth.conf>
.include <hb_conf/hub.channels.conf>
.include <hb_conf/hub.classes.conf>
.include <hb_conf/hub.cluster.conf>
.include <hb_conf/hub.deny.conf>
.include <hb_conf/hub.exempt.conf>
.include <hb_conf/hub.gecos.conf>
.include <hb_conf/hub.general.conf>
.include <hb_conf/hub.kill.conf>
.include <hb_conf/hub.log.conf>
.include <hb_conf/hub.modules.conf>
.include <hb_conf/hub.motd.conf>
.include <hb_conf/hub.oper.conf>
.include <hb_conf/hub.pseudo.conf>
.include <hb_conf/hub.resv.conf>
.include <hb_conf/hub.services.conf>
.include <hb_conf/hub.shared.conf>
serverinfo {
name = "hub.n3tw3rk.1ns3cur1ty.c0rp";
sid = "10X";
description = "n3tw3rk 1ns3cur1ty c0rp0r4t10n";
network_name = "𝓷3𝓽𝔀3𝓻𝓴";
network_description = "General-purpose internet relay chat network";
hub = yes;
default_max_clients = 65465;
max_nick_length = 30;
max_topic_length = 192;
};
serverhide {
disable_remote_commands = no;
flatten_links = no;
hidden = no;
hide_servers = yes;
hide_services = yes;
hidden_name = "*.your.real-dns.name";
hide_server_ips = yes;
};
connect {
name = "g3n3r4l.n3tw3rk.1ns3cur1ty.c0rp";
host = "100.64.64.3";
port = 7000;
timeout = 1 seconds;
bind = "100.64.64.2";
send_password = "password";
accept_password = "password";
encrypted = no;
class = "general_leaf";
};
connect {
name = "t0r-dmz.n3tw3rk.1ns3cur1ty.c0rp";
host = "100.64.64.11";
port = 7001;
timeout = 1 seconds;
bind = "100.64.64.10";
send_password = "password";
accept_password = "password";
encrypted = no;
class = "tor_dmz_leaf";
};
connect {
name = "pr0xy-dmz.n3tw3rk.1ns3cur1ty.c0rp";
host = "100.64.64.19";
port = 7002;
timeout = 1 seconds;
bind = "100.64.64.18";
send_password = "password";
accept_password = "password";
encrypted = no;
class = "proxy_dmz_leaf";
};
connect {
name = "3dge.n3tw3rk.1ns3cur1ty.c0rp";
host = "100.64.64.27";
port = 7003;
timeout = 1 seconds;
bind = "100.64.64.26";
send_password = "password";
accept_password = "password";
encrypted = no;
class = "edge_hub";
};
connect {
name = "s3rv1c3z.n3tw3rk.1ns3cur1ty.c0rp";
host = "100.64.64.35";
port = 5555;
timeout = 1 seconds;
bind = "100.64.64.34";
send_password = "password";
accept_password = "password";
encrypted = no;
class = "edge_hub";
};
listen {
host = "100.64.64.42"; # Oper bouncer
port = 6666;
#
host = "100.64.64.50"; # Console
port = 6667;
};

17
hybrid/Dockerfile Normal file

@ -0,0 +1,17 @@
FROM debian:latest
RUN apt-get update && apt-get -y install git subversion libssl-dev build-essential autoconf automake1.11 clang zlib1g-dev libsqlite3-dev
RUN mkdir -p /tmp/hybrd
WORKDIR /tmp/hybrid
RUN git clone https://github.com/ircd-hybrid/ircd-hybrid.git
WORKDIR /tmp/hybrid/ircd-hybrid
RUN ./configure --prefix=/usr/local/ircd
RUN make
RUN make install
WORKDIR /usr/local/ircd
RUN rm -rf /tmp/hybrid
RUN apt -y remove git subversion libssl-dev build-essential autoconf automake1.11 clang zlib1g-dev libsqlite3-dev
RUN groupadd -g 2000 ircd
RUN useradd -m -u 2001 -g ircd ircd
RUN mkdir -p /usr/local/ircd/logs
RUN chown -R 2001:2000 /usr/local/ircd
USER ircd