47 Commits

Author SHA1 Message Date
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
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
45 changed files with 539 additions and 124 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)

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": {
"max_event_size": "524288"
},
"relay": {
"bind": "0.0.0.0",
"real_ip_header": "x-real-ip",
"info": {
"name": "Kosmos Relay",
"description": "Members-only nostr relay for kosmos.org users",
"pubkey": "b3e1b7c0ef48294bd856203bfd460625de95d3afb894e5f09b14cd1f0e7097cf",
"contact": "ops@kosmos.org",
"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": { "known_pubkeys": {
"_": "b3e1b7c0ef48294bd856203bfd460625de95d3afb894e5f09b14cd1f0e7097cf", "_": "b3e1b7c0ef48294bd856203bfd460625de95d3afb894e5f09b14cd1f0e7097cf",
"accounts": "b3e1b7c1660b7db0ecb93ec55c09e67961171a5c4e9e2602f1b47477ea61c50a", "accounts": "b3e1b7c1660b7db0ecb93ec55c09e67961171a5c4e9e2602f1b47477ea61c50a",
"bitcoincore": "47750177bb6bb113784e4973f6b2e3dd27ef1eff227d6e38d0046d618969e41a", "bitcoincore": "47750177bb6bb113784e4973f6b2e3dd27ef1eff227d6e38d0046d618969e41a",
"fiatjaf": "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d" "fiatjaf": "3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d"
},
"info": {
"name": "Kosmos Relay",
"description": "Members-only nostr relay for kosmos.org users",
"pubkey": "b3e1b7c0ef48294bd856203bfd460625de95d3afb894e5f09b14cd1f0e7097cf",
"contact": "ops@kosmos.org",
"icon": "https://assets.kosmos.org/img/app-icon-256px.png"
} }
}, },
"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-216-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

@@ -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

@@ -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

@@ -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",

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

@@ -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" }
},
)

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

@@ -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'] = '29.0'
node.default['bitcoin']['checksum'] = '700ae2d1e204602eb07f2779a6e6669893bc96c0dca290593f80ff8e102ff37f' node.default['bitcoin']['checksum'] = '882c782c34a3bf2eacd1fae5cdc58b35b869883512f197f7d6dc8f195decfdaa'
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
./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"] = "24.02"
node.default["ejabberd"]["package_version"] = "1" node.default["ejabberd"]["package_version"] = "1"
node.default["ejabberd"]["checksum"] = "1b02108c81e22ab28be84630d54061f0584b76d5c2702e598352269736b05e77" node.default["ejabberd"]["checksum"] = "476c187b42074b88472fd1c8042418072e47962facd47dab4e5883f6f61b2173"
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,8 @@
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
hosts: hosts:
<% @hosts.each do |host| -%> <% @hosts.each do |host| -%>
@@ -95,6 +93,8 @@ auth_method: sql
default_db: sql default_db: sql
update_sql_schema: true
shaper: shaper:
normal: normal:
rate: 3000 rate: 3000
@@ -185,8 +185,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"
@@ -258,10 +261,7 @@ modules:
transport: tcp transport: tcp
restricted: true restricted: true
mod_vcard: mod_vcard:
db_type: ldap
search: false search: false
ldap_vcard_map:
PHOTO: {"%s": [jpegPhoto]}
mod_vcard_xupdate: {} mod_vcard_xupdate: {}
mod_avatar: {} mod_avatar: {}
mod_version: {} mod_version: {}

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,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,11 +108,15 @@ template "#{config_directory}/app.ini" do
notifies :restart, "service[gitea]", :delayed notifies :restart, "service[gitea]", :delayed
end end
remote_file gitea_binary_path do if compile_from_source
source download_url include_recipe "kosmos_gitea::compile_from_source"
checksum node['gitea']['checksum'] else
mode "0755" remote_file gitea_binary_path do
notifies :restart, "service[gitea]", :delayed source download_url
checksum node['gitea']['checksum']
mode "0755"
notifies :restart, "service[gitea]", :delayed
end
end end
execute "systemctl daemon-reload" do execute "systemctl daemon-reload" do

View File

@@ -74,8 +74,11 @@ ENABLE_OPENID_SIGNIN = false
ENABLE_OPENID_SIGNUP = false 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