From c331313fde33f24369d71cadd71f5c672ec181ee Mon Sep 17 00:00:00 2001 From: Eugene Vilensky Date: Sat, 4 May 2013 17:35:22 -0500 Subject: [PATCH 1/6] Split package names into operating-system specific arrays. --- manifests/init.pp | 38 +++++++------------------------------- manifests/prereqs.pp | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 31 deletions(-) create mode 100644 manifests/prereqs.pp diff --git a/manifests/init.pp b/manifests/init.pp index fdfb587..5ffde1c 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -1,27 +1,13 @@ class ruby($version = "2.0.0-p0") { + include ruby::prereqs + rubyinstall { "$version": } + } define rubyinstall($version = $title) { - package { - "build-essential": - ensure => present; - "libssl-dev": - ensure => present; - "libreadline6": - ensure => present; - "libreadline6-dev": - ensure => present; - "zlib1g": - ensure => present; - "zlib1g-dev": - ensure => present; - "curl": - ensure => present; - "git": - ensure => present; - "rake": - ensure => present + package { $packages: + ensure => installed, } # The rm at the start is legacy, as previous versions of this plugin @@ -29,19 +15,9 @@ exec { "ruby-build-checkout": command => "rm -Rf /opt/ruby-build && git clone https://github.com/sstephenson/ruby-build /opt/ruby-build", creates => "/opt/ruby-build/.git", - require => [ - Package["curl"], - Package["git"], - Package["rake"], - Package["build-essential"], - Package["libssl-dev"], - Package["libreadline6"], - Package["libreadline6-dev"], - Package["zlib1g"], - Package["zlib1g-dev"] - ], + require => $packages, path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], - timeout => 0 + timeout => 0, } exec { "ruby-build-update": diff --git a/manifests/prereqs.pp b/manifests/prereqs.pp new file mode 100644 index 0000000..9a4f6e1 --- /dev/null +++ b/manifests/prereqs.pp @@ -0,0 +1,19 @@ +class ruby::prereqs { + case $operatingsystem { + ubuntu: { + $packages = [ "build-essential", "libssl-dev", "libreadline5", + "libreadline6-dev", "zlib1g", "zlib1g-dev", "curl", "git", + "rake",] + } + + centos: { + $packages = [ "gcc", "g++", "make", "automake", "autoconf", "curl-devel", + "openssl-devel", "zlib-devel", "httpd-devel", "apr-devel", "apr-util-devel", "sqlite-devel",] + } + + default: { + fail("unsupported operating system, patches welcome") + } + + } +} From 2e40ebc6885d444a18abbc21b598711ece1192a4 Mon Sep 17 00:00:00 2001 From: Eugene Vilensky Date: Sat, 4 May 2013 19:22:29 -0500 Subject: [PATCH 2/6] Add rbenv download, move alternatives setup to a case statement --- manifests/init.pp | 69 +++++++++++++++++++++++++++-------------------- 1 file changed, 40 insertions(+), 29 deletions(-) diff --git a/manifests/init.pp b/manifests/init.pp index 5ffde1c..cf0d58f 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -6,16 +6,23 @@ } define rubyinstall($version = $title) { - package { $packages: - ensure => installed, - } + $packages = $ruby::prereqs::packages # The rm at the start is legacy, as previous versions of this plugin # used to download the package as a zip file rather than cloning :( - exec { "ruby-build-checkout": + exec { 'rbenv-checkout': + command => "rm -Rf /opt/ruby-build && git clone https://github.com/sstephenson/rbenv.git /opt/rbenv", + creates => "/opt/rbenv/.git", + require => Package[$packages], + path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], + timeout => 0, + } + + + exec { 'ruby-build-checkout': command => "rm -Rf /opt/ruby-build && git clone https://github.com/sstephenson/ruby-build /opt/ruby-build", creates => "/opt/ruby-build/.git", - require => $packages, + require => Exec['rbenv-checkout'], path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], timeout => 0, } @@ -36,30 +43,34 @@ timeout => 0 } - exec { "alternatives-ruby-$version": - command => "update-alternatives --quiet --install /usr/bin/ruby ruby /opt/ruby-$version/bin/ruby 10 --slave /usr/bin/irb irb /opt/ruby-$version/bin/irb && update-alternatives --quiet --set ruby /opt/ruby-$version/bin/ruby", - unless => "test /usr/bin/ruby -ef /opt/ruby-$version/bin/ruby && test /usr/bin/irb -ef /opt/ruby-$version/bin/irb", - path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], - require => Exec["ruby-install-$version"] - } - exec { "alternatives-gem-$version": - command => "update-alternatives --quiet --install /usr/bin/gem gem /opt/ruby-$version/bin/gem 10 && update-alternatives --quiet --set gem /opt/ruby-$version/bin/gem", - unless => "test /usr/bin/gem -ef /opt/ruby-$version/bin/gem", - path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], - require => Exec["alternatives-ruby-$version"] - } + case $operatingsystem { + 'Ubuntu': { + exec { "alternatives-ruby-$version": + command => "update-alternatives --quiet --install /usr/bin/ruby ruby /opt/ruby-$version/bin/ruby 10 --slave /usr/bin/irb irb /opt/ruby-$version/bin/irb && update-alternatives --quiet --set ruby /opt/ruby-$version/bin/ruby", + unless => "test /usr/bin/ruby -ef /opt/ruby-$version/bin/ruby && test /usr/bin/irb -ef /opt/ruby-$version/bin/irb", + path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], + require => Exec["ruby-install-$version"] + } + exec { "alternatives-gem-$version": + command => "update-alternatives --quiet --install /usr/bin/gem gem /opt/ruby-$version/bin/gem 10 && update-alternatives --quiet --set gem /opt/ruby-$version/bin/gem", + unless => "test /usr/bin/gem -ef /opt/ruby-$version/bin/gem", + path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], + require => Exec["alternatives-ruby-$version"] + } - exec { "gem-install-bundler-$version": - command => "gem install bundler", - unless => "gem list | grep bundler", - timeout => "-1", - path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], - require => Exec["alternatives-gem-$version"] + exec { "gem-install-bundler-$version": + command => "gem install bundler", + unless => "gem list | grep bundler", + timeout => "-1", + path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], + require => Exec["alternatives-gem-$version"] + } + exec { "alternatives-bundle-$version": + command => "update-alternatives --quiet --install /usr/bin/bundle bundle /opt/ruby-$version/bin/bundle 10 && update-alternatives --quiet --set bundle /opt/ruby-$version/bin/bundle", + unless => "test /usr/bin/bundle -ef /opt/ruby-$version/bin/bundle", + path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], + require => Exec["gem-install-bundler-$version"] + } + } } - exec { "alternatives-bundle-$version": - command => "update-alternatives --quiet --install /usr/bin/bundle bundle /opt/ruby-$version/bin/bundle 10 && update-alternatives --quiet --set bundle /opt/ruby-$version/bin/bundle", - unless => "test /usr/bin/bundle -ef /opt/ruby-$version/bin/bundle", - path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], - require => Exec["gem-install-bundler-$version"] } -} From 59a58d1f0e818437e68e0e99b8dc34fae59b0d86 Mon Sep 17 00:00:00 2001 From: Eugene Vilensky Date: Sat, 4 May 2013 19:23:44 -0500 Subject: [PATCH 3/6] Modify pre-requisite packages to remove apache dependencies. --- manifests/prereqs.pp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/manifests/prereqs.pp b/manifests/prereqs.pp index 9a4f6e1..ea5fd68 100644 --- a/manifests/prereqs.pp +++ b/manifests/prereqs.pp @@ -7,8 +7,8 @@ } centos: { - $packages = [ "gcc", "g++", "make", "automake", "autoconf", "curl-devel", - "openssl-devel", "zlib-devel", "httpd-devel", "apr-devel", "apr-util-devel", "sqlite-devel",] + $packages = [ "gcc", "make", "automake", "autoconf", "libcurl-devel", + "openssl-devel", "zlib-devel","curl", "git",] } default: { @@ -16,4 +16,8 @@ } } + + package { $packages: + ensure => installed, + } } From 19bed04973c87b3cba7a77e6a3e12b72b81744c6 Mon Sep 17 00:00:00 2001 From: Eugene Vilensky Date: Sat, 4 May 2013 20:36:03 -0500 Subject: [PATCH 4/6] Set ruby path based on installation. --- manifests/init.pp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/manifests/init.pp b/manifests/init.pp index cf0d58f..02f4a38 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -10,19 +10,10 @@ # The rm at the start is legacy, as previous versions of this plugin # used to download the package as a zip file rather than cloning :( - exec { 'rbenv-checkout': - command => "rm -Rf /opt/ruby-build && git clone https://github.com/sstephenson/rbenv.git /opt/rbenv", - creates => "/opt/rbenv/.git", - require => Package[$packages], - path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], - timeout => 0, - } - exec { 'ruby-build-checkout': command => "rm -Rf /opt/ruby-build && git clone https://github.com/sstephenson/ruby-build /opt/ruby-build", creates => "/opt/ruby-build/.git", - require => Exec['rbenv-checkout'], path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], timeout => 0, } @@ -44,6 +35,18 @@ } case $operatingsystem { + 'RedHat', 'Centos', 'Ubuntu': { + #set ruby path + file { "/etc/profile.d/ruby.sh": + mode => 0755, + owner => 'root', + group => 'root', + content => "pathmunge /opt/ruby-$version/bin", + require => Exec["ruby-install-$version"], + } + } + + 'Ubuntu': { exec { "alternatives-ruby-$version": command => "update-alternatives --quiet --install /usr/bin/ruby ruby /opt/ruby-$version/bin/ruby 10 --slave /usr/bin/irb irb /opt/ruby-$version/bin/irb && update-alternatives --quiet --set ruby /opt/ruby-$version/bin/ruby", From 38bc47622553f142ab65bd0d249756bb66c23a6f Mon Sep 17 00:00:00 2001 From: Eugene Vilensky Date: Sun, 5 May 2013 09:40:29 -0500 Subject: [PATCH 5/6] Explicitely require packages --- manifests/init.pp | 1 + 1 file changed, 1 insertion(+) diff --git a/manifests/init.pp b/manifests/init.pp index 02f4a38..489d322 100644 --- a/manifests/init.pp +++ b/manifests/init.pp @@ -16,6 +16,7 @@ creates => "/opt/ruby-build/.git", path => ["/usr/sbin", "/usr/bin", "/sbin", "/bin"], timeout => 0, + require => Package[$packages], } exec { "ruby-build-update": From d99b08bb10152e5e0df28d10e5b0b8c997945dc4 Mon Sep 17 00:00:00 2001 From: Eugene Vilensky Date: Sun, 5 May 2013 09:42:07 -0500 Subject: [PATCH 6/6] Facts for ruby versions and home --- plugins/facter/rbenv_ruby.rb | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 plugins/facter/rbenv_ruby.rb diff --git a/plugins/facter/rbenv_ruby.rb b/plugins/facter/rbenv_ruby.rb new file mode 100644 index 0000000..d0f7b73 --- /dev/null +++ b/plugins/facter/rbenv_ruby.rb @@ -0,0 +1,11 @@ +Facter.add(:rbenv_ruby) do + setcode do + `/usr/bin/which ruby`.chomp + end +end + +Facter.add(:rbenv_ruby_home) do + setcode do + File.dirname(`/usr/bin/which ruby`).chomp!('bin') + end +end