diff options
author | Steve Kemp <steve@steve.org.uk> | 2015-06-03 15:55:28 +0100 |
---|---|---|
committer | Steve Kemp <steve@steve.org.uk> | 2015-06-03 15:55:28 +0100 |
commit | a29380762b93737ae6949121010cd9bceb8196b2 (patch) | |
tree | 4dfe2931401d0cc73c38b9a90377e31210d6706e /bin/byteback-setup-client | |
parent | c4da983bd2a1e35450dcb21bdc7110f5fc0d166a (diff) |
Relocated the binaries to bin/
Diffstat (limited to 'bin/byteback-setup-client')
-rwxr-xr-x | bin/byteback-setup-client | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/bin/byteback-setup-client b/bin/byteback-setup-client new file mode 100755 index 0000000..d8ffbfa --- /dev/null +++ b/bin/byteback-setup-client @@ -0,0 +1,70 @@ +#!/usr/bin/ruby +# +# Run on a client machine to set up backups for the first time +# + +$LOAD_PATH.unshift('/usr/lib/byteback') + +require 'fileutils' +require 'trollop' +require 'byteback/util' +require 'byteback/log' +include Byteback::Util +include Byteback::Log + +def error(message) + STDERR.print "*** #{message}\n" + exit 1 +end + +def verbose(message) + print "#{message}\n" +end + +opts = Trollop.options do + opt :hostname, 'Set host name for backups', + type: :string + + opt :destination, 'Backup destination (i.e. user@host:/path)', + type: :string +end + +@destination = opts[:destination] +@hostname = opts[:hostname] + +_dummy, @destination_user, @destination_host, colon, @destination_path = + /^(.*)?(?:@)([^:]+)(:)(.*)?$/.match(@destination).to_a + +@destination_user ||= 'byteback' +@destination_path ||= '' +@destination_host ||= @destination + +unless @hostname + @hostname = `hostname -f`.chomp + warn "No hostname set, using #{@hostname}\n" +end + +FileUtils.mkdir_p('/etc/byteback') + +if File.readable?('/etc/byteback/key') + warn "Skipping key generation, delete /etc/byteback/key if that's wrong" +else + + error "Couldn't generate SSH key" unless + system <<-KEYGEN + ssh-keygen -q -t rsa -C "byteback client key" \ + -N "" -f /etc/byteback/key + KEYGEN + +end + +key_pub = File.read('/etc/byteback/key.pub').chomp + +error "Remote setup didn't work" unless + system("ssh -i /etc/byteback/key -l #{@destination_user} #{@destination_host} byteback-setup-client-receive #{@hostname} #{key_pub}") + +File.open('/etc/byteback/destination', 'w') do |f| + f.print "#{@destination_user}@#{@destination_host}:#{@destination_path}" +end + +print "Setup worked! To take your first backup run: byteback-backup --verbose\n" |