lib/invoker/power/setup/distro/base.rb
module Invoker
module Power
module Distro
class Base
SOCAT_SHELLSCRIPT = "/usr/bin/invoker_forwarder.sh"
SOCAT_SYSTEMD = "/etc/systemd/system/socat_invoker.service"
RESOLVER_DIR = "/etc/dnsmasq.d"
attr_accessor :tld
def resolver_file
File.join(RESOLVER_DIR, "#{tld}-tld")
end
def self.distro_installer(tld)
if distro.start_with? "Arch Linux", "Manjaro Linux"
require "invoker/power/setup/distro/arch"
Arch.new(tld)
elsif distro.start_with? "Debian"
require "invoker/power/setup/distro/debian"
Debian.new(tld)
elsif distro.start_with? "Fedora"
require "invoker/power/setup/distro/redhat"
Redhat.new(tld)
elsif distro.start_with? "Linux Mint", "Ubuntu"
require "invoker/power/setup/distro/ubuntu"
Ubuntu.new(tld)
elsif distro.start_with? "openSUSE"
require "invoker/power/setup/distro/opensuse"
Opensuse.new(tld)
else
raise "Your selected distro is not supported by Invoker"
end
end
def self.distro
@distro ||= if File.exist?('/etc/os-release')
File.read('/etc/os-release').each_line do |line|
parsed_line = line.chomp.tr('"', '').split('=')
break parsed_line[1] if parsed_line[0] == 'NAME'
end
else
raise "File /etc/os-release doesn't exist or not Linux"
end
end
def initialize(tld)
self.tld = tld
end
# Install required software
def install_required_software
raise "Unimplemented"
end
def restart_services
system("systemctl enable socat_invoker.service")
system("systemctl enable dnsmasq")
system("systemctl start socat_invoker.service")
system("systemctl restart dnsmasq")
end
def install_packages
"dnsmasq and socat"
end
def install_other
" a local resolver for .#{tld} domain and"
end
def get_user_confirmation?
Invoker::Logger.puts("Invoker is going to install #{install_packages} on this machine."\
" It is also going to install#{install_other} a socat service"\
" which will forward all local requests on port 80 and 443 to another port")
Invoker::Logger.puts("If you still want to proceed with installation, press y.")
Invoker::CLI::Question.agree("Proceed with installation (y/n) : ")
end
end
end
end
end