init
This commit is contained in:
commit
fa8fb63e79
11 changed files with 529 additions and 0 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
hosts
|
56
auth.j2
Normal file
56
auth.j2
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
/* auth {}: allow users to connect to the ircd (OLD I:)
|
||||||
|
* auth {} blocks MUST be specified in order of precedence. The first one
|
||||||
|
* that matches a user will be used. So place spoofs first, then specials,
|
||||||
|
* then general access, then restricted.
|
||||||
|
*/
|
||||||
|
auth {
|
||||||
|
/* user: the user@host allowed to connect. Multiple IPv4/IPv6 user
|
||||||
|
* lines are permitted per auth block. This is matched against the
|
||||||
|
* hostname and IP address (using :: shortening for IPv6 and
|
||||||
|
* prepending a 0 if it starts with a colon) and can also use CIDR
|
||||||
|
* masks.
|
||||||
|
*/
|
||||||
|
user = "*@198.51.100.0/24";
|
||||||
|
user = "*test@2001:db8:1:*";
|
||||||
|
|
||||||
|
/* password: an optional password that is required to use this block.
|
||||||
|
* By default this is not encrypted, specify the flag "encrypted" in
|
||||||
|
* flags = ...; below if it is.
|
||||||
|
*/
|
||||||
|
password = "letmein";
|
||||||
|
/* spoof: fake the users user@host to be be this. You may either
|
||||||
|
* specify a host or a user@host to spoof to. This is free-form,
|
||||||
|
* just do everyone a favour and dont abuse it. (OLD I: = flag)
|
||||||
|
*/
|
||||||
|
spoof = "I.still.hate.packets";
|
||||||
|
|
||||||
|
/* Possible flags in auth:
|
||||||
|
*
|
||||||
|
* encrypted | password is encrypted with mkpasswd
|
||||||
|
* spoof_notice | give a notice when spoofing hosts
|
||||||
|
* exceed_limit (old > flag) | allow user to exceed class user limits
|
||||||
|
* kline_exempt (old ^ flag) | exempt this user from k/g/xlines,
|
||||||
|
* | dnsbls, and proxies
|
||||||
|
* proxy_exempt | exempt this user from proxies
|
||||||
|
* dnsbl_exempt | exempt this user from dnsbls
|
||||||
|
* spambot_exempt | exempt this user from spambot checks
|
||||||
|
* shide_exempt | exempt this user from serverhiding
|
||||||
|
* jupe_exempt | exempt this user from generating
|
||||||
|
* warnings joining juped channels
|
||||||
|
* resv_exempt | exempt this user from resvs
|
||||||
|
* flood_exempt | exempt this user from flood limits
|
||||||
|
* USE WITH CAUTION.
|
||||||
|
* no_tilde (old - flag) | don't prefix ~ to username if no ident
|
||||||
|
* need_ident (old + flag) | require ident for user in this class
|
||||||
|
* need_ssl | require SSL/TLS for user in this class
|
||||||
|
* need_sasl | require SASL id for user in this class
|
||||||
|
*/
|
||||||
|
flags = kline_exempt, exceed_limit;
|
||||||
|
class = "opers";
|
||||||
|
};
|
||||||
|
|
||||||
|
auth {
|
||||||
|
user = "*@*";
|
||||||
|
class = "users";
|
||||||
|
};
|
||||||
|
|
30
class.j2
Normal file
30
class.j2
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
/* class {} blocks MUST be specified before anything that uses them. That
|
||||||
|
* means they must be defined before auth {} and before connect {}.
|
||||||
|
*/
|
||||||
|
class "users" {
|
||||||
|
ping_time = 2 minutes;
|
||||||
|
number_per_ident = 10;
|
||||||
|
number_per_ip = 10;
|
||||||
|
number_per_ip_global = 50;
|
||||||
|
cidr_ipv4_bitlen = 24;
|
||||||
|
cidr_ipv6_bitlen = 64;
|
||||||
|
number_per_cidr = 200;
|
||||||
|
max_number = 3000;
|
||||||
|
sendq = 400 kbytes;
|
||||||
|
};
|
||||||
|
|
||||||
|
class "opers" {
|
||||||
|
ping_time = 5 minutes;
|
||||||
|
number_per_ip = 100;
|
||||||
|
max_number = 1000;
|
||||||
|
sendq = 1 megabyte;
|
||||||
|
};
|
||||||
|
|
||||||
|
class "server" {
|
||||||
|
ping_time = 5 minutes;
|
||||||
|
connectfreq = 5 minutes;
|
||||||
|
max_autoconn = 10;
|
||||||
|
max_number = 100;
|
||||||
|
sendq = 4 megabytes;
|
||||||
|
};
|
||||||
|
|
27
connect.j2
Normal file
27
connect.j2
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
{% for host in ansible_play_hosts %}
|
||||||
|
{% if host != inventory_hostname %}
|
||||||
|
connect "{{ host }}" {
|
||||||
|
host = "{% if hostvars[host]['pahost'] is defined %}{{ hostvars[host]['pahost'] }}{% else %}{{ host }}{% endif %}";
|
||||||
|
send_password = "{{ hostvars[host]['linkpass'] }}";
|
||||||
|
accept_password = "{{ linkpass }}";
|
||||||
|
port = {% if hostvars[host]['paport'] is defined %}{{ hostvars[host]['paport'] }}{% else %}6697{% endif %};
|
||||||
|
class = "server";
|
||||||
|
{% if hostvars[host]['ssl_exists']['stat']['exists'] %}
|
||||||
|
fingerprint = "{{ hostvars[host]['ssl_fingerprint']['stdout'] }}";
|
||||||
|
{% endif %}
|
||||||
|
flags = {% if hostvars[host]['paport'] is not defined or hostvars[host]['paport'] != 6667 %}ssl, {% endif %}topicburst{% if autoconn is defined and autoconn == host %}, autoconn{% endif %};
|
||||||
|
};
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% if services is defined %}
|
||||||
|
connect "services." {
|
||||||
|
host = "127.0.0.1";
|
||||||
|
send_password = "{{ services }}";
|
||||||
|
accept_password = "{{ services }}";
|
||||||
|
port = 6667;
|
||||||
|
class = "server";
|
||||||
|
flags = topicburst;
|
||||||
|
};
|
||||||
|
{% endif %}
|
||||||
|
|
0
dnsbl.j2
Normal file
0
dnsbl.j2
Normal file
281
ircd.j2
Normal file
281
ircd.j2
Normal file
|
@ -0,0 +1,281 @@
|
||||||
|
|
||||||
|
/* Extensions */
|
||||||
|
loadmodule "extensions/chm_nonotice";
|
||||||
|
loadmodule "extensions/chm_operpeace";
|
||||||
|
loadmodule "extensions/chm_operonly";
|
||||||
|
loadmodule "extensions/extb_account";
|
||||||
|
loadmodule "extensions/extb_canjoin";
|
||||||
|
loadmodule "extensions/extb_channel";
|
||||||
|
loadmodule "extensions/extb_combi";
|
||||||
|
loadmodule "extensions/extb_extgecos";
|
||||||
|
loadmodule "extensions/extb_hostmask";
|
||||||
|
loadmodule "extensions/extb_oper";
|
||||||
|
loadmodule "extensions/extb_realname";
|
||||||
|
loadmodule "extensions/extb_server";
|
||||||
|
loadmodule "extensions/extb_ssl";
|
||||||
|
loadmodule "extensions/extb_usermode";
|
||||||
|
loadmodule "extensions/helpops";
|
||||||
|
loadmodule "extensions/hurt";
|
||||||
|
loadmodule "extensions/m_extendchans";
|
||||||
|
loadmodule "extensions/m_findforwards";
|
||||||
|
loadmodule "extensions/m_identify";
|
||||||
|
loadmodule "extensions/m_locops";
|
||||||
|
loadmodule "extensions/sno_farconnect";
|
||||||
|
loadmodule "extensions/sno_globalkline";
|
||||||
|
loadmodule "extensions/sno_globalnickchange";
|
||||||
|
loadmodule "extensions/sno_globaloper";
|
||||||
|
loadmodule "extensions/override";
|
||||||
|
loadmodule "extensions/override_kick_immunity";
|
||||||
|
|
||||||
|
serverinfo {
|
||||||
|
name = "{{ inventory_hostname }}";
|
||||||
|
sid = "{{ sid }}";
|
||||||
|
description = "{% if description is defined %}{{ description }}{% else %}solanum fox server{% endif %}";
|
||||||
|
network_name = "vulpineawoo";
|
||||||
|
|
||||||
|
{% if ssl_exists.stat.exists %}
|
||||||
|
ssl_cert = "etc/ssl.pem";
|
||||||
|
ssl_private_key = "etc/ssl.key";
|
||||||
|
ssl_dh_params = "etc/dh.pem";
|
||||||
|
ssld_count = 1;
|
||||||
|
|
||||||
|
{% endif %}
|
||||||
|
default_max_clients = 1024;
|
||||||
|
nicklen = 30;
|
||||||
|
};
|
||||||
|
|
||||||
|
admin {
|
||||||
|
name = "xfnw";
|
||||||
|
description = "friendly vulpine, requires payment in hugs.";
|
||||||
|
email = "xfnw@riseup.net";
|
||||||
|
};
|
||||||
|
|
||||||
|
{% include 'class.j2' %}
|
||||||
|
|
||||||
|
listen {
|
||||||
|
defer_accept = yes;
|
||||||
|
port = 6667;
|
||||||
|
{% if ssl_exists.stat.exists %}
|
||||||
|
sslport = 6697;
|
||||||
|
wsock = yes;
|
||||||
|
sslport = 7001;
|
||||||
|
{% endif %}
|
||||||
|
};
|
||||||
|
|
||||||
|
{% include 'auth.j2' %}
|
||||||
|
|
||||||
|
privset "wombat" {
|
||||||
|
privs = oper:general, oper:kline, oper:unkline, oper:xline, oper:kill, oper:testline, oper:privs,
|
||||||
|
oper:resv, oper:cmodes, oper:mass_notice, oper:remoteban, usermode:helpops, oper:message,
|
||||||
|
auspex:oper, auspex:hostname, auspex:umodes, auspex:cmodes, oper:receive_immunity, oper:wallops;
|
||||||
|
};
|
||||||
|
|
||||||
|
privset "dingo" {
|
||||||
|
extends = "wombat";
|
||||||
|
privs = oper:override, oper:ojoin, oper:operwall,
|
||||||
|
oper:dehelper, oper:massnotice, usermode:servnotice;
|
||||||
|
};
|
||||||
|
|
||||||
|
privset "shark" {
|
||||||
|
extends = "dingo";
|
||||||
|
privs = oper:kline, oper:remoteban, snomask:nick_changes;
|
||||||
|
};
|
||||||
|
|
||||||
|
privset "bandicoot" {
|
||||||
|
extends = "dingo";
|
||||||
|
privs = oper:routing;
|
||||||
|
};
|
||||||
|
|
||||||
|
privset "jellyfish" {
|
||||||
|
extends = "bandicoot";
|
||||||
|
privs = oper:admin, oper:die, oper:rehash, oper:spy, oper:grant;
|
||||||
|
};
|
||||||
|
|
||||||
|
{% include 'operator.j2' %}
|
||||||
|
|
||||||
|
{% include 'connect.j2' %}
|
||||||
|
|
||||||
|
service {
|
||||||
|
name = "services.";
|
||||||
|
};
|
||||||
|
|
||||||
|
cluster {
|
||||||
|
name = "*";
|
||||||
|
flags = kline, tkline, unkline, xline, txline, unxline, resv, tresv, unresv, all;
|
||||||
|
};
|
||||||
|
|
||||||
|
channel {
|
||||||
|
use_invex = yes;
|
||||||
|
use_except = yes;
|
||||||
|
use_forward = yes;
|
||||||
|
use_knock = yes;
|
||||||
|
knock_delay = 5 minutes;
|
||||||
|
knock_delay_channel = 1 minute;
|
||||||
|
max_chans_per_user = 150;
|
||||||
|
max_chans_per_user_large = 300;
|
||||||
|
max_bans = 100;
|
||||||
|
max_bans_large = 500;
|
||||||
|
default_split_user_count = 0;
|
||||||
|
default_split_server_count = 0;
|
||||||
|
no_create_on_split = no;
|
||||||
|
no_join_on_split = no;
|
||||||
|
burst_topicwho = yes;
|
||||||
|
kick_on_split_riding = no;
|
||||||
|
only_ascii_channels = no;
|
||||||
|
resv_forcepart = yes;
|
||||||
|
channel_target_change = yes;
|
||||||
|
disable_local_channels = no;
|
||||||
|
autochanmodes = "+nt";
|
||||||
|
displayed_usercount = 3;
|
||||||
|
strip_topic_colors = no;
|
||||||
|
opmod_send_statusmsg = no;
|
||||||
|
};
|
||||||
|
|
||||||
|
serverhide {
|
||||||
|
flatten_links = yes;
|
||||||
|
links_delay = 5 minutes;
|
||||||
|
hidden = no;
|
||||||
|
disable_hidden = no;
|
||||||
|
};
|
||||||
|
|
||||||
|
{% include 'dnsbl.j2' %}
|
||||||
|
|
||||||
|
alias "NickServ" {
|
||||||
|
target = "NickServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "ChanServ" {
|
||||||
|
target = "ChanServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "OperServ" {
|
||||||
|
target = "OperServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "HostServ" {
|
||||||
|
target = "HostServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "MemoServ" {
|
||||||
|
target = "MemoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "BotServ" {
|
||||||
|
target = "BotServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "CatServ" {
|
||||||
|
target = "CatServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "ALIS" {
|
||||||
|
target = "ALIS";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "NS" {
|
||||||
|
target = "NickServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "CS" {
|
||||||
|
target = "ChanServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "OS" {
|
||||||
|
target = "OperServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "HS" {
|
||||||
|
target = "HostServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "MS" {
|
||||||
|
target = "MemoServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
alias "BS" {
|
||||||
|
target = "BotServ";
|
||||||
|
};
|
||||||
|
|
||||||
|
general {
|
||||||
|
hide_error_messages = opers;
|
||||||
|
hide_spoof_ips = yes;
|
||||||
|
default_umodes = "+";
|
||||||
|
|
||||||
|
default_operstring = "is an IRC Operator";
|
||||||
|
default_adminstring = "is a Server Administrator";
|
||||||
|
servicestring = "is a Network Service";
|
||||||
|
|
||||||
|
sasl_service = "SaslServ";
|
||||||
|
disable_fake_channels = no;
|
||||||
|
tkline_expire_notices = no;
|
||||||
|
default_floodcount = 10;
|
||||||
|
failed_oper_notice = yes;
|
||||||
|
dots_in_ident = 2;
|
||||||
|
min_nonwildcard = 4;
|
||||||
|
min_nonwildcard_simple = 3;
|
||||||
|
max_accept = 100;
|
||||||
|
max_monitor = 100;
|
||||||
|
anti_nick_flood = yes;
|
||||||
|
max_nick_time = 20 seconds;
|
||||||
|
max_nick_changes = 5;
|
||||||
|
anti_spam_exit_message_time = 5 minutes;
|
||||||
|
ts_warn_delta = 30 seconds;
|
||||||
|
ts_max_delta = 5 minutes;
|
||||||
|
client_exit = yes;
|
||||||
|
collision_fnc = yes;
|
||||||
|
resv_fnc = yes;
|
||||||
|
global_snotices = yes;
|
||||||
|
dline_with_reason = yes;
|
||||||
|
kline_with_reason = yes;
|
||||||
|
hide_tkdline_duration = no;
|
||||||
|
kline_reason = "K-Lined";
|
||||||
|
identify_service = "NickServ@services.";
|
||||||
|
identify_command = "IDENTIFY";
|
||||||
|
non_redundant_klines = yes;
|
||||||
|
warn_no_nline = yes;
|
||||||
|
use_propagated_bans = yes;
|
||||||
|
stats_e_disabled = no;
|
||||||
|
stats_c_oper_only = no;
|
||||||
|
stats_y_oper_only = no;
|
||||||
|
stats_o_oper_only = yes;
|
||||||
|
stats_P_oper_only = no;
|
||||||
|
stats_i_oper_only = masked;
|
||||||
|
stats_k_oper_only = masked;
|
||||||
|
map_oper_only = no;
|
||||||
|
operspy_admin_only = no;
|
||||||
|
operspy_dont_care_user_info = no;
|
||||||
|
caller_id_wait = 1 minute;
|
||||||
|
pace_wait_simple = 1 second;
|
||||||
|
pace_wait = 10 seconds;
|
||||||
|
short_motd = no;
|
||||||
|
ping_cookie = no;
|
||||||
|
connect_timeout = 30 seconds;
|
||||||
|
default_ident_timeout = 5;
|
||||||
|
disable_auth = no;
|
||||||
|
no_oper_flood = yes;
|
||||||
|
max_targets = 4;
|
||||||
|
client_flood_max_lines = 20;
|
||||||
|
post_registration_delay = 0 seconds;
|
||||||
|
use_whois_actually = no;
|
||||||
|
oper_only_umodes = operwall, locops, servnotice;
|
||||||
|
oper_umodes = locops, servnotice, operwall, wallop;
|
||||||
|
oper_snomask = "+s";
|
||||||
|
burst_away = yes;
|
||||||
|
nick_delay = 0 seconds; # 15 minutes if you want to enable this
|
||||||
|
reject_ban_time = 1 minute;
|
||||||
|
reject_after_count = 3;
|
||||||
|
reject_duration = 5 minutes;
|
||||||
|
throttle_duration = 60;
|
||||||
|
throttle_count = 4;
|
||||||
|
max_ratelimit_tokens = 30;
|
||||||
|
away_interval = 30;
|
||||||
|
certfp_method = sha512;
|
||||||
|
hide_opers_in_whois = no;
|
||||||
|
tls_ciphers_oper_only = no;
|
||||||
|
};
|
||||||
|
|
||||||
|
modules {
|
||||||
|
path = "modules";
|
||||||
|
path = "modules/autoload";
|
||||||
|
};
|
||||||
|
|
19
motd.j2
Normal file
19
motd.j2
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
Welcome to
|
||||||
|
|
||||||
|
▌ ▌▞▀▖
|
||||||
|
▚▗▘▙▄▌ vulpineawoo
|
||||||
|
▝▞ ▌ ▌ running sandcat-approved software since 2019
|
||||||
|
▘ ▘ ▘
|
||||||
|
|
||||||
|
You are connected to {{ inventory_hostname }}{% if sponsor is defined %}, donated by {{ sponsor }}{% endif %}
|
||||||
|
|
||||||
|
|
||||||
|
Other servers on the network:
|
||||||
|
{% for host in ansible_play_hosts %}
|
||||||
|
{% if host != inventory_hostname %}
|
||||||
|
- {{ host }}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
Pop in #vulpineawoo for help, or do /list for a list of channels.
|
||||||
|
|
6
openrc.j2
Normal file
6
openrc.j2
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
#!/sbin/openrc-run
|
||||||
|
|
||||||
|
name="solanum ircd"
|
||||||
|
command="/home/ircd/ircd/bin/solanum -pidfile /var/run/solanum-ircd"
|
||||||
|
command_user="ircd"
|
||||||
|
pidfile="/var/run/solanum-ircd"
|
0
operator.j2
Normal file
0
operator.j2
Normal file
99
solanum.yml
Normal file
99
solanum.yml
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
- hosts: testnet
|
||||||
|
|
||||||
|
tasks:
|
||||||
|
- name: install dependencies for alpine
|
||||||
|
package:
|
||||||
|
name: sudo,musl-dev,libressl-dev,make,automake,gcc,curl,git,byacc,flex,libtool,sqlite-dev,autoconf,util-linux
|
||||||
|
state: present
|
||||||
|
when: ansible_distribution == 'Alpine'
|
||||||
|
|
||||||
|
- name: install dependencies for debian
|
||||||
|
package:
|
||||||
|
name: sudo,buildessential,autotools-dev,automake,cmake,make,libtool,byacc,flex,openssl-dev,sqlite3
|
||||||
|
state: present
|
||||||
|
when: ansible_distribution == 'Debian'
|
||||||
|
|
||||||
|
- name: create ircd user
|
||||||
|
user:
|
||||||
|
name: ircd
|
||||||
|
|
||||||
|
- name: download solanum
|
||||||
|
git:
|
||||||
|
repo: 'https://github.com/vulpineawoo/solanum'
|
||||||
|
dest: /home/ircd/solanum
|
||||||
|
become: yes
|
||||||
|
become_user: ircd
|
||||||
|
|
||||||
|
- name: check if autogen needed
|
||||||
|
stat:
|
||||||
|
path: /home/ircd/solanum/configure
|
||||||
|
register: alreadyautogen
|
||||||
|
|
||||||
|
- name: autogen
|
||||||
|
command: ./autogen.sh
|
||||||
|
args:
|
||||||
|
chdir: /home/ircd/solanum
|
||||||
|
become: yes
|
||||||
|
become_user: ircd
|
||||||
|
when: not alreadyautogen.stat.exists
|
||||||
|
|
||||||
|
- name: configure
|
||||||
|
command: ./configure
|
||||||
|
args:
|
||||||
|
chdir: /home/ircd/solanum
|
||||||
|
become: yes
|
||||||
|
become_user: ircd
|
||||||
|
when: not alreadyautogen.stat.exists
|
||||||
|
|
||||||
|
- name: make
|
||||||
|
make:
|
||||||
|
chdir: /home/ircd/solanum
|
||||||
|
become: yes
|
||||||
|
become_user: ircd
|
||||||
|
|
||||||
|
- name: make install
|
||||||
|
make:
|
||||||
|
chdir: /home/ircd/solanum
|
||||||
|
target: install
|
||||||
|
become: yes
|
||||||
|
become_user: ircd
|
||||||
|
|
||||||
|
- name: check for ssl cert
|
||||||
|
stat:
|
||||||
|
path: /home/ircd/ircd/etc/ssl.pem
|
||||||
|
register: ssl_exists
|
||||||
|
|
||||||
|
- name: get ssl fingerprint
|
||||||
|
command: /home/ircd/ircd/bin/solanum-mkfingerprint sha512 /home/ircd/ircd/etc/ssl.pem
|
||||||
|
register: ssl_fingerprint
|
||||||
|
when: ssl_exists.stat.exists
|
||||||
|
|
||||||
|
- name: create ircd.conf
|
||||||
|
template:
|
||||||
|
src: ircd.j2
|
||||||
|
dest: /home/ircd/ircd/etc/ircd.conf
|
||||||
|
|
||||||
|
- name: create ircd.motd
|
||||||
|
template:
|
||||||
|
src: motd.j2
|
||||||
|
dest: /home/ircd/ircd/etc/ircd.motd
|
||||||
|
|
||||||
|
- name: create openrc service
|
||||||
|
template:
|
||||||
|
src: openrc.j2
|
||||||
|
dest: /etc/init.d/solanum
|
||||||
|
mode: 0755
|
||||||
|
when: ansible_distribution == 'Alpine'
|
||||||
|
|
||||||
|
- name: create systemd service
|
||||||
|
template:
|
||||||
|
src: systemd.j2
|
||||||
|
dest: /etc/systemd/system/solnum.service
|
||||||
|
mode: 0755
|
||||||
|
when: ansible_distribution == 'Debian'
|
||||||
|
|
||||||
|
- name: enable service
|
||||||
|
service:
|
||||||
|
name: solanum
|
||||||
|
state: reloaded
|
||||||
|
enabled: yes
|
10
systemd.j2
Normal file
10
systemd.j2
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
[Unit]
|
||||||
|
Description=solanum ircd
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
User=ircd
|
||||||
|
ExecStart=/home/ircd/ircd/bin/solanum
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=default.target
|
Loading…
Reference in a new issue