module KnifeSolo::Bootstraps class Linux < Base def issue commands = [ 'lsb_release -d -s', 'cat /etc/redhat-release', 'cat /etc/os-release', 'cat /etc/issue' ] result = prepare.run_with_fallbacks(commands) result.success? ? result.stdout.strip : nil end def x86? machine = run_command('uname -m').stdout.strip %w{i686 x86 x86_64}.include?(machine) end def package_list @packages.join(' ') end def gem_packages ['ruby-shadow'] end def emerge_gem_install ui.msg("Installing required packages...") run_command("sudo USE='-test' ACCEPT_KEYWORDS='~amd64' emerge -u chef") gem_install end def pacman_install ui.msg("Installing required packages...") run_command("sudo pacman -Sy ruby rsync make gcc --noconfirm") run_command("sudo gem install chef --no-user-install --no-rdoc --no-ri") end def debianoid_gem_install ui.msg "Updating apt caches..." run_command("sudo apt-get update") ui.msg "Installing required packages..." @packages = %w(ruby ruby-dev libopenssl-ruby irb build-essential wget ssl-cert rsync) run_command <<-BASH sudo DEBIAN_FRONTEND=noninteractive apt-get --yes install #{package_list} BASH gem_install end def debianoid_omnibus_install run_command("sudo apt-get update") run_command("sudo apt-get -y install rsync ca-certificates wget") omnibus_install end def zypper_omnibus_install run_command("sudo zypper --non-interactive install rsync") omnibus_install end def yum_omnibus_install run_command("sudo yum clean all") run_command("sudo yum -y install rsync") omnibus_install end def distro return @distro if @distro @distro = case issue when %r{Debian GNU/Linux [678]} {:type => (x86? ? "debianoid_omnibus" : "debianoid_gem")} when %r{Debian} {:type => "debianoid_gem"} when %r{Raspbian} {:type => "debianoid_gem"} when %r{Linux Mint} {:type => "debianoid_gem"} when %r{Ubuntu}i {:type => (x86? ? "debianoid_omnibus" : "debianoid_gem")} when %r{Linaro} {:type => "debianoid_gem"} when %r{CentOS} {:type => "yum_omnibus"} when %r{Amazon Linux} {:type => "yum_omnibus"} when %r{Red Hat Enterprise} {:type => "yum_omnibus"} when %r{Oracle Linux Server} {:type => "yum_omnibus"} when %r{Enterprise Linux Enterprise Linux Server} {:type => "yum_omnibus"} when %r{Fedora release} {:type => "yum_omnibus"} when %r{Scientific Linux} {:type => "yum_omnibus"} when %r{CloudLinux} {:type => "yum_omnibus"} when %r{SUSE Linux Enterprise Server 1[12]} {:type => "omnibus"} when %r{openSUSE 1[23]} {:type => "zypper_omnibus"} when %r{This is \\n\.\\O \(\\s \\m \\r\) \\t} {:type => "emerge_gem"} when %r{Arch Linux}, %r{Manjaro Linux} {:type => "pacman"} else raise "Distribution not recognized. Please run again with `-VV` option and file an issue: https://github.com/matschaffer/knife-solo/issues" end Chef::Log.debug("Distro detection yielded: #{@distro}") @distro end #issue end end