Class: VpsCli::Copy
- Inherits:
-
Object
- Object
- VpsCli::Copy
- Extended by:
- FileHelper
- Defined in:
- lib/vps_cli/copy.rb
Overview
Copies config from /vps_cli/config_files/dotfiles
& vps_cli/config_files/miscfiles to your home dir
Class Method Summary collapse
-
.all(config = VpsCli.configuration) ⇒ Object
Top level method for copying all files Will use the configurations set by VpsCli.configuration unless passed a different config.
-
.dotfiles(config = VpsCli.configuration) ⇒ Object
Copy files from ‘config_files/dotfiles’ directory via the copy_all method Defaults are provided in the VpsCli.create_options method.
-
.files_and_dirs(opts = {}) ⇒ Object
Deciphers between files & directories Also utilizes the settings from your configuration to properly copy things.
-
.gnome_settings(config = VpsCli.configuration) ⇒ Object
Copies gnome terminal via dconf.
- .root? ⇒ Boolean
-
.sshd_config(config = VpsCli.configuration) ⇒ Object
Copies sshd_config to the VpsCli.configuration.local_sshd_config location Defaults to [/etc/ssh/sshd_config] if not set This is slightly different from other copy methods in this file It uses Rake.sh(“sudo cp”) Due to copying to /etc/ssh/sshd_config requiring root permissions.
-
.sshd_copyable?(sshd_config = nil) ⇒ Boolean
Checks that sshd_config is able to be copied.
Methods included from FileHelper
backup_file_not_found?, copy_dir, copy_dirs, copy_file, copy_files, create_backup?, file_found?, mkdirs, overwrite?, retrieve_file
Class Method Details
.all(config = VpsCli.configuration) ⇒ Object
Top level method for copying all files Will use the configurations set by VpsCli.configuration
unless passed a different config
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/vps_cli/copy.rb', line 18 def self.all(config = VpsCli.configuration) # raises an error if the script is run as root return unless root? == false # fills in options that are not explicitly filled in FileHelper.mkdirs(config.local_dir, config.backup_dir) # copies dotfiles dotfiles(config) # copies gnome_settings gnome_settings(config) # copies sshd_config sshd_config(config) puts "dotfiles copied to #{config.local_dir}" puts "backups created @ #{config.backup_dir}" end |
.dotfiles(config = VpsCli.configuration) ⇒ Object
Copy files from ‘config_files/dotfiles’ directory via the copy_all method Defaults are provided in the VpsCli.create_options method
41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/vps_cli/copy.rb', line 41 def self.dotfiles(config = VpsCli.configuration) Dir.each_child(config.dotfiles) do |file| config_file = File.join(config.dotfiles, file) local = File.join(config.local_dir, ".#{file}") backup = File.join(config.backup_dir, "#{file}.orig") files_and_dirs(config_file: config_file, local_file: local, backup_file: backup, verbose: config.verbose, interactive: config.interactive) end end |
.files_and_dirs(opts = {}) ⇒ Object
Deciphers between files & directories Also utilizes the settings from your configuration to properly
copy things
107 108 109 110 111 112 113 |
# File 'lib/vps_cli/copy.rb', line 107 def self.files_and_dirs(opts = {}) if File.directory?(opts[:config_file]) FileHelper.copy_dirs(opts) else FileHelper.copy_files(opts) end end |
.gnome_settings(config = VpsCli.configuration) ⇒ Object
This method will raise an error if dconf errors out The error will be saved to VpsCli.errors
Copies gnome terminal via dconf
120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
# File 'lib/vps_cli/copy.rb', line 120 def self.gnome_settings(config = VpsCli.configuration) backup = "#{config.backup_dir}/gnome_terminal_settings.orig" # This is the ONLY spot for gnome terminal gnome_path = '/org/gnome/terminal/' gnome_file = File.join(config.misc_files, 'gnome_terminal_settings') raise RuntimeError if config.testing raise RuntimeError unless File.exists?(gnome_file) overwrite = proc { |file| FileHelper.overwrite?(file, config.interactive) } Rake.sh("dconf dump #{gnome_path} > #{backup}") if overwrite.call(backup) dconf_load = "dconf load #{gnome_path} < #{config.misc_files}/gnome_terminal_settings" Rake.sh(dconf_load) if overwrite.call(gnome_path) rescue RuntimeError => error puts 'something went wrong with gnome, continuing on' if config.verbose VpsCli.errors << error.exception("Unable to copy gnome settings") end |
.root? ⇒ Boolean
140 141 142 143 144 145 146 |
# File 'lib/vps_cli/copy.rb', line 140 def self.root? root = (Process.uid.zero? || Dir.home == '/root') root_msg = 'Do not run this as root or sudo. Run as a normal user' raise root_msg if root == true false end |
.sshd_config(config = VpsCli.configuration) ⇒ Object
Copies sshd_config to the VpsCli.configuration.local_sshd_config
location
Defaults to [/etc/ssh/sshd_config] if not set
This is slightly different from other copy methods in this file
It uses Rake.sh("sudo cp")
Due to to /etc/ssh/sshd_config requiring root
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/vps_cli/copy.rb', line 75 def self.sshd_config(config = VpsCli.configuration) config.local_sshd_config ||= File.join('/etc', 'ssh', 'sshd_config') return unless sshd_copyable?(config.local_sshd_config) config.sshd_backup ||= File.join(config.backup_dir, 'sshd_config.orig') misc_sshd_path = File.join(config.misc_files, 'sshd_config') if File.exist?(config.local_sshd_config) && !File.exist?(config.sshd_backup) Rake.cp(config.local_sshd_config, config.sshd_backup) else puts "#{config.sshd_backup} already exists. no backup created" end return Rake.cp(misc_sshd_path, config.local_sshd_config) if config.testing # This method must be run this way due to it requiring root privileges unless FileHelper.overwrite?(config.local_sshd_config, config.interactive) return end return unless File.identical?(misc_sshd_path, config.local_sshd_config) Rake.sh("sudo cp #{misc_sshd_path} #{config.local_sshd_config}") end |
.sshd_copyable?(sshd_config = nil) ⇒ Boolean
Checks that sshd_config is able to be copied
59 60 61 62 63 64 65 66 67 |
# File 'lib/vps_cli/copy.rb', line 59 def self.sshd_copyable?(sshd_config = nil) sshd_config ||= '/etc/ssh/sshd_config' no_sshd_config = 'No sshd_config found. sshd_config not copied' return true if File.exist?(sshd_config) VpsCli.errors << Exception.new(no_sshd_config) end |