From dc27467490044d9dcb959c3847f5ebbf484273d3 Mon Sep 17 00:00:00 2001 From: Felipe Cecagno <fcecagno@gmail.com> Date: Thu, 28 Feb 2013 16:35:22 -0300 Subject: [PATCH] check if the metadata passed in the create call is empty; raise an exception if the private key isn't found on the recording server; updated the deploy script using the ideas implemented on chef --- record-and-playback/deploy.sh | 50 +++++++++++-------- .../mconf/scripts/mconf-decrypt.rb | 3 ++ .../mconf/scripts/publish/mconf.rb | 21 +++++--- 3 files changed, 47 insertions(+), 27 deletions(-) diff --git a/record-and-playback/deploy.sh b/record-and-playback/deploy.sh index 04ef9bc558..fb88aebdf2 100755 --- a/record-and-playback/deploy.sh +++ b/record-and-playback/deploy.sh @@ -25,24 +25,37 @@ echo echo "+++++ Building record-and-playback" cd ~/dev/bigbluebutton/record-and-playback/ -sudo rm -f /usr/local/bigbluebutton/core/scripts/*.rb -sudo rm -f /usr/local/bigbluebutton/core/scripts/process/*.rb -sudo rm -f /usr/local/bigbluebutton/core/scripts/publish/*.rb -#sudo rm -f /usr/local/bigbluebutton/core/scripts/*.yml -sudo rm -f /usr/local/bigbluebutton/core/scripts/*.nginx +sudo cp core/Gemfile /usr/local/bigbluebutton/core/Gemfile +sudo rm -rf /usr/local/bigbluebutton/core/lib +sudo cp -r core/lib /usr/local/bigbluebutton/core/ +sudo rm -rf /usr/local/bigbluebutton/core/scripts +sudo cp -r core/scripts /usr/local/bigbluebutton/core/ +sudo rm -rf /etc/bigbluebutton/god +sudo cp -r core/god/god /etc/bigbluebutton/ +sudo rm -f /etc/init.d/bbb-record-core +sudo cp core/god/initd.god /etc/init.d/bbb-record-core +sudo chmod 0755 /etc/init.d/bbb-record-core +sudo rm -rf /var/bigbluebutton/playback/* -sudo cp -r core/god/* /etc/bigbluebutton/ -sudo cp -r core/lib/* /usr/local/bigbluebutton/core/lib/ -sudo cp -r core/scripts/* /usr/local/bigbluebutton/core/scripts/ +function deploy_format() { + local formats=$1 + for format in $formats + do + playback_dir="$format/playback/$format" + scripts_dir="$format/scripts" + if [ -d $playback_dir ]; then sudo cp -r $playback_dir /var/bigbluebutton/playback/; fi + if [ -d $scripts_dir ]; then sudo cp -r $scripts_dir/* /usr/local/bigbluebutton/core/scripts/; fi + sudo mkdir -p /var/log/bigbluebutton/$format + done +} -if [ $# -eq 0 ]; then - PLAYBACK_LIST="slides presentation" - - # Mconf specific files +RECORDING_SERVER=false +if $RECORDING_SERVER ; then sudo cp mconf/scripts/mconf-god-conf.rb /etc/bigbluebutton/god/conf/ sudo cp mconf/scripts/mconf-decrypt.rb /usr/local/bigbluebutton/core/scripts/ + deploy_format "presentation" else - PLAYBACK_LIST="$1" + deploy_format "mconf" fi sudo mkdir -p /var/bigbluebutton/playback/ @@ -54,13 +67,8 @@ sudo mkdir -p /var/bigbluebutton/recording/status/archived/ sudo mkdir -p /var/bigbluebutton/recording/status/processed/ sudo mkdir -p /var/bigbluebutton/recording/status/sanity/ -for PLAYBACK in $PLAYBACK_LIST -do - if [ -d $PLAYBACK/playback ]; then sudo cp -r $PLAYBACK/playback/* /var/bigbluebutton/playback/; fi - if [ -d $PLAYBACK/scripts ]; then sudo cp -r $PLAYBACK/scripts/* /usr/local/bigbluebutton/core/scripts/; fi - sudo cp -f $PLAYBACK/scripts/*-god-conf.rb /etc/bigbluebutton/god/conf/ - sudo mkdir -p /var/log/bigbluebutton/$PLAYBACK -done +sudo mv /usr/local/bigbluebutton/core/scripts/*.nginx /etc/bigbluebutton/nginx/ sudo chown -R tomcat6:tomcat6 /var/bigbluebutton/ /var/log/bigbluebutton/ -sudo cp -f /usr/local/bigbluebutton/core/scripts/*.nginx /etc/bigbluebutton/nginx/ +cd /usr/local/bigbluebutton/core/ +sudo bundle install diff --git a/record-and-playback/mconf/scripts/mconf-decrypt.rb b/record-and-playback/mconf/scripts/mconf-decrypt.rb index 24cd4d5190..c6782bc34d 100755 --- a/record-and-playback/mconf/scripts/mconf-decrypt.rb +++ b/record-and-playback/mconf/scripts/mconf-decrypt.rb @@ -85,6 +85,9 @@ if not get_recordings_url.nil? and not get_recordings_url.empty? writeOut.close if key_file != decrypted_key_file + if not File.exists("#{private_key}") + raise "Couldn't find the private key on #{private_key}" + end command = "openssl rsautl -decrypt -inkey #{private_key} < #{key_file} > #{decrypted_key_file}" status = BigBlueButton.execute(command) if not status.success? diff --git a/record-and-playback/mconf/scripts/publish/mconf.rb b/record-and-playback/mconf/scripts/publish/mconf.rb index 64f78423ce..d6ca09f5b7 100755 --- a/record-and-playback/mconf/scripts/publish/mconf.rb +++ b/record-and-playback/mconf/scripts/publish/mconf.rb @@ -25,6 +25,8 @@ require 'cgi' require 'digest/md5' bbb_props = YAML::load(File.open('../../core/scripts/bigbluebutton.yml')) +mconf_props = YAML::load(File.open('mconf.yml')) + recording_dir = bbb_props['recording_dir'] playback_host = bbb_props['playback_host'] published_dir = bbb_props['published_dir'] @@ -70,11 +72,11 @@ done_files.each do |df| FileUtils.rm_f "#{meeting_id}.zip" key_filename = "" - if metadata.has_key?('mconflb-rec-server-key') + if metadata.has_key?('mconflb-rec-server-key') and not metadata['mconflb-rec-server-key'].to_s.empty? key_filename = "#{meeting_id}.enc" + # The key is already unescaped in the metadata!! #BigBlueButton.logger.info("Unescaping public key") #public_key_decoded = CGI::unescape("#{metadata['public-key'].to_s}") - # The key is already unescaped in the metadata!! public_key_decoded = "#{metadata['mconflb-rec-server-key'].to_s}" public_key_filename = "public-key.pem" public_key = File.new("#{public_key_filename}", "w") @@ -144,10 +146,17 @@ done_files.each do |df| FileUtils.cp_r(meeting_publish_dir, "#{published_dir}/mconf") BigBlueButton.logger.info("Removing processed files: #{meeting_process_dir}") - FileUtils.remove_entry_secure meeting_process_dir, :force => true, :verbose => true + FileUtils.rm_r meeting_process_dir, :force => true BigBlueButton.logger.info("Removing published files: #{meeting_publish_dir}") - FileUtils.remove_entry_secure meeting_publish_dir, :force => true, :verbose => true + FileUtils.rm_r meeting_publish_dir, :force => true + + # it doesn't work since video and deskshare files are owned by red5, + # freeswitch files are owned by freeswitch, and this script is ran by + # tomcat6, so it can just remove files owned by tomcat6 + FileUtils.rm_r [ "/usr/share/red5/webapps/video/streams/#{meeting_id}", + "/usr/share/red5/webapps/deskshare/streams/#{meeting_id}", + Dir.glob("/var/freeswitch/meetings/#{meeting_id}*.wav") ], :force => true # Remove all the recording flags FileUtils.rm_f [ "#{recording_dir}/status/processed/#{meeting_id}-mconf.done", @@ -157,9 +166,9 @@ done_files.each do |df| # Comment it for testing BigBlueButton.logger.info("Removing the recording raw files: #{meeting_raw_dir}") - FileUtils.remove_entry_secure meeting_raw_dir, :force => true, :verbose => true + FileUtils.rm_r meeting_raw_dir, :force => true BigBlueButton.logger.info("Removing the recording presentation: #{meeting_raw_presentation_dir}") - FileUtils.remove_entry_secure meeting_raw_presentation_dir, :force => true, :verbose => true + FileUtils.rm_r meeting_raw_presentation_dir, :force => true end end end -- GitLab