Râu Cao 4f1b1aff30
Set up PeerSwap
Allows to swap sats in and out of Lightning channels without a 3rd party
(and their fees). Instead, swaps can be initiated directly with the
channel peer.

https://www.peerswap.dev/
2022-12-26 11:16:22 +07:00

95 lines
2.2 KiB
Ruby

#
# Cookbook:: kosmos-bitcoin
# Recipe:: peerswap-lnd
#
include_recipe 'git'
include_recipe 'kosmos-bitcoin::golang'
include_recipe 'kosmos-bitcoin::user'
bitcoin_user = node['bitcoin']['username']
bitcoin_group = node['bitcoin']['usergroup']
lnd_dir = node['lnd']['lnd_dir']
macaroon_path = "#{lnd_dir}/data/chain/bitcoin/#{node['bitcoin']['network']}/admin.macaroon"
source_dir = node['peerswap-lnd']['source_dir']
config_dir = "/home/#{bitcoin_user}/.peerswap"
directory config_dir do
owner bitcoin_user
group bitcoin_group
mode '0700'
action :create
end
git source_dir do
repository node['peerswap']['repo']
revision node['peerswap']['revision']
action :sync
notifies :run, 'bash[compile_peerswap]', :immediately
end
bash 'compile_peerswap' do
cwd source_dir
environment 'GOPATH' => '/opt/go'
code 'make lnd-release'
action :run
notifies :restart, 'service[peerswap]', :delayed
end
template "#{config_dir}/peerswap.conf" do
source 'peerswap-lnd.conf.erb'
owner bitcoin_user
group bitcoin_group
mode 0600
sensitive true
variables config: {
tlscertpath: "#{lnd_dir}/tls.cert",
macaroonpath: macaroon_path
}
notifies :restart, 'service[peerswap]', :delayed
end
file "#{config_dir}/policy.conf" do
owner bitcoin_user
group bitcoin_group
mode 0600
content 'accept_all_peers=true'
notifies :restart, 'service[peerswap]', :delayed
end
systemd_unit 'peerswap.service' do
content({
Unit: {
Description: 'PeerSwap Lightning channel balancing',
Documentation: ['https://github.com/ElementsProject/peerswap'],
Requires: 'lnd.service',
After: 'lnd.service'
},
Service: {
User: bitcoin_user,
Group: bitcoin_group,
Type: 'simple',
WorkingDirectory: source_dir,
ExecStart: "/opt/go/bin/peerswapd",
Restart: 'always',
RestartSec: '10',
TimeoutSec: '60',
PrivateTmp: true,
ProtectSystem: 'full',
NoNewPrivileges: true,
PrivateDevices: true,
MemoryDenyWriteExecute: true
},
Install: {
WantedBy: 'multi-user.target'
}
})
verify false
triggers_reload true
action [:create, :enable, :start]
end
service 'peerswap' do
action :nothing
end