# == Class: etherpad_lite # # Class to install etherpad lite. Puppet acts a lot like a package manager # through this class. # # To use etherpad lite you will want the following includes: # include etherpad_lite # include etherpad_lite::mysql # necessary to use mysql as the backend # include etherpad_lite::site # configures etherpad lite instance # include etherpad_lite::apache # will add reverse proxy on localhost # The defaults for all the classes should just work (tm) # # class etherpad_lite ( $base_install_dir = '/opt/etherpad-lite', $base_log_dir = '/var/log', $ep_ensure = 'present', $ep_user = 'eplite', $eplite_version = 'develop', # If set to system will install system package. $nodejs_version = 'v0.10.21', ) { # where the modules are, needed to easily install modules later $modules_dir = "${base_install_dir}/etherpad-lite/node_modules" $path = "/usr/bin:/bin:/usr/local/bin:${base_install_dir}/etherpad-lite" user { $ep_user: shell => '/usr/sbin/nologin', home => "${base_log_dir}/${ep_user}", system => true, gid => $ep_user, require => Group[$ep_user], } group { $ep_user: ensure => present, } # Below is what happens when you treat puppet as a package manager. # This is probably bad, but it works and you don't need to roll .debs. file { $base_install_dir: ensure => directory, group => $ep_user, mode => '0664', } package { 'abiword': ensure => present, } package { 'curl': ensure => present, } if ($nodejs_version != 'system') { vcsrepo { "${base_install_dir}/nodejs": ensure => present, provider => git, source => 'https://github.com/joyent/node.git', revision => $nodejs_version, require => [ Package['git'], File[$base_install_dir], ], } package { [ 'gzip', 'python', 'libssl-dev', 'pkg-config', 'build-essential', ]: ensure => present, } package { ['nodejs', 'npm']: ensure => purged, } buildsource { "${base_install_dir}/nodejs": timeout => 900, # 15 minutes creates => '/usr/local/bin/node', require => [ Package['gzip'], Package['curl'], Package['python'], Package['libssl-dev'], Package['pkg-config'], Package['build-essential'], Vcsrepo["${base_install_dir}/nodejs"], ], before => Anchor['nodejs-anchor'], } } else { package { ['nodejs', 'npm']: ensure => present, before => Anchor['nodejs-anchor'], } file { '/usr/local/bin/node': ensure => link, target => '/usr/bin/nodejs', before => Anchor['nodejs-anchor'], require => Package['nodejs'], } } anchor { 'nodejs-anchor': } vcsrepo { "${base_install_dir}/etherpad-lite": ensure => $ep_ensure, provider => git, source => 'https://github.com/ether/etherpad-lite.git', owner => $ep_user, revision => $eplite_version, require => [ Package['git'], User[$ep_user], ], } exec { 'install_etherpad_dependencies': command => './bin/installDeps.sh', path => $path, user => $ep_user, cwd => "${base_install_dir}/etherpad-lite", environment => "HOME=${base_log_dir}/${ep_user}", require => [ Package['curl'], Vcsrepo["${base_install_dir}/etherpad-lite"], Anchor['nodejs-anchor'], ], before => File["${base_install_dir}/etherpad-lite/settings.json"], creates => "${base_install_dir}/etherpad-lite/node_modules", } file { '/etc/init/etherpad-lite.conf': ensure => present, content => template('etherpad_lite/upstart.erb'), replace => true, owner => 'root', } file { '/etc/init.d/etherpad-lite': ensure => link, target => '/lib/init/upstart-job', } file { "${base_log_dir}/${ep_user}": ensure => directory, owner => $ep_user, } # end package management ugliness }