Compare commits

...

63 Commits

Author SHA1 Message Date
e3559119be
Update node info 2025-11-25 10:56:35 +00:00
16f95170ef
Remove old node 2025-11-25 10:55:04 +00:00
36f5903271 Merge pull request 'Fix URL matcher for substr (vs strfry)' (#608) from bugfix/substr_url_matching into master
Reviewed-on: #608
2025-11-17 11:03:48 +00:00
fd9636441b
Fix URL matcher for substr (vs strfry)
I wasn't able to reach https://nostr.kosmos.org/nodeinfo/2.1, which I
stumbled upon in an upstream PR. This one only matches exactly the paths
that substr is serving.

Tested/running in production.
2025-11-17 10:47:50 +01:00
aade479e5b
Remove obsolete recipe 2025-11-12 13:47:00 +01:00
a3bb927f95 Merge pull request 'Document script that creates VMs' (#604) from feature/244-document_creating_vm into master
Reviewed-on: #604
Reviewed-by: Râu Cao <raucao@kosmos.org>
2025-10-30 16:32:02 +00:00
Greg Karekinian
5b53635f1a Document script that creates VMs
Closes #244
2025-10-30 16:18:59 +01:00
ea087b1e3e
Add new Garage nodes 2025-10-24 18:20:06 +02:00
9817589a92 Merge pull request 'Upgrade bitcoind to 30.0' (#603) from chore/upgrade_bitcoind into master
Reviewed-on: #603
2025-10-24 16:18:35 +00:00
d632cafd9c
Upgrade bitcoind to 30.0
Also disables building the tests, which eats up more than 5GB of disk space.
2025-10-24 18:16:00 +02:00
87b03d3936 Merge pull request 'Upgrade ejabberd from 23.10 to 25.08' (#602) from chore/upgrade_ejabberd into master
Reviewed-on: #602
Reviewed-by: Greg <greg@kosmos.org>
2025-09-21 11:03:39 +00:00
ae3df992e4
Update node info 2025-09-21 12:45:54 +02:00
2ea5b30224
Upgrade ejabberd to 25.08
Co-authored-by: Greg Karékinian <greg@karekinian.com>
2025-09-21 12:45:20 +02:00
4ef06cb4b7 Merge pull request 'Modernize kosmos-mediawiki cookbook' (#600) from feature/500-chef_upgrade_mediawiki into master
Reviewed-on: #600
Reviewed-by: Râu Cao <raucao@kosmos.org>
2025-09-17 06:41:30 +00:00
73e8a2c413
Fix random port being used for EPMD node
Fixes not being able to join a cluster from other nodes, because the
ports are not within the firewall range of allowed ports.

Co-authored-by: Greg Karékinian <greg@karekinian.com>
2025-09-16 17:48:09 +02:00
ea4713c654
Move firewall config
Co-authored-by: Greg Karékinian <greg@karekinian.com>
2025-09-16 17:47:41 +02:00
dde29c4a6c
Upgrade ejabberd to 24.02
Co-authored-by: Greg Karékinian <greg@karekinian.com>
2025-09-16 17:01:43 +02:00
03f1d16998
Update SQL Schema automatically on ejabberd upgrades
Co-authored-by: Greg Karékinian <greg@karekinian.com>
2025-09-16 16:07:10 +02:00
6534086df2
Update logger configuration
* Remove unused/deprecated options
* Hide user IPs
* Set level to "info"

Co-authored-by: Greg Karékinian <greg@karekinian.com>
2025-09-16 16:07:00 +02:00
dbf0e50abf Merge pull request 'Enable unattended-upgrades' (#598) from bugfix/499-unattended_upgrades into master
Reviewed-on: #598
Reviewed-by: Râu Cao <raucao@kosmos.org>
2025-09-10 08:47:52 +00:00
Greg Karekinian
a828d92185 Fix Ruby style
This is using Standard Ruby
2025-09-09 15:29:17 +02:00
Greg Karekinian
0fe6d0bd06 Use the "new" way to set up sasl in the postfix cookbook 2025-09-09 15:28:20 +02:00
Greg Karekinian
9712697569 Fork the postfix cookbook to work around a bug
I ran into the issue described in
https://github.com/sous-chefs/postfix/issues/148
and couldn't figure out a way to work around it without forking it.
2025-09-09 14:54:06 +02:00
Greg Karekinian
d32f276b42 Update akkounts-1 node file after Chef run 2025-09-09 10:13:26 +02:00
Greg Karekinian
cc40c0db19 Configure unattended-upgrades for ESM 2025-09-09 10:12:35 +02:00
41339c1040
Add doc for Mastodon maintenance 2025-07-27 09:17:01 +02:00
Greg Karekinian
0cae8dca69 Set the email sender in unattended-upgrades config
Mailgun was rejecting the email as it did not have a valid sender
(the default, which is something like root@akkounts-1). Unattended
upgrades have been working properly, now we will start getting emails
next time an upgrade is done on akkounts-1.
2025-07-15 10:12:02 +02:00
Greg Karekinian
78e5f810b7 Update node file after Chef upgrade
I ended up upgrading Chef manually on the server as I couldn't using
knife-zero

`curl https://omnitruck.chef.io/install.sh | sudo bash -s -- -P chef -v 18.7.10`
2025-07-09 15:42:30 +02:00
Greg Karekinian
443910c7a2 Modernize kosmos-mediawiki
This has been done with the help of `cookstyle` which is very useful to
learn about breaking changes and updates in Chef.

On wiki-1 I managed to update Chef up to 17.10.163. For version 18 I ran
into an issue with the omnibus installer returning a 404

Refs #500
2025-07-09 11:24:14 +02:00
8052c67d23 Merge pull request 'Opt-out of dotnet telemetry for btcpay' (#599) from feature/441-optout_dotnet_telemetry into master
Reviewed-on: #599
Reviewed-by: Râu Cao <raucao@kosmos.org>
2025-06-25 10:01:58 +00:00
Greg Karekinian
cd269dca03 Also disable dotnet telemetry during the build 2025-06-25 10:35:07 +02:00
Greg Karekinian
7e47c879a1 Remove unused variable 2025-06-25 10:18:57 +02:00
Greg Karekinian
2b49cb1b2b Restart the btcpay service on config changes
It cannot handle reloads
2025-06-25 10:13:25 +02:00
Greg Karekinian
89fa3ede9e Remove the condition on the postgresql
Also move back the environment variable definitions to the hash
2025-06-25 09:51:35 +02:00
Greg Karekinian
efb032fffa Opt-out of dotnet telemetry for btcpay
This is done by setting an environment variable in the systemd unit

Fixes #441
2025-06-24 16:53:59 +02:00
Greg Karekinian
68df49037c Merge remote-tracking branch 'origin/master' into bugfix/499-unattended_upgrades 2025-06-16 16:05:35 +02:00
364adec80f
Upgrade LND to 0.19.1 2025-06-16 17:57:30 +04:00
092a2edb3c
Update node info 2025-06-16 17:57:04 +04:00
63d0b68c36
Upgrade Deno 2025-06-02 10:53:38 +04:00
3adb2a1aee
Adapt strfry config to cookbook changes, increase allowed event size 2025-06-01 20:06:47 +04:00
9cff1fb68b
Update node info 2025-06-01 20:06:32 +04:00
Greg Karekinian
773950b9a5 Always send an email on unattended-upgrades 2025-05-31 17:00:07 +02:00
Greg Karekinian
f39a1ed250 Enable unattended-upgrades
We were missing a positive value on
`["apt"]["unattended_upgrades"]["enable"]` to enable it.

Refs #499
2025-05-31 16:44:01 +02:00
3c51ff261e Merge pull request 'Compile Gitea from source, apply our LDAP fixes' (#596) from feature/compile_gitea_from_source into master
Reviewed-on: #596
Reviewed-by: Greg <greg@kosmos.org>
2025-05-31 12:26:28 +00:00
0c62ff6c84
Improve Gitea logging 2025-05-31 15:29:18 +04:00
2c3b381755
Update Gitea stable version 2025-05-31 15:29:03 +04:00
3492bec627
Use Gitea from source 2025-05-31 15:28:33 +04:00
00f4c8bd31
Optionally compile Gitea from source 2025-05-31 15:27:21 +04:00
301596500d
Update node info 2025-05-28 10:18:53 +04:00
8a2bfb6b18
Fix attribute
Was moved to a new name since the recipe was created
2025-05-23 14:44:04 +04:00
846bf3483a
Update node info 2025-05-23 14:43:40 +04:00
e3ef1dc3b3 Merge pull request 'Upgrade Bitcoin Core, NBXplorer, BTCPay Server' (#595) from chore/upgrade_bitcoin_software into master
Reviewed-on: #595
Reviewed-by: Greg <greg@noreply.kosmos.org>
2025-05-22 12:32:25 +00:00
2089999cc8
Upgrade bitcoind to 29.0, switch to cmake 2025-05-22 15:52:22 +04:00
a4aa29de0c
Upgrade NBXplorer, BTCPay Server 2025-05-22 15:50:27 +04:00
98be234a4f Merge pull request 'Configure maximum size and timespan of journald logs' (#594) from feature/506-journald_logs_config into master
Reviewed-on: #594
Reviewed-by: Râu Cao <raucao@kosmos.org>
2025-05-21 12:12:57 +00:00
Greg Karekinian
7dc4f674a0 Use the systemd unit instead of an execute resource
Also extract the attributes so it is possible to override them.
2025-05-21 13:40:12 +02:00
Greg Karekinian
49b636305e Update mastodon-3 node file after Chef run 2025-05-21 11:36:15 +02:00
Greg Karekinian
3e2ee30334 Configure maximum size and timespan of journald logs
Closes #506
2025-05-21 11:36:15 +02:00
d00072ee5a Merge pull request 'Delete old Mastodon media cache every day' (#593) from feature/533-delete_old_mastodon_cached_media into master
Reviewed-on: #593
Reviewed-by: Râu Cao <raucao@kosmos.org>
2025-05-17 07:06:35 +00:00
14687558fe
Minor cleanup 2025-05-17 10:55:06 +04:00
de7cc69505
Allow more users per room 2025-05-17 10:42:41 +04:00
Greg Karekinian
b01315f998 Delete old Mastodon media cache every day
This is done using a systemd timer

Closes #533
2025-05-16 19:12:47 +02:00
160134bd86
Allow more ejabberd API calls from akkounts 2025-05-16 15:17:43 +04:00
63 changed files with 812 additions and 215 deletions

View File

@ -13,6 +13,9 @@ cookbook 'ipfs',
cookbook 'mediawiki', cookbook 'mediawiki',
git: 'https://github.com/67P/mediawiki-cookbook.git', git: 'https://github.com/67P/mediawiki-cookbook.git',
ref: 'nginx' ref: 'nginx'
cookbook 'postfix',
git: 'https://gitea.kosmos.org/kosmos/postfix-cookbook.git',
ref: 'bugfix/sasl_attributes'
cookbook 'apache2', '= 3.3.0' cookbook 'apache2', '= 3.3.0'
cookbook 'apt', '~> 7.3.0' cookbook 'apt', '~> 7.3.0'
@ -32,7 +35,6 @@ cookbook 'ntp', '= 3.4.0'
cookbook 'ohai', '~> 5.2.5' cookbook 'ohai', '~> 5.2.5'
cookbook 'openssl', '~> 8.5.5' cookbook 'openssl', '~> 8.5.5'
cookbook 'php', '~> 8.0.0' cookbook 'php', '~> 8.0.0'
cookbook 'postfix', '~> 6.0.26'
cookbook 'timezone_iii', '= 1.0.4' cookbook 'timezone_iii', '= 1.0.4'
cookbook 'ulimit', '~> 1.0.0' cookbook 'ulimit', '~> 1.0.0'
cookbook 'users', '~> 5.3.1' cookbook 'users', '~> 5.3.1'

View File

@ -28,7 +28,10 @@ DEPENDENCIES
ohai (~> 5.2.5) ohai (~> 5.2.5)
openssl (~> 8.5.5) openssl (~> 8.5.5)
php (~> 8.0.0) php (~> 8.0.0)
postfix (~> 6.0.26) postfix
git: https://gitea.kosmos.org/kosmos/postfix-cookbook.git
revision: dd6598572a775ae73f17527260ec8097b52d385b
ref: bugfix/
redisio (~> 6.4.1) redisio (~> 6.4.1)
ruby_build (~> 2.5.0) ruby_build (~> 2.5.0)
timezone_iii (= 1.0.4) timezone_iii (= 1.0.4)
@ -90,7 +93,7 @@ GRAPH
openssl (8.5.5) openssl (8.5.5)
php (8.0.1) php (8.0.1)
yum-epel (>= 0.0.0) yum-epel (>= 0.0.0)
postfix (6.0.26) postfix (6.4.1)
redisio (6.4.1) redisio (6.4.1)
selinux (>= 0.0.0) selinux (>= 0.0.0)
ruby_build (2.5.0) ruby_build (2.5.0)

4
clients/garage-12.json Normal file
View File

@ -0,0 +1,4 @@
{
"name": "garage-12",
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9GtHHi298BjiIqpZ3WkT\nkYAPfWD60hFe/8icYcq/F/6cHLYKZQ4chek9X/hDCMq4tHEN6Oh58T5x/nuNdPrK\nIAMGyVAGk6ekWlmD4jwdEf6TGb/J3ffJTRDvwX/I8xD/DW3wtXsN+X24T59ByGTm\nrnwRmmmwHF3otRx9wnCsIgDQ0AjiUujsfNNv1FcLXD/WJLys9lEeU5aJ4XtHTwDv\ntJM8YyVEFhEnuvgdKmzn5+F5k9VGdUwForlFOBfvzbCnTZMDMmDVeiUtAUv/7xWQ\nQl2mLUGCtgWuYJYXsQacAJ6pa3h+7cQyshC6w3dwUG+1fS9lNO0Yp1GGX1AGYKpp\nPQIDAQAB\n-----END PUBLIC KEY-----\n"
}

4
clients/garage-13.json Normal file
View File

@ -0,0 +1,4 @@
{
"name": "garage-13",
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvbqWc6OwRxgHfsQuTNL4\naxeVvNen5d9srYpZSHjuBB/k9NHB+9P6vU5qF37XHkw1lVUGeYbPHzhYsx3O0/kZ\nH5f4+4SMy/P9jc6SE7AJF4qtYKgJ88koZdqCww07c6K9g+BnEGFFZui/h3hUBxWj\nTfhBHEWPyQ2bl/lr9sIJwsEz+EN0isGn/eIXkmw9J6LdLJ5Q0LLks33K28FNOU7q\nfeAN4MiBVMUtgCGyT2Voe6WrOXwQLSDXQONOp3sfSfFExsIJ1s24xdd7AMD7/9a7\n4sFDZ4swhqAWgWmW2giR7Kb8wTvGQLO/O/uUbmKz3DZXgkOKXHdHCEB/PZx1mRNM\nEwIDAQAB\n-----END PUBLIC KEY-----\n"
}

4
clients/garage-14.json Normal file
View File

@ -0,0 +1,4 @@
{
"name": "garage-14",
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqNY8AuaM4byhaTZacfRJ\nv/qyHxcDJOMX/ElF1H908spdbB2ZiLXHOH1Ucw1d+NV6/QUtWk+ikKFPpasnatD7\nmjE57noH+H47Rll0nD7oT+in+fOBDHF9R0P6/qyRSdJbJkHOh0iC0MG4LcUfv0AY\nnVBW5iLZSe/PC3+PvhCv7yrx3ikSs0mg1ZWppw0ka5Ek3ZCZp5FB4L6++GYWpM+1\n6YI0CjMoRcXsaEQsJWhxHXT8/KDhW0BR8woZUGm0/Yn4teLYJzioxRfBep3lbygx\nOIsDN9IJzo2zVTGPDZQLXhVemIhzaepqTC77ibH7F0gN/1vsQBc/qf7UhbwaF4rR\ndQIDAQAB\n-----END PUBLIC KEY-----\n"
}

View File

@ -1,4 +0,0 @@
{
"name": "postgres-7",
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArraIm6mXi0qgK4oWDs2I\nOIx+g/LPnfRd5aBXhoHcekGiJKttQTi5dRdN4+T6qVEC2h4Cc9qN47h2TZPLDh/M\neIZvu0AyicpectzXf6DtDZh0hFCnv47RDi9927op9tjMXk0SV1tLel7MN0dawATw\ny0vQkkr/5a3ZdiP4dFv+bdfVrj+Tuh85BYPVyX2mxq9F7Efxrt6rzVBiqr6uJLUY\nStpeB3CCalC4zQApKX2xrdtr2k8aJbqC6C//LiKbb7VKn+ZuZJ32L/+9HDEzQoFC\no0ZZPMhfnjcU+iSHYZuPMTJTNbwgRuOgpn9O8kZ239qYc59z7HEXwwWiYPDevbiM\nCQIDAQAB\n-----END PUBLIC KEY-----\n"
}

4
clients/postgres-9.json Normal file
View File

@ -0,0 +1,4 @@
{
"name": "postgres-9",
"public_key": "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2dcE9HH0r5TBb/FGj2+e\nOw8ssoxeB61JmR4/psdZ6oPR08gxyqOY0ODziCmyIdXwFhjIcC44HjxCbcB8TU8G\nWGqlmfqWWIJW0x/2xOycHobAWDn5fC5ttTXkR3HC1TutX/2mH26mtfz9UjNdPaTo\nVZFMcxeaBCFSNlYC7hPUQ5f/qBdhhpLxP9uyzU+YFPqtwLP7g8EAUQObM4L+m6Q8\nqE7xgYpnhgaNrPsmvaVuoNylMGwyK0j1whOkcik8UgLprD70ISNSNxxcLehbvA3G\nPQPQRRuFF36fu2gECWGopbrFKwQGNfgJguQoXM1RQZQMQqWHPS933k5i6bi5pnhp\nzwIDAQAB\n-----END PUBLIC KEY-----\n"
}

View File

@ -3,3 +3,5 @@ config:
line-length: false # MD013 line-length: false # MD013
no-duplicate-heading: false # MD024 no-duplicate-heading: false # MD024
reference-links-images: false # MD052 reference-links-images: false # MD052
ignores:
- .github/copilot-instructions.md

View File

@ -0,0 +1,8 @@
{
"recommendations": [
"chef-software.chef",
"Shopify.ruby-lsp",
"editorconfig.editorconfig",
"DavidAnson.vscode-markdownlint"
]
}

View File

@ -2,9 +2,48 @@
This file is used to list changes made in each version of the postfix cookbook. This file is used to list changes made in each version of the postfix cookbook.
## Unreleased
## 6.4.1 - *2025-09-04*
## 6.4.0 - *2025-07-30* ## 6.4.0 - *2025-07-30*
Standardise files with files in sous-chefs/repo-management
## 6.4.0 - *2025-07-30*
## 6.3.0 - *2025-07-30*
- Use LMDB instead of hash on el10
## 6.3.0 - *2025-07-30*
## 6.2.2 - *2025-01-30*
## 6.2.1 - *2025-01-30*
## 6.2.0 - *2025-01-30*
## 6.2.0
- Correctly fix aliases quoting logic
- Convert all serverspec tests to inspec
- Add Github actions
- Update platforms to test
## 6.0.29 - *2024-11-18*
- Standardise files with files in sous-chefs/repo-management
## 6.0.28 - *2024-07-15*
- Standardise files with files in sous-chefs/repo-management
## 6.0.27 - *2024-05-06*
## 6.0.26 - *2023-10-03* ## 6.0.26 - *2023-10-03*
- add installation of postfix addon packages for RHEL 8 - Add installation of postfix addon packages for RHEL 8
## 6.0.25 - *2023-10-03* ## 6.0.25 - *2023-10-03*

View File

@ -13,9 +13,10 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
default['postfix']['packages'] = value_for_platform(
default['postfix']['packages'] = %w(postfix) amazon: { '>= 2023' => %w(postfix postfix-lmdb) },
default: %w(postfix)
)
# Generic cookbook attributes # Generic cookbook attributes
default['postfix']['mail_type'] = 'client' default['postfix']['mail_type'] = 'client'
default['postfix']['relayhost_role'] = 'relayhost' default['postfix']['relayhost_role'] = 'relayhost'
@ -37,11 +38,19 @@ default['postfix']['master_template_source'] = 'postfix'
default['postfix']['sender_canonical_map_entries'] = {} default['postfix']['sender_canonical_map_entries'] = {}
default['postfix']['smtp_generic_map_entries'] = {} default['postfix']['smtp_generic_map_entries'] = {}
default['postfix']['recipient_canonical_map_entries'] = {} default['postfix']['recipient_canonical_map_entries'] = {}
default['postfix']['access_db_type'] = 'hash'
default['postfix']['aliases_db_type'] = 'hash' default['postfix']['db_type'] = value_for_platform(
default['postfix']['transport_db_type'] = 'hash' %w(centos redhat almalinux rocky oracle) => { '>= 10' => 'lmdb' },
default['postfix']['virtual_alias_db_type'] = 'hash' amazon: { '>= 2023' => 'lmdb' },
default['postfix']['virtual_alias_domains_db_type'] = 'hash' %w(opensuseleap suse) => { '>= 15' => 'lmdb' },
default: 'hash'
)
default['postfix']['access_db_type'] = lazy { node['postfix']['db_type'] }
default['postfix']['aliases_db_type'] = lazy { node['postfix']['db_type'] }
default['postfix']['transport_db_type'] = lazy { node['postfix']['db_type'] }
default['postfix']['virtual_alias_db_type'] = lazy { node['postfix']['db_type'] }
default['postfix']['virtual_alias_domains_db_type'] = lazy { node['postfix']['db_type'] }
case node['platform'] case node['platform']
when 'smartos' when 'smartos'
@ -96,6 +105,9 @@ default['postfix']['main']['smtp_sasl_auth_enable'] = 'no'
default['postfix']['main']['mailbox_size_limit'] = 0 default['postfix']['main']['mailbox_size_limit'] = 0
default['postfix']['main']['mynetworks'] = nil default['postfix']['main']['mynetworks'] = nil
default['postfix']['main']['inet_interfaces'] = 'loopback-only' default['postfix']['main']['inet_interfaces'] = 'loopback-only'
default['postfix']['main']['default_database_type'] = lazy { node['postfix']['db_type'] }
default['postfix']['main']['alias_database'] = lazy { "#{node['postfix']['db_type']}:#{node['postfix']['aliases_db']}" }
default['postfix']['main']['alias_maps'] = lazy { "#{node['postfix']['db_type']}:#{node['postfix']['aliases_db']}" }
# Conditional attributes, also reference _attributes recipe # Conditional attributes, also reference _attributes recipe
case node['platform_family'] case node['platform_family']
@ -407,4 +419,4 @@ default['postfix']['aliases'] = if platform?('freebsd')
{} {}
end end
default['postfix']['main']['smtpd_relay_restrictions'] = "hash:#{node['postfix']['relay_restrictions_db']}, reject" if node['postfix']['use_relay_restrictions_maps'] default['postfix']['main']['smtpd_relay_restrictions'] = lazy { "#{node['postfix']['db_type']}:#{node['postfix']['relay_restrictions_db']}, reject" if node['postfix']['use_relay_restrictions_maps'] }

View File

@ -26,7 +26,7 @@
"recipes": { "recipes": {
}, },
"version": "6.0.26", "version": "6.4.1",
"source_url": "https://github.com/sous-chefs/postfix", "source_url": "https://github.com/sous-chefs/postfix",
"issues_url": "https://github.com/sous-chefs/postfix/issues", "issues_url": "https://github.com/sous-chefs/postfix/issues",
"privacy": false, "privacy": false,

View File

@ -3,7 +3,7 @@ maintainer 'Sous Chefs'
maintainer_email 'help@sous-chefs.org' maintainer_email 'help@sous-chefs.org'
license 'Apache-2.0' license 'Apache-2.0'
description 'Installs and configures postfix for client or outbound relayhost, or to do SASL auth' description 'Installs and configures postfix for client or outbound relayhost, or to do SASL auth'
version '6.0.26' version '6.4.1'
source_url 'https://github.com/sous-chefs/postfix' source_url 'https://github.com/sous-chefs/postfix'
issues_url 'https://github.com/sous-chefs/postfix/issues' issues_url 'https://github.com/sous-chefs/postfix/issues'
chef_version '>= 12.15' chef_version '>= 12.15'

View File

@ -29,24 +29,22 @@ end
if node['postfix']['main']['smtp_sasl_auth_enable'] == 'yes' if node['postfix']['main']['smtp_sasl_auth_enable'] == 'yes'
node.default_unless['postfix']['sasl_password_file'] = "#{node['postfix']['conf_dir']}/sasl_passwd" node.default_unless['postfix']['sasl_password_file'] = "#{node['postfix']['conf_dir']}/sasl_passwd"
node.default_unless['postfix']['main']['smtp_sasl_password_maps'] = "hash:#{node['postfix']['sasl_password_file']}" node.default_unless['postfix']['main']['smtp_sasl_password_maps'] = "#{node['postfix']['db_type']}:#{node['postfix']['sasl_password_file']}"
node.default_unless['postfix']['main']['smtp_sasl_security_options'] = 'noanonymous' node.default_unless['postfix']['main']['smtp_sasl_security_options'] = 'noanonymous'
node.default_unless['postfix']['sasl']['smtp_sasl_user_name'] = ''
node.default_unless['postfix']['sasl']['smtp_sasl_passwd'] = ''
node.default_unless['postfix']['main']['relayhost'] = '' node.default_unless['postfix']['main']['relayhost'] = ''
end end
node.default_unless['postfix']['main']['alias_maps'] = ["hash:#{node['postfix']['aliases_db']}"] if node['postfix']['use_alias_maps'] node.default_unless['postfix']['main']['alias_maps'] = ["#{node['postfix']['db_type']}:#{node['postfix']['aliases_db']}"] if node['postfix']['use_alias_maps']
node.default_unless['postfix']['main']['transport_maps'] = ["hash:#{node['postfix']['transport_db']}"] if node['postfix']['use_transport_maps'] node.default_unless['postfix']['main']['transport_maps'] = ["#{node['postfix']['db_type']}:#{node['postfix']['transport_db']}"] if node['postfix']['use_transport_maps']
node.default_unless['postfix']['main']['access_maps'] = ["hash:#{node['postfix']['access_db']}"] if node['postfix']['use_access_maps'] node.default_unless['postfix']['main']['access_maps'] = ["#{node['postfix']['db_type']}:#{node['postfix']['access_db']}"] if node['postfix']['use_access_maps']
node.default_unless['postfix']['main']['virtual_alias_maps'] = ["#{node['postfix']['virtual_alias_db_type']}:#{node['postfix']['virtual_alias_db']}"] if node['postfix']['use_virtual_aliases'] node.default_unless['postfix']['main']['virtual_alias_maps'] = ["#{node['postfix']['virtual_alias_db_type']}:#{node['postfix']['virtual_alias_db']}"] if node['postfix']['use_virtual_aliases']
node.default_unless['postfix']['main']['virtual_alias_domains'] = ["#{node['postfix']['virtual_alias_domains_db_type']}:#{node['postfix']['virtual_alias_domains_db']}"] if node['postfix']['use_virtual_aliases_domains'] node.default_unless['postfix']['main']['virtual_alias_domains'] = ["#{node['postfix']['virtual_alias_domains_db_type']}:#{node['postfix']['virtual_alias_domains_db']}"] if node['postfix']['use_virtual_aliases_domains']
node.default_unless['postfix']['main']['smtpd_relay_restrictions'] = "hash:#{node['postfix']['relay_restrictions_db']}, reject" if node['postfix']['use_relay_restrictions_maps'] node.default_unless['postfix']['main']['smtpd_relay_restrictions'] = "#{node['postfix']['db_type']}:#{node['postfix']['relay_restrictions_db']}, reject" if node['postfix']['use_relay_restrictions_maps']
node.default_unless['postfix']['main']['maildrop_destination_recipient_limit'] = 1 if node['postfix']['master']['maildrop']['active'] node.default_unless['postfix']['main']['maildrop_destination_recipient_limit'] = 1 if node['postfix']['master']['maildrop']['active']

View File

@ -155,7 +155,7 @@ unless node['postfix']['sender_canonical_map_entries'].empty?
notifies :reload, 'service[postfix]' notifies :reload, 'service[postfix]'
end end
node.default['postfix']['main']['sender_canonical_maps'] = "hash:#{node['postfix']['conf_dir']}/sender_canonical" unless node['postfix']['main'].key?('sender_canonical_maps') node.default['postfix']['main']['sender_canonical_maps'] = "#{node['postfix']['db_type']}:#{node['postfix']['conf_dir']}/sender_canonical" unless node['postfix']['main'].key?('sender_canonical_maps')
end end
execute 'update-postfix-smtp_generic' do execute 'update-postfix-smtp_generic' do
@ -172,7 +172,7 @@ unless node['postfix']['smtp_generic_map_entries'].empty?
notifies :reload, 'service[postfix]' notifies :reload, 'service[postfix]'
end end
node.default['postfix']['main']['smtp_generic_maps'] = "hash:#{node['postfix']['conf_dir']}/smtp_generic" unless node['postfix']['main'].key?('smtp_generic_maps') node.default['postfix']['main']['smtp_generic_maps'] = "#{node['postfix']['db_type']}:#{node['postfix']['conf_dir']}/smtp_generic" unless node['postfix']['main'].key?('smtp_generic_maps')
end end
execute 'update-postfix-recipient_canonical' do execute 'update-postfix-recipient_canonical' do
@ -189,7 +189,7 @@ unless node['postfix']['recipient_canonical_map_entries'].empty?
notifies :reload, 'service[postfix]' notifies :reload, 'service[postfix]'
end end
node.default['postfix']['main']['recipient_canonical_maps'] = "hash:#{node['postfix']['conf_dir']}/recipient_canonical" unless node['postfix']['main'].key?('recipient_canonical_maps') node.default['postfix']['main']['recipient_canonical_maps'] = "#{node['postfix']['db_type']}:#{node['postfix']['conf_dir']}/recipient_canonical" unless node['postfix']['main'].key?('recipient_canonical_maps')
end end
service 'postfix' do service 'postfix' do

View File

@ -18,8 +18,8 @@ node['postfix']['maps'].each do |type, maps|
package "postfix-#{type}" if %w(pgsql mysql ldap cdb).include?(type) package "postfix-#{type}" if %w(pgsql mysql ldap cdb).include?(type)
end end
if platform?('redhat') && node['platform_version'].to_i == 8 if platform_family?('rhel') && node['platform_version'].to_i >= 8
package "postfix-#{type}" if %w(pgsql mysql ldap cdb).include?(type) package "postfix-#{type}" if %w(pgsql mysql ldap cdb lmdb).include?(type)
end end
separator = if %w(pgsql mysql ldap memcache sqlite).include?(type) separator = if %w(pgsql mysql ldap memcache sqlite).include?(type)
@ -32,7 +32,7 @@ node['postfix']['maps'].each do |type, maps|
command "postmap #{file}" command "postmap #{file}"
environment PATH: "#{ENV['PATH']}:/opt/omni/bin:/opt/omni/sbin" if platform_family?('omnios') environment PATH: "#{ENV['PATH']}:/opt/omni/bin:/opt/omni/sbin" if platform_family?('omnios')
action :nothing action :nothing
end if %w(btree cdb dbm hash sdbm).include?(type) end if %w(btree cdb dbm hash lmdb sdbm).include?(type)
template "#{file}-#{type}" do template "#{file}-#{type}" do
path file path file
source 'maps.erb' source 'maps.erb'
@ -41,7 +41,7 @@ node['postfix']['maps'].each do |type, maps|
map: content, map: content,
separator: separator separator: separator
) )
notifies :run, "execute[update-postmap-#{file}]" if %w(btree cdb dbm hash sdbm).include?(type) notifies :run, "execute[update-postmap-#{file}]" if %w(btree cdb dbm hash lmdb sdbm).include?(type)
notifies :restart, 'service[postfix]' notifies :restart, 'service[postfix]'
end end
end end

View File

@ -1,9 +1,10 @@
{ {
"$schema": "https://docs.renovatebot.com/renovate-schema.json", "$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:base"], "extends": ["config:base"],
"packageRules": [{ "packageRules": [
{
"groupName": "Actions", "groupName": "Actions",
"matchUpdateTypes": ["patch", "pin", "digest"], "matchUpdateTypes": ["minor", "patch", "pin"],
"automerge": true, "automerge": true,
"addLabels": ["Release: Patch", "Skip: Announcements"] "addLabels": ["Release: Patch", "Skip: Announcements"]
}, },

View File

@ -6,5 +6,5 @@
postmaster: root postmaster: root
<% node['postfix']['aliases'].each do |name, value| %> <% node['postfix']['aliases'].each do |name, value| %>
<%= name %>: <%= [value].flatten.map{|x| if (x.include?("@")) then x else %Q("#{x}") end}.join(', ') %> <%= name.match?(/[\s#:@]/) ? "\"#{name}\"" : name %>: <%= [value].flatten.map{|x| x.include?("|") ? "\"#{x}\"" : x}.join(',') %>
<% end unless node['postfix']['aliases'].nil? %> <% end unless node['postfix']['aliases'].nil? %>

15
doc/mastodon.md Normal file
View File

@ -0,0 +1,15 @@
# Mastodon
Running on kosmos.social
## Ops
### Enable maintance mode
Return a 503 and maintance page for all requests:
knife ssh -p2222 -a knife_zero.host "role:openresty_proxy" "sudo cp -p /var/www/maintenance.html /var/www/kosmos.social/public/ && sudo systemctl reload openresty"
### Stop maintenance mode
knife ssh -p2222 -a knife_zero.host "role:openresty_proxy" "sudo rm /var/www/kosmos.social/public/maintenance.html && sudo systemctl reload openresty"

View File

@ -105,20 +105,33 @@
}, },
"strfry": { "strfry": {
"domain": "nostr.kosmos.org", "domain": "nostr.kosmos.org",
"real_ip_header": "x-real-ip", "config": {
"policy_path": "/opt/strfry/strfry-policy.ts", "events": {
"known_pubkeys": { "max_event_size": "524288"
"_": "b3e1b7c0ef48294bd856203bfd460625de95d3afb894e5f09b14cd1f0e7097cf",
"accounts": "b3e1b7c1660b7db0ecb93ec55c09e67961171a5c4e9e2602f1b47477ea61c50a",
"bitcoincore": "47750177bb6bb113784e4973f6b2e3dd27ef1eff227d6e38d0046d618969e41a",
"fiatjaf": "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d"
}, },
"relay": {
"bind": "0.0.0.0",
"real_ip_header": "x-real-ip",
"info": { "info": {
"name": "Kosmos Relay", "name": "Kosmos Relay",
"description": "Members-only nostr relay for kosmos.org users", "description": "Members-only nostr relay for kosmos.org users",
"pubkey": "b3e1b7c0ef48294bd856203bfd460625de95d3afb894e5f09b14cd1f0e7097cf", "pubkey": "b3e1b7c0ef48294bd856203bfd460625de95d3afb894e5f09b14cd1f0e7097cf",
"contact": "ops@kosmos.org", "contact": "ops@kosmos.org",
"icon": "https://assets.kosmos.org/img/app-icon-256px.png" "icon": "https://assets.kosmos.org/img/app-icon-256px.png"
},
"write_policy": {
"plugin": "/opt/strfry/strfry-policy.ts"
},
"logging": {
"dump_in_all": true
}
}
},
"known_pubkeys": {
"_": "b3e1b7c0ef48294bd856203bfd460625de95d3afb894e5f09b14cd1f0e7097cf",
"accounts": "b3e1b7c1660b7db0ecb93ec55c09e67961171a5c4e9e2602f1b47477ea61c50a",
"bitcoincore": "47750177bb6bb113784e4973f6b2e3dd27ef1eff227d6e38d0046d618969e41a",
"fiatjaf": "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d"
} }
}, },
"substr": { "substr": {

View File

@ -9,7 +9,7 @@
"automatic": { "automatic": {
"fqdn": "akkounts-1", "fqdn": "akkounts-1",
"os": "linux", "os": "linux",
"os_version": "5.4.0-148-generic", "os_version": "5.4.0-223-generic",
"hostname": "akkounts-1", "hostname": "akkounts-1",
"ipaddress": "192.168.122.160", "ipaddress": "192.168.122.160",
"roles": [ "roles": [
@ -38,6 +38,7 @@
"timezone_iii::debian", "timezone_iii::debian",
"ntp::default", "ntp::default",
"ntp::apparmor", "ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails", "kosmos-base::systemd_emails",
"apt::unattended-upgrades", "apt::unattended-upgrades",
"kosmos-base::firewall", "kosmos-base::firewall",

View File

@ -44,6 +44,7 @@
"timezone_iii::debian", "timezone_iii::debian",
"ntp::default", "ntp::default",
"ntp::apparmor", "ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails", "kosmos-base::systemd_emails",
"apt::unattended-upgrades", "apt::unattended-upgrades",
"kosmos-base::firewall", "kosmos-base::firewall",

View File

@ -81,6 +81,7 @@
"timezone_iii::debian", "timezone_iii::debian",
"ntp::default", "ntp::default",
"ntp::apparmor", "ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails", "kosmos-base::systemd_emails",
"apt::unattended-upgrades", "apt::unattended-upgrades",
"kosmos-base::firewall", "kosmos-base::firewall",

View File

@ -8,26 +8,27 @@
"automatic": { "automatic": {
"fqdn": "drone-1", "fqdn": "drone-1",
"os": "linux", "os": "linux",
"os_version": "5.4.0-1058-kvm", "os_version": "5.4.0-1133-kvm",
"hostname": "drone-1", "hostname": "drone-1",
"ipaddress": "192.168.122.200", "ipaddress": "192.168.122.200",
"roles": [ "roles": [
"kvm_guest",
"drone", "drone",
"postgresql_client", "postgresql_client"
"kvm_guest"
], ],
"recipes": [ "recipes": [
"kosmos-base", "kosmos-base",
"kosmos-base::default", "kosmos-base::default",
"kosmos_kvm::guest",
"kosmos_postgresql::hostsfile", "kosmos_postgresql::hostsfile",
"kosmos_drone", "kosmos_drone",
"kosmos_drone::default", "kosmos_drone::default",
"kosmos_kvm::guest",
"apt::default", "apt::default",
"timezone_iii::default", "timezone_iii::default",
"timezone_iii::debian", "timezone_iii::debian",
"ntp::default", "ntp::default",
"ntp::apparmor", "ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails", "kosmos-base::systemd_emails",
"apt::unattended-upgrades", "apt::unattended-upgrades",
"kosmos-base::firewall", "kosmos-base::firewall",
@ -43,13 +44,13 @@
"cloud": null, "cloud": null,
"chef_packages": { "chef_packages": {
"chef": { "chef": {
"version": "17.9.52", "version": "18.7.10",
"chef_root": "/opt/chef/embedded/lib/ruby/gems/3.0.0/gems/chef-17.9.52/lib", "chef_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/chef-18.7.10/lib",
"chef_effortless": null "chef_effortless": null
}, },
"ohai": { "ohai": {
"version": "17.9.0", "version": "18.2.5",
"ohai_root": "/opt/chef/embedded/lib/ruby/gems/3.0.0/gems/ohai-17.9.0/lib/ohai" "ohai_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/ohai-18.2.5/lib/ohai"
} }
} }
}, },

View File

@ -37,6 +37,7 @@
"timezone_iii::debian", "timezone_iii::debian",
"ntp::default", "ntp::default",
"ntp::apparmor", "ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails", "kosmos-base::systemd_emails",
"apt::unattended-upgrades", "apt::unattended-upgrades",
"kosmos-base::firewall", "kosmos-base::firewall",

View File

@ -37,6 +37,7 @@
"timezone_iii::debian", "timezone_iii::debian",
"ntp::default", "ntp::default",
"ntp::apparmor", "ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails", "kosmos-base::systemd_emails",
"apt::unattended-upgrades", "apt::unattended-upgrades",
"kosmos-base::firewall", "kosmos-base::firewall",

View File

@ -75,6 +75,7 @@
"timezone_iii::debian", "timezone_iii::debian",
"ntp::default", "ntp::default",
"ntp::apparmor", "ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails", "kosmos-base::systemd_emails",
"apt::unattended-upgrades", "apt::unattended-upgrades",
"kosmos-base::firewall", "kosmos-base::firewall",

65
nodes/garage-12.json Normal file
View File

@ -0,0 +1,65 @@
{
"name": "garage-12",
"chef_environment": "production",
"normal": {
"knife_zero": {
"host": "10.1.1.224"
}
},
"automatic": {
"fqdn": "garage-12",
"os": "linux",
"os_version": "5.15.0-1059-kvm",
"hostname": "garage-12",
"ipaddress": "192.168.122.173",
"roles": [
"base",
"kvm_guest",
"garage_node"
],
"recipes": [
"kosmos-base",
"kosmos-base::default",
"kosmos_kvm::guest",
"kosmos_garage",
"kosmos_garage::default",
"kosmos_garage::firewall_rpc",
"kosmos_garage::firewall_apis",
"apt::default",
"timezone_iii::default",
"timezone_iii::debian",
"ntp::default",
"ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails",
"apt::unattended-upgrades",
"kosmos-base::firewall",
"kosmos-postfix::default",
"postfix::default",
"postfix::_common",
"postfix::_attributes",
"postfix::sasl_auth",
"hostname::default",
"firewall::default"
],
"platform": "ubuntu",
"platform_version": "22.04",
"cloud": null,
"chef_packages": {
"chef": {
"version": "18.7.10",
"chef_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/chef-18.7.10/lib",
"chef_effortless": null
},
"ohai": {
"version": "18.2.5",
"ohai_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/ohai-18.2.5/lib/ohai"
}
}
},
"run_list": [
"role[base]",
"role[kvm_guest]",
"role[garage_node]"
]
}

65
nodes/garage-13.json Normal file
View File

@ -0,0 +1,65 @@
{
"name": "garage-13",
"chef_environment": "production",
"normal": {
"knife_zero": {
"host": "10.1.1.179"
}
},
"automatic": {
"fqdn": "garage-13",
"os": "linux",
"os_version": "5.15.0-1059-kvm",
"hostname": "garage-13",
"ipaddress": "192.168.122.27",
"roles": [
"base",
"kvm_guest",
"garage_node"
],
"recipes": [
"kosmos-base",
"kosmos-base::default",
"kosmos_kvm::guest",
"kosmos_garage",
"kosmos_garage::default",
"kosmos_garage::firewall_rpc",
"kosmos_garage::firewall_apis",
"apt::default",
"timezone_iii::default",
"timezone_iii::debian",
"ntp::default",
"ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails",
"apt::unattended-upgrades",
"kosmos-base::firewall",
"kosmos-postfix::default",
"postfix::default",
"postfix::_common",
"postfix::_attributes",
"postfix::sasl_auth",
"hostname::default",
"firewall::default"
],
"platform": "ubuntu",
"platform_version": "22.04",
"cloud": null,
"chef_packages": {
"chef": {
"version": "18.7.10",
"chef_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/chef-18.7.10/lib",
"chef_effortless": null
},
"ohai": {
"version": "18.2.5",
"ohai_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/ohai-18.2.5/lib/ohai"
}
}
},
"run_list": [
"role[base]",
"role[kvm_guest]",
"role[garage_node]"
]
}

64
nodes/garage-14.json Normal file
View File

@ -0,0 +1,64 @@
{
"name": "garage-14",
"chef_environment": "production",
"normal": {
"knife_zero": {
"host": "10.1.1.157"
}
},
"automatic": {
"fqdn": "garage-14",
"os": "linux",
"os_version": "5.15.0-1059-kvm",
"hostname": "garage-14",
"ipaddress": "192.168.122.251",
"roles": [
"base",
"kvm_guest",
"garage_node"
],
"recipes": [
"kosmos-base",
"kosmos-base::default",
"kosmos_kvm::guest",
"kosmos_garage",
"kosmos_garage::default",
"kosmos_garage::firewall_rpc",
"kosmos_garage::firewall_apis",
"apt::default",
"timezone_iii::default",
"timezone_iii::debian",
"ntp::default",
"ntp::apparmor",
"kosmos-base::systemd_emails",
"apt::unattended-upgrades",
"kosmos-base::firewall",
"kosmos-postfix::default",
"postfix::default",
"postfix::_common",
"postfix::_attributes",
"postfix::sasl_auth",
"hostname::default",
"firewall::default"
],
"platform": "ubuntu",
"platform_version": "22.04",
"cloud": null,
"chef_packages": {
"chef": {
"version": "18.8.54",
"chef_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/chef-18.8.54/lib",
"chef_effortless": null
},
"ohai": {
"version": "18.2.8",
"ohai_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/ohai-18.2.8/lib/ohai"
}
}
},
"run_list": [
"role[base]",
"role[kvm_guest]",
"role[garage_node]"
]
}

View File

@ -39,6 +39,7 @@
"timezone_iii::debian", "timezone_iii::debian",
"ntp::default", "ntp::default",
"ntp::apparmor", "ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails", "kosmos-base::systemd_emails",
"apt::unattended-upgrades", "apt::unattended-upgrades",
"kosmos-base::firewall", "kosmos-base::firewall",
@ -49,6 +50,13 @@
"postfix::sasl_auth", "postfix::sasl_auth",
"hostname::default", "hostname::default",
"firewall::default", "firewall::default",
"kosmos_gitea::compile_from_source",
"git::default",
"git::package",
"kosmos-nodejs::default",
"nodejs::nodejs_from_package",
"nodejs::repo",
"golang::default",
"backup::default", "backup::default",
"logrotate::default" "logrotate::default"
], ],

View File

@ -37,6 +37,7 @@
"timezone_iii::debian", "timezone_iii::debian",
"ntp::default", "ntp::default",
"ntp::apparmor", "ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails", "kosmos-base::systemd_emails",
"apt::unattended-upgrades", "apt::unattended-upgrades",
"kosmos-base::firewall", "kosmos-base::firewall",

View File

@ -1,17 +1,17 @@
{ {
"name": "postgres-7", "name": "postgres-9",
"chef_environment": "production", "chef_environment": "production",
"normal": { "normal": {
"knife_zero": { "knife_zero": {
"host": "10.1.1.134" "host": "10.1.1.3"
} }
}, },
"automatic": { "automatic": {
"fqdn": "postgres-7", "fqdn": "postgres-9",
"os": "linux", "os": "linux",
"os_version": "5.4.0-1123-kvm", "os_version": "5.15.0-1059-kvm",
"hostname": "postgres-7", "hostname": "postgres-9",
"ipaddress": "192.168.122.89", "ipaddress": "192.168.122.64",
"roles": [ "roles": [
"base", "base",
"kvm_guest", "kvm_guest",
@ -29,6 +29,7 @@
"timezone_iii::debian", "timezone_iii::debian",
"ntp::default", "ntp::default",
"ntp::apparmor", "ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails", "kosmos-base::systemd_emails",
"apt::unattended-upgrades", "apt::unattended-upgrades",
"kosmos-base::firewall", "kosmos-base::firewall",
@ -40,17 +41,17 @@
"hostname::default" "hostname::default"
], ],
"platform": "ubuntu", "platform": "ubuntu",
"platform_version": "20.04", "platform_version": "22.04",
"cloud": null, "cloud": null,
"chef_packages": { "chef_packages": {
"chef": { "chef": {
"version": "18.5.0", "version": "18.8.54",
"chef_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/chef-18.5.0/lib", "chef_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/chef-18.8.54/lib",
"chef_effortless": null "chef_effortless": null
}, },
"ohai": { "ohai": {
"version": "18.1.11", "version": "18.2.8",
"ohai_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/ohai-18.1.11/lib/ohai" "ohai_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/ohai-18.2.8/lib/ohai"
} }
} }
}, },

View File

@ -33,6 +33,7 @@
"timezone_iii::debian", "timezone_iii::debian",
"ntp::default", "ntp::default",
"ntp::apparmor", "ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails", "kosmos-base::systemd_emails",
"apt::unattended-upgrades", "apt::unattended-upgrades",
"kosmos-base::firewall", "kosmos-base::firewall",

View File

@ -28,6 +28,7 @@
"timezone_iii::debian", "timezone_iii::debian",
"ntp::default", "ntp::default",
"ntp::apparmor", "ntp::apparmor",
"kosmos-base::journald_conf",
"kosmos-base::systemd_emails", "kosmos-base::systemd_emails",
"apt::unattended-upgrades", "apt::unattended-upgrades",
"kosmos-base::firewall", "kosmos-base::firewall",
@ -66,12 +67,13 @@
"cloud": null, "cloud": null,
"chef_packages": { "chef_packages": {
"chef": { "chef": {
"version": "15.13.8", "version": "18.7.10",
"chef_root": "/opt/chef/embedded/lib/ruby/gems/2.6.0/gems/chef-15.13.8/lib" "chef_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/chef-18.7.10/lib",
"chef_effortless": null
}, },
"ohai": { "ohai": {
"version": "15.12.0", "version": "18.2.5",
"ohai_root": "/opt/chef/embedded/lib/ruby/gems/2.6.0/gems/ohai-15.12.0/lib/ohai" "ohai_root": "/opt/chef/embedded/lib/ruby/gems/3.1.0/gems/ohai-18.2.5/lib/ohai"
} }
} }
}, },

View File

@ -5,3 +5,11 @@ run_list %w(
kosmos_gitea::default kosmos_gitea::default
kosmos_gitea::backup kosmos_gitea::backup
) )
override_attributes(
"gitea" => {
"repo" => "https://github.com/67P/gitea.git",
"revision" => "ldap_sync",
"log" => { "level" => "Info" }
},
)

@ -1 +1 @@
Subproject commit 5ddfe642ebb14b20480e4e2d06199fc01ba9ca71 Subproject commit 92839b20a4c3b0a15b99bd86ea7cae16645570a6

View File

@ -0,0 +1,2 @@
node.default["kosmos-base"]["journald"]["system_max_use"] = "256M"
node.default["kosmos-base"]["journald"]["max_retention_sec"] = "7d"

View File

@ -1,52 +0,0 @@
#
# Cookbook Name:: kosmos-base
# Recipe:: andromeda_firewall
#
# The MIT License (MIT)
#
# Copyright:: 2019, Kosmos Developers
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
# Temporary extra rules for Andromeda
firewall_rule 'bitcoind' do
port [8333, 8334, 8335]
protocol :tcp
command :allow
end
firewall_rule 'lnd' do
port [9736]
# port [9736, 8002]
protocol :tcp
command :allow
end
firewall_rule 'lightningd' do
port [9735]
protocol :tcp
command :allow
end
firewall_rule 'spark_wallet' do
port 8008
protocol :tcp
command :allow
end

View File

@ -27,11 +27,19 @@
include_recipe 'apt' include_recipe 'apt'
include_recipe 'timezone_iii' include_recipe 'timezone_iii'
include_recipe 'ntp' include_recipe 'ntp'
include_recipe 'kosmos-base::journald_conf'
include_recipe 'kosmos-base::systemd_emails' include_recipe 'kosmos-base::systemd_emails'
node.override["apt"]["unattended_upgrades"]["enable"] = true
node.override["apt"]["unattended_upgrades"]["mail_only_on_error"] = false
node.override["apt"]["unattended_upgrades"]["sender"] = "ops@kosmos.org"
node.override["apt"]["unattended_upgrades"]["allowed_origins"] = [ node.override["apt"]["unattended_upgrades"]["allowed_origins"] = [
"${distro_id}:${distro_codename}-security", "${distro_id}:${distro_codename}-security",
"${distro_id}:${distro_codename}-updates" "${distro_id}:${distro_codename}-updates",
"${distro_id}ESMApps:${distro_codename}-apps-security",
"${distro_id}ESMApps:${distro_codename}-apps-updates",
"${distro_id}ESM:${distro_codename}-infra-security",
"${distro_id}ESM:${distro_codename}-infra-updates"
] ]
node.override["apt"]["unattended_upgrades"]["mail"] = "ops@kosmos.org" node.override["apt"]["unattended_upgrades"]["mail"] = "ops@kosmos.org"
node.override["apt"]["unattended_upgrades"]["syslog_enable"] = true node.override["apt"]["unattended_upgrades"]["syslog_enable"] = true

View File

@ -0,0 +1,14 @@
#
# Cookbook Name:: kosmos-base
# Recipe:: journald_conf
#
service "systemd-journald"
template "/etc/systemd/journald.conf" do
source "journald.conf.erb"
variables system_max_use: node["kosmos-base"]["journald"]["system_max_use"],
max_retention_sec: node["kosmos-base"]["journald"]["max_retention_sec"]
# Restarting journald is required
notifies :restart, "service[systemd-journald]", :delayed
end

View File

@ -0,0 +1,6 @@
[Journal]
# Set the maximum size of the journal logs in bytes
SystemMaxUse=<%= @system_max_use %>
# Set the number of days after which logs will be deleted
MaxRetentionSec=<%= @max_retention_sec %>

View File

@ -1,5 +1,5 @@
node.default['bitcoin']['version'] = '28.0' node.default['bitcoin']['version'] = '30.0'
node.default['bitcoin']['checksum'] = '700ae2d1e204602eb07f2779a6e6669893bc96c0dca290593f80ff8e102ff37f' node.default['bitcoin']['checksum'] = '9b472a4d51dfed9aa9d0ded2cb8c7bcb9267f8439a23a98f36eb509c1a5e6974'
node.default['bitcoin']['username'] = 'satoshi' node.default['bitcoin']['username'] = 'satoshi'
node.default['bitcoin']['usergroup'] = 'bitcoin' node.default['bitcoin']['usergroup'] = 'bitcoin'
node.default['bitcoin']['network'] = 'mainnet' node.default['bitcoin']['network'] = 'mainnet'
@ -41,7 +41,7 @@ node.default['c-lightning']['log_level'] = 'info'
node.default['c-lightning']['public_ip'] = '148.251.237.73' node.default['c-lightning']['public_ip'] = '148.251.237.73'
node.default['lnd']['repo'] = 'https://github.com/lightningnetwork/lnd' node.default['lnd']['repo'] = 'https://github.com/lightningnetwork/lnd'
node.default['lnd']['revision'] = 'v0.18.5-beta' node.default['lnd']['revision'] = 'v0.19.1-beta'
node.default['lnd']['source_dir'] = '/opt/lnd' node.default['lnd']['source_dir'] = '/opt/lnd'
node.default['lnd']['lnd_dir'] = "/home/#{node['bitcoin']['username']}/.lnd" node.default['lnd']['lnd_dir'] = "/home/#{node['bitcoin']['username']}/.lnd"
node.default['lnd']['alias'] = 'ln2.kosmos.org' node.default['lnd']['alias'] = 'ln2.kosmos.org'
@ -90,7 +90,7 @@ node.default['dotnet']['ms_packages_src_url'] = "https://packages.microsoft.com/
node.default['dotnet']['ms_packages_src_checksum'] = "4df5811c41fdded83eb9e2da9336a8dfa5594a79dc8a80133bd815f4f85b9991" node.default['dotnet']['ms_packages_src_checksum'] = "4df5811c41fdded83eb9e2da9336a8dfa5594a79dc8a80133bd815f4f85b9991"
node.default['nbxplorer']['repo'] = 'https://github.com/dgarage/NBXplorer' node.default['nbxplorer']['repo'] = 'https://github.com/dgarage/NBXplorer'
node.default['nbxplorer']['revision'] = 'v2.5.23' node.default['nbxplorer']['revision'] = 'v2.5.26'
node.default['nbxplorer']['source_dir'] = '/opt/nbxplorer' node.default['nbxplorer']['source_dir'] = '/opt/nbxplorer'
node.default['nbxplorer']['config_path'] = "/home/#{node['bitcoin']['username']}/.nbxplorer/Main/settings.config" node.default['nbxplorer']['config_path'] = "/home/#{node['bitcoin']['username']}/.nbxplorer/Main/settings.config"
node.default['nbxplorer']['port'] = '24445' node.default['nbxplorer']['port'] = '24445'
@ -98,7 +98,7 @@ node.default['nbxplorer']['postgres']['database'] = 'nbxplorer'
node.default['nbxplorer']['postgres']['user'] = 'nbxplorer' node.default['nbxplorer']['postgres']['user'] = 'nbxplorer'
node.default['btcpay']['repo'] = 'https://github.com/btcpayserver/btcpayserver' node.default['btcpay']['repo'] = 'https://github.com/btcpayserver/btcpayserver'
node.default['btcpay']['revision'] = 'v2.0.7' node.default['btcpay']['revision'] = 'v2.1.1'
node.default['btcpay']['source_dir'] = '/opt/btcpay' node.default['btcpay']['source_dir'] = '/opt/btcpay'
node.default['btcpay']['config_path'] = "/home/#{node['bitcoin']['username']}/.btcpayserver/Main/settings.config" node.default['btcpay']['config_path'] = "/home/#{node['bitcoin']['username']}/.btcpayserver/Main/settings.config"
node.default['btcpay']['log_path'] = "/home/#{node['bitcoin']['username']}/.btcpayserver/debug.log" node.default['btcpay']['log_path'] = "/home/#{node['bitcoin']['username']}/.btcpayserver/debug.log"

View File

@ -34,7 +34,7 @@ end
execute "compile_bitcoin-core_dependencies" do execute "compile_bitcoin-core_dependencies" do
cwd "/usr/local/bitcoind/depends" cwd "/usr/local/bitcoind/depends"
environment ({'CC' => 'gcc-13', 'CXX' => 'g++-13', 'NO_QT' => '1'}) environment ({'CC' => 'gcc-13', 'CXX' => 'g++-13', 'NO_QT' => '1'})
command "make -j 2" command "make -j $(($(nproc)/2))"
action :nothing action :nothing
notifies :run, 'bash[compile_bitcoin-core]', :immediately notifies :run, 'bash[compile_bitcoin-core]', :immediately
end end
@ -43,21 +43,13 @@ bash "compile_bitcoin-core" do
cwd "/usr/local/bitcoind" cwd "/usr/local/bitcoind"
environment ({'CC' => 'gcc-13', 'CXX' => 'g++-13', 'NO_QT' => '1'}) environment ({'CC' => 'gcc-13', 'CXX' => 'g++-13', 'NO_QT' => '1'})
code <<-EOH code <<-EOH
./autogen.sh cmake -B build --toolchain depends/x86_64-pc-linux-gnu/toolchain.cmake -DBUILD_TESTS=OFF
./configure --prefix=$PWD/depends/x86_64-pc-linux-gnu cmake --build build -j $(($(nproc)/2))
make cmake --install build
EOH EOH
action :nothing action :nothing
end end
link "/usr/local/bin/bitcoind" do
to "/usr/local/bitcoind/src/bitcoind"
end
link "/usr/local/bin/bitcoin-cli" do
to "/usr/local/bitcoind/src/bitcoin-cli"
end
bitcoin_user = node['bitcoin']['username'] bitcoin_user = node['bitcoin']['username']
bitcoin_group = node['bitcoin']['usergroup'] bitcoin_group = node['bitcoin']['usergroup']
bitcoin_datadir = node['bitcoin']['datadir'] bitcoin_datadir = node['bitcoin']['datadir']

View File

@ -21,6 +21,7 @@ bash 'build_btcpay' do
systemctl stop btcpayserver.service systemctl stop btcpayserver.service
./build.sh ./build.sh
EOH EOH
environment "DOTNET_CLI_TELEMETRY_OPTOUT" => 1
action :nothing action :nothing
notifies :restart, "service[btcpayserver]", :delayed notifies :restart, "service[btcpayserver]", :delayed
end end
@ -87,7 +88,7 @@ systemd_unit 'btcpayserver.service' do
Group: node['bitcoin']['usergroup'], Group: node['bitcoin']['usergroup'],
Type: 'simple', Type: 'simple',
WorkingDirectory: node['btcpay']['source_dir'], WorkingDirectory: node['btcpay']['source_dir'],
Environment: defined?(nbxpg_connect) ? "'BTCPAY_EXPLORERPOSTGRES=#{nbxpg_connect}'" : '', Environment: "'BTCPAY_EXPLORERPOSTGRES=#{nbxpg_connect}' 'DOTNET_CLI_TELEMETRY_OPTOUT=1'",
ExecStart: "#{node['btcpay']['source_dir']}/run.sh --conf=#{node['btcpay']['config_path']}", ExecStart: "#{node['btcpay']['source_dir']}/run.sh --conf=#{node['btcpay']['config_path']}",
PIDFile: '/run/btcpayserver/btcpayserver.pid', PIDFile: '/run/btcpayserver/btcpayserver.pid',
Restart: 'on-failure', Restart: 'on-failure',
@ -103,6 +104,8 @@ systemd_unit 'btcpayserver.service' do
verify false verify false
triggers_reload true triggers_reload true
action [:create] action [:create]
# reload is not applicable
notifies :restart, "service[btcpayserver]", :delayed
end end
service "btcpayserver" do service "btcpayserver" do

View File

@ -1,6 +1,6 @@
node.default["ejabberd"]["version"] = "23.10" node.default["ejabberd"]["version"] = "25.08"
node.default["ejabberd"]["package_version"] = "1" node.default["ejabberd"]["package_version"] = "1"
node.default["ejabberd"]["checksum"] = "1b02108c81e22ab28be84630d54061f0584b76d5c2702e598352269736b05e77" node.default["ejabberd"]["checksum"] = "e4703bc41b5843fc4b76e8b54a9380d5895f9b3dcd4795e05ad0c260ed9b9a23"
node.default["ejabberd"]["turn_domain"] = "turn.kosmos.org" node.default["ejabberd"]["turn_domain"] = "turn.kosmos.org"
node.default["ejabberd"]["stun_auth_realm"] = "kosmos.org" node.default["ejabberd"]["stun_auth_realm"] = "kosmos.org"
node.default["ejabberd"]["stun_turn_port"] = 3478 node.default["ejabberd"]["stun_turn_port"] = 3478

View File

@ -65,15 +65,13 @@ file "/opt/ejabberd/.hosts.erlang" do
content ejabberd_hostnames.map{|h| "#{h}."}.join("\n") content ejabberd_hostnames.map{|h| "#{h}."}.join("\n")
end end
ruby_block "configure ERLANG_NODE" do template "/opt/ejabberd/conf/ejabberdctl.cfg" do
block do source "ejabberdctl.cfg.erb"
file = Chef::Util::FileEdit.new("/opt/ejabberd/conf/ejabberdctl.cfg") mode 0644
file.search_file_replace_line( owner 'ejabberd'
%r{#ERLANG_NODE=ejabberd@localhost}, group 'ejabberd'
"ERLANG_NODE=ejabberd@#{node['name']}" variables epmd_node_name: "ejabberd@#{node['name']}"
) notifies :reload, "service[ejabberd]", :delayed
file.write_file
end
end end
postgresql_data_bag_item = data_bag_item('credentials', 'postgresql') postgresql_data_bag_item = data_bag_item('credentials', 'postgresql')
@ -110,6 +108,7 @@ hosts = [
access_persistent: muc_create access_persistent: muc_create
access_register: muc_create access_register: muc_create
max_user_conferences: 1000 max_user_conferences: 1000
max_users: 2000
default_room_options: default_room_options:
mam: true mam: true
preload_rooms: true preload_rooms: true
@ -224,10 +223,3 @@ end
unless node.chef_environment == "development" unless node.chef_environment == "development"
include_recipe "kosmos-ejabberd::firewall" include_recipe "kosmos-ejabberd::firewall"
end end
firewall_rule 'ejabberd_http' do
port [80]
source "10.1.1.0/24"
protocol :tcp
command :allow
end

View File

@ -35,3 +35,10 @@ firewall_rule 'ejabberd_turn' do
protocol :udp protocol :udp
command :allow command :allow
end end
firewall_rule 'ejabberd_http' do
port [80]
source "10.1.1.0/24"
protocol :tcp
command :allow
end

View File

@ -1,10 +1,11 @@
loglevel: 4
log_rotate_size: 10485760 log_rotate_size: 10485760
log_rotate_date: ""
log_rotate_count: 1 log_rotate_count: 1
log_rate_limit: 100 loglevel: info
hide_sensitive_log_data: true
log_modules_fully:
- mod_s3_upload
hosts: hosts:
<% @hosts.each do |host| -%> <% @hosts.each do |host| -%>
@ -95,6 +96,8 @@ auth_method: sql
default_db: sql default_db: sql
update_sql_schema: true
shaper: shaper:
normal: normal:
rate: 3000 rate: 3000
@ -119,6 +122,15 @@ acl:
- "::1/128" - "::1/128"
- "::FFFF:127.0.0.1/128" - "::FFFF:127.0.0.1/128"
api_permissions:
"webadmin commands":
who:
- admin
from:
- ejabberd_web_admin
what:
- "*"
shaper_rules: shaper_rules:
max_user_sessions: 10 max_user_sessions: 10
max_user_offline_messages: max_user_offline_messages:
@ -185,8 +197,11 @@ api_permissions:
what: what:
- "add_rosteritem" - "add_rosteritem"
- "delete_rosteritem" - "delete_rosteritem"
- "send_message" - "get_vcard2"
- "muc_register_nick"
- "private_set" - "private_set"
- "send_message"
- "send_stanza"
language: "en" language: "en"

View File

@ -0,0 +1,175 @@
#
# In this file you can configure options that are passed by ejabberdctl
# to the erlang runtime system when starting ejabberd
#
#' POLL: Kernel polling ([true|false])
#
# The kernel polling option requires support in the kernel.
# Additionally, you need to enable this feature while compiling Erlang.
#
# Default: true
#
#POLL=true
#.
#' SMP: SMP support ([enable|auto|disable])
#
# Explanation in Erlang/OTP documentation:
# enable: starts the Erlang runtime system with SMP support enabled.
# This may fail if no runtime system with SMP support is available.
# auto: starts the Erlang runtime system with SMP support enabled if it
# is available and more than one logical processor are detected.
# disable: starts a runtime system without SMP support.
#
# Default: enable
#
#SMP=enable
#.
#' ERL_MAX_PORTS: Maximum number of simultaneously open Erlang ports
#
# ejabberd consumes two or three ports for every connection, either
# from a client or from another Jabber server. So take this into
# account when setting this limit.
#
# Default: 32000
# Maximum: 268435456
#
#ERL_MAX_PORTS=32000
#.
#' FIREWALL_WINDOW: Range of allowed ports to pass through a firewall
#
# If Ejabberd is configured to run in cluster, and a firewall is blocking ports,
# it's possible to make Erlang use a defined range of port (instead of dynamic
# ports) for node communication.
#
# Default: not defined
# Example: 4200-4210
#
FIREWALL_WINDOW=4200-4210
#.
#' INET_DIST_INTERFACE: IP address where this Erlang node listens other nodes
#
# This communication is used by ejabberdctl command line tool,
# and in a cluster of several ejabberd nodes.
#
# Default: 0.0.0.0
#
#INET_DIST_INTERFACE=127.0.0.1
#.
#' ERL_EPMD_ADDRESS: IP addresses where epmd listens for connections
#
# IMPORTANT: This option works only in Erlang/OTP R14B03 and newer.
#
# This environment variable may be set to a comma-separated
# list of IP addresses, in which case the epmd daemon
# will listen only on the specified address(es) and on the
# loopback address (which is implicitly added to the list if it
# has not been specified). The default behaviour is to listen on
# all available IP addresses.
#
# Default: 0.0.0.0
#
#ERL_EPMD_ADDRESS=127.0.0.1
#.
#' ERL_PROCESSES: Maximum number of Erlang processes
#
# Erlang consumes a lot of lightweight processes. If there is a lot of activity
# on ejabberd so that the maximum number of processes is reached, people will
# experience greater latency times. As these processes are implemented in
# Erlang, and therefore not related to the operating system processes, you do
# not have to worry about allowing a huge number of them.
#
# Default: 250000
# Maximum: 268435456
#
#ERL_PROCESSES=250000
#.
#' ERL_MAX_ETS_TABLES: Maximum number of ETS and Mnesia tables
#
# The number of concurrent ETS and Mnesia tables is limited. When the limit is
# reached, errors will appear in the logs:
# ** Too many db tables **
# You can safely increase this limit when starting ejabberd. It impacts memory
# consumption but the difference will be quite small.
#
# Default: 1400
#
#ERL_MAX_ETS_TABLES=1400
#.
#' ERL_OPTIONS: Additional Erlang options
#
# The next variable allows to specify additional options passed to erlang while
# starting ejabberd. Some useful options are -noshell, -detached, -heart. When
# ejabberd is started from an init.d script options -noshell and -detached are
# added implicitly. See erl(1) for more info.
#
# It might be useful to add "-pa /usr/local/lib/ejabberd/ebin" if you
# want to add local modules in this path.
#
# Default: ""
#
#ERL_OPTIONS=""
#.
#' ERLANG_NODE: Erlang node name
#
# The next variable allows to explicitly specify erlang node for ejabberd
# It can be given in different formats:
# ERLANG_NODE=ejabberd
# Lets erlang add hostname to the node (ejabberd uses short name in this case)
# ERLANG_NODE=ejabberd@hostname
# Erlang uses node name as is (so make sure that hostname is a real
# machine hostname or you'll not be able to control ejabberd)
# ERLANG_NODE=ejabberd@hostname.domainname
# The same as previous, but erlang will use long hostname
# (see erl (1) manual for details)
#
# Default: ejabberd@localhost
#
ERLANG_NODE=<%= @epmd_node_name %>
#.
#' EJABBERD_PID_PATH: ejabberd PID file
#
# Indicate the full path to the ejabberd Process identifier (PID) file.
# If this variable is defined, ejabberd writes the PID file when starts,
# and deletes it when stops.
# Remember to create the directory and grant write permission to ejabberd.
#
# Default: don't write PID file
#
#EJABBERD_PID_PATH=/var/run/ejabberd/ejabberd.pid
#.
#' CONTRIB_MODULES_PATH: contributed ejabberd modules path
#
# Specify the full path to the contributed ejabberd modules. If the path is not
# defined, ejabberd will use ~/.ejabberd-modules in home of user running ejabberd.
#
# Default: $HOME/.ejabberd-modules
#
#CONTRIB_MODULES_PATH=/opt/ejabberd-modules
#.
#' CONTRIB_MODULES_CONF_DIR: configuration directory for contributed modules
#
# Specify the full path to the configuration directory for contributed ejabberd
# modules. In order to configure a module named mod_foo, a mod_foo.yml file can
# be created in this directory. This file will then be used instead of the
# default configuration file provided with the module.
#
# Default: $CONTRIB_MODULES_PATH/conf
#
#CONTRIB_MODULES_CONF_DIR=/etc/ejabberd/modules
#.
#'
# vim: foldmarker=#',#. foldmethod=marker:

View File

@ -265,6 +265,44 @@ service "mastodon-streaming" do
action [:enable, :start] action [:enable, :start]
end end
#
# Delete cached remote media older than 30 days
# Will be re-fetched if necessary
#
systemd_unit 'mastodon-delete-old-media-cache.service' do
content({
Unit: {
Description: 'Delete old Mastodon media cache'
},
Service: {
Type: "oneshot",
WorkingDirectory: mastodon_path,
Environment: "RAILS_ENV=#{rails_env}",
ExecStart: "#{bundle_path} exec bin/tootctl media remove --days 30",
}
})
triggers_reload true
action [:create]
end
systemd_unit 'mastodon-delete-old-media-cache.timer' do
content({
Unit: {
Description: 'Delete old Mastodon media cache'
},
Timer: {
OnCalendar: '*-*-* 00:00:00',
Persistent: 'true'
},
Install: {
WantedBy: 'timer.target'
}
})
triggers_reload true
action [:create, :enable, :start]
end
firewall_rule "mastodon_app" do firewall_rule "mastodon_app" do
port node['kosmos-mastodon']['app_port'] port node['kosmos-mastodon']['app_port']
source "10.1.1.0/24" source "10.1.1.0/24"

View File

@ -3,7 +3,6 @@ maintainer 'Kosmos'
maintainer_email 'mail@kosmos.org' maintainer_email 'mail@kosmos.org'
license 'MIT' license 'MIT'
description 'Installs/Configures kosmos-mediawiki' description 'Installs/Configures kosmos-mediawiki'
long_description IO.read(File.join(File.dirname(__FILE__), 'README.md'))
version '0.3.1' version '0.3.1'
depends "mediawiki" depends "mediawiki"

View File

@ -1,9 +1,9 @@
# #
# Cookbook Name:: kosmos-mediawiki # Cookbook:: kosmos-mediawiki
# Recipe:: default # Recipe:: default.rb
# #
include_recipe 'apt' apt_update
include_recipe 'ark' include_recipe 'ark'
include_recipe 'composer' include_recipe 'composer'
@ -30,14 +30,14 @@ directory "#{node['mediawiki']['webdir']}/skins/common/images" do
owner node['nginx']['user'] owner node['nginx']['user']
group node['nginx']['group'] group node['nginx']['group']
recursive true recursive true
mode 0750 mode "750"
end end
cookbook_file "#{node['mediawiki']['webdir']}/skins/common/images/kosmos.png" do cookbook_file "#{node['mediawiki']['webdir']}/skins/common/images/kosmos.png" do
source 'kosmos.png' source 'kosmos.png'
owner node['nginx']['user'] owner node['nginx']['user']
group node['nginx']['group'] group node['nginx']['group']
mode 0640 mode "640"
end end
directory "#{node['mediawiki']['webdir']}/.well-known/acme-challenge" do directory "#{node['mediawiki']['webdir']}/.well-known/acme-challenge" do
@ -80,14 +80,14 @@ nginx_certbot_site server_name
# Extensions # Extensions
# #
mediawiki_credentials = Chef::EncryptedDataBagItem.load('credentials', 'mediawiki') mediawiki_credentials = data_bag_item('credentials', 'mediawiki')
# #
# MediawikiHubot extension # MediawikiHubot extension
# #
# requires curl extension # requires curl extension
if platform?('ubuntu') && node[:platform_version].to_f < 16.04 if platform?('ubuntu') && node["platform_version"].to_f < 16.04
package "php5-curl" package "php5-curl"
else else
package "php-curl" package "php-curl"
@ -100,7 +100,7 @@ ark "MediawikiHubot" do
action :cherry_pick action :cherry_pick
end end
hubot_credentials = Chef::EncryptedDataBagItem.load('credentials', 'hal8000_xmpp') hubot_credentials = data_bag_item('credentials', 'hal8000_xmpp')
webhook_token = hubot_credentials['webhook_token'] webhook_token = hubot_credentials['webhook_token']
template "#{node['mediawiki']['webdir']}/extensions/MediawikiHubot/DefaultConfig.php" do template "#{node['mediawiki']['webdir']}/extensions/MediawikiHubot/DefaultConfig.php" do
@ -145,7 +145,7 @@ end
ruby_block "configuration" do ruby_block "configuration" do
block do block do
# FIXME This is internal Chef API and should not be used from recipes, as # FIXME: This is internal Chef API and should not be used from recipes, as
# it is unsupported for that # it is unsupported for that
file = Chef::Util::FileEdit.new("#{node['mediawiki']['webdir']}/LocalSettings.php") file = Chef::Util::FileEdit.new("#{node['mediawiki']['webdir']}/LocalSettings.php")
file.search_file_replace_line(%r{\$wgLogo\ =\ \"\$wgResourceBasePath\/resources\/assets\/wiki.png\";}, file.search_file_replace_line(%r{\$wgLogo\ =\ \"\$wgResourceBasePath\/resources\/assets\/wiki.png\";},
@ -247,9 +247,7 @@ end
# #
file "#{node['mediawiki']['webdir']}/composer.local.json" do file "#{node['mediawiki']['webdir']}/composer.local.json" do
requires = { "require": { requires = { "require": { "mediawiki/mermaid": "~1.0" } }.to_json
"mediawiki/mermaid": "~1.0"
}}.to_json
content requires content requires
owner node['nginx']['user'] owner node['nginx']['user']
group node['nginx']['group'] group node['nginx']['group']

View File

@ -3,20 +3,23 @@
# Recipe:: default # Recipe:: default
# #
node.default['postfix']['main']['smtp_tls_CAfile'] = '/etc/ssl/certs/ca-certificates.crt' node.default["postfix"]["main"]["smtp_tls_CAfile"] = "/etc/ssl/certs/ca-certificates.crt"
node.default['postfix']['main']['smtpd_tls_CAfile'] = '/etc/ssl/certs/ca-certificates.crt' node.default["postfix"]["main"]["smtpd_tls_CAfile"] = "/etc/ssl/certs/ca-certificates.crt"
return if node.run_list.roles.include?("email_server") return if node.run_list.roles.include?("email_server")
smtp_credentials = Chef::EncryptedDataBagItem.load('credentials', 'smtp') smtp_credentials = Chef::EncryptedDataBagItem.load("credentials", "smtp")
node.default['postfix']['sasl']['smtp_sasl_user_name'] = smtp_credentials['user_name'] node.default["postfix"]["sasl"] = {
node.default['postfix']['sasl']['smtp_sasl_passwd'] = smtp_credentials['password'] smtp_credentials["relayhost"] => {
node.default['postfix']['sasl_password_file'] = "#{node['postfix']['conf_dir']}/sasl_passwd" "username" => smtp_credentials["user_name"],
# Postfix doesn't support smtps relayhost, use STARTSSL instead "password" => smtp_credentials["password"]
node.default['postfix']['main']['relayhost'] = smtp_credentials['relayhost'] }
node.default['postfix']['main']['smtp_sasl_auth_enable'] = 'yes' }
node.default['postfix']['main']['smtp_sasl_password_maps'] = "hash:#{node['postfix']['sasl_password_file']}"
node.default['postfix']['main']['smtp_sasl_security_options'] = 'noanonymous'
include_recipe 'postfix::default' # Postfix doesn"t support smtps relayhost, use STARTSSL instead
node.default["postfix"]["main"]["relayhost"] = smtp_credentials["relayhost"]
node.default["postfix"]["main"]["smtp_sasl_auth_enable"] = "yes"
node.default["postfix"]["main"]["smtp_sasl_security_options"] = "noanonymous"
include_recipe "postfix::default"

View File

@ -26,7 +26,7 @@ template "#{deploy_path}/docker-compose.yml" do
mode 0640 mode 0640
variables domain: node["kosmos_drone"]["domain"], variables domain: node["kosmos_drone"]["domain"],
upstream_port: node["kosmos_drone"]["upstream_port"], upstream_port: node["kosmos_drone"]["upstream_port"],
gitea_server: "https://#{node["kosmos_gitea"]["nginx"]["domain"]}", gitea_server: "https://#{node["gitea"]["domain"]}",
client_id: credentials['client_id'], client_id: credentials['client_id'],
client_secret: credentials['client_secret'], client_secret: credentials['client_secret'],
rpc_secret: credentials['rpc_secret'], rpc_secret: credentials['rpc_secret'],

View File

@ -1,13 +1,21 @@
node.default["gitea"]["version"] = "1.23.7" node.default["gitea"]["version"] = "1.23.8"
node.default["gitea"]["checksum"] = "3c0a7121ad1d9c525a92c68a7c040546553cd41e7464ce2fa811246b648c0a46" node.default["gitea"]["checksum"] = "827037e7ca940866918abc62a7488736923396c467fcb4acd0dd9829bb6a6f4c"
node.default["gitea"]["repo"] = nil
node.default["gitea"]["revision"] = nil
node.default["gitea"]["working_directory"] = "/var/lib/gitea" node.default["gitea"]["working_directory"] = "/var/lib/gitea"
node.default["gitea"]["port"] = 3000 node.default["gitea"]["port"] = 3000
node.default["gitea"]["postgresql_host"] = "localhost:5432" node.default["gitea"]["postgresql_host"] = "localhost:5432"
node.default["gitea"]["domain"] = "gitea.kosmos.org" node.default["gitea"]["domain"] = "gitea.kosmos.org"
node.default["gitea"]["config"] = { node.default["gitea"]["config"] = {
"log": {
"level" => "Info",
"logger.router.MODE" => "",
"logger.xorm.MODE" => "",
"logger.access.MODE" => ""
},
"actions": { "actions": {
"enabled": true "enabled" => true
}, },
"webhook": { "webhook": {
"allowed_host_list" => "external,127.0.1.1" "allowed_host_list" => "external,127.0.1.1"

View File

@ -10,5 +10,8 @@ chef_version '>= 14.0'
depends "firewall" depends "firewall"
depends "kosmos_openresty" depends "kosmos_openresty"
depends "kosmos_postgresql" depends "kosmos_postgresql"
depends "backup"
depends "kosmos-dirsrv" depends "kosmos-dirsrv"
depends 'kosmos-nodejs'
depends 'git'
depends 'golang'
depends "backup"

View File

@ -0,0 +1,42 @@
#
# Cookbook:: kosmos_gitea
# Recipe:: compile_from_source
#
# Compiles/installs Gitea from source
#
include_recipe "git"
node.override["nodejs"]["repo"] = "https://deb.nodesource.com/node_20.x"
include_recipe 'kosmos-nodejs'
node.override["golang"]["version"] = "1.23.9"
include_recipe "golang"
link "/usr/local/bin/go" do
to "/usr/local/go/bin/go"
end
source_dir = "/opt/gitea"
git source_dir do
repository node["gitea"]["repo"]
revision node["gitea"]["revision"]
action :sync
notifies :run, "execute[npm_install]", :immediately
end
execute "npm_install" do
cwd source_dir
command "npm ci"
action :nothing
notifies :run, "bash[compile_gitea]", :immediately
end
bash "compile_gitea" do
cwd source_dir
environment "TAGS" => "bindata"
code "make build"
action :nothing
notifies :restart, "service[gitea]", :delayed
end

View File

@ -5,11 +5,12 @@
version = node["gitea"]["version"] version = node["gitea"]["version"]
download_url = "https://dl.gitea.io/gitea/#{version}/gitea-#{version}-linux-amd64" download_url = "https://dl.gitea.io/gitea/#{version}/gitea-#{version}-linux-amd64"
compile_from_source = node["gitea"]["repo"] && node["gitea"]["revision"]
working_directory = node["gitea"]["working_directory"] working_directory = node["gitea"]["working_directory"]
git_home_directory = "/home/git" git_home_directory = "/home/git"
repository_root_directory = "#{git_home_directory}/gitea-repositories" repository_root_directory = "#{git_home_directory}/gitea-repositories"
config_directory = "/etc/gitea" config_directory = "/etc/gitea"
gitea_binary_path = "/usr/local/bin/gitea" gitea_binary_path = compile_from_source ? "/opt/gitea/gitea" : "/usr/local/bin/gitea"
gitea_data_bag_item = data_bag_item("credentials", "gitea") gitea_data_bag_item = data_bag_item("credentials", "gitea")
smtp_credentials = data_bag_item("credentials", "smtp") smtp_credentials = data_bag_item("credentials", "smtp")
smtp_addr = smtp_credentials["relayhost"].split(":")[0] smtp_addr = smtp_credentials["relayhost"].split(":")[0]
@ -18,7 +19,6 @@ jwt_secret = gitea_data_bag_item["jwt_secret"]
internal_token = gitea_data_bag_item["internal_token"] internal_token = gitea_data_bag_item["internal_token"]
secret_key = gitea_data_bag_item["secret_key"] secret_key = gitea_data_bag_item["secret_key"]
# Dependency
package "git" package "git"
user "git" do user "git" do
@ -108,12 +108,16 @@ template "#{config_directory}/app.ini" do
notifies :restart, "service[gitea]", :delayed notifies :restart, "service[gitea]", :delayed
end end
if compile_from_source
include_recipe "kosmos_gitea::compile_from_source"
else
remote_file gitea_binary_path do remote_file gitea_binary_path do
source download_url source download_url
checksum node['gitea']['checksum'] checksum node['gitea']['checksum']
mode "0755" mode "0755"
notifies :restart, "service[gitea]", :delayed notifies :restart, "service[gitea]", :delayed
end end
end
execute "systemctl daemon-reload" do execute "systemctl daemon-reload" do
action :nothing action :nothing

View File

@ -75,7 +75,10 @@ ENABLE_OPENID_SIGNUP = false
[log] [log]
MODE = console MODE = console
LEVEL = Debug LEVEL = <%= @config["log"]["level"] %>
logger.router.MODE = <%= @config["log"]["logger.router.MODE"] %>
logger.xorm.MODE = <%= @config["log"]["logger.xorm.MODE"] %>
logger.access.MODE = <%= @config["log"]["logger.access.MODE"] %>
[attachment] [attachment]
ENABLED = true ENABLED = true

View File

@ -1,4 +1,14 @@
# kosmos_kvm # kosmos_kvm
TODO: Enter the cookbook description here. ## Create a new VM
A script is deployed by the `host` recipe to `/usr/local/sbin/create_vm`
### Usage
```
create_vm VMNAME RAM CPUS DISKSIZE
```
* `RAM` in megabytes
* `DISKSIZE` in gigabytes, defaults to 10

View File

@ -25,7 +25,7 @@ server {
alias /var/www/assets.kosmos.org/site/img/favicon.ico; alias /var/www/assets.kosmos.org/site/img/favicon.ico;
} }
location ~* ^/[@~n]|^/assets { location ~ ^/(?:@|~|npub|naddr|nprofile|assets/) {
proxy_set_header Host $host; proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Real-IP $remote_addr;
proxy_pass http://_substr; proxy_pass http://_substr;

@ -1 +1 @@
Subproject commit 8df7c00a147873f5c0ac81dabc993ed25981c544 Subproject commit 2c6e64d2311d2a50b207f4d970c3a951b73d2a5c