summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2025-05-03 14:16:22 +0300
committerPaul Buetow <paul@buetow.org>2025-05-03 14:16:22 +0300
commitcdcaeaa74d656a52e865bbbc1ffdb8a2bc37245e (patch)
treeaadeab23cfd6f82d08bec6972913bb7b3fe6866c
parenta3ef632592f5b42464423afce8f09bb76c85f936 (diff)
initial openbsd upload support
-rw-r--r--README.md2
-rw-r--r--wireguardmeshgenerator.rb39
2 files changed, 24 insertions, 17 deletions
diff --git a/README.md b/README.md
index ee7e68c..31befac 100644
--- a/README.md
+++ b/README.md
@@ -77,6 +77,8 @@ https://github.com/angristan/wireguard-install/discussions/499
### OpenBSD
+https://docs.vultr.com/install-wireguard-vpn-server-on-openbsd-7-0
+
```sh
```
diff --git a/wireguardmeshgenerator.rb b/wireguardmeshgenerator.rb
index 366a7cc..5b6236c 100644
--- a/wireguardmeshgenerator.rb
+++ b/wireguardmeshgenerator.rb
@@ -94,6 +94,7 @@ WireguardConfig = Struct.new(:myself, :hosts) do
def generate!
dist_dir = "dist/#{myself}/etc/wireguard"
+ puts "Generating #{dist_dir}/wg0.conf"
FileUtils.mkdir_p(dist_dir) unless Dir.exist?(dist_dir)
File.write("#{dist_dir}/wg0.conf", to_s)
end
@@ -122,10 +123,14 @@ end
InstallConfig = Struct.new(:myself, :hosts) do
def initialize(myself, hosts)
@myself = myself
- @ssh_user = hosts[myself]['ssh']['user']
- @sudo_cmd = hosts[myself]['ssh']['sudo_cmd']
- @reload_cmd = hosts[myself]['ssh']['reload_cmd']
- @conf_dir = hosts[myself]['ssh']['conf_dir']
+
+ data = hosts[myself]
+ domain = data.dig('lan', 'domain') || data.dig('internet', 'domain')
+ @fqdn = "#{myself}.#{domain}"
+ @ssh_user = data['ssh']['user']
+ @sudo_cmd = data['ssh']['sudo_cmd']
+ @reload_cmd = data['ssh']['reload_cmd']
+ @conf_dir = data['ssh']['conf_dir']
end
def upload!
@@ -157,9 +162,9 @@ InstallConfig = Struct.new(:myself, :hosts) do
private
def scp(src, dst = '.')
- puts "Uploading #{src} to #{@myself}:#{dst}"
- raise "Upload #{srd} to #{@myself}:#{dst} failed" unless
- Net::SCP.upload!(@myself, @ssh_user, src, dst)
+ puts "Uploading #{src} to #{@fqdn}:#{dst}"
+ raise "Upload #{srd} to #{@fqdn}:#{dst} failed" unless
+ Net::SCP.upload!(@fqdn, @ssh_user, src, dst)
end
def ssh(cmd)
@@ -170,7 +175,7 @@ InstallConfig = Struct.new(:myself, :hosts) do
rm $0
SH
File.delete('cmd.sh') if File.exist?('cmd.sh')
- Net::SSH.start(@myself, @ssh_user) do |ssh|
+ Net::SSH.start(@fqdn, @ssh_user) do |ssh|
output = ssh.exec!('sh cmd.sh')
raise output unless output.exitstatus.zero?
@@ -181,7 +186,7 @@ InstallConfig = Struct.new(:myself, :hosts) do
end
begin
- options = {}
+ options = { hosts: [] }
OptionParser.new do |opts|
opts.on('--generate', 'Generate Wireguard configs') do
options[:generate] = true
@@ -192,18 +197,18 @@ begin
opts.on('--clean', 'Clean Wireguard configs') do
options[:clean] = true
end
+ opts.on('--hosts=HOSTS', 'Comma separated hosts to configure') do |hosts|
+ options[:hosts] = hosts.split(',')
+ end
end.parse!
conf = YAML.load_file('wireguardmeshgenerator.yaml').freeze
- conf['hosts'].each_key do |hostname|
- WireguardConfig.new(hostname, conf['hosts']).generate! if
- options[:generate]
-
- InstallConfig.new(hostname, conf['hosts']).upload!.install!.restart! if
- options[:install]
- WireguardConfig.new(hostname, conf['hosts']).clean! if
- options[:clean]
+ conf['hosts'].keys.select { options[:hosts].empty? || options[:hosts].include?(_1) }
+ .each do |host|
+ WireguardConfig.new(host, conf['hosts']).generate! if options[:generate]
+ InstallConfig.new(host, conf['hosts']).upload!.install!.restart! if options[:install]
+ WireguardConfig.new(host, conf['hosts']).clean! if options[:clean]
end
rescue StandardError => e
puts "Error: #{e.message}"