presence/lib/tasks/presence/installer.rake
namespace :presence do
desc 'Copy ejabberd files to the xmpp server and write configuration files'
task :install => [ 'presence:install:copy_xmpp_server_files', 'presence:install_xmpp_server' , 'presence:autoconfigure_xmpp_server' , 'presence:generate_RSA_keys' ]
namespace :install do
desc "Copy ejabberd files to the xmpp server"
task :copy_xmpp_server_files => :environment do
puts "Starting presence:install:copy_xmpp_server_files"
presence_root = File.expand_path("../../../../", __FILE__)
opath = presence_root + "/ejabberd";
dpath = SocialStream::Presence.scripts_path + "/sstream_ejabberd_files";
#Cleaning dpath
SocialStream::Presence::XmppServerOrder::executeCommands(["rm -r " + dpath,"mkdir -p " + dpath])
#Copy folders
SocialStream::Presence::XmppServerOrder::copyFolderToXmppServer(opath,dpath)
puts "Social Stream Ejabberd files copied to " + dpath + " in Xmpp Server"
puts "Copy_xmpp_server_files: Task complete"
end
desc "Copy ejabberd files to the xmpp server and write configuration files"
task :xmpp_server, [:sudo_password] => :environment do |t, args|
puts "Starting presence:install_xmpp_server"
user = SocialStream::Presence::XmppServerOrder::getExecutorUser
unless user
puts "Specify ssh_user for remote access!"
exit 0
end
#Get password
if args[:sudo_password]
password = args[:sudo_password]
else
puts "[sudo] password for " + user + ":\n"
system "stty -echo"
password = STDIN.gets.chomp
system "stty echo"
if password.gsub(" ","")=="" and user != "root"
puts "Please specify [sudo] password for " + user + " to execute the installer"
puts "You can provide it from keyboard input or execute the task as presence:install:xmpp_server[sudo_password]"
exit 0
end
end
#Copy files
Rake::Task["presence:install:copy_xmpp_server_files"].execute
commands = []
#Give permissions to installation script
commands << "chmod +x " + SocialStream::Presence.scripts_path + "/sstream_ejabberd_files/installer.sh"
#Get autoconfiguration values
options = SocialStream::Presence::XmppServerOrder::autoconf([])
#Execute installation script
commands << "echo " + password + " | sudo -S " + SocialStream::Presence.scripts_path + "/sstream_ejabberd_files/installer.sh \"ejabberd_module_path=" + SocialStream::Presence.ejabberd_module_path + "\" \"scripts_path=" + SocialStream::Presence.scripts_path + "\" \"" + options + "\""
#Execution order
output = SocialStream::Presence::XmppServerOrder::executeCommands(commands)
puts output
if SocialStream::Presence.secure_rest_api
#Generate RSA Keys
Rake::Task["presence:install:generate_RSA_keys"].execute
end
puts "Installation complete"
end
desc "Autoconfigure options"
task :autoconfigure_xmpp_server, [:options] => :environment do |t, args|
puts "Starting presence:install:autoconfigure_xmpp_server"
if args[:options]
manual_options = args[:options].split(';')
manual_options.each do |option|
if option.split('=').length != 2
puts "Syntax error: presence:install:autoconfigure_xmpp_server[key1=value1;key2=value2;removeThiskey=remove]"
end
end
else
manual_options = []
end
commands = []
options = SocialStream::Presence::XmppServerOrder::autoconf(manual_options)
commands << SocialStream::Presence.scripts_path + "/sstream_ejabberd_files/installer.sh \"onlyconf=true\" \"" + options + "\""
#Execution order
output = SocialStream::Presence::XmppServerOrder::executeCommands(commands)
puts output
puts "Autoconfigure complete"
end
desc "Generate and distribute RSA Keys"
task :generate_RSA_keys => :environment do
puts "Starting presence:generate_RSA_keys"
presence_root = File.expand_path("../../../../", __FILE__)
webKeysPath = presence_root + "/rsa_keys";
xmppKeysPath = SocialStream::Presence.scripts_path + "/rsa_keys";
puts "Cleaning previous keys"
#Cleaning Keys path
SocialStream::Presence::XmppServerOrder::executeLocalCommand("rm -r " + webKeysPath)
SocialStream::Presence::XmppServerOrder::executeLocalCommand("mkdir -p " + webKeysPath)
SocialStream::Presence::XmppServerOrder::executeCommands(["rm -r " + xmppKeysPath,"mkdir -p " + xmppKeysPath])
puts "Generating new keys"
#Generating RSA Keys
SocialStream::Presence::XmppServerOrder::generateRSAKeys(webKeysPath)
puts "Copy keys to the Xmpp Server"
#Copy Xmpp Keys to the Xmpp Server
SocialStream::Presence::XmppServerOrder::copyFolderToXmppServer(webKeysPath,xmppKeysPath)
#Remove not own private keys
puts "Removing not own private keys"
SocialStream::Presence::XmppServerOrder::executeLocalCommand("rm -r " + webKeysPath + "/xmpp_rsa_key_private.pem")
SocialStream::Presence::XmppServerOrder::executeCommands(["rm -r " + xmppKeysPath + "/web_rsa_key_private.pem"])
puts "Generate_RSA_keys: Task complete"
end
end
end