diff --git a/.gitignore b/.gitignore index b92a79e654..9b52e7b525 100644 --- a/.gitignore +++ b/.gitignore @@ -14,3 +14,6 @@ bin csv .metadata .idea +release/target-as7 +release/target-tomcat +*.iml \ No newline at end of file diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000000..334c864988 --- /dev/null +++ b/pom.xml @@ -0,0 +1,113 @@ + + + + org.restcomm + restcomm-parent + 4.0.1 + + 4.0.0 + org.restcomm + restcomm-connect-root + 9.0.0-SNAPSHOT + pom + + restcomm + release + + + scm:git:https://github.com/RestComm/Restcomm-Connect.git + scm:git:git@github.com:RestComm/Restcomm-Connect.git + https://github.com/RestComm/Restcomm-Connect + + + + + restcomm-releases-repository + Restcomm Releases Repository + https://oss.sonatype.org/service/local/staging/deploy/maven2 + + + + restcomm-snapshots-repository + Restcomm Snapshots Repository + https://oss.sonatype.org/content/repositories/snapshots + + + + + UTF-8 + 6.0.23 + 2.5 + + + + + mobicents-public-repository-group + Mobicens Public Maven Repository Group + https://oss.sonatype.org/content/groups/public + default + + true + never + + + true + never + + + + jboss-public-repository-group + JBoss Public Maven Repository Group + https://repository.jboss.org/nexus/content/groups/public-jboss/ + default + + true + never + + + true + never + + + + cxsnexus-releases + http://cxsnexus.restcomm.com/nexus/content/repositories/releases/ + default + + + + + + + + + mobicents-public-repository-group + Mobicens Public Maven Repository Group + https://oss.sonatype.org/content/groups/public + default + + true + never + + + true + never + + + + jboss-public-repository-group + JBoss Public Maven Repository Group + https://repository.jboss.org/nexus/content/groups/public-jboss/ + default + + true + never + + + true + never + + + + diff --git a/release/pom.xml b/release/pom.xml new file mode 100644 index 0000000000..94fcfd8e2b --- /dev/null +++ b/release/pom.xml @@ -0,0 +1,57 @@ + + + 4.0.0 + + org.restcomm + restcomm-connect-root + 9.0.0-SNAPSHOT + + assembly-parent + pom + + + + org.restcomm + restcomm-connect-rvd + [1.2,1.2.999) + war + + + org.mobicents.webrtc + webrtc-ui + [1.1,1.1.999) + war + + + org.mobicents.media + server + ${mobicents.mgcp.impl.version} + zip + assembly + + + org.restcomm + restcomm-connect.application + ${project.version} + war + + + org.restcomm + restcomm-connect-management + ${project.version} + war + + + + + restcomm-assembly-as7 + + + + + cxsnexus-releases + http://cxsnexus.restcomm.com/nexus/content/repositories/releases/ + default + + + diff --git a/release/restcomm-assembly-as7/Dockerfile_all-in-one b/release/restcomm-assembly-as7/Dockerfile_all-in-one new file mode 100644 index 0000000000..dc2c121d91 --- /dev/null +++ b/release/restcomm-assembly-as7/Dockerfile_all-in-one @@ -0,0 +1,73 @@ +FROM phusion/baseimage:latest + +MAINTAINER George Vagenas - gvagenas@telestax.com +MAINTAINER Jean Deruelle - jean.deruelle@telestax.com +MAINTAINER Lefteris Banos - liblefty@telestax.com +MAINTAINER Yorgos Saslis - yorgos.saslis@telestax.com + +ENV install_dir /opt/Restcomm-JBoss-AS7 +ARG CONNECT_VERSION + +# Use baseimage-docker's init system. +CMD ["/sbin/my_init"] + +EXPOSE 5080/udp 5080/tcp 5081/tcp 5082/tcp 5083/tcp 8080/tcp 8443/tcp 5060/udp 5060/tcp 5061/tcp 5062/tcp 5063/tcp 80/tcp 443/tcp 9990/tcp 65000-65535/udp + + +ENV DEBIAN_FRONTEND noninteractive +ENV JAVA_HOME /usr/lib/jvm/java-1.7.0-openjdk-amd64 + +RUN locale-gen en_US en_US.UTF-8 && dpkg-reconfigure locales + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-cache search mysql-client-core \ + && apt-get update \ + && apt-get install -y screen \ + wget \ + ipcalc \ + bsdtar \ + openjdk-7-jdk \ + mysql-client-core-5.7 \ + openssl \ + unzip \ + nfs-common \ + tcpdump \ + dnsutils \ + net-tools \ + xmlstarlet \ + && apt-get autoremove \ + && apt-get autoclean \ + && rm -rf /var/lib/apt/lists/* + + +# one idea here would be to move to different dockerfiles per directory, in order to replace the `CONNECT_VERSION` parameter +# and also keep multiple builds around, for different LTS versions... +ADD target/Restcomm-JBoss-AS7-${CONNECT_VERSION}.tar.gz /opt/ + +RUN mv /opt/Restcomm-JBoss-AS7-*/ ${install_dir} \ + && mkdir -p /opt/embed/ \ + && mkdir -p /etc/my_init.d + +ADD ./src/main/docker/ca-startcom.der /opt/Restcomm-JBoss-AS7/ca-startcom.der +ADD ./src/main/docker/cron_files/tcpdump_crontab /etc/cron.d/restcommtcpdump-cron +ADD ./src/main/docker/cron_files/core_crontab /etc/cron.d/restcommcore-cron +ADD ./src/main/docker/cron_files/mediaserver_crontab /etc/cron.d/restcommmediaserver-cron +ADD ./src/main/docker/scripts/dockercleanup.sh /opt/embed/dockercleanup.sh +ADD ./src/main/docker/scripts/docker_do.sh /opt/embed/restcomm_docker.sh + +ADD ./src/main/docker/scripts/restcomm_autoconf.sh /etc/my_init.d/restcomm1.sh +ADD ./src/main/docker/scripts/restcomm_conf.sh /etc/my_init.d/restcomm2.sh +ADD ./src/main/docker/scripts/restcomm_sslconf.sh /etc/my_init.d/restcomm3.sh +ADD ./src/main/docker/scripts/restcomm_extconf.sh /etc/my_init.d/restcomm4.sh +ADD ./src/main/docker/scripts/restcomm_toolsconf.sh /etc/my_init.d/restcomm5.sh +ADD ./src/main/docker/scripts/restcomm-runlevels.sh /etc/my_init.d/restcomm6.sh +ADD ./src/main/docker/scripts/restcomm_tag.sh /etc/my_init.d/restcomm7.sh + +ADD ./src/main/docker/scripts/restcomm_service.sh /tmp/restcomm_service.sh +ADD ./src/main/docker/scripts/rms_service.sh /tmp/rms_service.sh +ADD ./src/main/docker/scripts/start-mediaserver.sh /tmp/start-mediaserver.sh +ADD ./src/main/docker/scripts/start-restcomm.sh /tmp/start-restcomm.sh + +RUN chmod +x /etc/my_init.d/restcomm*.sh + + diff --git a/release/restcomm-assembly-as7/Dockerfile_standalone b/release/restcomm-assembly-as7/Dockerfile_standalone new file mode 100644 index 0000000000..fa2f564170 --- /dev/null +++ b/release/restcomm-assembly-as7/Dockerfile_standalone @@ -0,0 +1,71 @@ +FROM phusion/baseimage:latest + +MAINTAINER George Vagenas - gvagenas@telestax.com +MAINTAINER Jean Deruelle - jean.deruelle@telestax.com +MAINTAINER Lefteris Banos - liblefty@telestax.com +MAINTAINER Yorgos Saslis - yorgos.saslis@telestax.com + +ENV install_dir /opt/Restcomm-JBoss-AS7 +ARG CONNECT_VERSION + +# Use baseimage-docker's init system. +CMD ["/sbin/my_init"] + +EXPOSE 5080/udp 5080/tcp 5081/tcp 5082/tcp 5083/tcp 8080/tcp 8443/tcp 5060/udp 5060/tcp 5061/tcp 5062/tcp 5063/tcp 80/tcp 443/tcp 9990/tcp 65000-65535/udp + + +ENV DEBIAN_FRONTEND noninteractive +ENV JAVA_HOME /usr/lib/jvm/java-1.7.0-openjdk-amd64 + +RUN locale-gen en_US en_US.UTF-8 && dpkg-reconfigure locales + +RUN add-apt-repository ppa:openjdk-r/ppa -y \ + && apt-cache search mysql-client-core \ + && apt-get update \ + && apt-get install -y screen \ + wget \ + ipcalc \ + bsdtar \ + openjdk-7-jdk \ + mysql-client-core-5.7 \ + openssl \ + unzip \ + nfs-common \ + tcpdump \ + dnsutils \ + net-tools \ + xmlstarlet \ + && apt-get autoremove \ + && apt-get autoclean \ + && rm -rf /var/lib/apt/lists/* + + +# one idea here would be to move to different dockerfiles per directory, in order to replace the `CONNECT_VERSION` parameter +# and also keep multiple builds around, for different LTS versions... +ADD target/Connect-JBoss-AS7-${CONNECT_VERSION}.tar.gz /opt/ + +RUN mv /opt/Restcomm-JBoss-AS7-*/ ${install_dir} \ + && mkdir -p /opt/embed/ \ + && mkdir -p /etc/my_init.d + +ADD ./src/main/docker/ca-startcom.der /opt/Restcomm-JBoss-AS7/ca-startcom.der +ADD ./src/main/docker/cron_files/tcpdump_crontab /etc/cron.d/restcommtcpdump-cron +ADD ./src/main/docker/cron_files/core_crontab /etc/cron.d/restcommcore-cron + +ADD ./src/main/docker/scripts/dockercleanup.sh /opt/embed/dockercleanup.sh +ADD ./src/main/docker/scripts/docker_do.sh /opt/embed/restcomm_docker.sh + +ADD ./src/main/docker/scripts/restcomm_autoconf.sh /etc/my_init.d/restcomm1.sh +ADD ./src/main/docker/scripts/restcomm_conf.sh /etc/my_init.d/restcomm2.sh +ADD ./src/main/docker/scripts/restcomm_sslconf.sh /etc/my_init.d/restcomm3.sh +ADD ./src/main/docker/scripts/restcomm_extconf.sh /etc/my_init.d/restcomm4.sh +ADD ./src/main/docker/scripts/restcomm_toolsconf.sh /etc/my_init.d/restcomm5.sh +ADD ./src/main/docker/scripts/restcomm-runlevels.sh /etc/my_init.d/restcomm6.sh +ADD ./src/main/docker/scripts/restcomm_tag.sh /etc/my_init.d/restcomm7.sh + +ADD ./src/main/docker/scripts/restcomm_service.sh /tmp/restcomm_service.sh +ADD ./src/main/docker/scripts/start-restcomm.sh /tmp/start-restcomm.sh + +RUN chmod +x /etc/my_init.d/restcomm*.sh + + diff --git a/release/restcomm-assembly-as7/pom.xml b/release/restcomm-assembly-as7/pom.xml new file mode 100644 index 0000000000..2b7f15029b --- /dev/null +++ b/release/restcomm-assembly-as7/pom.xml @@ -0,0 +1,265 @@ + + + 4.0.0 + + org.restcomm + assembly-parent + 9.0.0-SNAPSHOT + + org.restcomm + assembly-as7 + pom + + UTF-8 + 3.2.0-89 + ${project.version} + + + + all-in-one + + + org.restcomm + restcomm-connect-rvd + war + + + org.restcomm + restcomm-connect.application + war + + + + org.restcomm + restcomm-connect-management + war + + + org.mobicents.webrtc + webrtc-ui + war + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.0.1 + + + extractSipServlets + prepare-package + + unpack + + + + + org.mobicents.servlet.sip + sip-servlets-as7 + ${sipservletapi.version} + zip + assembly + + + + + + extractMediaserver + prepare-package + + unpack + + + + + org.mobicents.media + server + zip + assembly + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.0 + + + src/main/resources/descriptor_all-in-one.xml + + Restcomm-JBoss-AS7-${project.version} + false + + + + package + + single + + + + + + io.fabric8 + docker-maven-plugin + 0.25.2 + + + + + restcomm/restcomm + + + ${project.version} + latest + + ${*} + ../../../Dockerfile_all-in-one + + + + + + + build + package + + build + + + + start + package + + + + + + stop + post-integration-test + + + + + + + + + + + standalone + + + org.restcomm + restcomm-connect.application + war + + + + org.restcomm + restcomm-connect-management + war + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.0.1 + + + extractSipServlets + prepare-package + + unpack + + + + + org.mobicents.servlet.sip + sip-servlets-as7 + ${sipservletapi.version} + zip + assembly + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.0 + + + src/main/resources/descriptor_standalone.xml + + Connect-JBoss-AS7-${project.version} + false + + + + package + + single + + + + + + io.fabric8 + docker-maven-plugin + 0.25.2 + + + + + restcomm/connect + + + ${project.version} + latest + + ${*} + ../../../Dockerfile_standalone + + + + + + + build + package + + build + + + + start + package + + + + + + stop + post-integration-test + + + + + + + + + + + + diff --git a/release/restcomm-assembly-as7/src/main/docker/ca-startcom.der b/release/restcomm-assembly-as7/src/main/docker/ca-startcom.der new file mode 100644 index 0000000000..b60dea2484 Binary files /dev/null and b/release/restcomm-assembly-as7/src/main/docker/ca-startcom.der differ diff --git a/release/restcomm-assembly-as7/src/main/docker/cron_files/core_crontab b/release/restcomm-assembly-as7/src/main/docker/cron_files/core_crontab new file mode 100644 index 0000000000..acf97e5f83 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/cron_files/core_crontab @@ -0,0 +1,3 @@ +5 8 * * 0 root find /opt/Restcomm-JBoss-AS7/standalone/log/server.log -mtime +7 -exec rm {} \; +# An empty line is required at the end of this file for a valid cron file. + diff --git a/release/restcomm-assembly-as7/src/main/docker/cron_files/mediaserver_crontab b/release/restcomm-assembly-as7/src/main/docker/cron_files/mediaserver_crontab new file mode 100644 index 0000000000..642f8951bd --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/cron_files/mediaserver_crontab @@ -0,0 +1,3 @@ +5 8 * * 0 root find /opt/Restcomm-JBoss-AS7/mediaserver/log/server.log -mtime +7 -exec rm {} \; +# An empty line is required at the end of this file for a valid cron file. + diff --git a/release/restcomm-assembly-as7/src/main/docker/cron_files/tcpdump_crontab b/release/restcomm-assembly-as7/src/main/docker/cron_files/tcpdump_crontab new file mode 100644 index 0000000000..d4d1f829ee --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/cron_files/tcpdump_crontab @@ -0,0 +1,4 @@ +5 8 * * 0 root find /path/to/restcomm_trace_* -mtime +7 -exec rm {} \; +# An empty line is required at the end of this file for a valid cron file. + + diff --git a/release/restcomm-assembly-as7/src/main/docker/scripts/docker_do.sh b/release/restcomm-assembly-as7/src/main/docker/scripts/docker_do.sh new file mode 100644 index 0000000000..339363f290 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/scripts/docker_do.sh @@ -0,0 +1,357 @@ +#!/bin/bash + +DATE=$(date +%F_%H_%M) +DIR_NAME=restcomm_$DATE + +RESTCOMM_LOG_BASE=/var/log +RESTCOMM_TRACE=$RESTCOMM_LOG_BASE/$RESTCOMM_TRACE_LOG +LOGS_DIR_ZIP=$RESTCOMM_LOG_BASE/$DIR_NAME +LOGS_DIR_HOST=$LOGS_DIR_ZIP/host + + +SYSLOGS_DIR=/var/log + +restcomm_version () { + if [ -d "$LOGS_DIR_HOST" ]; then + cp $RESTCOMM_LOG_BASE/version $LOGS_DIR_HOST/ + return 0 + fi + exit 1 +} + +docker_logs () { +if [ -d "$LOGS_DIR_HOST" ]; then + docker logs $1 2>&1 | head -n 1250 > $LOGS_DIR_HOST/DockerLogs + return 0 + fi + exit 1 +} + +system_usage_info () { +if [ -d "$LOGS_DIR_HOST" ]; then + echo CPU\(s\): `top -b -n1 | grep "Cpu(s)" | awk '{print $2" : " $4}'` > $LOGS_DIR_HOST/usage_stats_$DATE + echo >> $LOGS_DIR_HOST/usage_stats_$DATE + top -b -n1 | grep Mem >> $LOGS_DIR_HOST/usage_stats_$DATE + ps aux > $LOGS_DIR_HOST/top_$DATE + return 0 + fi + exit 1 +} + +sys_date() { +if [ -d "$LOGS_DIR_HOST" ]; then + echo `date` > $LOGS_DIR_HOST/sys_date.txt + return 0 + fi + exit 1 +} + +netstat_stats () { + +if [ -d "$LOGS_DIR_HOST" ]; then + echo "----------------------- netstat -s ---------------------------" > $LOGS_DIR_HOST/netstat_stats_$DATE + netstat -s >> $LOGS_DIR_HOST/netstat_stats_$DATE + echo >> $LOGS_DIR_HOST/netstat_stats_$DATE + echo >> $LOGS_DIR_HOST/netstat_stats_$DATE + echo "----------------------- netstat -anp ---------------------------" >> $LOGS_DIR_HOST/netstat_stats_$DATE + netstat -anp >> $LOGS_DIR_HOST/netstat_stats_$DATE + return 0 + fi + exit 1 +} + +tcpdump_logs () { +if [ -d "$LOGS_DIR_HOST" ]; then + ls -t1 $RESTCOMM_TRACE/*.pcap* | head -n 2 | xargs -i -exec cp -p {} $LOGS_DIR_ZIP/ + return 0 + fi + exit 1 +} + +system_logs () { +if [ -d "$LOGS_DIR_HOST" ]; then + if [ -f $SYSLOGS_DIR/messages ]; then + cp $SYSLOGS_DIR/messages $LOGS_DIR_HOST/ + fi + if [ -f $SYSLOGS_DIR/syslog ]; then + cp $SYSLOGS_DIR/syslog $LOGS_DIR_HOST/ + fi + return 0 + fi + exit 1 +} + +collect_logs () { +echo -en "\e[92mpull collect logs container $1 , file: $LOGS_DIR_ZIP \e[0m\n" +time_logs="" +if $tflag ; then + time_logs="-t $time_marg" + echo $time_marg +fi + +if $zflag ; then + dtar="-z" +fi + +mkdir -p $LOGS_DIR_HOST + +tcpdump_logs +docker_logs $1 +netstat_stats +system_usage_info +system_logs +restcomm_version +sys_date + +docker exec $1 /bin/sh -c "/opt/Restcomm-JBoss-AS7/bin/restcomm/logs_collect.sh $time_logs $dtar" +} + + +stop_container () { + echo -en "\e[92mstop container $1\e[0m\n" + docker stop $1 +} + +start_container () { + echo -en "\e[92mstart container $1\e[0m\n" + docker start $1 +} + +run_container () { + echo -en "\e[92mrun container\e[0m\n" + echo "need to be done" +} + +pull_container () { + echo -en "\e[92mpull container $1\e[0m\n" + docker pull $1 +} + +info_container () { + docker ps; +} + +collect_logs_time () { +echo -en "\e[92mpull collect logs by time for container $1\e[0m\n" +docker exec $1 /bin/sh -c "/opt/Restcomm-JBoss-AS7/bin/restcomm/logs_collect.sh $2" +} + +docker_login() { + docker login +} + +delete_container () { +read -p "Are you sure about deleting container $1? " -n 1 -r +echo # (optional) move to a new line +if [[ $REPLY =~ ^[Yy]$ ]] +then + echo -en "\e[92mdelete container $1\e[0m\n" + docker rm $1 +else + echo "container no deleted" + exit 1 +fi +} + +change_log() { + echo -en "\e[92mchange log level for $2 to $3 for container $1\e[0m\n" + docker exec $1 /bin/sh -c "/opt/Restcomm-JBoss-AS7/bin/restcomm/set-log-level.sh $2 $3" +} + +usage () { + cat << EOF +Usage: docker_do.sh + +options: +-s : stop container (-c obligatory). +-S : start container (-c obligatory). +-r : run new container (-H obligatory). Optional (-n). +-H : Host name (only with -r) +-n : Container name (only with -r), if not used default name "telscale-restcomm" +-l : collect logs (-c obligatory). +-z : Create Tar file, and delete the original directory. +-t : collect logs by time (-l obligatory) e.g. "21:03:0*,22:00:0*". +-i : running containers. +-p : pull from hub (-L obligatory). +-L : login to docker hub. +-c : container to use. +-a : change log level (-c CONTAINER-a "servlet govnist" -k WARN or -c CONTAINER -a "servlet" -k INFO , -c CONTAINER -a list , etc) +-k : set log level (Can be used only with -a) +-d : delete container. +-h : prints this message +EOF + exit 1 +} + +#MAIN +sflag=false +Sflag=false +rflag=false +lflag=false +cflag=false +pflag=false +iflag=false +Lflag=false +iflag=false +dflag=false +tflag=false +Hflag=false +nflag=false +zflag=false +aflag=false +kflag=false +login=false + + +#Global variables + container_name="telscale-restcomm" + +if [ $# -eq 0 ]; +then + usage + exit 0 +else + + while getopts ":rH:n:sSp:c:a:k:ilLdht:z" opt; do + case $opt in + s ) + sflag=true + ;; + S ) + Sflag=true + ;; + H ) + Hflag=true + host=$OPTARG + ;; + n ) + nflag=true + container_name=$OPTARG + ;; + r ) + rflag=true + ;; + l ) + lflag=true + ;; + c ) + cflag=true + container=$OPTARG + ;; + p ) + pflag=true + pull_repo=$OPTARG + ;; + t ) + tflag=true + time_marg=$OPTARG + ;; + i ) + iflag=true + ;; + L ) + Lflag=true + ;; + + d ) + dflag=true + ;; + z ) + zflag=true + ;; + a ) + aflag=true + input=$OPTARG + ;; + k ) + kflag=true + level=$OPTARG + ;; + h ) + usage + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + :) + if ("$opt" = "p"); then + pull_repo="restcomm/restcomm-cloud:master" + read -p "Default hub repo $pull_repo will be used OK?" -n 1 -r + echo # move to a new line + if [[ $REPLY =~ ^[Yy]$ ]] + then + pflag=true + continue + else + echo + fi + fi + echo "Option -$OPTARG requires an argument." >&2 + exit 1 + ;; + esac + done; + + + if [[ ( "$sflag" = "true" || "$Sflag" = "true" || "$lflag" = "true" || "$dflag" = "true" || "$aflag" = "true" ) && ( "$cflag" = "false" ) ]]; then + echo " For flags (-s, -S, -l, -d, -a) a container must be specified (-c) " >&2 + exit 1 + fi + + if [[ "$aflag" = "true" && "$input" != "list" && "$kflag" = "false" ]]; then + echo " For flag -a flag -k must be specified " >&2 + exit 1 + fi + + if [[ "$tflag" = "true" && "$lflag" = "false" ]]; then + echo " For flag -t flag -l must be specified " >&2 + exit 1 + fi + + if [[ "$rflag" = "true" && "$Hflag" = "false" ]]; then + echo " To run a container Hostname is necessary (flag -H) " >&2 + exit 1 + fi + + if $lflag ; then + collect_logs $container + fi + + + if $sflag ; then + stop_container $container + fi + + if $Lflag ; then + login=true + docker_login + fi + + if $pflag ; then + if ! $login ; then + echo -en "\e[31mMake sure you are connected to docker hub (-L)\e[0m\n" + fi + pull_container $pull_repo + fi + + if $dflag ; then + delete_container $container + fi + + if $Sflag ; then + start_container $container + fi + + if $rflag ; then + run_container $host + fi + + if $iflag ; then + info_container + fi + + if $aflag ; then + change_log $container \""$input"\" $level + fi +fi \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/docker/scripts/dockercleanup.sh b/release/restcomm-assembly-as7/src/main/docker/scripts/dockercleanup.sh new file mode 100644 index 0000000000..34ce6ebd7d --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/scripts/dockercleanup.sh @@ -0,0 +1,27 @@ +#!/bin/bash + +log() { + logger -s -t $(basename $0) $1 +} + + +read -p "Are you sure you want to proceed, all stopped containers will be deleted? " -n 1 -r +echo # (optional) move to a new line +if [[ $REPLY =~ ^[Yy]$ ]]; then + # If yes & enter - proceed to delete stopped containers and unused images. + log "Started" + + containers=$(docker ps -a -q -f "status=exited") + if [ -n "${containers}" ]; then + log "Cleanup stopped container id(s): ${containers}" + docker rm $containers + fi + + images=$(docker images -q --filter "dangling=true") + if [ -n "${images}" ]; then + log "Cleanup dangling image id(s): ${images}" + docker rmi $images + fi + + log "Done" +fi \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm-runlevels.sh b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm-runlevels.sh new file mode 100644 index 0000000000..2d97f10056 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm-runlevels.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +mkdir -p /etc/runit/runsvdir/default +mkdir -p /etc/runit/runsvdir/second + +cd /etc/runit/runsvdir +ln -s default /etc/runit/runsvdir/current +cp -pR /etc/service/* /etc/runit/runsvdir/current/ +mv -f /etc/service /service.old && ln -s /etc/runit/runsvdir/current /etc/service + +#auto delete script after run once. No need more. +rm -- "$0" \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_autoconf.sh b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_autoconf.sh new file mode 100644 index 0000000000..20eba4a147 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_autoconf.sh @@ -0,0 +1,54 @@ +#!/bin/bash + +#Maintainer Lefteris Banos -liblefty@telestax.com + +echo "Will check if Enviromental variables script file is set" + +CONFFILE=/tmp/conf.sh + +function download_conf(){ +echo "url $1 $2 $3" +if [[ `wget -S --spider $1 $2 $3 2>&1 | grep 'HTTP/1.1 200 OK'` ]]; then + if [ -n "$2" ] && [ -n "$3" ]; then + wget $1 $2 $3 -O $4 + else + wget $1 -O $2 + fi + return 0; + else + echo "false" + wget -S --spider $1 $2 $3 + exit 1; + fi +} + + +function run_conf(){ + echo "Run configuratin file /tmp/conf.sh" + if [ -f $CONFFILE ]; then + chmod +x $CONFFILE + source $CONFFILE + rm -f $CONFFILE + return 0 + else + echo "$CONFFILE not found." + return 1 + fi +} + +if [ -n "$ENVCONFURL" ]; then + echo "Configuration file URL is: $ENVCONFURL" + if [ -n "$REPOUSR" ] && [ -n "$REPOPWRD" ]; then + USR="--user=$REPOUSR" + PASS="--password=$REPOPWRD" + fi + URL="$ENVCONFURL $USR $PASS" + download_conf $URL $CONFFILE + run_conf +fi + +#auto delete script after run once. No need more. +rm -- "$0" + + + diff --git a/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_conf.sh b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_conf.sh new file mode 100644 index 0000000000..3f9660a5a9 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_conf.sh @@ -0,0 +1,43 @@ +#!/bin/bash +#Maintainer Lefteris Banos -liblefty@telestax.com +#Maintainer Maria Farooq -maria.farooq@telestax.com + +echo "Will configure advanced.conf" + +source /etc/container_environment.sh + +BASEDIR=/opt/Restcomm-JBoss-AS7 + +getOptions() { + ( set -o posix ; set ) | grep "^$1" | awk -F "$1" '{print $2}' +} + +configValues() { + local options=$(getOptions $1) + if [ -n "$options" ]; then + while read -r option; do + IFS='=' read ar1 ar2 <<<$option + cli_var="CLI_$ar1" + if env | grep -q ^$cli_var= ;then + ar2=${!cli_var} + fi + if [ ! -z "$2" ]; then + echo "Setting $ar1 to $ar2" + sed -i "s|${ar1}=.*|${ar1}=${ar2}|" $BASEDIR/bin/restcomm/$2 + fi + echo -e "$ar2" | xargs > /etc/container_environment/$ar1 + done <<< "$options" + fi +} + +#MAIN +# Declare associative array +typeset -A OPTS=( [RCBCONF_]=restcomm.conf [RCADVCONF_]=advanced.conf [EXTCONF_]="" [LBCONF_]=advanced.conf [RMSCONF_]=mediaserver.conf ) + + for opt in "${!OPTS[@]}"; do + printf 'conf value %s file: %q\n' "$opt" "${OPTS[$opt]}" + configValues $opt ${OPTS[$opt]} + done + +#auto delete script after run once. No need more. +rm -- "$0" diff --git a/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_extconf.sh b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_extconf.sh new file mode 100644 index 0000000000..c820f4c2fe --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_extconf.sh @@ -0,0 +1,108 @@ +#!/usr/bin/env bash + +source /etc/container_environment.sh + +BASEDIR=/opt/Restcomm-JBoss-AS7 +RESTCOMM_CORE_LOG=$BASEDIR/standalone/log +MMS_LOGS=$BASEDIR/mediaserver/log + +#Patch provided for the RVD backup Directory for the migration process (in order to save the backup at the host need to  mount this directory e.g. -v host_path:RVD_MIGRATION_BACKUP). +if [ -n "$RVD_MIGRATION_BACKUP" ]; then + echo "RVD_MIGRATION_BACKUP $RVD_MIGRATION_BACKUP" + sed -i "s|.*|${RVD_MIGRATION_BACKUP}|" $BASEDIR/standalone/deployments/restcomm-rvd.war/WEB-INF/rvd.xml +fi + +if [ -n "$PATCHRURI" ]; then + echo "PATCHRURI $PATCHRURI" + sed -i "s|true|${PATCHRURI}|" $BASEDIR/standalone/deployments/restcomm.war/WEB-INF/conf/restcomm.xml +fi + +if [[ "$ALERTING" != "TRUE" ]]; then + echo "ALERTING FALSE" + + FILE=/etc/cron.d/graylog_cron + if [ -f $FILE ]; then + rm $FILE + fi +fi + +#logs configuration +if [ -n "$RESTCOMM_LOGS" ]; then + echo "RESTCOMM_LOGS $RESTCOMM_LOGS" + sed -i "s|BASEDIR=.*| |" $BASEDIR/bin/restcomm/logs_collect.sh + sed -i "s|./jvmtop.sh|${BASEDIR}/bin/restcomm/jvmtop.sh|" $BASEDIR/bin/restcomm/logs_collect.sh + sed -i "s|LOGS_DIR_ZIP=.*|LOGS_DIR_ZIP=$RESTCOMM_LOGS/\$DIR_NAME|" $BASEDIR/bin/restcomm/logs_collect.sh + sed -i "s|RESTCOMM_LOG_BASE=.*|RESTCOMM_LOG_BASE=${RESTCOMM_LOGS}|" /opt/embed/restcomm_docker.sh + + LOGS_LOCATE=$RESTCOMM_LOGS + mkdir -p "$LOGS_LOCATE/extralogs" + RESTCOMM_CORE_LOG=$LOGS_LOCATE + MMS_LOGS=$LOGS_LOCATE + LOGS_TRACE=$LOGS_LOCATE +fi + +if [ -n "$CORE_LOGS_LOCATION" ]; then + echo "CORE_LOGS_LOCATION $CORE_LOGS_LOCATION" + mkdir -p $RESTCOMM_CORE_LOG/$CORE_LOGS_LOCATION + + sed -i "s|find .*restcomm_core_|find $RESTCOMM_CORE_LOG/$CORE_LOGS_LOCATION/restcommCore-server.log|" /etc/cron.d/restcommcore-cron + sed -i "s|||" $BASEDIR/standalone/configuration/standalone-sip.xml + #logs collect script conficuration + sed -i "s/RESTCOMM_CORE_FILE=server.log/RESTCOMM_CORE_FILE=restcommCore-server.log/" /opt/Restcomm-JBoss-AS7/bin/restcomm/logs_collect.sh + sed -i "s|RESTCOMM_CORE_LOG=.*|RESTCOMM_CORE_LOG=$RESTCOMM_CORE_LOG/$CORE_LOGS_LOCATION|" /opt/Restcomm-JBoss-AS7/bin/restcomm/logs_collect.sh + sed -i "s|RESTCOMM_LOG_BASE=.*|RESTCOMM_LOG_BASE=$CORE_LOGS_LOCATION|" /opt/Restcomm-JBoss-AS7/bin/restcomm/logs_collect.sh + +fi + +if [ -n "$RESTCOMM_TRACE_LOG" ]; then + echo "RESTCOMM_TRACE_LOG $RESTCOMM_TRACE_LOG" + mkdir -p $LOGS_TRACE/$RESTCOMM_TRACE_LOG + + sed -i "s|find .*restcomm_trace_|find $LOGS_TRACE/$RESTCOMM_TRACE_LOG/restcomm_trace_|" /etc/cron.d/restcommtcpdump-cron + sed -i "s|RESTCOMM_TRACE=.*|RESTCOMM_TRACE=\$RESTCOMM_LOG_BASE/$RESTCOMM_TRACE_LOG|" /opt/embed/restcomm_docker.sh + + nohup xargs bash -c "tcpdump -pni any -t -n -s 0 -G 3500 -w $LOGS_TRACE/$RESTCOMM_TRACE_LOG/restcomm_trace_%Y-%m-%d_%H:%M:%S-%Z.pcap -z gzip" & + + #Used to start TCPDUMP when restarting container + TCPFILE="/etc/my_init.d/restcommtrace.sh" + cat <> $TCPFILE +#!/bin/bash + nohup xargs bash -c "tcpdump -pni any -t -n -s 0 -G 3500 -w $LOGS_TRACE/$RESTCOMM_TRACE_LOG/restcomm_trace_%Y-%m-%d_%H:%M:%S-%Z.pcap -z gzip" & +EOT + chmod 777 $TCPFILE + #rm /tmp/myports +fi + +#Media-server Log configuration. +if [ -n "$MEDIASERVER_LOGS_LOCATION" ]; then + echo "MEDIASERVER_LOGS_LOCATION $MEDIASERVER_LOGS_LOCATION" + mkdir -p $MMS_LOGS/$MEDIASERVER_LOGS_LOCATION + + sed -i "s|find .*restcomm_ms_|find $MMS_LOGS/$MEDIASERVER_LOGS_LOCATION/media-server.log|" /etc/cron.d/restcommmediaserver-cron + sed -i "s|LOG_FILE_URL=.*|LOG_FILE_URL=$MMS_LOGS/$MEDIASERVER_LOGS_LOCATION/media-server.log|" $BASEDIR/bin/restcomm/mediaserver.conf + + #Daily log rotation for MS. + sed -i "s|.*|${SCHEME}://${STATIC_ADDRESS}:${RVD_PORT}/|" $RVD_DEPLOY/WEB-INF/rvd.xml +fi + + + +#auto delete script after run once. No need more. +rm -- "$0" \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_service.sh b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_service.sh new file mode 100755 index 0000000000..b239f370e6 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_service.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +BASEDIR=/opt/Restcomm-JBoss-AS7 + +export RUN_DOCKER=true +exec $BASEDIR/bin/restcomm/start-restcomm.sh diff --git a/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_sslconf.sh b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_sslconf.sh new file mode 100644 index 0000000000..19edbc9abf --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_sslconf.sh @@ -0,0 +1,49 @@ +#!/bin/bash +#Maintainer George Vagenas - gvagenas@telestax.com +#Maintainer Jean Deruelle - jean.deruelle@telestax.com +#Maintainer Lefteris Banos -liblefty@telestax.com + +source /etc/container_environment.sh + +BASEDIR=/opt/Restcomm-JBoss-AS7 + +TRUSTSTORE_FILE_NAME=restcomm-combined.jks +TRUSTSTORE_FILE=$BASEDIR/standalone/configuration/$TRUSTSTORE_FILE_NAME +DERFILE=$BASEDIR/ca-authority.der +CONFFILE=/tmp/conf.sh + + +function download_conf(){ +echo "url $1 $2 $3" +if [[ `wget -S --spider $1 $2 $3 2>&1 | grep 'HTTP/1.1 200 OK'` ]]; then + if [ -n "$2" ] && [ -n "$3" ]; then + wget $1 $2 $3 -O $4 + else + wget $1 -O $2 + fi + return 0; + else + echo "false" + exit 1; + fi +} + +if [[ "$SECURESSL" = "SELF" || "$SECURESSL" = "AUTH" ]]; then + # Add StartComm certificate to the truststore to avoid SSL Exception when fetching the URL + keytool -importcert -alias startssl -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -file $BASEDIR/ca-startcom.der -noprompt + sed -i "s|SECURESSL=.*|SECURESSL='${SECURESSL}'|" $BASEDIR/bin/restcomm/advanced.conf + sed -i "s|TRUSTSTORE_FILE=.*|TRUSTSTORE_FILE='${TRUSTSTORE_FILE_NAME}'|" $BASEDIR/bin/restcomm/advanced.conf +fi + +if [ -n "$CERTCONFURL" ]; then + echo "Certification file URL is: $CERTCONFURL" + if [ -n "$CERTREPOUSR" ] && [ -n "$CERTREPOPWRD" ]; then + USR="--user=${CERTREPOUSR}" + PASS="--password=${CERTREPOPWRD}" + fi + URL="$CERTCONFURL $USR $PASS" + download_conf $URL $TRUSTSTORE_FILE +fi + +#auto delete script after run once. No need more. +rm -- "$0" \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_tag.sh b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_tag.sh new file mode 100644 index 0000000000..a9a9b52a03 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_tag.sh @@ -0,0 +1,22 @@ +#!/bin/bash +#Maintainer Lefteris Banos -liblefty@telestax.com +#set runlevel for runit +runsvchdir default >/dev/null +cat << "EOF" + ____ _ ____ + | _ \ ___ ___| |_ / ___|___ _ __ ___ _ __ ___ + | |_) / _ \/ __| __| | / _ \| '_ ` _ \| '_ ` _ \ + | _ < __/\__ \ |_| |__| (_) | | | | | | | | | | | + |_|_\_\___||___/\__|\____\___/|_| |_| |_|_| |_| |_| + | |__ _ _ + | '_ \| | | | + | |_) | |_| | + |_.__/ \__, | + |___/ + _____ _ _ + |_ _|__| | ___ ___| |_ __ ___ __ + | |/ _ \ |/ _ \/ __| __/ _` \ \/ / + | | __/ | __/\__ \ || (_| |> < + |_|\___|_|\___||___/\__\__,_/_/\_\ + +EOF \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_toolsconf.sh b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_toolsconf.sh new file mode 100644 index 0000000000..e21f4a2346 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/scripts/restcomm_toolsconf.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash + +source /etc/container_environment.sh + +BASEDIR=/opt/Restcomm-JBoss-AS7 + + +if [ -n "$RCADVCONF_GRAYLOG_SERVER" ]; then + #Modify the Script for Graylog to docker needs. + sed -i "s|hdusage=.*|hdusage=\$\(df -h \| grep /dev/xvda1 \| awk -F \" \" '{print \$5}'\)|" $BASEDIR/bin/restcomm/monitoring/Graylog_Monitoring.sh + sed -i "s|cut -d \" \" -f 1|cut -d \" \" -f 2|" $BASEDIR/bin/restcomm/monitoring/Graylog_Monitoring.sh + sed -i "s|cut -f3,4,5,6,7,8 -d ' '|cut -f4,5,6,7,8,9 -d ' '|" $BASEDIR/bin/restcomm/monitoring/Graylog_Monitoring.sh +fi + +chmod +x $BASEDIR/bin/*.sh +chmod +x $BASEDIR/bin/restcomm/*.sh +chmod +x $BASEDIR/bin/restcomm/monitoring/*.sh +chmod +x /opt/embed/*.sh +mkdir -p "${RESTCOMM_LOGS}"/opt/ +cp /tmp/version "${RESTCOMM_LOGS}" +cp /opt/embed/dockercleanup.sh "${RESTCOMM_LOGS}"/opt/ +cp /opt/embed/restcomm_docker.sh "${RESTCOMM_LOGS}"/opt/ + +# Ensure cron is allowed to run" +sed -i 's/^\(session\s\+required\s\+pam_loginuid\.so.*$\)/# \1/g' /etc/pam.d/cron + +mkdir -p /etc/service/restcomm +mv /tmp/start-restcomm.sh $BASEDIR/bin/restcomm/start-restcomm.sh +chmod +x $BASEDIR/bin/restcomm/start-restcomm.sh +mv /tmp/restcomm_service.sh /etc/service/restcomm/run +chmod +x /etc/service/restcomm/run + +mkdir -p /etc/sv/rms +mv /tmp/start-mediaserver.sh $BASEDIR/mediaserver/start-mediaserver.sh +chmod +x $BASEDIR/mediaserver/start-mediaserver.sh +mv /tmp/rms_service.sh /etc/sv/rms/run +chmod +x /etc/sv/rms/run + +echo "RestComm configured Properly!" + +#auto delete script after run once. No need more. +rm -- "$0" \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/docker/scripts/rms_service.sh b/release/restcomm-assembly-as7/src/main/docker/scripts/rms_service.sh new file mode 100644 index 0000000000..8f9b176d37 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/scripts/rms_service.sh @@ -0,0 +1,10 @@ +#! /bin/bash + +export RUN_DOCKER=true + +BASEDIR=/opt/Restcomm-JBoss-AS7 +RMS_CONF=$BASEDIR/bin/restcomm +ms_conf=$RMS_CONF/mediaserver.conf +ms_home=$BASEDIR/mediaserver + +exec $ms_home/start-mediaserver.sh $ms_conf \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/docker/scripts/start-mediaserver.sh b/release/restcomm-assembly-as7/src/main/docker/scripts/start-mediaserver.sh new file mode 100644 index 0000000000..d2cb89174b --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/scripts/start-mediaserver.sh @@ -0,0 +1,98 @@ +#! /bin/bash +## Description: Starts Media Server with auto-configuration. +## Author : Henrique Rosa (henrique.rosa@telestax.com) +## Parameters : 1. path to conf file (optional) + +export MS_HOME=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +RESTCOMME_DIR=/opt/Restcomm-JBoss-AS7 +source /etc/container_environment.sh + +getPID(){ + while read -r line + do + if ps -ef | grep $line | grep -q mediaserver + then + RMS_PID=$line + fi + done < <(jps | grep Main | cut -d " " -f 1) +} + +configNetwork() { +# Configure RMS network using the read-network-props.sh from RC +if [ "${MS_EXTERNAL^^}" = "FALSE" ]; then + echo "Looking for the IP Address, subnet, network and broadcast_address for RMS" + source $RESTCOMME_DIR/bin/restcomm/utils/read-network-props.sh "eth0" + + if [ ! -f /etc/container_environment/BIND_ADDRESS ]; then + sed -i "s|BIND_ADDRESS=.*|BIND_ADDRESS=${PRIVATE_IP}|" $RESTCOMME_DIR/bin/restcomm/mediaserver.conf + fi + + if [ ! -f /etc/container_environment/NETWORK ]; then + sed -i "s|NETWORK=.*|NETWORK=${NETWORK}|" $RESTCOMME_DIR/bin/restcomm/mediaserver.conf + fi + + if [ ! -f /etc/container_environment/SUBNET ]; then + sed -i "s|SUBNET=.*|SUBNET=${SUBNET_MASK}|" $RESTCOMME_DIR/bin/restcomm/mediaserver.conf + fi + + if [ ! -f /etc/container_environment/RMSCONF_MGCP_ADDRESS ]; then + sed -i "s|MGCP_ADDRESS=.*|MGCP_ADDRESS=${PRIVATE_IP}|" $RESTCOMME_DIR/bin/restcomm/mediaserver.conf + fi + +fi + +} + +verifyDependencies() { + source $MS_HOME/.autoconfig/verify-dependencies.sh +} + +loadConfigurationParams() { + local override_conf=$1 + + # load default configuration files + source $MS_HOME/mediaserver.conf + source $MS_HOME/logger.conf + source $MS_HOME/ssl.conf + + # load file to override configuration (if any) + if [ -n "$override_conf" ]; then + source $override_conf + fi +} + +configureMediaServer() { + # Configure media server + source $MS_HOME/.autoconfig/autoconfigure.sh + # Set permissions of run script because it may have been overwritten by commands like sed + chmod 755 $MS_HOME/bin/run.sh +} + +startMediaServer() { + echo 'Starting RestComm Media Server...' + # Check if RestComm is already running + if [[ "$RUN_DOCKER" == "true" || "$RUN_DOCKER" == "TRUE" ]]; then + if [ -n "$RMS_PID" ]; then + echo '... already running Aborted.' + exit 1; + else + $MS_HOME/bin/run.sh + echo '...RestComm Media Server started running!' + fi + else + if tmux ls | grep -q 'mediaserver'; then + echo '... already running a session named "mediaserver"! Aborted.' + exit 1 + else + tmux new -s mediaserver -d $MS_HOME/bin/run.sh + echo '...RestComm Media Server started running on session named "mediaserver"!' + fi + fi +} + +getPID +#verifyDependencies +configNetwork +loadConfigurationParams $1 +configureMediaServer +startMediaServer diff --git a/release/restcomm-assembly-as7/src/main/docker/scripts/start-restcomm.sh b/release/restcomm-assembly-as7/src/main/docker/scripts/start-restcomm.sh new file mode 100644 index 0000000000..ee208c6891 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/docker/scripts/start-restcomm.sh @@ -0,0 +1,156 @@ +#! /bin/bash +## +## Description: Starts RestComm with auto-configuration. +## +## Parameters : 1. Bind Address (default: 127.0.0.1) +## 2. Run Mode [standalone|standalone-lb|domain|domain-lb] (default:standalone) +## +## Author : Henrique Rosa +## +# set environment variables for execution +BASEDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +RESTCOMM_HOME=$(cd $BASEDIR/../../ && pwd) +MMS_HOME=$RESTCOMM_HOME/mediaserver +LB_HOME=$RESTCOMM_HOME/tools/sip-balancer + +## +## FUNCTIONS +## +startRestcomm() { + run_mode="$1" + bind_address="$2" + ExtraOpts="-Djboss.bind.address.management=$bind_address" + + if [ -n "$MGMT_PASS" ] && [ -n "$MGMT_USER" ]; then + echo "MGMT_PASS, MGMT_USER is set will be added to MGMNT configuration" + grep -q "$MGMT_USER" $RESTCOMM_HOME/standalone/configuration/mgmt-users.properties || $RESTCOMM_HOME/bin/add-user.sh "$MGMT_USER" "$MGMT_PASS" -s + fi + + case $run_mode in + 'standalone'*) + # start restcomm on standalone mode + chmod +x $RESTCOMM_HOME/bin/standalone.sh + echo ' Telestax RestComm started running on standalone mode. Terminal session: restcomm.' + echo "Using IP Address: $BIND_ADDRESS" + if [[ "$RUN_DOCKER" == "true" || "$RUN_DOCKER" == "TRUE" ]]; then + #change to second runlevel. + runsvchdir second >/dev/null + $RESTCOMM_HOME/bin/standalone.sh -b $bind_address "${ExtraOpts}" + else + tmux new -s restcomm -d "$RESTCOMM_HOME/bin/standalone.sh -b $bind_address ${ExtraOpts}" + fi + ;; + 'domain'*) + # start restcomm on standalone mode + chmod +x $RESTCOMM_HOME/bin/domain.sh + tmux new -s restcomm -d "$RESTCOMM_HOME/bin/domain.sh -b $bind_address ${ExtraOpts}" + echo 'Telestax RestComm started running on domain mode. Screen session: restcomm.' + echo "Using IP Address: $BIND_ADDRESS" + ;; + *) + # start restcomm on standalone mode + chmod +x $RESTCOMM_HOME/bin/standalone.sh + tmux new -s restcomm -d "$RESTCOMM_HOME/bin/standalone.sh -b $bind_address ${ExtraOpts}" + echo 'Telestax RestComm started running on standalone mode. Screen session: restcomm.' + echo "Using IP Address: $BIND_ADDRESS" + ;; + esac + +} + +verifyDependencies() { + source $BASEDIR/verify-dependencies.sh +} + +loadConfigurationParams() { + source $BASEDIR/restcomm.conf + source $BASEDIR/advanced.conf +} + +## +## MAIN +## +#verifyDependencies +loadConfigurationParams + +echo BASEDIR: $BASEDIR +echo RESTCOMM_HOME: $RESTCOMM_HOME + +# input parameters and default values +RUN_MODE='standalone' +BIND_ADDRESS='' + +while getopts "s:r:i:" optname +do + case "$optname" in + "s") + STATIC_ADDRESS="$OPTARG" + ;; + "r") + RUN_MODE="$OPTARG" + ;; + "i") + NET_INTERFACE="$OPTARG" + ;; + ":") + echo "No argument value for option $OPTARG" + exit 1 + ;; + "?") + echo "Unknown option $OPTARG" + exit 1 + ;; + *) + echo 'Unknown error while processing options' + exit 1 + ;; + esac +done + +# validate network interface and extract network properties +if [[ -z "$NET_INTERFACE" ]]; then +NET_INTERFACE='eth0' +echo "Looking for the appropriate interface" + NET_INTERFACES=$(ifconfig | expand | cut -c1-8 | sort | uniq -u | awk -F: '{print $1;}') + if [[ -z $(echo $NET_INTERFACES | sed -n "/$NET_INTERFACE/p") ]]; then + echo "The network interface $NET_INTERFACE is not available or does not exist." + echo "The list of available interfaces is: $NET_INTERFACES" + exit 1 + fi +fi + +# load network properties for chosen interface +if [[ -z "$PRIVATE_IP" || -z "$SUBNET_MASK" || -z "$NETWORK" || -z "$BROADCAST_ADDRESS" ]]; then +echo "Looking for the IP Address, subnet, network and broadcast_address" + source $BASEDIR/utils/read-network-props.sh "$NET_INTERFACE" +fi + +BIND_ADDRESS="$PRIVATE_IP" +BIND_NETWORK="$NETWORK" +BIND_SUBNET_MASK="$SUBNET_MASK" + +if [[ -z "$STATIC_ADDRESS" ]]; then + STATIC_ADDRESS=$BIND_ADDRESS +fi + +if [[ -z "$MEDIASERVER_EXTERNAL_ADDRESS" ]]; then + MEDIASERVER_EXTERNAL_ADDRESS="$STATIC_ADDRESS" +fi + +if [[ -z "$PUBLIC_IP" ]]; then + PUBLIC_IP=$STATIC_ADDRESS +fi + +if [[ -z "$SMS_OUTBOUND_PROXY" ]]; then + SMS_OUTBOUND_PROXY=$OUTBOUND_PROXY +fi + +# configure restcomm installation + +if [[ "$MANUAL_SETUP" == "false" || "$MANUAL_SETUP" == "FALSE" ]]; then + source $BASEDIR/autoconfigure.sh +fi + +# start restcomm in selected run mode +startRestcomm "$RUN_MODE" "$BIND_ADDRESS" +exit 0 diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-SecureSSL.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-SecureSSL.sh new file mode 100755 index 0000000000..6a1a099f62 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-SecureSSL.sh @@ -0,0 +1,224 @@ +#!/usr/bin/env bash + +## +## Description: Configures RestComm +## Author: Lefteris Banos (eleftherios.banos@telestax.com) +## + +# VARIABLES +RESTCOMM_BIN=$RESTCOMM_HOME/bin +RESTCOMM_DARS=$RESTCOMM_HOME/standalone/configuration/dars +RESTCOMM_CONF=$RESTCOMM_HOME/standalone/configuration +RESTCOMM_DEPLOY=$RESTCOMM_HOME/standalone/deployments/restcomm.war + +###Functions for SECURESSL=false### +#Disable HTTPS when SECURESSL=false for RC. +NoSslRestConf(){ + FILE=$RESTCOMM_CONF/standalone-sip.xml + sed -e "s//<\!--connector name=\"https\" \1>/" \ + -e "s/<\/connector>/<\/connector-->/" $FILE > $FILE.bak + mv $FILE.bak $FILE + sed -e "s/<.*connector name=\"http\".*>/ /" $FILE > $FILE.bak + mv $FILE.bak $FILE + + sed -i "s|SSL_ENABLED=.*|SSL_ENABLED=false|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|SSL_KEYSTORE=.*|SSL_KEYSTORE=restcomm.jks|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|SSL_PASSWORD=.*|SSL_PASSWORD=changeme|" $RESTCOMM_BIN/restcomm/mediaserver.conf +} + +####funcitions for SECURESSL="SELF" || SECURESSL="AUTH" #### +#HTTPS configuration. +#Usage of certificate. +SslRestCommConf(){ + FILE=$RESTCOMM_CONF/standalone-sip.xml + echo "Will properly configure HTTPS Connector "; + FILERESTCOMMXML=$BASEDIR/standalone/deployments/restcomm.war/WEB-INF/web.xml + FILEMANAGERXML=$BASEDIR/standalone/deployments/restcomm-management.war/WEB-INF/web.xml + FILERVDXML=$BASEDIR/standalone/deployments/restcomm-rvd.war/WEB-INF/web.xml + FILEOLYMPUSXML=$BASEDIR/standalone/deployments/olympus.war/WEB-INF/web.xml + #Disable HTTP if set to true. + if [[ "$DISABLE_HTTP" == "true" || "$DISABLE_HTTP" == "TRUE" ]]; then + echo "DISABLE_HTTP is '$DISABLE_HTTP'. Will disable HTTP Connector" + sed -e "s/<.*connector name=\"http\".*>/<\!--connector name=\"http\" protocol=\"HTTP\/1.1\" scheme=\"http\" socket-binding=\"http\"-->/" $FILE > $FILE.bak + mv $FILE.bak $FILE + + grep -q '' $FILERESTCOMMXML && sed -e "s///" $FILERESTCOMMXML.bak > $FILERESTCOMMXML + grep -qs '' $FILEMANAGERXML && sed -e "s///" $FILEMANAGERXML.bak > $FILEMANAGERXML + grep -q '' $FILERVDXML && sed -e "s///" $FILERVDXML.bak > $FILERVDXML + grep -q '' $FILEOLYMPUSXML && sed -e "s///" $FILEOLYMPUSXML.bak > $FILEOLYMPUSXML + + elif [[ "$DISABLE_HTTP" == "REDIRECT" || "$DISABLE_HTTP" == "redirect" ]]; then + sed -e "s/<.*connector name=\"http\".*>//" $FILE > $FILE.bak + mv $FILE.bak $FILE + if [ ! -d "$BASEDIR/standalone/deployments/restcomm-management.war" ]; then + mkdir $BASEDIR/standalone/deployments/restcomm-management-exploded.war + unzip -q $BASEDIR/standalone/deployments/restcomm-management.war -d $BASEDIR/standalone/deployments/restcomm-management-exploded.war/ + rm -f $BASEDIR/standalone/deployments/restcomm-management.war + mv -f $BASEDIR/standalone/deployments/restcomm-management-exploded.war $BASEDIR/standalone/deployments/restcomm-management.war + fi + + sed -e "s//<\/security-constraint>/" $FILERESTCOMMXML.bak > $FILERESTCOMMXML + sed -e "s//<\/security-constraint>/" $FILEMANAGERXML.bak > $FILEMANAGERXML + sed -e "s//<\/security-constraint>/" $FILERVDXML.bak > $FILERVDXML + sed -e "s//<\/security-constraint>/" $FILEOLYMPUSXML.bak > $FILEOLYMPUSXML + + else + sed -e "s/<.*connector name=\"http\".*>/ /" $FILE > $FILE.bak + mv $FILE.bak $FILE + + grep -q '' $FILERESTCOMMXML && sed -e "s///" $FILERESTCOMMXML.bak > $FILERESTCOMMXML + grep -qs '' $FILEMANAGERXML && sed -e "s///" $FILEMANAGERXML.bak > $FILEMANAGERXML + grep -q '' $FILERVDXML && sed -e "s///" $FILERVDXML.bak > $FILERVDXML + grep -q '' $FILEOLYMPUSXML && sed -e "s///" $FILEOLYMPUSXML.bak > $FILEOLYMPUSXML + + fi + #If File contains path, or just the name. + if [[ "$TRUSTSTORE_FILE" = /* ]]; then + CERTIFICATION_FILE=$TRUSTSTORE_FILE + else + CERTIFICATION_FILE="\\\${jboss.server.config.dir}/$TRUSTSTORE_FILE" + fi + #enable HTTPS and certificate file. + #Cipher `TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA` removed because it enables non-secure cipher ECDHE-RSA-DES-CBC3-SHA + echo "Will use trust store at location: $CERTIFICATION_FILE" + sed -e "s/<\!--connector name=\"https\" \(.*\)>//" \ + -e "s|||" \ + -e "s/<\/connector-->/<\/connector>/" $FILE > $FILE.bak + mv $FILE.bak $FILE + echo "Properly configured HTTPS Connector to use trustStore file $CERTIFICATION_FILE" +} + +#If self-sighned create certificate. +#else use authorized. +CertConfigure(){ + #Certificate setup (Authority certificate or self-signed) + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + if [ "$SECURESSL" = "AUTH" ]; then + echo "Authorized certificate is used" + elif [ "$SECURESSL" = "SELF" ]; then + echo "TRUSTSTORE_FILE is not provided but SECURE is TRUE. We will create and configure self signed certificate" + + sed -e "s/.*<\/ssl-mode>/allowall<\/ssl-mode>/" $FILE > $FILE.bak #When Self-signed used ssl-mode must set to "allowall" + mv $FILE.bak $FILE + + if [[ "$TRUSTSTORE_FILE" = /* ]]; then + TRUSTSTORE_LOCATION=$TRUSTSTORE_FILE + else + TRUSTSTORE_LOCATION=$RESTCOMM_HOME/standalone/configuration/$TRUSTSTORE_FILE + fi + + echo "TRUSTSTORE_LOCATION: $TRUSTSTORE_LOCATION" + echo "PUBLIC_IP: $PUBLIC_IP" + echo "RESTCOMM_HOSTNAME: $RESTCOMM_HOSTNAME" + #Use HOSTNAME to create certificate is used. Else use STATIC_ADDRESS + if [ -n "$RESTCOMM_HOSTNAME" ]; then + HOSTNAME="${RESTCOMM_HOSTNAME}" + keytool -genkey -alias $TRUSTSTORE_ALIAS -keyalg RSA -keystore $TRUSTSTORE_LOCATION -dname "CN=$HOSTNAME" -storepass $TRUSTSTORE_PASSWORD -keypass $TRUSTSTORE_PASSWORD + else + HOSTNAME="${PUBLIC_IP}" + keytool -genkey -alias $TRUSTSTORE_ALIAS -keyalg RSA -keystore $TRUSTSTORE_LOCATION -dname "CN=restcomm" -ext san=ip:"$HOSTNAME" -storepass $TRUSTSTORE_PASSWORD -keypass $TRUSTSTORE_PASSWORD + fi + echo "The generated truststore file at $TRUSTSTORE_LOCATION " + fi + + #Final necessary configuration. Protocols permitted, etc. + grep -q 'ephemeralDHKeySize' $RESTCOMM_BIN/standalone.conf || sed -i "s|-Djava.awt.headless=true|& -Djdk.tls.ephemeralDHKeySize=2048|" $RESTCOMM_BIN/standalone.conf + grep -q 'https.protocols' $RESTCOMM_BIN/standalone.conf || sed -i "s|-Djava.awt.headless=true|& -Dhttps.protocols=TLSv1.1,TLSv1.2|" $RESTCOMM_BIN/standalone.conf +} + +#SIP-Servlets configuration for HTTPS. +#For both Self-signed and Authorized certificate. +MssStackConf(){ + FILE=$RESTCOMM_CONF/mss-sip-stack.properties + + if grep -q "gov.nist.javax.sip.TLS_CLIENT_AUTH_TYPE=${TLS_CLIENT_AUTH_TYPE}" "$FILE"; then + sed -i '/gov.nist.javax.sip.TLS_CLIENT_AUTH_TYPE='"$TLS_CLIENT_AUTH_TYPE"'/,+5d' $FILE + fi + + if [ -n "$SSL_PROTOCOLS" ]; then + if grep -q "gov.nist.javax.sip.TLS_CLIENT_PROTOCOLS" "$FILE"; then + sed -i "s|gov.nist.javax.sip.TLS_CLIENT_PROTOCOLS=.*|gov.nist.javax.sip.TLS_CLIENT_PROTOCOLS=$SSL_PROTOCOLS|" $FILE + else + echo "gov.nist.javax.sip.TLS_CLIENT_PROTOCOLS=$SSL_PROTOCOLS"'' >> $FILE + fi + + fi + + if [ -n "$SSL_CIPHER_SUITES" ]; then + if grep -q "gov.nist.javax.sip.ENABLED_CIPHER_SUITES" "$FILE"; then + sed -i "s|gov.nist.javax.sip.ENABLED_CIPHER_SUITES=.*|gov.nist.javax.sip.ENABLED_CIPHER_SUITES=$SSL_CIPHER_SUITES|" $FILE + else + echo 'gov.nist.javax.sip.ENABLED_CIPHER_SUITES='"$SSL_CIPHER_SUITES"'' >> $FILE + fi + + fi + + + if [[ "$TRUSTSTORE_FILE" = /* ]]; then + TRUSTSTORE_LOCATION=$TRUSTSTORE_FILE + else + TRUSTSTORE_LOCATION=$RESTCOMM_HOME/standalone/configuration/$TRUSTSTORE_FILE + fi + + #check for port offset + local HTTPS_PORT=$((HTTPS_PORT + PORT_OFFSET)) + + #https://github.com/RestComm/Restcomm-Connect/issues/2606 + sed -i '/org.mobicents.ha.javax.sip.LOCAL_SSL_PORT=.*/ a \ + \gov.nist.javax.sip.TLS_CLIENT_AUTH_TYPE='"$TLS_CLIENT_AUTH_TYPE"'\ + \javax.net.ssl.keyStore='"$TRUSTSTORE_LOCATION"'\ + \javax.net.ssl.keyStorePassword='" $TRUSTSTORE_PASSWORD"'\ + \javax.net.ssl.trustStorePassword='"$TRUSTSTORE_PASSWORD"'\ + \javax.net.ssl.trustStore='"$TRUSTSTORE_LOCATION"'\ + \javax.net.ssl.keyStoreType=JKS\ + ' $RESTCOMM_CONF/mss-sip-stack.properties +} + + +#SIP-Servlets configuration for HTTPS. +#For both Self-signed and Authorized certificate. +SslRMSConf(){ + if [[ "$MANUAL_SETUP" == "false" || "$MANUAL_SETUP" == "FALSE" ]]; then + + if [[ "$TRUSTSTORE_FILE" = /* ]]; then + CERTIFICATION_FILE=$TRUSTSTORE_FILE + else + CERTIFICATION_FILE="$RESTCOMM_CONF/$TRUSTSTORE_FILE" + fi + + sed -i "s|SSL_ENABLED=.*|SSL_ENABLED=true|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|SSL_KEYSTORE=.*|SSL_KEYSTORE=${CERTIFICATION_FILE}|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|SSL_PASSWORD=.*|SSL_PASSWORD=${TRUSTSTORE_PASSWORD}|" $RESTCOMM_BIN/restcomm/mediaserver.conf + fi +} + +# MAIN +echo 'RestComm SSL Configuring ...' + +if [[ "$SECURESSL" = "SELF" || "$SECURESSL" = "AUTH" ]]; then + if [[ -z $TRUSTSTORE_ALIAS || -z $TRUSTSTORE_PASSWORD || -z $TRUSTSTORE_FILE ]]; then + echo 'Need to set all: TRUSTSTORE_ALIAS, TRUSTSTORE_PASSWORD,TRUSTSTORE_FILE ' + else + echo "SECURE $SECURESSL" + SslRestCommConf + CertConfigure + MssStackConf + SslRMSConf + fi +elif [[ "$SECURESSL" == "false" || "$SECURESSL" == "FALSE" ]]; then + NoSslRestConf +else + echo "Allowed values for SECURESSL: SELF, AUTH, FALSE" +fi diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-dashboard.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-dashboard.sh new file mode 100755 index 0000000000..ec8c1b1117 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-dashboard.sh @@ -0,0 +1,30 @@ +#!/bin/bash +## +## Configures dashboard.json based on global configuration options in restcomm.conf and advanced.conf. +## +## requirements: +## +## RESTCOMM_HOME env variable to be set +## dashboard.json should be in place (under $RESTCOMM_HOME/standalone/deployments/restcomm-management.war) +## +## Author: otsakir@gmail.com - Orestis Tsakiridis + +echo "Configuring Dashboard..." + + +# MAIN +if [ -z "$RESTCOMM_HOME" ] +then + echo "RESTCOMM_HOME env variable not set. Aborting." + exit 1 +fi + + +# Variables +DASHBOARD_ROOT="$RESTCOMM_HOME"/standalone/deployments/restcomm-management.war +DASHBOARD_JSON_FILE="$DASHBOARD_ROOT"/conf/dashboard.json + +sed -i "s|\"rvdUrl\":\"[^\"]*\"|\"rvdUrl\":\"$RVD_URL/restcomm-rvd\"|" "$DASHBOARD_JSON_FILE" + +echo "Dasboard configured:" +cat $DASHBOARD_JSON_FILE \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-dialogic-xms.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-dialogic-xms.sh new file mode 100755 index 0000000000..4b4a8d6403 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-dialogic-xms.sh @@ -0,0 +1,57 @@ +#!/bin/bash +## Description: Configures Dialogic XMS +## Author : Henrique Rosa (henrique.rosa@telestax.com) + +RESTCOMM_STANDALONE=$RESTCOMM_HOME/standalone +RESTCOMM_DEPLOY=$RESTCOMM_STANDALONE/deployments/restcomm.war + +## Description: Elects Dialogic XMS as the active Media Server for RestComm +activateXMS() { + restcomm_conf=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + ms_address="$1" + + sed -e "// { + N; s|.*<\/compatibility>|$MS_COMPATIBILITY_MODE<\/compatibility>| + N; s||| + N; s|
.*<\/address>|
$ms_address<\/address>| + }" $restcomm_conf > $restcomm_conf.bak + mv -f $restcomm_conf.bak $restcomm_conf + echo '...activated Dialogic XMS...' +} + +fetchExternalResources() { + if [[ "$MS_COMPATIBILITY_MODE" == "xms" ]]; then + + echo "Checking required libraries ..." + + if [ -f $RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/lib/dialogic309-3.2-snapshot-jboss.jar ]; then + echo "JSR309 library ready" + else + echo "Downloading JSR309 library ..." + cd $RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/lib + wget -O dialogic309-3.2-snapshot-jboss.jar https://www.dialogic.com/files/jsr-309/3.2GA/3.2Snapshot/dialogic309-3.2-snapshot-jboss.jar + fi + + if [ -f $RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/lib/dialogicsmiltypes-3.2-GA-14621.jar ]; then + echo "SMIL Types library ready" + else + echo "Downloading SMIL Types library ..." + cd $RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/lib + wget -O dialogicsmiltypes-3.2-GA-14621.jar https://www.dialogic.com/files/jsr-309/3.2GA/dialogicsmiltypes-3.2-GA-14621.jar + fi + + if [ -f $RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/lib/dialogicmsmltypes-3.2-GA-14621.jar ]; then + echo "MSML Types library ready" + else + echo "Downloading SMIL Types library ..." + cd $RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/lib + wget -O dialogicmsmltypes-3.2-GA-14621.jar https://www.dialogic.com/files/jsr-309/3.2GA/dialogicmsmltypes-3.2-GA-14621.jar + fi + fi +} + +#MAIN +echo "Configuring Dialogic XMS...MS_MODE: $MS_COMPATIBILITY_MODE" +activateXMS $MS_ADDRESS +fetchExternalResources +echo '...finished configuring Dialogic XMS!' diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-jboss-as.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-jboss-as.sh new file mode 100755 index 0000000000..c324c99337 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-jboss-as.sh @@ -0,0 +1,18 @@ +#! /bin/bash +## +## Description: Configures JBoss AS +## Author : Henrique Rosa (henrique.rosa@telestax.com) +## + +## FUNCTIONS +disableSplashScreen() { + FILE="$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml" + sed -e 's|enable-welcome-root=".*"|enable-welcome-root="false"|' $FILE > $FILE.bak + mv -f $FILE.bak $FILE +} + +## MAIN +echo 'Configuring JBoss AS...' +disableSplashScreen +echo '...disabled JBoss splash screen...' +echo 'Finished configuring JBoss AS!' \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-load-balancer.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-load-balancer.sh new file mode 100755 index 0000000000..77b5c56486 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-load-balancer.sh @@ -0,0 +1,47 @@ +#! /bin/bash +## +## Description: Configures SIP Load Balancer +## Author : Henrique Rosa (henrique.rosa@telestax.com) +## Author : Pavel Slegr (pavel.slegr@telestax.com) +## Author : Charles Roufay (charles.roufay@telestax.com) +## +## Last update: 22/03/2016 +## Change Log: Move away from Telestax Proxy and configure LB from restcomm.conf +## FUNCTIONS +## +## +## +## +configSipStack() { + lb_sipstack_file="$RESTCOMM_HOME/standalone/configuration/mss-sip-stack.properties" + + #delete additional connectors if any added to erlier run of the script. + if grep -q "## lb-configuration ##" $lb_sipstack_file + then + echo "Additional Connectors Created earlier, going to delete the connectors" + sed '/## lb-configuration ##/,/## lb-configuration ##/d' $lb_sipstack_file > $lb_sipstack_file.bak + mv $lb_sipstack_file.bak $lb_sipstack_file + else + echo "LB was not configured earlier" + fi + + if [ "$ACTIVATE_LB" == "true" ] || [ "$ACTIVATE_LB" == "TRUE" ]; then + if [ -z "$LB_INTERNAL_IP" ]; then + LB_INTERNAL_IP=$LB_PUBLIC_IP + fi + sed -e "/Mobicents Load Balancer/a\ + ## lb-configuration ##\n\ + gov.nist.javax.sip.PATCH_SIP_WEBSOCKETS_HEADERS=false\n\ + org.mobicents.ha.javax.sip.REACHABLE_CHECK=false\n\ + org.mobicents.ha.javax.sip.LoadBalancerHeartBeatingServiceClassName=org.mobicents.ha.javax.sip.MultiNetworkLoadBalancerHeartBeatingServiceImpl\n\ + ## lb-configuration ##" $lb_sipstack_file > $lb_sipstack_file.bak + + mv $lb_sipstack_file.bak $lb_sipstack_file + echo 'Load Balancer has been activated and mss-sip-stack.properties file updated' + fi +} + +## MAIN +configSipStack + + diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-logs.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-logs.sh new file mode 100755 index 0000000000..5eb9ee7934 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-logs.sh @@ -0,0 +1,81 @@ +#!/bin/bash +## +## Description: Configures RestComm && RMS logs level +## Authos: Lefteris Banos (eleftherios.banos@telestax.com) + +# VARIABLES +RESTCOMM_BIN=$RESTCOMM_HOME/bin +RESTCOMM_CONF=$RESTCOMM_HOME/standalone/configuration + + +check_if_logger_exist(){ +FILE=$RESTCOMM_CONF/standalone-sip.xml + #delete additional bindings if any added to erlier run of the script. + echo + if grep -q "${1}" $FILE + then + echo "Logger exist" + else + echo "Need to add logger ${1}" + sed -i "//i \\n\\n" $FILE + fi + +} + +configure_RC_component_log(){ + check_if_logger_exist $1 + sed -i "// {N; s///}" $RESTCOMM_CONF/standalone-sip.xml +} + +configure_RC_logs(){ + sed -i "/ / { + N; s||| + }" $RESTCOMM_CONF/standalone-sip.xml +} + +config_on_thefly(){ + FILE=$RESTCOMM_BIN/restcomm/set-log-level.sh + MNGMTPORT=$((9999 + PORT_OFFSET)) + sed -i "s|jboss-cli.sh --connect controller=.*|jboss-cli.sh --connect controller=$BIND_ADDRESS:${MNGMTPORT} --file=\"\$CLIFILE\"|" $FILE +} + +config_AKKA_logs(){ + FILE=$RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/classes/application.conf + echo "Update AKKA log level to ${AKKA_LOG_LEVEL}" + sed -i "s|loglevel = \".*\"|loglevel = \"${AKKA_LOG_LEVEL}\"|" $FILE + sed -i "s|stdout-loglevel = \".*\"|stdout-loglevel = \"${AKKA_LOG_LEVEL}\"|" $FILE +} + + +#MAIN +if [ -n "$LOG_LEVEL" ]; then + configure_RC_logs + config_on_thefly + config_AKKA_logs + for i in $( set -o posix ; set | grep ^LOG_LEVEL_COMPONENT_ | sort -rn ); do + component=$(echo ${i} | cut -d = -f1 | cut -d _ -f4 ) + level=$(echo ${i} | cut -d = -f2) + case "$component" in + SIPSERVLET) + COMPONENT=org.mobicents.servlet.sip + ;; + GOVNIST) + COMPONENT=gov.nist + ;; + SIPRESTCOMM) + COMPONENT=org.mobicents.servlet.sip.restcomm + ;; + RESTCOMM) + COMPONENT=org.restcomm.connect + ;; + *) + echo "$component not possible to configure need to add it." + continue + esac + + echo "Configuring log level for: $component -> $level" + configure_RC_component_log "$COMPONENT" "$level" + done + fi + + diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-mysql.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-mysql.sh new file mode 100755 index 0000000000..7478e55e88 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-mysql.sh @@ -0,0 +1,249 @@ +#!/bin/bash +## Description: Enables and configures MySQL datasource +## Params: +## 1. RESTCOMM_VERSION +## Author: Henrique Rosa +## Author: Lefteris Banos + +# VARIABLES +RESTCOMM_DEPLOY=$RESTCOMM_HOME/standalone/deployments/restcomm.war + + +creteMysqlDataSource(){ + if [ -z "$RESTCOMM_HOME" ]; then + echo "RESTCOMM_HOME is not defined. Please setup this environment variable and try again." + exit 1 + fi + + # Variables + MYSQLDB_MODULE=$RESTCOMM_HOME/modules/system/layers/base/com/mysql/main + STANDALONE_SIP=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml + + # Download and install MariaDB driver as a JBoss module + mkdir -p $MYSQLDB_MODULE + if [ ! -f $MYSQLDB_MODULE/mysql-connector-java-5.1.36.jar ]; then + echo "Mysql driver not found!" + wget http://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.36/mysql-connector-java-5.1.36.jar -O /tmp/mysql-connector-java-5.1.36.jar + cp /tmp/mysql-connector-java-5.1.36.jar $MYSQLDB_MODULE + rm -f /tmp/mysql-connector-java-5.1.36.jar + else + echo "Mysql driver already downloaded" + fi + + +cat > $MYSQLDB_MODULE/module.xml << 'EOF' + + + + + + + + + + +EOF + +query=$(grep -q 'driver name=\"com.mysql\"' $STANDALONE_SIP) +if [ $? -eq 0 ]; then + echo "Datasource already populated" +else + echo "Going to populate the datasource" + + if [ -n "$MYSQL_SNDHOST" ]; then + # Update JBoss configuration to create a MariaDB datasource + sed -e '// a\ + \ \ + \ com.mysql.jdbc.Driver\ + \ com.mysql.jdbc.jdbc2.optional.MysqlXADataSource\ + \ ' \ + -e '// a\ + \ \ + \ jdbc:mysql://localhost:3306/restcomm \ + \ | \ + \ false \ + \ com.mysql \ + \ com.mysql.jdbc.Driver \ + \ TRANSACTION_READ_COMMITTED \ + \ \ + \ 5 \ + \ 50 \ + \ \ + \ \ + \ username \ + \ password \ + \ \ + \ \ + \ 100 \ + \ \ + \ \ + \ \ + \ true \ + \ \ + \ \ + \ select 1 \ + \ \ + \ ' $STANDALONE_SIP > $STANDALONE_SIP.bak + mv $STANDALONE_SIP.bak $STANDALONE_SIP + + else + # Update JBoss configuration to create a MariaDB datasource + sed -e '// a\ + \ \ + \ com.mysql.jdbc.Driver\ + \ com.mysql.jdbc.jdbc2.optional.MysqlXADataSource\ + \ ' \ + -e '// a\ + \ \ + \ jdbc:mysql://localhost:3306/restcomm \ + \ com.mysql \ + \ TRANSACTION_READ_COMMITTED \ + \ \ + \ 100 \ + \ 200 \ + \ \ + \ \ + \ username \ + \ password \ + \ \ + \ \ + \ 100 \ + \ \ + \ \ + \ ' $STANDALONE_SIP > $STANDALONE_SIP.bak + mv $STANDALONE_SIP.bak $STANDALONE_SIP + fi +fi +} + +## Description: Configures MyBatis for MySQL +## Parameters : none +configMybatis() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/mybatis.xml + + grep -q '' $FILE || sed -i '// a \ + \ \ + \ \ + \ \ + \ \ + \ \ + \ \ + ' $FILE + + sed -e '// s|default=".*"|default="mysql"|' $FILE > $FILE.bak + mv $FILE.bak $FILE + echo 'Activated mybatis environment for MySQL'; +} + +configureMySQLDataSource() { + FILE=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml + + if [ -n "$5" ]; then + #DB failover configuration. + sed -e "s|.*|jdbc:mysql://$1:3306/$4\|jdbc:mysql://$5:3306/$4|g" $FILE > $FILE.bak + else + # Update DataSource + sed -e "s|.*|jdbc:mysql://$1:3306/$4|g" $FILE > $FILE.bak + fi + mv $FILE.bak $FILE + sed -e "s|.*|$2|g" $FILE > $FILE.bak + mv $FILE.bak $FILE + sed -e "s|.*|$3|g" $FILE > $FILE.bak + mv $FILE.bak $FILE + echo 'Updated MySQL DataSource Configuration' +} + +## Description: Enables MySQL Datasource while disabling the remaining +## Parameters : none +enableDataSource() { + FILE=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml + + # Disable all datasources but MySQL + sed -e '/ $FILE.bak + + mv $FILE.bak $FILE + echo 'Enabled MySQL datasource' +} + +## Description: Configures RestComm DAO manager to use MySQL +## Params: none +configDaoManager() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/dao-manager.xml + + sed -e "s|.*||g" $FILE > $FILE.bak + mv $FILE.bak $FILE + sed -e "s|.*|\${restcomm:home}/WEB-INF/scripts/mariadb/sql|g" $FILE > $FILE.bak + mv $FILE.bak $FILE + + echo 'Configured MySQL Dao Manager for MySQL' +} + +## Description: Set Password for Adminitrator@company.com user. Only for fresh installation. +initUserPassword(){ + SQL_FILE=$RESTCOMM_DEPLOY/WEB-INF/scripts/mariadb/init.sql + if [ -n "$INITIAL_ADMIN_USER" ]; then + # change admin user + if grep -q "uninitialized" $SQL_FILE; then + echo "Update Admin user" + sed -i "s/administrator@company.com/${INITIAL_ADMIN_USER}/g" $SQL_FILE + else + echo "Adminitrator User Already changed" + fi + fi + + if [ -n "$INITIAL_ADMIN_PASSWORD" ]; then + echo "change admin password" + if grep -q "uninitialized" $SQL_FILE; then + PASSWORD_ENCRYPTED=`echo -n "${INITIAL_ADMIN_PASSWORD}" | md5sum |cut -d " " -f1` + #echo "Update password to ${INITIAL_ADMIN_PASSWORD}($PASSWORD_ENCRYPTED)" + sed -i "s/uninitialized/active/g" $SQL_FILE + sed -i "s/77f8c12cc7b8f8423e5c38b035249166/$PASSWORD_ENCRYPTED/g" $SQL_FILE + sed -i 's/Date("2012-04-24")/now()/' $SQL_FILE + sed -i 's/Date("2012-04-24")/now()/' $SQL_FILE + # end + else + echo "Adminitrator Password Already changed" + fi + fi +} + +## Description: populated DB with necessary starting point data if not done. +populateDB(){ + #Change script to defined schema + echo "Use RestComm Database:$MYSQL_SCHEMA " + sed -i "s|CREATE DATABASE IF NOT EXISTS .*| CREATE DATABASE IF NOT EXISTS ${MYSQL_SCHEMA};|" $RESTCOMM_DEPLOY/WEB-INF/scripts/mariadb/init.sql + sed -i "s|USE .*|USE ${MYSQL_SCHEMA};|" $RESTCOMM_DEPLOY/WEB-INF/scripts/mariadb/init.sql + + if mysql -u $2 -p$3 -h $1 -e "SELECT * FROM \`$4\`.restcomm_clients;" &>/dev/null ; then + # Update config settings + echo "Database already populated" + else + echo "Database not populated, importing schema and updating config file" + FILE=$RESTCOMM_DEPLOY/WEB-INF/scripts/mariadb/init.sql + mysql -u $2 -p$3 -h $1 < $FILE + mysql -u $2 -p$3 -h $1 --execute='show databases;' + mysql -u $2 -p$3 -h $1 --execute='show tables;' $4; + echo "Database population done" + fi +} + +# MAIN +if [[ "$ENABLE_MYSQL" == "true" || "$ENABLE_MYSQL" == "TRUE" ]]; then + if [[ -z $MYSQL_HOST || -z $MYSQL_USER || -z $MYSQL_PASSWORD || -z $MYSQL_SCHEMA ]]; then + echo 'one or more variables are undefined' + echo 'Not possible to continue with Mysql configuration' + exit 1 + else + echo "Configuring MySQL datasource... $MYSQL_HOST $MYSQL_SCHEMA $MYSQL_USER $MYSQL_SNDHOST" + creteMysqlDataSource + enableDataSource + configMybatis + configDaoManager + configureMySQLDataSource $MYSQL_HOST $MYSQL_USER $MYSQL_PASSWORD $MYSQL_SCHEMA $MYSQL_SNDHOST + initUserPassword + populateDB $MYSQL_HOST $MYSQL_USER $MYSQL_PASSWORD $MYSQL_SCHEMA + echo 'Finished configuring MySQL datasource!' + fi +fi \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-olympus.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-olympus.sh new file mode 100755 index 0000000000..ba52bad2f5 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-olympus.sh @@ -0,0 +1,55 @@ +#!/bin/bash +## +## Description: Configures RestComm +## Author: Lefteris Banos (eleftherios.banos@telestax.com) +## + +BASEDIR=$RESTCOMM_HOME + +if [ ! -d "$BASEDIR/standalone/deployments/olympus.war" ]; then + mkdir $BASEDIR/standalone/deployments/olympus-exploded.war + unzip -q $BASEDIR/standalone/deployments/olympus.war -d $BASEDIR/standalone/deployments/olympus-exploded.war/ + rm -f $BASEDIR/standalone/deployments/olympus.war + mv -f $BASEDIR/standalone/deployments/olympus-exploded.war $BASEDIR/standalone/deployments/olympus.war +fi + +# Set Olympus ports +olympusPortConf(){ +FILE=$BASEDIR/standalone/deployments/olympus.war/resources/xml/olympus.xml + +# Check for Port Offset + local SIP_PORT_WS=$((SIP_PORT_WS + PORT_OFFSET)) + local SIP_PORT_WSS=$((SIP_PORT_WSS + PORT_OFFSET)) + + if [ -z "$SECURESSL" ] || [ "$SECURESSL" == "false" ] || [ "$SECURESSL" == "FALSE" ]; then + xmlstarlet ed -L -P -u "/olympus/server/@secure" -v "false" $FILE + else + xmlstarlet ed -L -P -u "/olympus/server/@secure" -v "true" $FILE + fi + + if [ "$ACTIVATE_LB" == "true" ] || [ "$ACTIVATE_LB" == "TRUE" ]; then + xmlstarlet ed -L -P -u "/olympus/server/port" -v ${LB_EXTERNAL_PORT_WS} $FILE + xmlstarlet ed -L -P -u "/olympus/server/secure-port" -v ${LB_EXTERNAL_PORT_WSS} $FILE + else + xmlstarlet ed -L -P -u "/olympus/server/port" -v ${SIP_PORT_WS} $FILE + xmlstarlet ed -L -P -u "/olympus/server/secure-port" -v ${SIP_PORT_WSS} $FILE + fi + +} + + +DomainConf(){ +#Configure Web Olympus Domain. +FILE=$BASEDIR/standalone/deployments/olympus.war/resources/xml/olympus.xml + echo "WebOlympusDomain: $WebOlympusDomain" + if [ ! -z "${WebOlympusDomain}" ]; then + xmlstarlet ed -L -P -u "/olympus/server/address" -v ${WebOlympusDomain} $FILE + fi +} + + +# MAIN +echo 'Configuring Olympus...' +#Reload Variables +olympusPortConf +DomainConf diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-restcomm.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-restcomm.sh new file mode 100755 index 0000000000..05ada88547 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-restcomm.sh @@ -0,0 +1,917 @@ +#!/bin/bash +## +## Description: Configures RestComm +## Author: Henrique Rosa (henrique.rosa@telestax.com) +## Author: Pavel Slegr (pavel.slegr@telestax.com) +## Author: Maria Farooq (maria.farooq@telestax.com) +## + +# VARIABLES +RESTCOMM_BIN=$RESTCOMM_HOME/bin +RESTCOMM_DARS=$RESTCOMM_HOME/standalone/configuration/dars +RESTCOMM_CONF=$RESTCOMM_HOME/standalone/configuration +RESTCOMM_DEPLOY=$RESTCOMM_HOME/standalone/deployments/restcomm.war +RVD_DEPLOY_PATH=$RESTCOMM_HOME/standalone/deployments/restcomm-rvd.war + +## FUNCTIONS + +## Description: Configures Java Options for Application Server +## Parameters : none +configRCJavaOpts() { + FILE=$RESTCOMM_BIN/standalone.conf + echo "RestComm java options with: $RC_JAVA_OPTS" + sed -e "/if \[ \"x\$JAVA_OPTS\" = \"x\" \]; then/ { + N; s|JAVA_OPTS=.*|JAVA_OPTS=\"$RC_JAVA_OPTS\"| + }" $FILE > $FILE.bak + mv $FILE.bak $FILE +} + +## Description: Updates RestComm configuration file +## Parameters : 1.STATIC_ADDRESS +configRestcomm() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + static_address="$1" + + sed -i "s|<\!--.*.*<\/external-ip>.*-->|$static_address<\/external-ip>|" $FILE + sed -i "s|.*<\/external-ip>|$static_address<\/external-ip>|" $FILE + + sed -i "s||$static_address<\/external-ip>|" $FILE + + echo 'Updated RestComm configuration' + + #If "STRICT" no self-signed certificate is permitted. + if [ "$SSL_MODE" == "strict" ] || [ "$SSL_MODE" == "STRICT" ]; then + sed -e "s/.*<\/ssl-mode>/strict<\/ssl-mode>/g;s//strict<\/ssl-mode>/g" $FILE > $FILE.bak + mv $FILE.bak $FILE + else + sed -e "s/.*<\/ssl-mode>/allowall<\/ssl-mode>/g;s//allowall<\/ssl-mode>/g" $FILE > $FILE.bak + mv $FILE.bak $FILE + fi + + #Configure RESTCOMM_HOSTNAME at restcomm.xml. If not set "STATIC_ADDRESS" will be used. + if [ -n "$RESTCOMM_HOSTNAME" ]; then + echo "HOSTNAME $RESTCOMM_HOSTNAME" + + sed -i "s|.*<\/hostname>|${RESTCOMM_HOSTNAME}<\/hostname>|" $RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i "s||${RESTCOMM_HOSTNAME}<\/hostname>|" $RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + if ! grep "${BIND_ADDRESS}.*${RESTCOMM_HOSTNAME}" /etc/hosts ; then + if hash host 2>/dev/null; then + if ! host ${RESTCOMM_HOSTNAME} > /dev/null + then + echo "${BIND_ADDRESS} ${RESTCOMM_HOSTNAME}" >> /etc/hosts + fi + else + echo "INFO: \"host\" programm does not exist ('dnsutils' package) please make sure that used hostname has a valid DNS resolution." + echo "INFO:IF not add the necessary hostname Ip resolution at /etc/hosts file: e.g echo RestC0mm_BIND_IP RESTCOMM_HOSTNAME >> /etc/hosts " + fi +fi + else + sed -i "s|.*<\/hostname>|${PUBLIC_IP}<\/hostname>|" $RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i "s||${PUBLIC_IP}<\/hostname>|" $RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + fi +} +## Description: OutBoundProxy configuration. +configOutboundProxy(){ + echo "Configure outbound-proxy" + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i "s|.*<\/outbound-proxy-uri>|$OUTBOUND_PROXY<\/outbound-proxy-uri>|" $FILE + sed -i "s|.*<\/outbound-proxy-user>|$OUTBOUND_PROXY_USERNAME<\/outbound-proxy-user>|" $FILE + sed -i "s|.*<\/outbound-proxy-password>|$OUTBOUND_PROXY_PASSWORD<\/outbound-proxy-password>|" $FILE + + sed -i "s||$OUTBOUND_PROXY<\/outbound-proxy-uri>|" $FILE + sed -i "s||$OUTBOUND_PROXY_USERNAME<\/outbound-proxy-user>|" $FILE + sed -i "s||$OUTBOUND_PROXY_PASSWORD<\/outbound-proxy-password>|" $FILE +} +## Description: Push notification server configuration. +configPushNotificationServer() { + echo "Configure push-notification-server" + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + sed -i "s|.*<\/push-notification-server-enabled>|$PUSH_NOTIFICATION_SERVER_ENABLED<\/push-notification-server-enabled>|" $FILE + sed -i "s|.*<\/push-notification-server-url>|$PUSH_NOTIFICATION_SERVER_URL<\/push-notification-server-url>|;" $FILE + sed -i "s|.*<\/push-notification-server-delay>|$PUSH_NOTIFICATION_SERVER_DELAY<\/push-notification-server-delay>|" $FILE + + sed -i "s||$PUSH_NOTIFICATION_SERVER_ENABLED<\/push-notification-server-enabled>|" $FILE + sed -i "s||$PUSH_NOTIFICATION_SERVER_URL<\/push-notification-server-url>|" $FILE + sed -i "s||$PUSH_NOTIFICATION_SERVER_DELAY<\/push-notification-server-delay>|" $FILE +} +## Description: Configures Voip Innovations Credentials +## Parameters : 1.Login +## 2.Password +## 3.Endpoint +configVoipInnovations() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + N; s|.*|$3| + }" $FILE + + sed -i "// { + N; s||$1| + N; s||$2| + N; s||$3| + }" $FILE + + echo 'Configured Voip Innovation credentials' +} + +## Description: PROVISION MANAGER configuration. +# MANAGERS : VI (Voip innovations),NX (nexmo),VB (Voxbone), BW(Bandwidth). +configDidProvisionManager() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + if [[ "$PROVISION_PROVIDER" == "VI" || "$PROVISION_PROVIDER" == "vi" ]]; then + sed -e "s|phone-number-provisioning class=\".*\"|phone-number-provisioning class=\"org.restcomm.connect.provisioning.number.vi.VoIPInnovationsNumberProvisioningManager\"|" $FILE > $FILE.bak + + mv $FILE.bak $FILE + + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + N; s|.*|$3| + }" $FILE + + sed -i "// { + N; s||$1| + N; s||$2| + N; s||$3| + }" $FILE + + sed -i "s|.*<\/outboudproxy-user-at-from-header>|"false"<\/outboudproxy-user-at-from-header>|" $FILE + sed -i "s||"false"<\/outboudproxy-user-at-from-header>|" $FILE + echo 'Configured Voip Innovation credentials' + else + if [[ "$PROVISION_PROVIDER" == "BW" || "$PROVISION_PROVIDER" == "bw" ]]; then + sed -e "s|phone-number-provisioning class=\".*\"|phone-number-provisioning class=\"org.restcomm.connect.provisioning.number.bandwidth.BandwidthNumberProvisioningManager\"|" $FILE > $FILE.bak + + mv $FILE.bak $FILE + + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + N; s|.*|$6| + N; s|.*|$4| + }" $FILE + + sed -i "// { + N; s||$1| + N; s||$2| + N; s||$6| + N; s||$4| + }" $FILE + + sed -i "s|.*<\/outboudproxy-user-at-from-header>|"false"<\/outboudproxy-user-at-from-header>|" $FILE + sed -i "s||"false"<\/outboudproxy-user-at-from-header>|" $FILE + echo 'Configured Bandwidth credentials' + else + if [[ "$PROVISION_PROVIDER" == "NX" || "$PROVISION_PROVIDER" == "nx" ]]; then + echo "Nexmo PROVISION_PROVIDER" + sed -i "s|phone-number-provisioning class=\".*\"|phone-number-provisioning class=\"org.restcomm.connect.provisioning.number.nexmo.NexmoPhoneNumberProvisioningManager\"|" $FILE + + if [[ -z "$8" ]]; then + sed -i "// { + N; s||| + N; s||| + N; s||| + N; s||| + }" $FILE + else + sed -i "// { + N; s||| + N; s||| + N; s||| + N; s||| + }" $FILE + fi + + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + N + N; s|.*|$7| + }" $FILE + + sed -i "// { + N; s||$1| + N; s||$2| + N + N; s||$7| + }" $FILE + + sed -i "s|.*<\/outboudproxy-user-at-from-header>|"true"<\/outboudproxy-user-at-from-header>|" $FILE + sed -i "s||"true"<\/outboudproxy-user-at-from-header>|" $FILE + + else + if [[ "$PROVISION_PROVIDER" == "VB" || "$PROVISION_PROVIDER" == "vb" ]]; then + echo "Voxbone PROVISION_PROVIDER" + sed -i "s|phone-number-provisioning class=\".*\"|phone-number-provisioning class=\"org.restcomm.connect.provisioning.number.voxbone.VoxbonePhoneNumberProvisioningManager\"|" $FILE + + sed -i "// { + N; s||| + N; s||| + N; s||| + N; s||| + }" $FILE + + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + }" $FILE + sed -i "// { + N; s||$1| + N; s||$2| + }" $FILE + sed -i "s|.*<\/outboudproxy-user-at-from-header>|"false"<\/outboudproxy-user-at-from-header>|" $FILE + sed -i "s||"false"<\/outboudproxy-user-at-from-header>|" $FILE + + fi + fi + fi + fi +} + +## Description: Configures Fax Service Credentials +## Parameters : 1.Username +## 2.Password +configFaxService() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + }" $FILE + + sed -i "// { + N; s||$1| + N; s||$2| + }" $FILE + + echo 'Configured Fax Service credentials' +} + +## Description: Configures Sms Aggregator +## Parameters : 1.Outbound endpoint IP +## +configSmsAggregator() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + sed -i "// { + N; s|.*|$2| + N; s|.*|$1| + }" $FILE + + sed -i "// { + N; s||$2| + N; s||$1| + }" $FILE + echo "Configured Sms Aggregator using OUTBOUND PROXY $1" +} + +## Description: Configures Speech Recognizer +## Parameters : 1.iSpeech Key +configSpeechRecognizer() { + if [ -n "$ISPEECH_KEY" ]; then + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + sed -i "// { + N; s||$1| + }" $FILE + + sed -i "// { + N; s||$1| + }" $FILE + + echo 'Configured the Speech Recognizer' + fi +} + +## Description: Configures available speech synthesizers +## Parameters : none +configSpeechSynthesizers() { + if [[ "$TTSSYSTEM" == "voicerss" ]]; then + configVoiceRSS $VOICERSS_KEY + + elif [[ "$TTSSYSTEM" == "awspolly" ]]; then + configAWSPolly $AWS_ACCESS_KEY $AWS_SECRET_KEY $AWS_REGION + + else + configAcapela $ACAPELA_APPLICATION $ACAPELA_LOGIN $ACAPELA_PASSWORD + fi +} + +## Description: Configures Acapela Speech Synthesizer +## Parameters : 1.Application Code +## 2.Login +## 3.Password +configAcapela() { + if [[ -z $ACAPELA_APPLICATION || -z $ACAPELA_LOGIN || -z $ACAPELA_PASSWORD ]]; then + echo '!Please make sure that all necessary settings for acapela are set!' + else + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i 's|||' $FILE + + sed -i "// { + N + N; s|.*|$1| + N; s|.*|$2| + N; s|.*|$3| + }" $FILE + + sed -i "// { + N + N; s||$1| + N; s||$2| + N; s||$3| + }" $FILE + + echo 'Configured Acapela Speech Synthesizer' + fi +} + + +## Description: Configures VoiceRSS Speech Synthesizer +## Parameters : 1.API key +configVoiceRSS() { + if [ -n "$VOICERSS_KEY" ]; then + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i 's|||' $FILE + + sed -i "/http:\/\/api.voicerss.org<\/service-root>/ { + N; s|.*|$1| + }" $FILE + + sed -i "/http:\/\/api.voicerss.org<\/service-root>/ { + N; s||$1| + }" $FILE + + echo 'Configured VoiceRSS Speech Synthesizer' + + else + echo 'Please set KEY for VoiceRSS TTS' + fi +} + +## Description: Configures AWS Polly Speech Synthesizer +## Parameters : 1.AWS Access Key +## 2.AWS Secret key +## 3.AWS Region +configAWSPolly() { + if [[ -z $AWS_ACCESS_KEY || -z $AWS_SECRET_KEY || -z $AWS_REGION ]]; then + echo '!Please make sure that all necessary settings for AWS Polly are set!' + else + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i 's|||' $FILE + + sed -i "// { + N + N; s|.*|$1| + N; s|.*|$2| + N; s|.*|$3| + }" $FILE + + sed -i "// { + N + N; s||$1| + N; s||$2| + N; s||$3| + }" $FILE + + echo 'Configured AWS Polly Speech Synthesizer' + fi +} + +## Description: Updates RestComm DARS properties for RestComm +## Parameters : none +configDARSProperties() { + FILE=$RESTCOMM_DARS/mobicents-dar.properties + sed -e 's|^ALL=.*|ALL=("RestComm", "DAR\:From", "NEUTRAL", "", "NO_ROUTE", "0")|' $FILE > $FILE.bak + mv $FILE.bak $FILE + echo "Updated mobicents-dar properties" +} + +## Description: Configures TeleStax Proxy +## Parameters : 1.Enabled +## 2.login +## 3.password +## 4.Endpoint +## 5.Proxy IP +configTelestaxProxy() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + enabled="$1" + if [ "$enabled" == "true" ] || [ "$enabled" == "TRUE" ]; then + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + N; s|.*|$3| + N; s|.*|$4| + N; s|.*|$6| + N; s|.*|http:\/\/$5:2080| + }" $FILE + + sed -i "// { + N; s||$1| + N; s||$2| + N; s||$3| + N; s||$4| + N; s||$6| + N; s||http:\/\/$5:2080| + }" $FILE + + echo 'Enabled TeleStax Proxy' + else + sed -i "// { + N; s|.*|false| + N; s|.*|| + N; s|.*|| + N; s|.*|| + N; s|.*|| + N; s|.*|http:\/\/127.0.0.1:2080| + }" $FILE + + sed -i "// { + N; s||false| + N; s||| + N; s||| + N; s||| + N; s||| + N; s||http:\/\/127.0.0.1:2080| + }" $FILE + + echo 'Disabled TeleStax Proxy' + fi +} + + +## Description: Configures Media Server Manager +## Parameters : 1.Enabled +## 2.private IP +## 3.public IP + +configMediaServerManager() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + bind_address="$1" + ms_address="$2" + ms_external_address="$3" + + #Check for Por Offset + local LOCALMGCP=$((LOCALMGCP + PORT_OFFSET)) + local REMOTEMGCP=$((REMOTEMGCP + PORT_OFFSET)) + + sed -e "s/.*<\/local-address>/$bind_address<\/local-address>/g;s//$bind_address<\/local-address>/g" \ + -e "s/.*<\/local-port>/$LOCALMGCP<\/local-port>/g;s//$LOCALMGCP<\/local-port>/g" \ + -e "s/.*<\/remote-address>/$ms_address<\/remote-address>/g;s//$ms_address<\/remote-address>/g" \ + -e "s/.*<\/remote-port>/$REMOTEMGCP<\/remote-port>/g;s//$REMOTEMGCP<\/remote-port>/g" \ + -e "s/.*<\/response-timeout>/$MGCP_RESPONSE_TIMEOUT<\/response-timeout>/g;s//$MGCP_RESPONSE_TIMEOUT<\/response-timeout>/g" \ + -e "s/<\!--.*.*<\/external-address>.*-->/$ms_external_address<\/external-address>/g;" \ + -e "s/.*<\/external-address>/$ms_external_address<\/external-address>/g;s//$ms_external_address<\/external-address>/g" $FILE > $FILE.bak + + mv $FILE.bak $FILE + echo 'Configured Media Server Manager' +} + +## Description: Configures SMPP Account Details +## Parameters : 1.activate +## 2.systemID +## 3.password +## 4.systemType +## 5.peerIP +## 6.peerPort +## 7.sourceMap +## 8.destinationMap + +configSMPPAccount() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + activate="$1" + systemID="$2" + password="$3" + systemType="$4" + peerIP="$5" + peerPort="$6" + sourceMap="$7" + destinationMap="$8" + inboundEncoding="$9" + outboundEncoding="${10}" + + + sed -i "s|||g" $FILE + #Add sourceMap && destinationMap + + + if [ "$activate" == "true" ] || [ "$activate" == "TRUE" ]; then + sed -i "/.*|$systemID| + N; s|.*|$peerIP| + N; s|.*|$peerPort| + N + N + N; s|.*|$password| + N; s|.*|$systemType| + }" $FILE + + sed -i "/$systemID| + N; s||$peerIP| + N; s||$peerPort| + N + N + N; s||$password| + N; s||$systemType| + }" $FILE + + sed -i "s|||" $FILE + + if [ ! -z "${inboundEncoding}" ]; then + xmlstarlet ed -L -P -u "/restcomm/smpp/connections/connection/inboundencoding" -v $inboundEncoding $FILE + fi + if [ ! -z "${outboundEncoding}" ]; then + xmlstarlet ed -L -P -u "/restcomm/smpp/connections/connection/outboundencoding" -v $outboundEncoding $FILE + fi + echo 'Configured SMPP Account Details' + + else + sed -i "/.*|| + N; s|.*|| + N; s|.*|| + N + N + N; s|.*|| + N; s|.*|| + }" $FILE + + sed -i "/|| + N; s||| + N; s||| + N + N + N; s||| + N; s||| + }" $FILE + + sed -i "s|||" $FILE + + xmlstarlet ed -L -P -u "/restcomm/smpp/connections/connection/inboundencoding" -v "" $FILE + xmlstarlet ed -L -P -u "/restcomm/smpp/connections/connection/outboundencoding" -v "" $FILE + + echo 'Configured SMPP Account Details' + fi +} + +## Description: Configures RestComm "prompts & cache" URIs +#Mostly used for external MS. +configRestCommURIs() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + #check for port offset + local HTTP_PORT=$((HTTP_PORT + PORT_OFFSET)) + local HTTPS_PORT=$((HTTPS_PORT + PORT_OFFSET)) + + if [ -n "$MS_ADDRESS" ] && [ "$MS_ADDRESS" != "$BIND_ADDRESS" ]; then + if [ "$DISABLE_HTTP" = "true" ]; then + PORT="$HTTPS_PORT" + SCHEME='https' + else + PORT="$HTTP_PORT" + SCHEME='http' + fi + + # STATIC_ADDRESS will be populated by user or script before + REMOTE_ADDRESS="${SCHEME}://${PUBLIC_IP}:${PORT}" + + sed -i "s|.*|$REMOTE_ADDRESS/restcomm/audio<\/prompts-uri>|" $FILE + sed -i "s|.*/cache-uri>|$REMOTE_ADDRESS/restcomm/cache|" $FILE + sed -i "s|.*|$REMOTE_ADDRESS/restcomm/errors|" $FILE + + sed -i "s||$REMOTE_ADDRESS/restcomm/audio<\/prompts-uri>|" $FILE + sed -i "s||$REMOTE_ADDRESS/restcomm/cache|" $FILE + sed -i "s||$REMOTE_ADDRESS/restcomm/errors|" $FILE + + echo "Updated prompts-uri cache-uri error-dictionary-uri External MSaddress for " + fi + echo 'Configured RestCommURIs' +} + +## Description: Specify the path where Recordings are saved. +updateRecordingsPath() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + if [ -n "$RECORDINGS_PATH" ]; then + sed -i "s|.*|file://${RECORDINGS_PATH}<\/recordings-path>|" $FILE + sed -i "s||file://${RECORDINGS_PATH}<\/recordings-path>|" $FILE + echo "Updated RECORDINGS_PATH " + + else + sed -i "s|.*|file://\${restcomm:home}/recordings<\/recordings-path>|" $FILE + sed -i "s||file://\${restcomm:home}/recordings<\/recordings-path>|" $FILE + fi + echo 'Configured Recordings path' +} + +## Description: Specify HTTP/S ports used. +#Needed when port offset is set. +configHypertextPort(){ + MSSFILE=$RESTCOMM_CONF/mss-sip-stack.properties + + #Check for Por Offset + local HTTP_PORT=$((HTTP_PORT + PORT_OFFSET)) + local HTTPS_PORT=$((HTTPS_PORT + PORT_OFFSET)) + + sed -e "s|org.mobicents.ha.javax.sip.LOCAL_HTTP_PORT=.*|org.mobicents.ha.javax.sip.LOCAL_HTTP_PORT=$HTTP_PORT|" \ + -e "s|org.mobicents.ha.javax.sip.LOCAL_SSL_PORT=.*|org.mobicents.ha.javax.sip.LOCAL_SSL_PORT=$HTTPS_PORT|" $MSSFILE > $MSSFILE.bak + mv $MSSFILE.bak $MSSFILE + echo "Configured HTTP ports" +} + +## Description: Other single configuration +#enable/disable SSLSNI (default:false) +otherRestCommConf(){ + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -e "s/.*<\/play-music-for-conference>/${PLAY_WAIT_MUSIC}<\/play-music-for-conference>/g;s//${PLAY_WAIT_MUSIC}<\/play-music-for-conference>/g" $FILE > $FILE.bak + mv $FILE.bak $FILE + + #Remove if is set in earlier run. + grep -q 'allowLegacyHelloMessages' $RESTCOMM_BIN/standalone.conf && sed -i -E "s/(.*)( -Dsun.security.ssl.allowLegacyHelloMessages=false -Djsse.enableSNIExtension=)(true|false)(.*)/\1\4/" $RESTCOMM_BIN/standalone.conf + + if [[ "$SSLSNI" == "false" || "$SSLSNI" == "FALSE" ]]; then + sed -i "s|-Djava.awt.headless=true|& -Dsun.security.ssl.allowLegacyHelloMessages=false -Djsse.enableSNIExtension=false|" $RESTCOMM_BIN/standalone.conf + else + sed -i "s|-Djava.awt.headless=true|& -Dsun.security.ssl.allowLegacyHelloMessages=false -Djsse.enableSNIExtension=true|" $RESTCOMM_BIN/standalone.conf + fi + + if [ -n "$HSQL_DIR" ]; then + echo "HSQL_DIR $HSQL_DIR" + FILEDB=$HSQL_DIR/restcomm.script + sed -i "s|.*|${HSQL_DIR}|" $FILE + if [ ! -f $FILEDB ]; then + mkdir -p $HSQL_DIR + cp $RESTCOMM_DEPLOY/WEB-INF/data/hsql/* $HSQL_DIR + fi + fi + + if [ -n "$USSDGATEWAYURI" ]; then + echo "USSD GATEWAY configuration" + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i "s|.*|$USSDGATEWAYURI|" $FILE + sed -i "s|.*|$USSDGATEWAYUSER|" $FILE + sed -i "s|.*|$USSDGATEWAYPASSWORD|" $FILE + + sed -i "s||$USSDGATEWAYURI|" $FILE + sed -i "s||$USSDGATEWAYUSER|" $FILE + sed -i "s||$USSDGATEWAYPASSWORD|" $FILE + fi + + echo "HTTP_RESPONSE_TIMEOUT $HTTP_RESPONSE_TIMEOUT" + sed -i"." "// { + N + N; + N; + N; + N; s|.*|$HTTP_RESPONSE_TIMEOUT| + }" $FILE + + sed -i"." "// { + N + N; + N; + N; + N; s||$HTTP_RESPONSE_TIMEOUT| + }" $FILE + + echo "CACHE_NO_WAV $CACHE_NO_WAV" + sed -i "s|.*|${CACHE_NO_WAV}|" $FILE + + #Configure USESBC + echo "USESBC: $RCUSESBC" + sed -i "s|.*|${RCUSESBC}|" $FILE + + echo "End Rest RestComm configuration" +} + +disableRVD() { + if [[ -f "$RVD_DEPLOY_PATH.deployed" || -f "$RVD_DEPLOY_PATH.dodeploy" ]]; then + rm -f "$RVD_DEPLOY_PATH.deployed" + rm -f "$RVD_DEPLOY_PATH.dodeploy" + echo "RVD undeployed (or not deployed at all)" + else + echo "RVD not deployed" + fi +} + +enableRVD() { + if [ -f "$RVD_DEPLOY_PATH.deployed" ]; then + echo "RVD already deployed" + else + touch "$RVD_DEPLOY_PATH".dodeploy + echo "RVD deployed" + fi +} + +confRVD(){ + if [[ "$RVD_UNDEPLOY" = true || "$RVD_UNDEPLOY" = True || "$RVD_UNDEPLOY" = TRUE ]]; then + disableRVD + else + enableRVD + echo "Configuring bundled RVD" + if [ -n "$RVD_LOCATION" ]; then + echo "RVD_LOCATION $RVD_LOCATION" + mkdir -p `echo $RVD_LOCATION` + sed -i "s|.*|${RVD_LOCATION}|" $RVD_DEPLOY_PATH/WEB-INF/rvd.xml + + COPYFLAG=$RVD_LOCATION/.demos_initialized + if [ -f "$COPYFLAG" ]; then + #Do nothing, we already copied the demo file to the new workspace + echo "RVD demo application are already copied" + else + echo "Will copy RVD demo applications to the new workspace $RVD_LOCATION" + cp -ar $RVD_DEPLOY_PATH/workspace/* $RVD_LOCATION + touch $COPYFLAG + fi + + fi + fi +} + +## Adds/removes / element based on $RVD_URL +## This version of confRcmlserver() will used xmlstarlet and will probably sed commands that rely on empty elements like instead of +#confRcmlserver(){ +# echo "Configuring ..." +# local RESTCOMM_XML=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml +# if [ -z "$RVD_URL" ]; then +# # remove / element altogether +# xmlstarlet ed -P -d "/restcomm/rcmlserver/base-url" "$RESTCOMM_XML" > "${RESTCOMM_XML}.bak" +# mv ${RESTCOMM_XML}.bak "$RESTCOMM_XML" +# else +# # remove existing element +# xmlstarlet ed -P -d /restcomm/rcmlserver/base-url "$RESTCOMM_XML" > "${RESTCOMM_XML}.bak" +# mv ${RESTCOMM_XML}.bak "$RESTCOMM_XML" +# # add it anew +# xmlstarlet ed -P -s /restcomm/rcmlserver -t elem -n base-url -v "$RVD_URL" "${RESTCOMM_XML}" > "${RESTCOMM_XML}.bak" +# mv "${RESTCOMM_XML}.bak" "$RESTCOMM_XML" +# fi +# echo " configured" +#} + +# Updates / according to $RVD_URL +# This version of confRcmlserver() used sed for backwards compatibility with existing sed commands in this +confRcmlserver() { + local RESTCOMM_XML=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed "//,/<\/rcmlserver>/ s|.*|${RVD_URL}|" "$RESTCOMM_XML" > "${RESTCOMM_XML}.bak" + mv ${RESTCOMM_XML}.bak "$RESTCOMM_XML" + echo "Configured . base-url set to '$RVD_URL'" +} + + +#Auto Configure RMS Networking, if MANUAL_SETUP=false. +configRMSNetworking() { + if [[ "$MANUAL_SETUP" == "false" || "$MANUAL_SETUP" == "FALSE" ]]; then + sed -i "s|BIND_ADDRESS=.*|BIND_ADDRESS=${BIND_ADDRESS}|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|MGCP_ADDRESS=.*|MGCP_ADDRESS=${BIND_ADDRESS}|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|NETWORK=.*|NETWORK=${BIND_NETWORK}|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|SUBNET=.*|SUBNET=${BIND_SUBNET_MASK}|" $RESTCOMM_BIN/restcomm/mediaserver.conf + fi +} + +configAsrDriver() { + if [ ! -z "$MG_ASR_DRIVERS" ] && [ ! -z "$MG_ASR_DRIVER_DEFAULT" ]; then + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/mg-asr-drivers" \ + -s "/restcomm/runtime-settings" -t elem -n mg-asr-drivers \ + -i "/restcomm/runtime-settings/mg-asr-drivers" -t attr -n default -v "$MG_ASR_DRIVER_DEFAULT" \ + $FILE + for driverName in ${MG_ASR_DRIVERS//,/ }; do + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/mg-asr-drivers" -t elem -n "driver" -v "$driverName" \ + $FILE + done + fi +} + +## Description: DNS Provisioning Manager Configuration. +configDnsProvisioningManager() { + echo "Configure DnsProvisioningManager" + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/dns-provisioning" \ + -s "/restcomm/runtime-settings" -t elem -n dns-provisioning \ + -i "/restcomm/runtime-settings/dns-provisioning" -t attr -n class -v "$DNS_PROVISIONING_CLASS" \ + $FILE + + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/dns-provisioning" \ + -s "/restcomm/runtime-settings" -t elem -n dns-provisioning \ + -i "/restcomm/runtime-settings/dns-provisioning" -t attr -n enabled -v "$DNS_PROVISIONING_ENABLED" \ + $FILE + + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/dns-provisioning" \ + -s "/restcomm/runtime-settings" -t elem -n dns-provisioning \ + -i "/restcomm/runtime-settings/dns-provisioning" -t attr -n class -v "$DNS_PROVISIONING_CLASS" \ + $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning" -t attr -n "enabled" -v "$DNS_PROVISIONING_ENABLED" $FILE + + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/dns-provisioning/aws-route53" \ + -s "/restcomm/runtime-settings/dns-provisioning" -t elem -n aws-route53 $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "restcomm-a-record-value" -v "$DNS_PROVISIONING_AWS_ROUTE53_A_VALUE" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "restcomm-srv-record-value" -v "$DNS_PROVISIONING_AWS_ROUTE53_SRV_VALUE" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "access-key" -v "$DNS_PROVISIONING_AWS_ROUTE53_ACCESS_KEY" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "secret-key" -v "$DNS_PROVISIONING_AWS_ROUTE53_SECRET_KEY" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "region" -v "$DNS_PROVISIONING_AWS_ROUTE53_REGION" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "ttl" -v "$DNS_PROVISIONING_AWS_ROUTE53_TTL" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "hosted-zone-id" -v "$DNS_PROVISIONING_AWS_ROUTE53_HOSTED_ZONE_ID" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "is-alias" -v "$DNS_PROVISIONING_AWS_ROUTE53_IS_ALIAS" $FILE + + + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/dns-provisioning/aws-route53/alias-target" \ + -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n alias-target $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53/alias-target" -t elem -n "evaluate-target-health" -v "$DNS_PROVISIONING_AWS_ROUTE53_ALIAS_EVALUATE_TARGET_HEALTH" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53/alias-target" -t elem -n "hosted-zone-id" -v "$DNS_PROVISIONING_AWS_ROUTE53_ALIAS_HOSTED_ZONE_ID" $FILE + +} + +configConferenceTimeout(){ + echo "Configure conference timeout $CONFERENCE_TIMEOUT" + xmlstarlet ed --inplace -u "/restcomm/runtime-settings/conference-timeout" -v "$CONFERENCE_TIMEOUT" $FILE +} + +configSdrService(){ + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/sdr-service" $FILE + if [ -n "$SDR_SERVICE_CLASS" ]; then + echo "Configure Sdr service" + xmlstarlet ed --inplace -s "/restcomm/runtime-settings" -t elem -n sdr-service \ + -i "/restcomm/runtime-settings/sdr-service" -t attr -n class -v "$SDR_SERVICE_CLASS" \ + $FILE + if [ -n "$SDR_SERVICE_HTTP_URI" ]; then + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/sdr-service" -t elem -n http-uri -v "$SDR_SERVICE_HTTP_URI" $FILE + fi + if [ -n "$SDR_SERVICE_AMQP_URI" ]; then + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/sdr-service" -t elem -n amqp-uri -v "$SDR_SERVICE_AMQP_URI" $FILE + fi + fi +} + +# MAIN +echo 'Configuring RestComm...' +configRCJavaOpts +configDARSProperties +configRestcomm "$PUBLIC_IP" +#configVoipInnovations "$VI_LOGIN" "$VI_PASSWORD" "$VI_ENDPOINT" + +if [ "$ACTIVATE_LB" == "true" ] || [ "$ACTIVATE_LB" == "TRUE" ]; then + HOSTFORDID=$LBHOST +else + HOSTFORDID=$PUBLIC_IP + + #Check for port offset. + DID_URIPORT=$((DID_URIPORT + PORT_OFFSET)) +fi + +if [ -z "$MS_ADDRESS" ]; then + MS_ADDRESS=$BIND_ADDRESS +fi + +if [ "a" == "a$MGCP_LOCAL_ADDRESS" ]; then + # $MGCP_LOCAL_ADDRESS is empty, so just use bind address + MGCP_ADDRESS=$BIND_ADDRESS +else + MGCP_ADDRESS=$MGCP_LOCAL_ADDRESS +fi + +configDidProvisionManager "$DID_LOGIN" "$DID_PASSWORD" "$DID_ENDPOINT" "$DID_SITEID" "$HOSTFORDID" "$DID_ACCOUNTID" "$SMPP_SYSTEM_TYPE" "$DID_URIPORT" +configFaxService "$INTERFAX_USER" "$INTERFAX_PASSWORD" +configSmsAggregator "$SMS_OUTBOUND_PROXY" "$SMS_PREFIX" +configSpeechRecognizer "$ISPEECH_KEY" +configSpeechSynthesizers +configTelestaxProxy "$ACTIVE_PROXY" "$TP_LOGIN" "$TP_PASSWORD" "$INSTANCE_ID" "$PROXY_IP" "$SITE_ID" +configMediaServerManager "$MGCP_ADDRESS" "$MS_ADDRESS" "$MEDIASERVER_EXTERNAL_ADDRESS" +configSMPPAccount "$SMPP_ACTIVATE" "$SMPP_SYSTEM_ID" "$SMPP_PASSWORD" "$SMPP_SYSTEM_TYPE" "$SMPP_PEER_IP" "$SMPP_PEER_PORT" "$SMPP_SOURCE_MAP" "$SMPP_DEST_MAP" "$SMPP_INBOUND_ENCODING" "$SMPP_OUTBOUND_ENCODING" +configRestCommURIs +updateRecordingsPath +configHypertextPort +configOutboundProxy +configPushNotificationServer +otherRestCommConf +confRcmlserver +confRVD +configRMSNetworking +configAsrDriver +configDnsProvisioningManager +configConferenceTimeout +configSdrService +echo 'Configured RestComm!' diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-rvd-logging.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-rvd-logging.sh new file mode 100755 index 0000000000..5aed5b9025 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-rvd-logging.sh @@ -0,0 +1,190 @@ +#!/bin/bash +## +## Logging configuration for RVD +## +## standalone-sip.xml is updated with RVD handler and loggers configuration. By default, if the respective +## configuration is missing it is added. Otherwise nothing happens. If the logging LEVEL is specified in the +## command line loggers are updated/created accordingly. +## +## usage: +## +## ./config-rvd-logging.sh - adds handler and logger (INFO) elements if missing +## ./config-rvd-logging.sh DEBUG - creates or updates loggers by setting level to DEBUG +## ./config-rvd-logging.sh DEBUG FILE - creates or updates loggers (DEBUG) but also configures them to use the 'FILE' periodic handler (main restcomm log) +## +## environment: +## +## requires RESTCOMM_HOME env variable to be set +## +## Author: otsakir@gmail.com - Orestis Tsakiridis + +# Default values +STANDALONE_SIP=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml +LOG_FILE="rvd/rvd.log"; # this is relative to "jboss.server.log.dir" +RVD_LOG_LEVEL=INFO # logging level that will be used if handlers/loggers are missing +LOGGING_HANDLER=RVD # the handler to be used for RVD logging. Set this to 'FILE' to redirect all messages to the main restcomm log (server.log) + +# Variables +XML_UPDATED=false # flag to format xml file only if updated +OVERRIDE=false + +error(){ + echo "error parsing standalone-sip.xml" + exit 1 +} + +createHandler(){ + + # create the RVD handler if it is missing + xmlstarlet sel -Q -N logns=urn:jboss:domain:logging:1.2 -t -m "//logns:periodic-rotating-file-handler[@name='RVD']" -o "found" $STANDALONE_SIP + result=$? + if [ "$result" -eq 1 ]; then + echo "adding RVD handler" + xmlstarlet ed -P -N logns=urn:jboss:domain:logging:1.2 -d "//logns:periodic-rotating-file-handler[@name='RVD']" -s "//logns:subsystem" -t elem -n periodic-rotating-file-handler_TMP -v "" \ + -i //periodic-rotating-file-handler_TMP -t attr -n name -v RVD \ + -i //periodic-rotating-file-handler_TMP -t attr -n autoflush -v true \ + -s //periodic-rotating-file-handler_TMP -t elem -n formatter_TMP -v "" \ + -s //formatter_TMP -t elem -n pattern-formatter_TMP -v "" \ + -i //pattern-formatter_TMP -t attr -n pattern -v "%d{MMdd HH:mm:ss,SSS X} %p (%t) %m %n" \ + -s //periodic-rotating-file-handler_TMP -t elem -n file_TMP -v "" \ + -i //file_TMP -t attr -n relative-to -v "jboss.server.log.dir" \ + -i //file_TMP -t attr -n path -v "rvd/rvd.log" \ + -s //periodic-rotating-file-handler_TMP -t elem -n suffix_TMP -v "" \ + -s //suffix_TMP -t attr -n value -v ".yyyy-MM-dd" \ + -s //periodic-rotating-file-handler_TMP -t elem -n append_TMP -v "" \ + -s //append_TMP -t attr -n value -v true \ + -r //periodic-rotating-file-handler_TMP -v periodic-rotating-file-handler \ + -r //formatter_TMP -v formatter \ + -r //pattern-formatter_TMP -v pattern-formatter \ + -r //file_TMP -v file \ + -r //suffix_TMP -v suffix \ + -r //append_TMP -v append \ + $STANDALONE_SIP > ${STANDALONE_SIP}_tmp + mv ${STANDALONE_SIP}_tmp $STANDALONE_SIP + XML_UPDATED=true + else + if [ "$result" -eq 3 ]; + then + error + fi + fi + +} + +createLoggers(){ + + # create RVD local logger if it is missing + xmlstarlet sel -Q -N logns=urn:jboss:domain:logging:1.2 -t -m "//logns:logger[@category='org.restcomm.connect.rvd.LOCAL']" -o "found" $STANDALONE_SIP + result=$? + if [ "$result" -eq 1 -o \( "$result" = 0 -a "$OVERRIDE" = true \) ]; then + echo "adding RVD local logger - $RVD_LOG_LEVEL/$LOGGING_HANDLER handler" + xmlstarlet ed -P -N logns=urn:jboss:domain:logging:1.2 -d "//logns:logger[@category='org.restcomm.connect.rvd.LOCAL']" \ + -s "//logns:subsystem" -t elem -n logger_TMP -v "" \ + -i //logger_TMP -t attr -n category -v "org.restcomm.connect.rvd.LOCAL" \ + -s //logger_TMP -t elem -n level_TMP -v "" \ + -i //level_TMP -t attr -n name -v "$RVD_LOG_LEVEL" \ + -s //logger_TMP -t elem -n handlers_TMP -v "" \ + -s //handlers_TMP -t elem -n handler_TMP -v "" \ + -s //handler_TMP -t attr -n name -v "$LOGGING_HANDLER" \ + -r //logger_TMP -v logger \ + -r //level_TMP -v level \ + -r //handlers_TMP -v handlers \ + -r //handler_TMP -v handler \ + $STANDALONE_SIP > ${STANDALONE_SIP}_tmp + mv ${STANDALONE_SIP}_tmp $STANDALONE_SIP + XML_UPDATED=true + else + if [ "$result" -eq 3 ]; + then + error + fi + fi + + # create RVD global logger if it is missing + xmlstarlet sel -Q -N logns=urn:jboss:domain:logging:1.2 -t -m "//logns:logger[@category='org.restcomm.connect.rvd.GLOBAL']" -o "found" $STANDALONE_SIP + result=$? + if [ "$result" -eq 1 -o \( "$result" = 0 -a "$OVERRIDE" = true \) ]; then + echo "adding RVD global logger - $RVD_LOG_LEVEL/$LOGGING_HANDLER handler" + xmlstarlet ed -P -N logns=urn:jboss:domain:logging:1.2 -d "//logns:logger[@category='org.restcomm.connect.rvd.GLOBAL']" \ + -s "//logns:subsystem" -t elem -n logger_TMP -v "" \ + -i //logger_TMP -t attr -n category -v "org.restcomm.connect.rvd.GLOBAL" \ + -s //logger_TMP -t elem -n level_TMP -v "" \ + -i //level_TMP -t attr -n name -v "$RVD_LOG_LEVEL" \ + -s //logger_TMP -t elem -n handlers_TMP -v "" \ + -s //handlers_TMP -t elem -n handler_TMP -v "" \ + -s //handler_TMP -t attr -n name -v "$LOGGING_HANDLER" \ + -r //logger_TMP -v logger \ + -r //level_TMP -v level \ + -r //handlers_TMP -v handlers \ + -r //handler_TMP -v handler \ + $STANDALONE_SIP > ${STANDALONE_SIP}_tmp + mv ${STANDALONE_SIP}_tmp $STANDALONE_SIP + XML_UPDATED=true + else + if [ "$result" -eq 3 ]; + then + error + fi + fi +} + +formatXml(){ + tmpfile=$(mktemp -t rvdconfigXXX) + xmlstarlet fo "$STANDALONE_SIP" > "$tmpfile" + mv "$tmpfile" "$STANDALONE_SIP" +} + +# MAIN + +if [ -z "$RESTCOMM_HOME" ] +then + echo "RESTCOMM_HOME env variable not set" + exit 1 +fi + +echo "Configuring RVD logging" + +# if no (level) argument is given, create default loggers only if they are missing +if [ -z $1 ] +then + # OVERRIDE is false + createHandler + createLoggers +else + case "$1" in + FATAL|ERROR|WARN|INFO|DEBUG|TRACE|ALL|OFF) + # specify logging handler to be used - RVD|FILE) + if [ -z "$2" ] + then + LOGGING_HANDLER=RVD + else + case "$2" in + RVD|FILE) + LOGGING_HANDLER=$2 + ;; + *) + echo "invalid arguments: handler should be one of RVD|FILE" + exit 1 + ;; + esac + fi + RVD_LOG_LEVEL=$1 + OVERRIDE=true + createHandler + createLoggers + ;; + *) + echo "invalid arguments: level should be one of FATAL|ERROR|WARN|INFO|DEBUG|TRACE|ALL|OFF" + exit 1 + ;; + esac + +fi + +# format output if any update happened +if [ "$XML_UPDATED" = true ] +then + formatXml + echo "$STANDALONE_SIP updated" +fi + diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-rvd.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-rvd.sh new file mode 100755 index 0000000000..2497dc9a13 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-rvd.sh @@ -0,0 +1,92 @@ +#!/bin/bash +## +## Configures rvd.xml based on global configuration options in restcomm.conf and advanced.conf. +## +## usage: +## +## ./config-rvd-logging.sh - adds handler and logger (INFO) elements if missing +## ./config-rvd-logging.sh DEBUG - creates or updates loggers by setting level to DEBUG +## ./config-rvd-logging.sh DEBUG FILE - creates or updates loggers (DEBUG) but also configures them to use the 'FILE' periodic handler (main restcomm log) +## +## requirements: +## +## RESTCOMM_HOME env variable to be set +## rvd.xml should be in place (under $RESTCOMM_HOME/standalone/deployments/restcomm-rvd.war) +## +## Author: otsakir@gmail.com - Orestis Tsakiridis + +# Variables +RVD_ROOT=$RESTCOMM_HOME/standalone/deployments/restcomm-rvd.war +RVD_XML_FILE=$RVD_ROOT/WEB-INF/rvd.xml + +updateVideoSupport() { + matchesCount=`xmlstarlet sel -t -v "count(/rvd/videoSupport)" "$RVD_XML_FILE"` + if [ $matchesCount -ge 1 ]; then + xmlstarlet ed -P -u "/rvd/videoSupport" -v "$1" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + else + xmlstarlet ed -P -s "/rvd" -t elem -n "videoSupport" -v "$1" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + fi +} + +updateMaxMediaFileSize() { + matchesCount=`xmlstarlet sel -t -v "count(/rvd/maxMediaFileSize)" "$RVD_XML_FILE"` + if [ $matchesCount -ge 1 ]; then + xmlstarlet ed -P -u "/rvd/maxMediaFileSize" -v "$1" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + else + xmlstarlet ed -P -s "/rvd" -t elem -n "maxMediaFileSize" -v "$1" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + fi +} + +# $1 is RVD_HTTP_TIMEOUT +updateHttpTimeout() { + if [ -z $1 ]; then + xmlstarlet ed -P -d "/rvd/defaultHttpTimeout" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + echo "disabled defaultHttpTimeout option"; + else + matchesCount=`xmlstarlet sel -t -v "count(/rvd/defaultHttpTimeout)" "$RVD_XML_FILE"` + if [ $matchesCount -ge 1 ]; then + xmlstarlet ed -P -u "/rvd/defaultHttpTimeout" -v "$1" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + else + xmlstarlet ed -P -s "/rvd" -t elem -n "defaultHttpTimeout" -v "$1" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + fi + echo "set defaultHttpTimeout to $1" + fi +} + +# MAIN + +if [[ "$RVD_UNDEPLOY" = true || "$RVD_UNDEPLOY" = TRUE || "$RVD_UNDEPLOY" = True ]]; then + echo "Skipping RVD configuration since it's not deployed" +else + if [ -z "$RESTCOMM_HOME" ] + then + echo "RESTCOMM_HOME env variable not set. Aborting." + exit 1 + fi + if [ ! -f "$RVD_XML_FILE" ] + then + echo "rvd.xml not found. Aborting." + return + fi + + echo "Configuring RVD" + + if [[ "$RVD_VIDEO_SUPPORT" = true || "$RVD_VIDEO_SUPPORT" = TRUE || "$RVD_VIDEO_SUPPORT" = True ]] ; then + updateVideoSupport true + else + updateVideoSupport false + fi + updateMaxMediaFileSize "$RVD_MAX_MEDIA_FILE_SIZE" + + updateHttpTimeout "$RVD_HTTP_TIMEOUT" + + + echo "Updated rvd.xml" +fi \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-sip-connectors.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-sip-connectors.sh new file mode 100755 index 0000000000..b0e86b523e --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-sip-connectors.sh @@ -0,0 +1,160 @@ +#!/bin/bash +## Description: Configures SIP connectors +## Author : Henrique Rosa (henrique.rosa@telestax.com) +## Author : Pavel Slegr (pavel.slegr@telestax.com) + +## Description: Configures the connectors for RestComm & configures Proxy if enabled +## Parameters : 1.Public IP +configConnectors() { + FILE=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml + static_address="$1" + + #delete additional connectors if any added to erlier run of the script. + if grep -q "" $FILE + then + echo "Additional Connectors Created earlier, going to delete the connectors" + sed '//,//d' $FILE > $FILE.bak + mv $FILE.bak $FILE + else + echo "Additional Connectors not Created earlier" + fi + + #IF LB activated. (Algorithm "use-load-balancer" used). + if [ "$ACTIVATE_LB" == "true" ] || [ "$ACTIVATE_LB" == "TRUE" ]; then + if [ -z "$LB_INTERNAL_IP" ]; then + LB_INTERNAL_IP=$LB_PUBLIC_IP + fi + sed -e "s|path-name=\"org.mobicents.ext\" \(app-dispatcher-class=.*\)|path-name=\"org.mobicents.ha.balancing.only\" \1|" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + $FILE > $FILE.bak + + else + + #Check for Por Offset + local SIP_PORT_UDP=$((SIP_PORT_UDP + PORT_OFFSET)) + local SIP_PORT_TCP=$((SIP_PORT_TCP + PORT_OFFSET)) + local SIP_PORT_TLS=$((SIP_PORT_TLS + PORT_OFFSET)) + local SIP_PORT_WS=$((SIP_PORT_WS + PORT_OFFSET)) + local SIP_PORT_WSS=$((SIP_PORT_WSS + PORT_OFFSET)) + + sed -e "s|path-name=\".*\" \(app-dispatcher-class=.*\)|path-name=\"org.mobicents.ext\" \1|" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + $FILE > $FILE.bak + fi + mv $FILE.bak $FILE + echo 'Configured SIP Connectors and Bindings' + + + #Enable SipServlet statistics + grep -q 'gather-statistics' $FILE || sed -i "s|congestion-control-interval=\".*\"|& gather-statistics=\"true\"|" $FILE + echo "Configured gather-statistics" +} + +#Socket Binding configuration for standalone-sip.xml +configSocketbinding() { +FILE=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml + + #delete additional bindings if any added to erlier run of the script. + if grep -q "" $FILE + then + echo "Additional Bindings Created earlier, going to delete the old bindings" + sed '//,//d' $FILE > $FILE.bak + mv $FILE.bak $FILE + else + echo "Additional Bindings not Created earlier" + fi + + #check for port offset + sed -i "s|\port-offset=\".*\"|port-offset=\"${PORT_OFFSET}\"|" $FILE + + sed -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + $FILE > $FILE.bak + mv $FILE.bak $FILE +} + +setMoreConnectors(){ +flag1=false +flag2=false + for i in $( set -o posix ; set | grep ^ADDITIONAL_CONNECTOR_ | sort -rn ); do + connector=$(echo ${i} | cut -d = -f2 | cut -d _ -f2 | cut -d : -f1) + port=$(echo ${i} | cut -d = -f2 | cut -d _ -f2 | cut -d : -f2) + if [ "$flag1" = false ] ; then + setInitialSign + flag1=true + fi + addConector $connector $port + addSocketBinding $connector $port + echo "Configuring log level for: $connector -> $port" + flag2=true + done + + if [ "$flag2" = true ] ; then + setFinalSign + fi +} + +addConector(){ +FILE=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml +connector=$1 +port=$2 + + #check for port offset at the new connectors. + local port=$((port + PORT_OFFSET)) + grep -q "connector name=\"${connector}\"" $FILE || sed -e "/path-name=\"org.mobicents.ext\"/a\ + " $FILE > $FILE.bak + + mv $FILE.bak $FILE + echo 'Configured additional SIP Connectors and Bindings' +} + +addSocketBinding(){ +FILE=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml +connector=$1 +port=$2 + + grep -q "socket-binding name=\"${connector}\"" $FILE || sed "/name=\"management-https\"/a " $FILE > $FILE.bak + mv $FILE.bak $FILE +} + +setInitialSign(){ + sed -e "/path-name=\"org.mobicents.ext\"/a\ + " $FILE > $FILE.bak + mv $FILE.bak $FILE + + sed "/name=\"management-https\"/a " $FILE > $FILE.bak + mv $FILE.bak $FILE +} + +setFinalSign(){ + sed -e "/path-name=\"org.mobicents.ext\"/a\ + " $FILE > $FILE.bak + + mv $FILE.bak $FILE + sed "/name=\"management-https\"/a " $FILE > $FILE.bak + mv $FILE.bak $FILE +} + +#MAIN +echo 'Configuring Application Server...' +configSocketbinding +configConnectors "$PUBLIC_IP" +if [ "$ACTIVATE_LB" == "true" ] || [ "$ACTIVATE_LB" == "TRUE" ]; then + echo "can not set additional connectors under LB." +else + setMoreConnectors +fi +echo 'Finished configuring Application Server!' diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-utensil.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-utensil.sh new file mode 100755 index 0000000000..5816553435 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-utensil.sh @@ -0,0 +1,155 @@ +#!/bin/bash +## +## Description: Configures RestComm +## Author: Henrique Rosa (henrique.rosa@telestax.com) +## Author: Pavel Slegr (pavel.slegr@telestax.com) +## Authos: Lefteris Banos (eleftherios.banos@telestax.com) + +# VARIABLES +RESTCOMM_BIN=$RESTCOMM_HOME/bin +RESTCOMM_DEPLOY=$RESTCOMM_HOME/standalone/deployments/restcomm.war + +configS3Bucket() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + if [[ "$ACTIVATE_S3_BUCKET" == "true" || "$ACTIVATE_S3_BUCKET" == "TRUE" ]]; then + echo "S3_BUCKET_NAME $S3_BUCKET_NAME S3_ACCESS_KEY $S3_ACCESS_KEY S3_SECURITY_KEY $S3_SECURITY_KEY" + sed -e "// { + N; s|.*|true| + N; s|.*|${S3_BUCKET_NAME}| + N; s|.*|${S3_FOLDER_NAME}| + N; s|.*|${S3_ACCESS_KEY}| + N; s|.*|${S3_SECURITY_KEY}| + }" $FILE > $FILE.bak; + mv $FILE.bak $FILE + + if [ -n "$S3_BUCKET_REGION" ]; then + echo "S3_BUCKET_REGION $S3_BUCKET_REGION" + sed -e "s|.*|${S3_BUCKET_REGION}|" $FILE > $FILE.bak; + mv $FILE.bak $FILE + fi + else + sed -e "// { + N; s|.*|false| + N; s|.*|| + N; s|.*|| + N; s|.*|| + }" $FILE > $FILE.bak; + mv $FILE.bak $FILE + fi +} + +initUserPassword(){ + SQL_FILE=$RESTCOMM_DEPLOY/WEB-INF/data/hsql/restcomm.script + if [ -n "$INITIAL_ADMIN_USER" ]; then + # change admin user + if grep -q "uninitialized" $SQL_FILE; then + echo "Update Admin user" + sed -i "s/administrator@company.com/${INITIAL_ADMIN_USER}/g" $SQL_FILE + else + echo "Adminitrator User Already changed" + fi + fi + + if [ -n "$INITIAL_ADMIN_PASSWORD" ]; then + # change admin password + if grep -q "uninitialized" $SQL_FILE; then + PASSWORD_ENCRYPTED=`echo -n "${INITIAL_ADMIN_PASSWORD}" | md5sum |cut -d " " -f1` + #echo "Update password to ${INITIAL_ADMIN_PASSWORD}($PASSWORD_ENCRYPTED)" + sed -i "s/uninitialized/active/g" $SQL_FILE + sed -i "s/77f8c12cc7b8f8423e5c38b035249166/$PASSWORD_ENCRYPTED/g" $SQL_FILE + sed -i "s/2012-04-24 00:00:00.000000000/`echo "$(date +'%Y-%m-%d %H:%M:%S.%N')"`/" $SQL_FILE + sed -i "s/2012-04-24 00:00:00.000000000/`echo "$(date +'%Y-%m-%d %H:%M:%S.%N')"`/" $SQL_FILE + else + echo "Adminitrator Password Already changed" + fi + fi +} + +configSMTP(){ + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + if [[ -z $SMTP_USER || -z $SMTP_PASSWORD || -z $SMTP_HOST ]]; then + echo 'one or more variables are undefined' + echo 'Not possible to continue with SMTP configuration' + + else + echo "SMTP_USER $SMTP_USER SMTP_PASSWORD $SMTP_PASSWORD SMTP_HOST $SMTP_HOST" + sed -i "// { + N; s|.*|${SMTP_HOST}| + N; s|.*|${SMTP_USER}| + N; s|.*|${SMTP_PASSWORD}| + N; s|.*|${SMTP_PORT}| + }" $FILE + + sed -i "// { + N; s|.*|${SMTP_HOST}| + N; s|.*|${SMTP_USER}| + N; s|.*|${SMTP_PASSWORD}| + N; s|.*|${SMTP_PORT}| + }" $FILE + fi +} + +configMonitoring(){ + if [ -z ${GRAYLOG_SERVER} ]; then + echo "Graylog Monitoring is not configured"; + crontab -l 2>/dev/null > mycron + crontab -l | grep -q 'HDmonitor' && sed -i '/HDmonitor/d' mycron + crontab -l | grep -q 'RMSJVMonitor' && sed -i '/RMSJVMonitor/d' mycron + crontab -l | grep -q 'RCJVMonitor' && sed -i '/RCJVMonitor/d' mycron + crontab -l | grep -q 'SERVERAMonitor' && sed -i '/SERVERAMonitor/d' mycron + #install new cron file + crontab mycron + rm mycron + + else + echo "GRAYLOG_SERVER is: $GRAYLOG_SERVER"; + + #write out current crontab RMSJVMonitor + crontab -l 2>/dev/null > mycron + + #echo new cron into cron file + crontab -l | grep -q 'MAILTO=""' && echo 'entry exists' || echo "MAILTO=\"\"" >> mycron + if [[ "$HD_MONITOR" == "false" || "$HD_MONITOR" == "FALSE" ]]; then + sed -i '/HDmonitor/d' mycron + echo "HD_MONITOR: $HD_MONITOR" + else + crontab -l | grep -q 'Graylog_Monitoring.sh HDmonitor' && echo 'entry exists' || echo "*/30 * * * * $RESTCOMM_BIN/restcomm/monitoring/Graylog_Monitoring.sh HDmonitor" >> mycron; + fi + + if [[ "$RMSJVM_MONITOR" == "false" || "$RMSJVM_MONITOR" == "FALSE" ]]; then + sed -i '/RMSJVMonitor/d' mycron + echo "RMSJVM_MONITOR: $RMSJVM_MONITOR"; + else + crontab -l | grep -q 'Graylog_Monitoring.sh RMSJVMonitor' && echo 'entry exists' || echo "* * * * * $RESTCOMM_BIN/restcomm/monitoring/Graylog_Monitoring.sh RMSJVMonitor" >> mycron; + fi + + if [[ "$RCJVM_MONITOR" == "false" || "$RCJVM_MONITOR" == "FALSE" ]]; then + sed -i '/RCJVMonitor/d' mycron + echo "RCJVM_MONITOR: $RCJVM_MONITOR"; + else + crontab -l | grep -q 'Graylog_Monitoring.sh RCJVMonitor' && echo 'entry exists' || echo "* * * * * $RESTCOMM_BIN/restcomm/monitoring/Graylog_Monitoring.sh RCJVMonitor" >> mycron; + fi + + if [[ "$RAM_MONITOR" == "false" || "$RAM_MONITOR" == "FALSE" ]]; then + sed -i '/SERVERAMonitor/d' mycron + echo "RAM_MONITOR: $RAM_MONITOR"; + else + crontab -l | grep -q 'Graylog_Monitoring.sh SERVERAMonitor' && echo 'entry exists' || echo "* * * * * $RESTCOMM_BIN/restcomm/monitoring/Graylog_Monitoring.sh SERVERAMonitor" >> mycron; + fi + + #install new cron file + crontab mycron + rm mycron + + #set Server Label + sed -i "s|SERVERLABEL=.*|SERVERLABEL=\"${SERVERLABEL}\"|" $RESTCOMM_BIN/restcomm/monitoring/Graylog_Monitoring.sh; + sed -i "s|GRAYLOG_SERVER=.*|GRAYLOG_SERVER=\"${GRAYLOG_SERVER}\"|" $RESTCOMM_BIN/restcomm/monitoring/Graylog_Monitoring.sh; + fi +} + +# MAIN +configS3Bucket +initUserPassword +configSMTP +configMonitoring diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfigure.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfigure.sh new file mode 100755 index 0000000000..454c5dca4d --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/autoconfigure.sh @@ -0,0 +1,35 @@ +#! /bin/bash + +## Description: Executes all RestComm configuration scripts for a given version. +## Author : Henrique Rosa (henrique.rosa@telestax.com) + +autoconfigure() { + local BASEDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) + + ## We want this file to be executed last since its contains xmlstarlet based config script + ## https://telestax.atlassian.net/browse/RESTCOMM-1140 + local LAST_FILE_TO_BE_EXECUTED=$BASEDIR/autoconfig.d/config-restcomm.sh + + # load configuration values + #source $BASEDIR/restcomm.conf + echo '' + echo 'RestComm automatic configuration started:' + echo "LAST_FILE_TO_BE_EXECUTED is: $LAST_FILE_TO_BE_EXECUTED" + for f in $BASEDIR/autoconfig.d/*.sh; do + echo "Executing configuration file $f..." + if [ "$f" != "$LAST_FILE_TO_BE_EXECUTED" ]; then + source $f + echo "Finished executing configuration file $f!" + echo '' + fi + done + + source $LAST_FILE_TO_BE_EXECUTED + echo "Finished executing configuration file $LAST_FILE_TO_BE_EXECUTED!" + echo '' + + echo 'RestComm automatic configuration finished!' + echo '' +} + +autoconfigure \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/collect_jmap.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/collect_jmap.sh new file mode 100755 index 0000000000..58b00dc67b --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/collect_jmap.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash +## +## Descript+ion: Script that collects all necessary system logs and data. +## Author : Lefteris Banos +## Author : George Vagenas +# + +##Global Parameters +DATE=$(date +%F_%H_%M) +DIR_NAME=restcomm_$DATE +BASEDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +JMAP_DIR=$BASEDIR/$DIR_NAME + +JMAP="true" +DTAR="true" + +## +## FUNCTIONS +## +getPID(){ + RESTCOMM_PID=" " + RMS_PID="" + + RESTCOMM_PID=$(jps | grep jboss-modules.jar | cut -d " " -f 1) + + while read -r line + do + if ps -ef | grep $line | grep -q mediaserver + then + RMS_PID=$line + fi + done < <(jps | grep Main | cut -d " " -f 1) + +} + +restcomm_jmap(){ +if [[ -z "$RESTCOMM_PID" ]]; then + getPID +fi + +if [[ -z "$RESTCOMM_PID" ]]; then + echo "Please make sure that RestComm is running..." + else + echo "****************************************************************" > $JMAP_DIR/restcomm_mem + echo "GC Histogram before GC.run" >> $JMAP_DIR/restcomm_mem + echo "****************************************************************" >> $JMAP_DIR/restcomm_mem + jcmd $RESTCOMM_PID GC.class_histogram | grep org.restcomm.connect >> $JMAP_DIR/restcomm_mem + + jcmd $RESTCOMM_PID GC.run + sleep 5 + + echo "****************************************************************" >> $JMAP_DIR/restcomm_mem + echo "GC Histogram after GC.run" >> $JMAP_DIR/restcomm_mem + echo "****************************************************************" >> $JMAP_DIR/restcomm_mem + jcmd $RESTCOMM_PID GC.class_histogram | grep org.restcomm.connect >> $JMAP_DIR/restcomm_mem + + echo "****************************************************************" >> $JMAP_DIR/restcomm_mem + echo "JVMTop" >> $JMAP_DIR/restcomm_mem + echo "****************************************************************" >> $JMAP_DIR/restcomm_mem + $BASEDIR/jvmtop.sh -n 1 >> $JMAP_DIR/restcomm_mem + + jmap -dump:live,format=b,file=restcomm_jmap_$DATE.bin $RESTCOMM_PID + mv restcomm_jmap_$DATE.bin $JMAP_DIR + fi + +} + +rms_jmap(){ +if [[ -z "$RMS_PID" ]]; then + getPID +fi + +if [[ -z "$RMS_PID" ]]; then + echo "Please make sure that Mediaserver is running..." + else + jcmd $RMS_PID GC.run + sleep 2 + jmap -dump:live,format=b,file=rms_jmap_$DATE.bin $RMS_PID + mv rms_jmap_$DATE.bin $JMAP_DIR + fi +} + +make_tar() { + if [ -d "$JMAP_DIR" ]; then + echo TAR_FILE : $JMAP_DIR.tar.gz + tar -zcf $JMAP_DIR.tar.gz -C $JMAP_DIR . 3>&1 1>&2 2>&3 + rm -rf $JMAP_DIR + return 0 + fi + exit 1 +} + +mkdir $JMAP_DIR +restcomm_jmap +rms_jmap +make_tar diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/gsed_macos.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/gsed_macos.sh new file mode 100755 index 0000000000..2c934ea154 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/gsed_macos.sh @@ -0,0 +1,6 @@ +#!/bin/bash +## Description: Change 'sed' to 'gsed' for MacOS users in order for the autoconfig scripts to work properly +## Prerequisites: Install gnu-sed using homebrew (brew install gnu-sed) +## Author: George Vagenas +gsed -i 's/sed/gsed/g' ./*.sh +gsed -i 's/sed/gsed/g' ./autoconfig.d/*.sh diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/jvmtop.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/jvmtop.sh new file mode 100755 index 0000000000..32aa5305b2 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/jvmtop.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# jvmtop - java monitoring for the command-line +# launch script +# +# author: Markus Kolb +# + +DIR=`cd "\`dirname "$0"\`" && pwd` + +if [ -z "$JAVA_HOME" ] ; then + JAVA_HOME=`readlink -f \`which java 2>/dev/null\` 2>/dev/null | \ + sed 's/\/bin\/java//'` +fi + +TOOLSJAR="$JAVA_HOME/../lib/tools.jar" + +if [ ! -f "$TOOLSJAR" ] ; then + echo "$JAVA_HOME seems to be no JDK!" >&2 + exit 1 +fi + +"$JAVA_HOME"/bin/java $JAVA_OPTS -cp "$DIR/jvmtop.jar:$TOOLSJAR" \ +com.jvmtop.JvmTop "$@" +exit $? diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/logs_collect.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/logs_collect.sh new file mode 100755 index 0000000000..f253f176be --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/logs_collect.sh @@ -0,0 +1,206 @@ +#!/bin/bash +## +## Descript+ion: Script that collects all necessary system logs and data. +## Author : Lefteris Banos +# +DATE=$(date +%F_%H_%M) +DIR_NAME=restcomm_$DATE +RESTCOMM_CORE_FILE=server.log +MEDIASERVER_FILE=server.log +SYSLOGS_DIR=/var/log +BASEDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +RESTCOMM_LOG_BASE=$(cd $BASEDIR/../../ && pwd) +RESTCOMM_CORE_LOG=$RESTCOMM_LOG_BASE/standalone/log +RVD_LOG=$RESTCOMM_LOG_BASE/standalone/log/rvd +RVD_LOG_FILE=rvd.log +MMS_LOGS=$RESTCOMM_LOG_BASE/mediaserver/log +LOGS_DIR_ZIP=$BASEDIR/$DIR_NAME + +restcomm_logs () { + if [ -f $RESTCOMM_CORE_LOG/$RESTCOMM_CORE_FILE ]; then + cp $RESTCOMM_CORE_LOG/$RESTCOMM_CORE_FILE $LOGS_DIR_ZIP/restcomm_server.log + fi +} +restcomm_logs_bytime () { + if [ -f $RESTCOMM_CORE_LOG/$RESTCOMM_CORE_FILE ]; then + IN=$1 + IFS="," + arr=($IN) + unset IFS + FROM=`grep -n "^${arr[0]}" $RESTCOMM_CORE_LOG/$RESTCOMM_CORE_FILE |cut -f1 -d: | tail -1` + TO=`grep -n "^${arr[1]}" $RESTCOMM_CORE_LOG/$RESTCOMM_CORE_FILE |cut -f1 -d: | tail -1` + awk 'NR=="'"$FROM"'", NR=="'"$TO"'"; NR=="'"$TO"'" {print; exit}' $RESTCOMM_CORE_LOG/$RESTCOMM_CORE_FILE > $LOGS_DIR_ZIP/RestCommlinesTime.log + fi +} +rvd_logs () { + if [ -f $RVD_LOG/$RVD_LOG_FILE ]; then + cp $RVD_LOG/$RVD_LOG_FILE $LOGS_DIR_ZIP/rvd_server.log + fi +} +mediaserver_logs () { + if [ -f $MMS_LOGS/$MEDIASERVER_FILE ]; then + cp $MMS_LOGS/$MEDIASERVER_FILE $LOGS_DIR_ZIP/mms_server.log + fi +} +system_logs () { + if [ -f $SYSLOGS_DIR/messages ]; then + cp $SYSLOGS_DIR/messages $LOGS_DIR_ZIP/ + fi + if [ -f $SYSLOGS_DIR/syslog ]; then + cp $SYSLOGS_DIR/syslog $LOGS_DIR_ZIP/ + fi +} +JVM_perfo_stats () { + if [ -n "$RESTCOMM_PID" ]; then + jstack -l $RESTCOMM_PID > $LOGS_DIR_ZIP/restcomm_jstack_trace_$DATE + fi + if [ -n "$RMS_PID" ]; then + jstack -l $RMS_PID > $LOGS_DIR_ZIP/mms_jstack_trace_$DATE + fi +} +system_usage_info () { + echo "---top:" > $LOGS_DIR_ZIP/usage_stats_$DATE + echo CPU\(s\): `top -b -n1 | grep "Cpu(s)" | awk '{print $2" : " $4}'` >> $LOGS_DIR_ZIP/usage_stats_$DATE + echo >> $LOGS_DIR_ZIP/usage_stats_$DATE + top -b -n1 | grep Mem >> $LOGS_DIR_ZIP/usage_stats_$DATE + echo "---free:" >> $LOGS_DIR_ZIP/usage_stats_$DATE + free >> $LOGS_DIR_ZIP/usage_stats_$DATE + echo "---df:" >> $LOGS_DIR_ZIP/usage_stats_$DATE + df -h >> $LOGS_DIR_ZIP/usage_stats_$DATE + ps aux > $LOGS_DIR_ZIP/top_$DATE +} +jvm_process_info () { + if [ -n "$RESTCOMM_PID" ]; then + echo "----------------------- restcomm ---------------------------" > $LOGS_DIR_ZIP/jvm_process_$DATE + echo "--------New Generation Heap-------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + jstat -gcnew $RESTCOMM_PID >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo "--------New Generation Space Size-------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + jstat -gcnewcapacity $RESTCOMM_PID >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo "--------Garbage-collected heap-------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + jstat -gc $RESTCOMM_PID >> $LOGS_DIR_ZIP/jvm_process_$DATE + fi + if [ -n "$RMS_PID" ]; then + echo "----------------------- mediaserver ---------------------------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo "-------- New Generation Heap -------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + jstat -gcnew $RMS_PID >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo "--------New Generation Space Size-------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + jstat -gcnewcapacity $RMS_PID >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo "--------Garbage-collected heap-------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + jstat -gc $RMS_PID >> $LOGS_DIR_ZIP/jvm_process_$DATE + fi + echo "--------------------------------- ---------------------------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo "----------------------- More INFO ---------------------------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo " http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html " >> $LOGS_DIR_ZIP/jvm_process_$DATE +} +LWP_threads_logs () { + pat=`ps -ef | grep java | grep -v grep | awk '{print $2}'` + ps -eLo pid,lwp,nlwp,ruser,pcpu,stime,etime,args | grep -F "${pat}" > $LOGS_DIR_ZIP/lwpthread_$DATE.txt + return 0 +} +netstat_stats () { + echo "----------------------- netstat -s ---------------------------" > $LOGS_DIR_ZIP/netstat_stats_$DATE + netstat -s >> $LOGS_DIR_ZIP/netstat_stats_$DATE + echo >> $LOGS_DIR_ZIP/netstat_stats_$DATE + echo >> $LOGS_DIR_ZIP/netstat_stats_$DATE + echo "----------------------- netstat -anp ---------------------------" >> $LOGS_DIR_ZIP/netstat_stats_$DATE + netstat -anp >> $LOGS_DIR_ZIP/netstat_stats_$DATE +} +make_tar () { + echo TAR_FILE : $LOGS_DIR_ZIP.tar.gz + tar -zcf $LOGS_DIR_ZIP.tar.gz -C $LOGS_DIR_ZIP . 3>&1 1>&2 2>&3 + rm -rf $LOGS_DIR_ZIP +} +set_info() { + echo "$1" > $LOGS_DIR_ZIP/issue_info.txt +} +jvm_top() { + ./jvmtop.sh --once > $LOGS_DIR_ZIP/jvm_top.txt +} +sys_date() { + echo `date` > $LOGS_DIR_ZIP/sys_date.txt +} +getPID(){ + RESTCOMM_PID=$(jps | grep jboss-modules.jar | cut -d " " -f 1) + while read -r line + do + if ps -ef | grep $line | grep -q mediaserver + then + RMS_PID=$line + fi + done < <(jps | grep Main | cut -d " " -f 1) + if [[ -z "$RESTCOMM_PID" ]]; then + echo "RestComm is not Running, will try to collect all available logs" + fi + if [[ -z "$RMS_PID" ]]; then + echo "RMS is not Running, will try to collect all available logs" + fi +} +usage () { + cat << EOF +Usage: logs_collect.sh +options: +-m : optional message of the problem. +-t : Restcomm log file time extractor (e.g "06:20:0*,06:23:0*"). +-h : prints this message +-z : Create .tar file +EOF + exit 1 +} +#MAIN +tflag=false +zflag=false +TEMP=`getopt --long -o ":t:m:hz" "$@"` +eval set -- "$TEMP" +while true ; do + case "$1" in + -m ) + mkdir -p $LOGS_DIR_ZIP + set_info "$2" + shift 2 + ;; + -t ) + tflag=true + var=$2 + shift 2 + ;; + -z ) + zflag=true + break + ;; + -h ) + usage + ;; + *) + break + ;; + esac +done; +if [ ! -e $LOGS_DIR_ZIP ]; then + echo "create DIR $LOGS_DIR_ZIP" + mkdir -p $LOGS_DIR_ZIP +fi +if [ -d "$LOGS_DIR_ZIP" ]; then + getPID + restcomm_logs + rvd_logs + mediaserver_logs + system_logs + JVM_perfo_stats + jvm_process_info + LWP_threads_logs + system_usage_info + netstat_stats + jvm_top + sys_date + if $tflag ; then + restcomm_logs_bytime $var + fi + if $zflag ; then + make_tar + fi +else + echo "Directory $LOGS_DIR_ZIP not created, going to exit." + exit 1 +fi diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/monitoring/Graylog_Monitoring.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/monitoring/Graylog_Monitoring.sh new file mode 100755 index 0000000000..9e28525f0e --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/monitoring/Graylog_Monitoring.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +BASEDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +SERVERLABEL="" +GRAYLOG_SERVER="" + +HDmonitor(){ + #Collect HD Data from Host + hdusage=`df -hP $PWD | awk '/[0-9]%/{print $(NF-1)}'` + #Send data to graylog + message={"\"host\"":"\"${SERVERLABEL}\"","\"message\"":"\"${hdusage}\""} + curl --connect-timeout 10 --max-time 15 -XPOST http://$GRAYLOG_SERVER:5555/gelf -p0 -d ${message} +} + + +RCJVMonitor(){ + #FInd RMS process number + rcprocess=$(jps | grep jboss-modules.jar | cut -d " " -f 1) + #Run JVMTOP + jvmvars=` $BASEDIR/../jvmtop.sh --once | grep ${rcprocess} | sed -e "s/ */ /g" | sed -e "s/%//g" | sed -e "s/m//g" | cut -f3,4,5,6,7,8 -d ' ' ` + #Send data to graylog + IFS=" " read HPCUR HPMAX NHCUR NHMAX CPU GC <<< $jvmvars + message={"\"host\"":"\"${SERVERLABEL}\"","\"message\"":"\"RC_JVM_STATS\"","\"_HPCUR\"":"${HPCUR}","\"_HPMAX\"":"${HPMAX}","\"_NHCUR\"":"${NHCUR}","\"_NHMAX\"":"${NHMAX}","\"_CPU\"":"${CPU}","\"_GC\"":"${GC}"} + curl --connect-timeout 10 --max-time 15 -XPOST http://$GRAYLOG_SERVER:7777/gelf -p0 -d ${message} +} + + +RMSJVMonitor(){ + #FInd RMS process number + while read -r line + do + if ps -ef | grep $line | grep -q mediaserver + then + msprocess=$line + fi + done < <(jps | grep Main | cut -d " " -f 1) + + #Run JVMTOP + jvmvars=` $BASEDIR/../jvmtop.sh --once | grep ${msprocess} | sed -e "s/ */ /g" | sed -e "s/%//g" | sed -e "s/m//g" | cut -f3,4,5,6,7,8 -d ' ' ` + #Send data to graylog + IFS=" " read HPCUR HPMAX NHCUR NHMAX CPU GC <<< $jvmvars + message={"\"host\"":"\"${SERVERLABEL}\"","\"message\"":"\"MS_JVM_STATS\"","\"_HPCUR\"":"${HPCUR}","\"_HPMAX\"":"${HPMAX}","\"_NHCUR\"":"${NHCUR}","\"_NHMAX\"":"${NHMAX}","\"_CPU\"":"${CPU}","\"_GC\"":"${GC}"} + curl --connect-timeout 10 --max-time 15 -XPOST http://$GRAYLOG_SERVER:7777/gelf -p0 -d ${message} +} + +SERVERAMonitor(){ + #Collect RAM from host data + MemTotal=`awk '( $1 == "MemTotal:" ) { print $2/1048576 }' /proc/meminfo` + MemFree=`awk '( $1 == "MemFree:" ) { print $2/1048576 }' /proc/meminfo` + Buffers=`awk '( $1 == "Buffers:" ) { print $2/1048576 }' /proc/meminfo` + Cache=`awk '( $1 == "Cached:" ) { print $2/1048576 }' /proc/meminfo` + SwapTotal=`awk '( $1 == "SwapTotal:" ) { print $2/1048576 }' /proc/meminfo` + SwapFree=`awk '( $1 == "SwapFree:" ) { print $2/1048576 }' /proc/meminfo` + + #Send data to graylog + message={"\"host\"":"\"${SERVERLABEL}\"","\"message\"":"\"Host_Heap\"","\"_MemTotal\"":"${MemTotal}","\"_MemFree\"":"${MemFree}","\"_Buffers\"":"${Buffers}","\"_Cache\"":"${Cache}","\"_SwapTotal\"":"${SwapTotal}","\"_SwapFree\"":"${SwapFree}"} + curl --connect-timeout 10 --max-time 15 -XPOST http://$GRAYLOG_SERVER:6666/gelf -p0 -d ${message} +} + +echo $1 +$1 diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/restart-restcomm.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/restart-restcomm.sh new file mode 100755 index 0000000000..90e9470a76 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/restart-restcomm.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +## +## Descript+ion: Script that collects all necessary system logs and data. +## Author : Lefteris Banos +# + +JMAP="false" + +## +## FUNCTIONS +## +getPID(){ + RESTCOMM_PID=" " + RMS_PID="" + + RESTCOMM_PID=$(jps | grep jboss-modules.jar | cut -d " " -f 1) + + while read -r line + do + if ps -ef | grep $line | grep -q mediaserver + then + RMS_PID=$line + fi + done < <(jps | grep Main | cut -d " " -f 1) + +} + +stopRestComm(){ + echo "...stoping RestComm" + ./stop-restcomm.sh + + while [[ ! -z "$RESTCOMM_PID" || ! -z "$RMS_PID" ]]; do + getPID + echo "...waiting RestComm and MS to stop" + sleep 2 + done +} + +startRestComm(){ + echo "...starting RestComm" + ./start-restcomm.sh +} + +#MAIN +# parse the flag options (and their arguments) +while getopts "hmz" OPT; do + case "$OPT" in + h) + echo "Description: Collects system data. The output is a compressed file." + echo " " + echo "restart-restcomm.sh [options]" + echo " " + echo "options:" + echo "-m collect jmap" + echo "now will jusr restart Restcomm right now" + echo "-h show brief help" + exit 0 + ;; + m) + JMAP="true" + ;; + now) + JMAP="false" + ;; + ?) + echo "Invalid option: $OPTARG" + echo "Type \"restart-restcomm.sh -help\" for instructions" + exit 1 ;; + esac +done + +# get rid of the just-finished flag arguments +shift $(($OPTIND-1)) + + +if [ "$JMAP" == "true" ]; then + echo "...JMAP files will be collected" + ./collect_jmap.sh +fi + +stopRestComm +sleep 2 +startRestComm diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/set-log-level.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/set-log-level.sh new file mode 100755 index 0000000000..e3acd40f3b --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/set-log-level.sh @@ -0,0 +1,114 @@ +#!/bin/bash +## Description: Set log_level on the fly +## Author: Lefteris Banos +##Using Jboss Command Line Interface - CLI (https://developer.jboss.org/wiki/CommandLineInterface) + + +# VARIABLES +BASE_DIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +RESTCOMM_BIN=$BASE_DIR/.. +CLIFILE=$BASE_DIR/log.cli + + +changelog() { + cat <> $CLIFILE + /subsystem=logging/logger=$1:write-attribute(name=level,value=$2) +EOT +} + +changelogROOT() { + cat <> $CLIFILE + /subsystem=logging/root-logger=$1:write-attribute(name=level,value=$2) +EOT +} + +changelogCONSOLE() { + cat <> $CLIFILE + /subsystem=logging/console-handler=$1:write-attribute(name=level,value=$2) +EOT +} + + +listlog(){ + cat <> $CLIFILE +/subsystem=logging/logger=org.mobicents.servlet.sip:read-resource +/subsystem=logging/logger=org.mobicents.servlet.sip.restcomm:read-resource +/subsystem=logging/logger=org.restcomm.connect:read-resource +/subsystem=logging/logger=gov.nist:read-resource +/subsystem=logging/console-handler=CONSOLE:read-resource +/subsystem=logging/root-logger=ROOT:read-resource +EOT +} + +if [ $# -eq 0 ] + then + arr="help" +else + arr=( "$@" ) +fi + +for compt in $arr + do + case "$compt" in + servlet) + COMPONENT=org.mobicents.servlet.sip + changelog $COMPONENT $2 + ;; + + govnist) + COMPONENT=gov.nist + changelog $COMPONENT $2 + ;; + siprestcomm) + COMPONENT=org.mobicents.servlet.sip.restcomm + changelog $COMPONENT $2 + ;; + restcomm) + COMPONENT=org.restcomm.connect + changelog $COMPONENT $2 + # update RVD's logging level too. TODO do this separately on 'rvd)' when docker scripts are updated too + COMPONENT=org.restcomm.connect.rvd.LOCAL + changelog $COMPONENT $2 + COMPONENT=org.restcomm.connect.rvd.GLOBAL + changelog $COMPONENT $2 + ;; + rvd) + COMPONENT=org.restcomm.connect.rvd.LOCAL + changelog $COMPONENT $2 + COMPONENT=org.restcomm.connect.rvd.GLOBAL + changelog $COMPONENT $2 + ;; + root) + COMPONENT=ROOT + changelogROOT $COMPONENT $2 + ;; + console) + COMPONENT=CONSOLE + changelogCONSOLE $COMPONENT $2 + ;; + list) + listlog + ;; + *) + echo "Usage: $0 \"servlet govnist siprestcomm restscomm console root\" DEBUG. Can also set each element individually" + echo "Usage: $0 list (To list the actual log levels)" + exit 1 + esac +done + + n=0 + until [ $n -ge 5 ] + do + n=$[$n+1] + $RESTCOMM_BIN/jboss-cli.sh --connect controller=127.0.0.1 --file="$CLIFILE" # substitute your command here + if [ $? -eq 0 ]; then echo "LOG level changed properly" && break; fi + + if [ $n -eq 5 ]; then echo "Command Fail.. please try again"; fi + sleep 2 + done + + + +rm $CLIFILE + + diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/start-mediaserver.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/start-mediaserver.sh new file mode 100755 index 0000000000..cadee45e16 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/start-mediaserver.sh @@ -0,0 +1,19 @@ +#! /bin/bash + +## Description: Starts Media Server with auto-configuration. +## Author : Henrique Rosa (henrique.rosa@telestax.com) + +startMediaServer() { + local basedir=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) + local ms_conf=$basedir/mediaserver.conf + local ms_home=$RESTCOMM_HOME/mediaserver + + chmod +x $ms_home/*.sh + chmod +x $ms_home/.autoconfig/*.sh + chmod +x $ms_home/.autoconfig/autoconfig.d/*.sh + chmod +x $ms_home/bin/*.sh + + $ms_home/start-mediaserver.sh $ms_conf +} + +startMediaServer diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/start-restcomm.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/start-restcomm.sh new file mode 100755 index 0000000000..ae6ba7538e --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/start-restcomm.sh @@ -0,0 +1,165 @@ +#! /bin/bash +## +## Description: Starts RestComm with auto-configuration. +## +## Parameters : 1. Bind Address (default: 127.0.0.1) +## 2. Run Mode [standalone|standalone-lb|domain|domain-lb] (default:standalone) +## +## Author : Henrique Rosa +## +# set environment variables for execution +BASEDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +RESTCOMM_HOME=$(cd $BASEDIR/../../ && pwd) +MMS_HOME=$RESTCOMM_HOME/mediaserver +LB_HOME=$RESTCOMM_HOME/tools/sip-balancer + +## +## FUNCTIONS +## +startRestcomm() { + run_mode="$1" + bind_address="$2" + ExtraOpts="-Djboss.bind.address.management=127.0.0.1" + + # Check if RestComm is already running + if tmux ls | grep -q 'restcomm'; then + echo 'TelScale RestComm is already running on terminal session "restcomm"!' + exit 1; + fi + + if [ -n "$MGMT_PASS" ] && [ -n "$MGMT_USER" ]; then + echo "MGMT_PASS, MGMT_USER is set will be added to MGMNT configuration" + grep -q "$MGMT_USER" $RESTCOMM_HOME/standalone/configuration/mgmt-users.properties || $RESTCOMM_HOME/bin/add-user.sh "$MGMT_USER" "$MGMT_PASS" -s + #Management bind address + ExtraOpts="-Djboss.bind.address.management=$bind_address" + fi + + case $run_mode in + 'standalone'*) + # start restcomm on standalone mode + chmod +x $RESTCOMM_HOME/bin/standalone.sh + echo 'TelScale RestComm started running on standalone mode. Terminal session: restcomm.' + echo "Using IP Address: $BIND_ADDRESS" + if [[ "$RUN_DOCKER" == "true" || "$RUN_DOCKER" == "TRUE" ]]; then + $RESTCOMM_HOME/bin/standalone.sh -b $bind_address "${ExtraOpts}" + else + tmux new -s restcomm -d "$RESTCOMM_HOME/bin/standalone.sh -b $bind_address ${ExtraOpts}" + fi + ;; + 'domain'*) + # start restcomm on standalone mode + chmod +x $RESTCOMM_HOME/bin/domain.sh + tmux new -s restcomm -d "$RESTCOMM_HOME/bin/domain.sh -b $bind_address ${ExtraOpts}" + echo 'TelScale RestComm started running on domain mode. Screen session: restcomm.' + echo "Using IP Address: $BIND_ADDRESS" + ;; + *) + # start restcomm on standalone mode + chmod +x $RESTCOMM_HOME/bin/standalone.sh + tmux new -s restcomm -d "$RESTCOMM_HOME/bin/standalone.sh -b $bind_address ${ExtraOpts}" + echo 'TelScale RestComm started running on standalone mode. Screen session: restcomm.' + echo "Using IP Address: $BIND_ADDRESS" + ;; + esac + +} + +verifyDependencies() { + source $BASEDIR/verify-dependencies.sh +} + +loadConfigurationParams() { + source $BASEDIR/restcomm.conf + source $BASEDIR/advanced.conf +} + +## +## MAIN +## +verifyDependencies +loadConfigurationParams + +echo BASEDIR: $BASEDIR +echo RESTCOMM_HOME: $RESTCOMM_HOME + +# input parameters and default values +RUN_MODE='standalone' +BIND_ADDRESS='' + +while getopts "s:r:i:" optname +do + case "$optname" in + "s") + STATIC_ADDRESS="$OPTARG" + ;; + "r") + RUN_MODE="$OPTARG" + ;; + "i") + NET_INTERFACE="$OPTARG" + ;; + ":") + echo "No argument value for option $OPTARG" + exit 1 + ;; + "?") + echo "Unknown option $OPTARG" + exit 1 + ;; + *) + echo 'Unknown error while processing options' + exit 1 + ;; + esac +done + +# validate network interface and extract network properties +if [[ -z "$NET_INTERFACE" ]]; then +NET_INTERFACE='eth0' +echo "Looking for the appropriate interface" + NET_INTERFACES=$(ifconfig | expand | cut -c1-8 | sort | uniq -u | awk -F: '{print $1;}') + if [[ -z $(echo $NET_INTERFACES | sed -n "/$NET_INTERFACE/p") ]]; then + echo "The network interface $NET_INTERFACE is not available or does not exist." + echo "The list of available interfaces is: $NET_INTERFACES" + exit 1 + fi +fi + +# load network properties for chosen interface +if [[ -z "$PRIVATE_IP" || -z "$SUBNET_MASK" || -z "$NETWORK" || -z "$BROADCAST_ADDRESS" ]]; then +echo "Looking for the IP Address, subnet, network and broadcast_address" + source $BASEDIR/utils/read-network-props.sh "$NET_INTERFACE" +fi + +BIND_ADDRESS="$PRIVATE_IP" +BIND_NETWORK="$NETWORK" +BIND_SUBNET_MASK="$SUBNET_MASK" + +if [[ -z "$STATIC_ADDRESS" ]]; then + STATIC_ADDRESS=$BIND_ADDRESS +fi + +if [[ -z "$MEDIASERVER_EXTERNAL_ADDRESS" ]]; then + MEDIASERVER_EXTERNAL_ADDRESS="$STATIC_ADDRESS" +fi + +if [[ -z "$PUBLIC_IP" ]]; then + PUBLIC_IP=$STATIC_ADDRESS +fi + +if [[ -z "$SMS_OUTBOUND_PROXY" ]]; then + SMS_OUTBOUND_PROXY=$OUTBOUND_PROXY +fi + +# configure restcomm installation + +if [[ "$MANUAL_SETUP" == "false" || "$MANUAL_SETUP" == "FALSE" ]]; then + source $BASEDIR/autoconfigure.sh +fi + +if [[ "$MS_EXTERNAL" == "false" || "$MS_EXTERNAL" == "FALSE" ]]; then + source $BASEDIR/start-mediaserver.sh +fi +# start restcomm in selected run mode +startRestcomm "$RUN_MODE" "$BIND_ADDRESS" +exit 0 diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/stop-mediaserver.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/stop-mediaserver.sh new file mode 100755 index 0000000000..a8f2904939 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/stop-mediaserver.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +## Description: Stops Media Server running in a terminal session. +## Author : Henrique Rosa (henrique.rosa@telestax.com) + +stopMediaServer() { + local ms_home=$RESTCOMM_HOME/mediaserver + $ms_home/stop-mediaserver.sh +} + +stopMediaServer diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/stop-restcomm.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/stop-restcomm.sh new file mode 100755 index 0000000000..6c91d6232d --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/stop-restcomm.sh @@ -0,0 +1,26 @@ +#! /bin/bash +## +## Description: Stops RestComm and Media Server processes running on terminal sessions +## Authors : Henrique Rosa (henrique.rosa@telestax.com) +## + +BASEDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +RESTCOMM_HOME=$(cd $BASEDIR/../../ && pwd) +MS_HOME=$RESTCOMM_HOME/mediaserver + +stopMediaServer() { + source $BASEDIR/stop-mediaserver.sh +} + +stopRestComm() { + echo 'Shutting down RestComm...' + if tmux ls | grep -q 'restcomm'; then + tmux kill-session -t restcomm + echo '...stopped RestComm instance running on terminal session "restcomm"!' + else + echo '...restComm already stopped!' + fi +} + +stopMediaServer +stopRestComm diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/utils/read-network-props.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/utils/read-network-props.sh new file mode 100755 index 0000000000..096a496be7 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/utils/read-network-props.sh @@ -0,0 +1,48 @@ +#!/bin/bash +## +## Description : Utility script to find network properties +## Author : Henrique Rosa - henrique.rosa@telestax.com +## + +# VARIABLES +IP_ADDRESS_PATTERN="[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}" +INTERFACE="$1" + +## Description: Gets the private IP of the instance +## Parameters : none +getPrivateIP() { + echo "$INET_DATA" | grep -o "addr:$IP_ADDRESS_PATTERN" | awk -F: '{print $2}' +} + +## Description: Gets the broadcast address of the instance +## Parameters : none +getBroadcastAddress() { + echo "$INET_DATA" | grep "Bcast:$IP_ADDRESS_PATTERN" | awk '{print $3}' | awk -F: '{print $2}' +} + +## Description: Gets the Subnet Mask of the instance +## Parameters : none +getSubnetMask() { + /sbin/ifconfig $INTERFACE | grep "Mask:$IP_ADDRESS_PATTERN" | awk '{print $4}' | awk -F: '{print $2}' +} + +## Description: Gets the Network of the instance +## Parameters : 1.Private IP +## 2.Subnet Mask +getNetwork() { + #debian/ubuntu + NW=`ipcalc -n $1 $2 | grep -i "Network" | awk '{print $2}' | awk -F/ '{print $1}';` + if [[ -z "$NW" ]]; then + #rhel/centos/amazon + NW=`ipcalc -n $1 $2 | grep -i "Network" | awk -F= '{print $2}';` + fi + echo $NW +} + +# MAIN +INET_DATA=$(/sbin/ifconfig $INTERFACE | grep "inet ") + +PRIVATE_IP=$(getPrivateIP) +SUBNET_MASK=$(getSubnetMask) +NETWORK=$(getNetwork $PRIVATE_IP $SUBNET_MASK) +BROADCAST_ADDRESS=$(getBroadcastAddress) diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/verify-dependencies.sh b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/verify-dependencies.sh new file mode 100755 index 0000000000..dbf06b3195 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/bin/restcomm/verify-dependencies.sh @@ -0,0 +1,56 @@ +#!/bin/bash +## Description: Verifies if all dependencies are installed. +## Author: Henrique Rosa (henrique.rosa@telestax.com) + +verifyJava() { + if [ -n "$(which java)" ]; then + if [ $(java -version 2>&1 | head -n 1 | cut -d'"' -f2 | cut -d'.' -f2) -ne "7" ]; then + echo "Only Java 1.7 required." + exit 1 + fi + else + echo "Java dependency is missing." + echo "CentOS/RHEL: java-1.7.0-openjdk-devel.x86_64" + echo "Debian/Ubuntu:" + echo " add-apt-repository ppa:openjdk-r/ppa" + echo " apt-get update" + echo " apt-get install openjdk-7-jdk" + echo "macOS: brew cask install java7" + exit 1 + fi +} + +verifyTmux() { + if [ -z "$(which tmux)" ]; then + echo "TMux dependency is missing." + echo "CentOS/RHEL: yum install tmux" + echo "Debian/Ubuntu: apt-get install tmux" + echo "macOS: brew install tmux" + exit 1 + fi +} + +verifyXmlstarlet() { + if [ -z "$(which xmlstarlet)" ]; then + echo "XML Starlet dependency is missing." + echo "CentOS/RHEL: yum install xmlstarlet" + echo "Debian/Ubuntu: apt-get install xmlstarlet" + echo "macOS: brew install xmlstarlet" + exit 1 + fi +} + +verifyIpcalc() { + if [ -z "$(which ipcalc)" ]; then + echo "IP Calc dependency is missing." + echo "CentOS/RHEL: yum install ipcalc" + echo "Debian/Ubuntu: apt-get install ipcalc" + echo "macOS: brew install ipcalc" + exit 1 + fi +} + +verifyJava +verifyTmux +verifyXmlstarlet +verifyIpcalc diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/docs/restcomm/README b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/docs/restcomm/README new file mode 100644 index 0000000000..e69f60bc40 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/docs/restcomm/README @@ -0,0 +1,2 @@ +For Restcomm documentation please visit +https://www.restcomm.com/docs/connect/index.html \ No newline at end of file diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/configuration/dars/mobicents-dar.properties b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/configuration/dars/mobicents-dar.properties new file mode 100644 index 0000000000..4027360c94 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/configuration/dars/mobicents-dar.properties @@ -0,0 +1,2 @@ +#Application Router Configuration +ALL=("RestComm","DAR\:From","ORIGINATING","","NO_ROUTE","0") diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/configuration/mss-sip-stack.properties b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/configuration/mss-sip-stack.properties new file mode 100644 index 0000000000..a1309d2c75 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/configuration/mss-sip-stack.properties @@ -0,0 +1,41 @@ +gov.nist.javax.sip.LOG_MESSAGE_CONTENT=true +gov.nist.javax.sip.LOG4J_LOGGER_NAME=gov.nist +gov.nist.javax.sip.TRACE_LEVEL=LOG4J +gov.nist.javax.sip.DEBUG_LOG=logs/mss-jsip-debuglog.txt +gov.nist.javax.sip.SERVER_LOG=logs/mss-jsip-messages.xml +javax.sip.STACK_NAME=Restcomm-SIP-Servlets +javax.sip.AUTOMATIC_DIALOG_SUPPORT=off +gov.nist.javax.sip.DELIVER_UNSOLICITED_NOTIFY=true +gov.nist.javax.sip.THREAD_POOL_SIZE=64 +gov.nist.javax.sip.REENTRANT_LISTENER=true +# prevent DOS attacks +gov.nist.javax.sip.MAX_LISTENER_RESPONSE_TIME=120 +gov.nist.javax.sip.MAX_MESSAGE_SIZE=40000 +# setting up the buffer size to reduce retransmissions and avoid loosing messages +gov.nist.javax.sip.RECEIVE_UDP_BUFFER_SIZE=131072 +gov.nist.javax.sip.SEND_UDP_BUFFER_SIZE=131072 +gov.nist.javax.sip.AGGRESSIVE_CLEANUP=true +gov.nist.javax.sip.MAX_FORK_TIME_SECONDS=0 +# set to true so that the stack do more validation on dialog, +# but won't work on chained applications so false by default +gov.nist.javax.sip.AUTOMATIC_DIALOG_ERROR_HANDLING=false +gov.nist.javax.sip.MESSAGE_PROCESSOR_FACTORY=gov.nist.javax.sip.stack.NioMessageProcessorFactory +org.mobicents.servlet.sip.USER_AGENT_HEADER=Restcomm ${project.version} +org.mobicents.servlet.sip.SERVER_HEADER=Restcomm ${project.version} +#Uncomment the following line to enable Congestion Control +#gov.nist.javax.sip.SIP_MESSAGE_VALVE=org.mobicents.ext.javax.sip.congestion.CongestionControlMessageValve +org.mobicents.ext.javax.sip.congestion.SIP_SCANNERS= +org.mobicents.ext.javax.sip.congestion.CONGESTION_CONTROL_MONITOR_INTERVAL=-1 +#org.mobicents.ext.javax.sip.congestion.MEMORY_THRESHOLD", "85"); +#org.mobicents.ext.javax.sip.congestion.BACK_TO_NORMAL_MEMORY_THRESHOLD", "80"); +#org.mobicents.ext.javax.sip.congestion.CPU_PROCESS_THRESHOLD", "85"); +#org.mobicents.ext.javax.sip.congestion.BACK_TO_NORMAL_CPU_PROCESS_THRESHOLD", "80"); +#org.mobicents.ext.javax.sip.congestion.SERVER_TRANSACTIONS_THRESHOLD", "15000"); +#org.mobicents.ext.javax.sip.congestion.BACK_TO_NORMAL_SERVER_TRANSACTIONS_THRESHOLD", "10000"); +#org.mobicents.ext.javax.sip.congestion.DIALOGS_THRESHOLD", "200000"); +#org.mobicents.ext.javax.sip.congestion.BACK_TO_NORMAL_DIALOGS_THRESHOLD", "180000"); +#Uncomment the following line to work with the Mobicents Load Balancer +#org.mobicents.ha.javax.sip.BALANCERS=127.0.0.1 +org.mobicents.ha.javax.sip.LOCAL_HTTP_PORT=8080 +org.mobicents.ha.javax.sip.LOCAL_SSL_PORT=8443 +#org.mobicents.ha.javax.sip.REACHABLE_CHECK= diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/deployments/olympus.war.dodeploy b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/deployments/olympus.war.dodeploy new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/deployments/olympus.war.dodeploy @@ -0,0 +1 @@ + diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/deployments/restcomm-management.war.dodeploy b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/deployments/restcomm-management.war.dodeploy new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/deployments/restcomm-management.war.dodeploy @@ -0,0 +1 @@ + diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/deployments/restcomm-rvd.war.dodeploy b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/deployments/restcomm-rvd.war.dodeploy new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/deployments/restcomm-rvd.war.dodeploy @@ -0,0 +1 @@ + diff --git a/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/deployments/restcomm.war.dodeploy b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/deployments/restcomm.war.dodeploy new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/assembly-resources/standalone/deployments/restcomm.war.dodeploy @@ -0,0 +1 @@ + diff --git a/release/restcomm-assembly-as7/src/main/resources/descriptor_all-in-one.xml b/release/restcomm-assembly-as7/src/main/resources/descriptor_all-in-one.xml new file mode 100644 index 0000000000..e001853ebb --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/descriptor_all-in-one.xml @@ -0,0 +1,68 @@ + + all-in-one + + zip + tar.gz + + Restcomm-JBoss-AS7-${project.version} + + + + ${project.build.directory}/dependency/restcomm-sip-servlets-${sipservletapi.version}-jboss-as-7.2.0.Final + / + + + standalone/configuration/dars/mobicents-dar.properties + standalone/configuration/mss-sip-stack.properties + + + + + ${project.build.directory}/dependency/restcomm-media-server + /mediaserver + + + + ${project.basedir}/src/main/resources/assembly-resources + / + + + + + /standalone/deployments + false + restcomm-rvd.war + + org.restcomm:restcomm-connect-rvd + + + + /standalone/deployments + false + olympus.war + + org.mobicents.webrtc:webrtc-ui + + + + + /standalone/deployments/restcomm.war + true + + org.restcomm:restcomm-connect.application + + + + false + /standalone/deployments + restcomm-management.war + + org.restcomm:restcomm-connect-management + + + + + + diff --git a/release/restcomm-assembly-as7/src/main/resources/descriptor_standalone.xml b/release/restcomm-assembly-as7/src/main/resources/descriptor_standalone.xml new file mode 100644 index 0000000000..8c27e5a20e --- /dev/null +++ b/release/restcomm-assembly-as7/src/main/resources/descriptor_standalone.xml @@ -0,0 +1,52 @@ + + standalone + + zip + tar.gz + + Restcomm-JBoss-AS7-${project.version} + + + + ${project.build.directory}/dependency/restcomm-sip-servlets-${sipservletapi.version}-jboss-as-7.2.0.Final + / + + + standalone/configuration/dars/mobicents-dar.properties + standalone/configuration/mss-sip-stack.properties + standalone/deployments/media-jsr309-servlet.war + standalone/deployments/click2call.war + + + + + ${project.basedir}/src/main/resources/assembly-resources + / + + standalone/deployments/olympus.war.dodeploy + standalone/deployments/restcomm-rvd.war.dodeploy + + + + + + /standalone/deployments/restcomm.war + true + + org.restcomm:restcomm-connect.application + + + + false + /standalone/deployments + restcomm-management.war + + org.restcomm:restcomm-connect-management + + + + + + diff --git a/release/restcomm-assembly-wildfly10/pom.xml b/release/restcomm-assembly-wildfly10/pom.xml new file mode 100644 index 0000000000..01df69dbb2 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/pom.xml @@ -0,0 +1,106 @@ + + + 4.0.0 + + org.restcomm + assembly-parent + 9.0.0-SNAPSHOT + + assembly-wildfly10 + pom + + UTF-8 + 3.2.0-89 + + + + org.restcomm + restcomm-connect-rvd + war + + + org.restcomm + restcomm-connect.application + war + + + + org.restcomm + restcomm-connect-management + war + + + + + org.mobicents.webrtc + webrtc-ui + war + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.0.1 + + + extractSipServlets + prepare-package + + unpack + + + + + org.mobicents.servlet.sip + sip-servlets-wildfly-10 + ${sipservletapi.version} + zip + assembly + + + + + + extractMediaserver + prepare-package + + unpack + + + + + org.mobicents.media + server + zip + assembly + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + 3.1.0 + + + src/main/resources/descriptor.xml + + Restcomm-JBoss-Wildfly10-${project.version} + false + + + + package + + single + + + + + + + diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-SecureSSL.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-SecureSSL.sh new file mode 100755 index 0000000000..e8c2d7ee1d --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-SecureSSL.sh @@ -0,0 +1,205 @@ +#!/usr/bin/env bash + +## +## Description: Configures RestComm +## Author: Lefteris Banos (eleftherios.banos@telestax.com) +## + +# VARIABLES +RESTCOMM_BIN=$RESTCOMM_HOME/bin +RESTCOMM_DARS=$RESTCOMM_HOME/standalone/configuration/dars +RESTCOMM_CONF=$RESTCOMM_HOME/standalone/configuration +RESTCOMM_DEPLOY=$RESTCOMM_HOME/standalone/deployments/restcomm.war + +###Functions for SECURESSL=false### +#Disable HTTPS when SECURESSL=false for RC. +NoSslRestConf(){ + FILE=$RESTCOMM_CONF/standalone-sip.xml + sed -e "s//<\!--connector name=\"https\" \1>/" \ + -e "s/<\/connector>/<\/connector-->/" $FILE > $FILE.bak + mv $FILE.bak $FILE + sed -e "s/<.*connector name=\"http\".*>/ /" $FILE > $FILE.bak + mv $FILE.bak $FILE + + sed -i "s|SSL_ENABLED=.*|SSL_ENABLED=false|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|SSL_KEYSTORE=.*|SSL_KEYSTORE=restcomm.jks|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|SSL_PASSWORD=.*|SSL_PASSWORD=changeme|" $RESTCOMM_BIN/restcomm/mediaserver.conf +} + +####funcitions for SECURESSL="SELF" || SECURESSL="AUTH" #### +#HTTPS configuration. +#Usage of certificate. +SslRestCommConf(){ + FILE=$RESTCOMM_CONF/standalone-sip.xml + echo "Will properly configure HTTPS Connector "; + FILERESTCOMMXML=$BASEDIR/standalone/deployments/restcomm.war/WEB-INF/web.xml + FILEMANAGERXML=$BASEDIR/standalone/deployments/restcomm-management.war/WEB-INF/web.xml + FILERVDXML=$BASEDIR/standalone/deployments/restcomm-rvd.war/WEB-INF/web.xml + FILEOLYMPUSXML=$BASEDIR/standalone/deployments/olympus.war/WEB-INF/web.xml + #Disable HTTP if set to true. + if [[ "$DISABLE_HTTP" == "true" || "$DISABLE_HTTP" == "TRUE" ]]; then + echo "DISABLE_HTTP is '$DISABLE_HTTP'. Will disable HTTP Connector" + sed -e "s/<.*connector name=\"http\".*>/<\!--connector name=\"http\" protocol=\"HTTP\/1.1\" scheme=\"http\" socket-binding=\"http\"-->/" $FILE > $FILE.bak + mv $FILE.bak $FILE + + grep -q '' $FILERESTCOMMXML && sed -e "s///" $FILERESTCOMMXML.bak > $FILERESTCOMMXML + grep -qs '' $FILEMANAGERXML && sed -e "s///" $FILEMANAGERXML.bak > $FILEMANAGERXML + grep -q '' $FILERVDXML && sed -e "s///" $FILERVDXML.bak > $FILERVDXML + grep -q '' $FILEOLYMPUSXML && sed -e "s///" $FILEOLYMPUSXML.bak > $FILEOLYMPUSXML + + elif [[ "$DISABLE_HTTP" == "REDIRECT" || "$DISABLE_HTTP" == "redirect" ]]; then + sed -e "s/<.*connector name=\"http\".*>//" $FILE > $FILE.bak + mv $FILE.bak $FILE + if [ ! -d "$BASEDIR/standalone/deployments/restcomm-management.war" ]; then + mkdir $BASEDIR/standalone/deployments/restcomm-management-exploded.war + unzip -q $BASEDIR/standalone/deployments/restcomm-management.war -d $BASEDIR/standalone/deployments/restcomm-management-exploded.war/ + rm -f $BASEDIR/standalone/deployments/restcomm-management.war + mv -f $BASEDIR/standalone/deployments/restcomm-management-exploded.war $BASEDIR/standalone/deployments/restcomm-management.war + fi + + sed -e "s//<\/security-constraint>/" $FILERESTCOMMXML.bak > $FILERESTCOMMXML + sed -e "s//<\/security-constraint>/" $FILEMANAGERXML.bak > $FILEMANAGERXML + sed -e "s//<\/security-constraint>/" $FILERVDXML.bak > $FILERVDXML + sed -e "s//<\/security-constraint>/" $FILEOLYMPUSXML.bak > $FILEOLYMPUSXML + + else + sed -e "s/<.*connector name=\"http\".*>/ /" $FILE > $FILE.bak + mv $FILE.bak $FILE + + grep -q '' $FILERESTCOMMXML && sed -e "s///" $FILERESTCOMMXML.bak > $FILERESTCOMMXML + grep -qs '' $FILEMANAGERXML && sed -e "s///" $FILEMANAGERXML.bak > $FILEMANAGERXML + grep -q '' $FILERVDXML && sed -e "s///" $FILERVDXML.bak > $FILERVDXML + grep -q '' $FILEOLYMPUSXML && sed -e "s///" $FILEOLYMPUSXML.bak > $FILEOLYMPUSXML + + fi + #If File contains path, or just the name. + if [[ "$TRUSTSTORE_FILE" = /* ]]; then + CERTIFICATION_FILE=$TRUSTSTORE_FILE + else + CERTIFICATION_FILE="\\\${jboss.server.config.dir}/$TRUSTSTORE_FILE" + fi + #enable HTTPS and certificate file. + #Cipher `TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA` removed because it enables non-secure cipher ECDHE-RSA-DES-CBC3-SHA + echo "Will use trust store at location: $CERTIFICATION_FILE" + sed -e "s/<\!--connector name=\"https\" \(.*\)>//" \ + -e "s|||" \ + -e "s/<\/connector-->/<\/connector>/" $FILE > $FILE.bak + mv $FILE.bak $FILE + echo "Properly configured HTTPS Connector to use trustStore file $CERTIFICATION_FILE" +} + +#If self-sighned create certificate. +#else use authorized. +CertConfigure(){ + #Certificate setup (Authority certificate or self-signed) + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + if [ "$SECURESSL" = "AUTH" ]; then + echo "Authorized certificate is used" + elif [ "$SECURESSL" = "SELF" ]; then + echo "TRUSTSTORE_FILE is not provided but SECURE is TRUE. We will create and configure self signed certificate" + + sed -e "s/.*<\/ssl-mode>/allowall<\/ssl-mode>/" $FILE > $FILE.bak #When Self-signed used ssl-mode must set to "allowall" + mv $FILE.bak $FILE + + if [[ "$TRUSTSTORE_FILE" = /* ]]; then + TRUSTSTORE_LOCATION=$TRUSTSTORE_FILE + else + TRUSTSTORE_LOCATION=$RESTCOMM_HOME/standalone/configuration/$TRUSTSTORE_FILE + fi + + echo "TRUSTSTORE_LOCATION: $TRUSTSTORE_LOCATION" + echo "PUBLIC_IP: $PUBLIC_IP" + echo "RESTCOMM_HOSTNAME: $RESTCOMM_HOSTNAME" + #Use HOSTNAME to create certificate is used. Else use STATIC_ADDRESS + if [ -n "$RESTCOMM_HOSTNAME" ]; then + HOSTNAME="${RESTCOMM_HOSTNAME}" + keytool -genkey -alias $TRUSTSTORE_ALIAS -keyalg RSA -keystore $TRUSTSTORE_LOCATION -dname "CN=$HOSTNAME" -storepass $TRUSTSTORE_PASSWORD -keypass $TRUSTSTORE_PASSWORD + else + HOSTNAME="${PUBLIC_IP}" + keytool -genkey -alias $TRUSTSTORE_ALIAS -keyalg RSA -keystore $TRUSTSTORE_LOCATION -dname "CN=restcomm" -ext san=ip:"$HOSTNAME" -storepass $TRUSTSTORE_PASSWORD -keypass $TRUSTSTORE_PASSWORD + fi + echo "The generated truststore file at $TRUSTSTORE_LOCATION " + fi + + #Final necessary configuration. Protocols permitted, etc. + grep -q 'ephemeralDHKeySize' $RESTCOMM_BIN/standalone.conf || sed -i "s|-Djava.awt.headless=true|& -Djdk.tls.ephemeralDHKeySize=2048|" $RESTCOMM_BIN/standalone.conf + grep -q 'https.protocols' $RESTCOMM_BIN/standalone.conf || sed -i "s|-Djava.awt.headless=true|& -Dhttps.protocols=TLSv1.1,TLSv1.2|" $RESTCOMM_BIN/standalone.conf +} + +#SIP-Servlets configuration for HTTPS. +#For both Self-signed and Authorized certificate. +MssStackConf(){ + FILE=$RESTCOMM_CONF/mss-sip-stack.properties + + if grep -q "gov.nist.javax.sip.TLS_CLIENT_AUTH_TYPE=${TLS_CLIENT_AUTH_TYPE}" "$FILE"; then + sed -i '/gov.nist.javax.sip.TLS_CLIENT_AUTH_TYPE='"$TLS_CLIENT_AUTH_TYPE"'/,+5d' $FILE + fi + + if [[ "$TRUSTSTORE_FILE" = /* ]]; then + TRUSTSTORE_LOCATION=$TRUSTSTORE_FILE + else + TRUSTSTORE_LOCATION=$RESTCOMM_HOME/standalone/configuration/$TRUSTSTORE_FILE + fi + + #check for port offset + local HTTPS_PORT=$((HTTPS_PORT + PORT_OFFSET)) + + #https://github.com/RestComm/Restcomm-Connect/issues/2606 + sed -i '/org.mobicents.ha.javax.sip.LOCAL_SSL_PORT=.*/ a \ + \gov.nist.javax.sip.TLS_CLIENT_AUTH_TYPE='"$TLS_CLIENT_AUTH_TYPE"'\ + \javax.net.ssl.keyStore='"$TRUSTSTORE_LOCATION"'\ + \javax.net.ssl.keyStorePassword='" $TRUSTSTORE_PASSWORD"'\ + \javax.net.ssl.trustStorePassword='"$TRUSTSTORE_PASSWORD"'\ + \javax.net.ssl.trustStore='"$TRUSTSTORE_LOCATION"'\ + \javax.net.ssl.keyStoreType=JKS\ + ' $RESTCOMM_CONF/mss-sip-stack.properties +} + + +#SIP-Servlets configuration for HTTPS. +#For both Self-signed and Authorized certificate. +SslRMSConf(){ + if [[ "$MANUAL_SETUP" == "false" || "$MANUAL_SETUP" == "FALSE" ]]; then + + if [[ "$TRUSTSTORE_FILE" = /* ]]; then + CERTIFICATION_FILE=$TRUSTSTORE_FILE + else + CERTIFICATION_FILE="$RESTCOMM_CONF/$TRUSTSTORE_FILE" + fi + + sed -i "s|SSL_ENABLED=.*|SSL_ENABLED=true|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|SSL_KEYSTORE=.*|SSL_KEYSTORE=${CERTIFICATION_FILE}|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|SSL_PASSWORD=.*|SSL_PASSWORD=${TRUSTSTORE_PASSWORD}|" $RESTCOMM_BIN/restcomm/mediaserver.conf + fi +} + +# MAIN +echo 'RestComm SSL Configuring ...' + +if [[ "$SECURESSL" = "SELF" || "$SECURESSL" = "AUTH" ]]; then + if [[ -z $TRUSTSTORE_ALIAS || -z $TRUSTSTORE_PASSWORD || -z $TRUSTSTORE_FILE ]]; then + echo 'Need to set all: TRUSTSTORE_ALIAS, TRUSTSTORE_PASSWORD,TRUSTSTORE_FILE ' + else + echo "SECURE $SECURESSL" + SslRestCommConf + CertConfigure + MssStackConf + SslRMSConf + fi +elif [[ "$SECURESSL" == "false" || "$SECURESSL" == "FALSE" ]]; then + NoSslRestConf +else + echo "Allowed values for SECURESSL: SELF, AUTH, FALSE" +fi diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-dashboard.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-dashboard.sh new file mode 100755 index 0000000000..ec8c1b1117 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-dashboard.sh @@ -0,0 +1,30 @@ +#!/bin/bash +## +## Configures dashboard.json based on global configuration options in restcomm.conf and advanced.conf. +## +## requirements: +## +## RESTCOMM_HOME env variable to be set +## dashboard.json should be in place (under $RESTCOMM_HOME/standalone/deployments/restcomm-management.war) +## +## Author: otsakir@gmail.com - Orestis Tsakiridis + +echo "Configuring Dashboard..." + + +# MAIN +if [ -z "$RESTCOMM_HOME" ] +then + echo "RESTCOMM_HOME env variable not set. Aborting." + exit 1 +fi + + +# Variables +DASHBOARD_ROOT="$RESTCOMM_HOME"/standalone/deployments/restcomm-management.war +DASHBOARD_JSON_FILE="$DASHBOARD_ROOT"/conf/dashboard.json + +sed -i "s|\"rvdUrl\":\"[^\"]*\"|\"rvdUrl\":\"$RVD_URL/restcomm-rvd\"|" "$DASHBOARD_JSON_FILE" + +echo "Dasboard configured:" +cat $DASHBOARD_JSON_FILE \ No newline at end of file diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-dialogic-xms.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-dialogic-xms.sh new file mode 100755 index 0000000000..4b4a8d6403 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-dialogic-xms.sh @@ -0,0 +1,57 @@ +#!/bin/bash +## Description: Configures Dialogic XMS +## Author : Henrique Rosa (henrique.rosa@telestax.com) + +RESTCOMM_STANDALONE=$RESTCOMM_HOME/standalone +RESTCOMM_DEPLOY=$RESTCOMM_STANDALONE/deployments/restcomm.war + +## Description: Elects Dialogic XMS as the active Media Server for RestComm +activateXMS() { + restcomm_conf=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + ms_address="$1" + + sed -e "// { + N; s|.*<\/compatibility>|$MS_COMPATIBILITY_MODE<\/compatibility>| + N; s||| + N; s|
.*<\/address>|
$ms_address<\/address>| + }" $restcomm_conf > $restcomm_conf.bak + mv -f $restcomm_conf.bak $restcomm_conf + echo '...activated Dialogic XMS...' +} + +fetchExternalResources() { + if [[ "$MS_COMPATIBILITY_MODE" == "xms" ]]; then + + echo "Checking required libraries ..." + + if [ -f $RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/lib/dialogic309-3.2-snapshot-jboss.jar ]; then + echo "JSR309 library ready" + else + echo "Downloading JSR309 library ..." + cd $RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/lib + wget -O dialogic309-3.2-snapshot-jboss.jar https://www.dialogic.com/files/jsr-309/3.2GA/3.2Snapshot/dialogic309-3.2-snapshot-jboss.jar + fi + + if [ -f $RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/lib/dialogicsmiltypes-3.2-GA-14621.jar ]; then + echo "SMIL Types library ready" + else + echo "Downloading SMIL Types library ..." + cd $RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/lib + wget -O dialogicsmiltypes-3.2-GA-14621.jar https://www.dialogic.com/files/jsr-309/3.2GA/dialogicsmiltypes-3.2-GA-14621.jar + fi + + if [ -f $RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/lib/dialogicmsmltypes-3.2-GA-14621.jar ]; then + echo "MSML Types library ready" + else + echo "Downloading SMIL Types library ..." + cd $RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/lib + wget -O dialogicmsmltypes-3.2-GA-14621.jar https://www.dialogic.com/files/jsr-309/3.2GA/dialogicmsmltypes-3.2-GA-14621.jar + fi + fi +} + +#MAIN +echo "Configuring Dialogic XMS...MS_MODE: $MS_COMPATIBILITY_MODE" +activateXMS $MS_ADDRESS +fetchExternalResources +echo '...finished configuring Dialogic XMS!' diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-jboss-as.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-jboss-as.sh new file mode 100755 index 0000000000..c324c99337 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-jboss-as.sh @@ -0,0 +1,18 @@ +#! /bin/bash +## +## Description: Configures JBoss AS +## Author : Henrique Rosa (henrique.rosa@telestax.com) +## + +## FUNCTIONS +disableSplashScreen() { + FILE="$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml" + sed -e 's|enable-welcome-root=".*"|enable-welcome-root="false"|' $FILE > $FILE.bak + mv -f $FILE.bak $FILE +} + +## MAIN +echo 'Configuring JBoss AS...' +disableSplashScreen +echo '...disabled JBoss splash screen...' +echo 'Finished configuring JBoss AS!' \ No newline at end of file diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-load-balancer.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-load-balancer.sh new file mode 100755 index 0000000000..77b5c56486 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-load-balancer.sh @@ -0,0 +1,47 @@ +#! /bin/bash +## +## Description: Configures SIP Load Balancer +## Author : Henrique Rosa (henrique.rosa@telestax.com) +## Author : Pavel Slegr (pavel.slegr@telestax.com) +## Author : Charles Roufay (charles.roufay@telestax.com) +## +## Last update: 22/03/2016 +## Change Log: Move away from Telestax Proxy and configure LB from restcomm.conf +## FUNCTIONS +## +## +## +## +configSipStack() { + lb_sipstack_file="$RESTCOMM_HOME/standalone/configuration/mss-sip-stack.properties" + + #delete additional connectors if any added to erlier run of the script. + if grep -q "## lb-configuration ##" $lb_sipstack_file + then + echo "Additional Connectors Created earlier, going to delete the connectors" + sed '/## lb-configuration ##/,/## lb-configuration ##/d' $lb_sipstack_file > $lb_sipstack_file.bak + mv $lb_sipstack_file.bak $lb_sipstack_file + else + echo "LB was not configured earlier" + fi + + if [ "$ACTIVATE_LB" == "true" ] || [ "$ACTIVATE_LB" == "TRUE" ]; then + if [ -z "$LB_INTERNAL_IP" ]; then + LB_INTERNAL_IP=$LB_PUBLIC_IP + fi + sed -e "/Mobicents Load Balancer/a\ + ## lb-configuration ##\n\ + gov.nist.javax.sip.PATCH_SIP_WEBSOCKETS_HEADERS=false\n\ + org.mobicents.ha.javax.sip.REACHABLE_CHECK=false\n\ + org.mobicents.ha.javax.sip.LoadBalancerHeartBeatingServiceClassName=org.mobicents.ha.javax.sip.MultiNetworkLoadBalancerHeartBeatingServiceImpl\n\ + ## lb-configuration ##" $lb_sipstack_file > $lb_sipstack_file.bak + + mv $lb_sipstack_file.bak $lb_sipstack_file + echo 'Load Balancer has been activated and mss-sip-stack.properties file updated' + fi +} + +## MAIN +configSipStack + + diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-logs.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-logs.sh new file mode 100755 index 0000000000..5eb9ee7934 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-logs.sh @@ -0,0 +1,81 @@ +#!/bin/bash +## +## Description: Configures RestComm && RMS logs level +## Authos: Lefteris Banos (eleftherios.banos@telestax.com) + +# VARIABLES +RESTCOMM_BIN=$RESTCOMM_HOME/bin +RESTCOMM_CONF=$RESTCOMM_HOME/standalone/configuration + + +check_if_logger_exist(){ +FILE=$RESTCOMM_CONF/standalone-sip.xml + #delete additional bindings if any added to erlier run of the script. + echo + if grep -q "${1}" $FILE + then + echo "Logger exist" + else + echo "Need to add logger ${1}" + sed -i "//i \\n\\n" $FILE + fi + +} + +configure_RC_component_log(){ + check_if_logger_exist $1 + sed -i "// {N; s///}" $RESTCOMM_CONF/standalone-sip.xml +} + +configure_RC_logs(){ + sed -i "/ / { + N; s||| + }" $RESTCOMM_CONF/standalone-sip.xml +} + +config_on_thefly(){ + FILE=$RESTCOMM_BIN/restcomm/set-log-level.sh + MNGMTPORT=$((9999 + PORT_OFFSET)) + sed -i "s|jboss-cli.sh --connect controller=.*|jboss-cli.sh --connect controller=$BIND_ADDRESS:${MNGMTPORT} --file=\"\$CLIFILE\"|" $FILE +} + +config_AKKA_logs(){ + FILE=$RESTCOMM_HOME/standalone/deployments/restcomm.war/WEB-INF/classes/application.conf + echo "Update AKKA log level to ${AKKA_LOG_LEVEL}" + sed -i "s|loglevel = \".*\"|loglevel = \"${AKKA_LOG_LEVEL}\"|" $FILE + sed -i "s|stdout-loglevel = \".*\"|stdout-loglevel = \"${AKKA_LOG_LEVEL}\"|" $FILE +} + + +#MAIN +if [ -n "$LOG_LEVEL" ]; then + configure_RC_logs + config_on_thefly + config_AKKA_logs + for i in $( set -o posix ; set | grep ^LOG_LEVEL_COMPONENT_ | sort -rn ); do + component=$(echo ${i} | cut -d = -f1 | cut -d _ -f4 ) + level=$(echo ${i} | cut -d = -f2) + case "$component" in + SIPSERVLET) + COMPONENT=org.mobicents.servlet.sip + ;; + GOVNIST) + COMPONENT=gov.nist + ;; + SIPRESTCOMM) + COMPONENT=org.mobicents.servlet.sip.restcomm + ;; + RESTCOMM) + COMPONENT=org.restcomm.connect + ;; + *) + echo "$component not possible to configure need to add it." + continue + esac + + echo "Configuring log level for: $component -> $level" + configure_RC_component_log "$COMPONENT" "$level" + done + fi + + diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-mysql.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-mysql.sh new file mode 100755 index 0000000000..7478e55e88 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-mysql.sh @@ -0,0 +1,249 @@ +#!/bin/bash +## Description: Enables and configures MySQL datasource +## Params: +## 1. RESTCOMM_VERSION +## Author: Henrique Rosa +## Author: Lefteris Banos + +# VARIABLES +RESTCOMM_DEPLOY=$RESTCOMM_HOME/standalone/deployments/restcomm.war + + +creteMysqlDataSource(){ + if [ -z "$RESTCOMM_HOME" ]; then + echo "RESTCOMM_HOME is not defined. Please setup this environment variable and try again." + exit 1 + fi + + # Variables + MYSQLDB_MODULE=$RESTCOMM_HOME/modules/system/layers/base/com/mysql/main + STANDALONE_SIP=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml + + # Download and install MariaDB driver as a JBoss module + mkdir -p $MYSQLDB_MODULE + if [ ! -f $MYSQLDB_MODULE/mysql-connector-java-5.1.36.jar ]; then + echo "Mysql driver not found!" + wget http://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.36/mysql-connector-java-5.1.36.jar -O /tmp/mysql-connector-java-5.1.36.jar + cp /tmp/mysql-connector-java-5.1.36.jar $MYSQLDB_MODULE + rm -f /tmp/mysql-connector-java-5.1.36.jar + else + echo "Mysql driver already downloaded" + fi + + +cat > $MYSQLDB_MODULE/module.xml << 'EOF' + + + + + + + + + + +EOF + +query=$(grep -q 'driver name=\"com.mysql\"' $STANDALONE_SIP) +if [ $? -eq 0 ]; then + echo "Datasource already populated" +else + echo "Going to populate the datasource" + + if [ -n "$MYSQL_SNDHOST" ]; then + # Update JBoss configuration to create a MariaDB datasource + sed -e '// a\ + \ \ + \ com.mysql.jdbc.Driver\ + \ com.mysql.jdbc.jdbc2.optional.MysqlXADataSource\ + \ ' \ + -e '// a\ + \ \ + \ jdbc:mysql://localhost:3306/restcomm \ + \ | \ + \ false \ + \ com.mysql \ + \ com.mysql.jdbc.Driver \ + \ TRANSACTION_READ_COMMITTED \ + \ \ + \ 5 \ + \ 50 \ + \ \ + \ \ + \ username \ + \ password \ + \ \ + \ \ + \ 100 \ + \ \ + \ \ + \ \ + \ true \ + \ \ + \ \ + \ select 1 \ + \ \ + \ ' $STANDALONE_SIP > $STANDALONE_SIP.bak + mv $STANDALONE_SIP.bak $STANDALONE_SIP + + else + # Update JBoss configuration to create a MariaDB datasource + sed -e '// a\ + \ \ + \ com.mysql.jdbc.Driver\ + \ com.mysql.jdbc.jdbc2.optional.MysqlXADataSource\ + \ ' \ + -e '// a\ + \ \ + \ jdbc:mysql://localhost:3306/restcomm \ + \ com.mysql \ + \ TRANSACTION_READ_COMMITTED \ + \ \ + \ 100 \ + \ 200 \ + \ \ + \ \ + \ username \ + \ password \ + \ \ + \ \ + \ 100 \ + \ \ + \ \ + \ ' $STANDALONE_SIP > $STANDALONE_SIP.bak + mv $STANDALONE_SIP.bak $STANDALONE_SIP + fi +fi +} + +## Description: Configures MyBatis for MySQL +## Parameters : none +configMybatis() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/mybatis.xml + + grep -q '' $FILE || sed -i '// a \ + \ \ + \ \ + \ \ + \ \ + \ \ + \ \ + ' $FILE + + sed -e '// s|default=".*"|default="mysql"|' $FILE > $FILE.bak + mv $FILE.bak $FILE + echo 'Activated mybatis environment for MySQL'; +} + +configureMySQLDataSource() { + FILE=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml + + if [ -n "$5" ]; then + #DB failover configuration. + sed -e "s|.*|jdbc:mysql://$1:3306/$4\|jdbc:mysql://$5:3306/$4|g" $FILE > $FILE.bak + else + # Update DataSource + sed -e "s|.*|jdbc:mysql://$1:3306/$4|g" $FILE > $FILE.bak + fi + mv $FILE.bak $FILE + sed -e "s|.*|$2|g" $FILE > $FILE.bak + mv $FILE.bak $FILE + sed -e "s|.*|$3|g" $FILE > $FILE.bak + mv $FILE.bak $FILE + echo 'Updated MySQL DataSource Configuration' +} + +## Description: Enables MySQL Datasource while disabling the remaining +## Parameters : none +enableDataSource() { + FILE=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml + + # Disable all datasources but MySQL + sed -e '/ $FILE.bak + + mv $FILE.bak $FILE + echo 'Enabled MySQL datasource' +} + +## Description: Configures RestComm DAO manager to use MySQL +## Params: none +configDaoManager() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/dao-manager.xml + + sed -e "s|.*||g" $FILE > $FILE.bak + mv $FILE.bak $FILE + sed -e "s|.*|\${restcomm:home}/WEB-INF/scripts/mariadb/sql|g" $FILE > $FILE.bak + mv $FILE.bak $FILE + + echo 'Configured MySQL Dao Manager for MySQL' +} + +## Description: Set Password for Adminitrator@company.com user. Only for fresh installation. +initUserPassword(){ + SQL_FILE=$RESTCOMM_DEPLOY/WEB-INF/scripts/mariadb/init.sql + if [ -n "$INITIAL_ADMIN_USER" ]; then + # change admin user + if grep -q "uninitialized" $SQL_FILE; then + echo "Update Admin user" + sed -i "s/administrator@company.com/${INITIAL_ADMIN_USER}/g" $SQL_FILE + else + echo "Adminitrator User Already changed" + fi + fi + + if [ -n "$INITIAL_ADMIN_PASSWORD" ]; then + echo "change admin password" + if grep -q "uninitialized" $SQL_FILE; then + PASSWORD_ENCRYPTED=`echo -n "${INITIAL_ADMIN_PASSWORD}" | md5sum |cut -d " " -f1` + #echo "Update password to ${INITIAL_ADMIN_PASSWORD}($PASSWORD_ENCRYPTED)" + sed -i "s/uninitialized/active/g" $SQL_FILE + sed -i "s/77f8c12cc7b8f8423e5c38b035249166/$PASSWORD_ENCRYPTED/g" $SQL_FILE + sed -i 's/Date("2012-04-24")/now()/' $SQL_FILE + sed -i 's/Date("2012-04-24")/now()/' $SQL_FILE + # end + else + echo "Adminitrator Password Already changed" + fi + fi +} + +## Description: populated DB with necessary starting point data if not done. +populateDB(){ + #Change script to defined schema + echo "Use RestComm Database:$MYSQL_SCHEMA " + sed -i "s|CREATE DATABASE IF NOT EXISTS .*| CREATE DATABASE IF NOT EXISTS ${MYSQL_SCHEMA};|" $RESTCOMM_DEPLOY/WEB-INF/scripts/mariadb/init.sql + sed -i "s|USE .*|USE ${MYSQL_SCHEMA};|" $RESTCOMM_DEPLOY/WEB-INF/scripts/mariadb/init.sql + + if mysql -u $2 -p$3 -h $1 -e "SELECT * FROM \`$4\`.restcomm_clients;" &>/dev/null ; then + # Update config settings + echo "Database already populated" + else + echo "Database not populated, importing schema and updating config file" + FILE=$RESTCOMM_DEPLOY/WEB-INF/scripts/mariadb/init.sql + mysql -u $2 -p$3 -h $1 < $FILE + mysql -u $2 -p$3 -h $1 --execute='show databases;' + mysql -u $2 -p$3 -h $1 --execute='show tables;' $4; + echo "Database population done" + fi +} + +# MAIN +if [[ "$ENABLE_MYSQL" == "true" || "$ENABLE_MYSQL" == "TRUE" ]]; then + if [[ -z $MYSQL_HOST || -z $MYSQL_USER || -z $MYSQL_PASSWORD || -z $MYSQL_SCHEMA ]]; then + echo 'one or more variables are undefined' + echo 'Not possible to continue with Mysql configuration' + exit 1 + else + echo "Configuring MySQL datasource... $MYSQL_HOST $MYSQL_SCHEMA $MYSQL_USER $MYSQL_SNDHOST" + creteMysqlDataSource + enableDataSource + configMybatis + configDaoManager + configureMySQLDataSource $MYSQL_HOST $MYSQL_USER $MYSQL_PASSWORD $MYSQL_SCHEMA $MYSQL_SNDHOST + initUserPassword + populateDB $MYSQL_HOST $MYSQL_USER $MYSQL_PASSWORD $MYSQL_SCHEMA + echo 'Finished configuring MySQL datasource!' + fi +fi \ No newline at end of file diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-olympus.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-olympus.sh new file mode 100755 index 0000000000..24f3f93115 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-olympus.sh @@ -0,0 +1,46 @@ +#!/bin/bash +## +## Description: Configures RestComm +## Author: Lefteris Banos (eleftherios.banos@telestax.com) +## + +BASEDIR=$RESTCOMM_HOME + +if [ ! -d "$BASEDIR/standalone/deployments/olympus.war" ]; then + mkdir $BASEDIR/standalone/deployments/olympus-exploded.war + unzip -q $BASEDIR/standalone/deployments/olympus.war -d $BASEDIR/standalone/deployments/olympus-exploded.war/ + rm -f $BASEDIR/standalone/deployments/olympus.war + mv -f $BASEDIR/standalone/deployments/olympus-exploded.war $BASEDIR/standalone/deployments/olympus.war +fi + +# Set Olympus ports +olympusPortConf(){ +FILE=$BASEDIR/standalone/deployments/olympus.war/resources/xml/olympus.xml + +# Check for Port Offset + local SIP_PORT_WS=$((SIP_PORT_WS + PORT_OFFSET)) + local SIP_PORT_WSS=$((SIP_PORT_WSS + PORT_OFFSET)) + + if [ -z "$SECURESSL" ] || [ "$SECURESSL" == "false" ] || [ "$SECURESSL" == "FALSE" ]; then + xmlstarlet ed -L -P -u "/olympus/server/@secure" -v "false" $FILE + else + xmlstarlet ed -L -P -u "/olympus/server/@secure" -v "true" $FILE + fi + + if [ "$ACTIVATE_LB" == "true" ] || [ "$ACTIVATE_LB" == "TRUE" ]; then + xmlstarlet ed -L -P -u "/olympus/server/port" -v ${LB_EXTERNAL_PORT_WS} $FILE + xmlstarlet ed -L -P -u "/olympus/server/secure-port" -v ${LB_EXTERNAL_PORT_WSS} $FILE + else + xmlstarlet ed -L -P -u "/olympus/server/port" -v ${SIP_PORT_WS} $FILE + xmlstarlet ed -L -P -u "/olympus/server/secure-port" -v ${SIP_PORT_WSS} $FILE + fi + +} + + + + +# MAIN +echo 'Configuring Olympus...' +#Reload Variables +olympusPortConf diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-restcomm.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-restcomm.sh new file mode 100755 index 0000000000..92397c287e --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-restcomm.sh @@ -0,0 +1,893 @@ +#!/bin/bash +## +## Description: Configures RestComm +## Author: Henrique Rosa (henrique.rosa@telestax.com) +## Author: Pavel Slegr (pavel.slegr@telestax.com) +## Author: Maria Farooq (maria.farooq@telestax.com) +## + +# VARIABLES +RESTCOMM_BIN=$RESTCOMM_HOME/bin +RESTCOMM_DARS=$RESTCOMM_HOME/standalone/configuration/dars +RESTCOMM_CONF=$RESTCOMM_HOME/standalone/configuration +RESTCOMM_DEPLOY=$RESTCOMM_HOME/standalone/deployments/restcomm.war +RVD_DEPLOY_PATH=$RESTCOMM_HOME/standalone/deployments/restcomm-rvd.war + +## FUNCTIONS + +## Description: Configures Java Options for Application Server +## Parameters : none +configRCJavaOpts() { + FILE=$RESTCOMM_BIN/standalone.conf + echo "RestComm java options with: $RC_JAVA_OPTS" + sed -e "/if \[ \"x\$JAVA_OPTS\" = \"x\" \]; then/ { + N; s|JAVA_OPTS=.*|JAVA_OPTS=\"$RC_JAVA_OPTS\"| + }" $FILE > $FILE.bak + mv $FILE.bak $FILE +} + +## Description: Updates RestComm configuration file +## Parameters : 1.STATIC_ADDRESS +configRestcomm() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + static_address="$1" + + sed -i "s|<\!--.*.*<\/external-ip>.*-->|$static_address<\/external-ip>|" $FILE + sed -i "s|.*<\/external-ip>|$static_address<\/external-ip>|" $FILE + + sed -i "s||$static_address<\/external-ip>|" $FILE + + echo 'Updated RestComm configuration' + + #If "STRICT" no self-signed certificate is permitted. + if [ "$SSL_MODE" == "strict" ] || [ "$SSL_MODE" == "STRICT" ]; then + sed -e "s/.*<\/ssl-mode>/strict<\/ssl-mode>/g;s//strict<\/ssl-mode>/g" $FILE > $FILE.bak + mv $FILE.bak $FILE + else + sed -e "s/.*<\/ssl-mode>/allowall<\/ssl-mode>/g;s//allowall<\/ssl-mode>/g" $FILE > $FILE.bak + mv $FILE.bak $FILE + fi + + #Configure RESTCOMM_HOSTNAME at restcomm.xml. If not set "STATIC_ADDRESS" will be used. + if [ -n "$RESTCOMM_HOSTNAME" ]; then + echo "HOSTNAME $RESTCOMM_HOSTNAME" + + sed -i "s|.*<\/hostname>|${RESTCOMM_HOSTNAME}<\/hostname>|" $RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i "s||${RESTCOMM_HOSTNAME}<\/hostname>|" $RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + if ! grep "${BIND_ADDRESS}.*${RESTCOMM_HOSTNAME}" /etc/hosts ; then + if hash host 2>/dev/null; then + if ! host ${RESTCOMM_HOSTNAME} > /dev/null + then + echo "${BIND_ADDRESS} ${RESTCOMM_HOSTNAME}" >> /etc/hosts + fi + else + echo "INFO: \"host\" programm does not exist ('dnsutils' package) please make sure that used hostname has a valid DNS resolution." + echo "INFO:IF not add the necessary hostname Ip resolution at /etc/hosts file: e.g echo RestC0mm_BIND_IP RESTCOMM_HOSTNAME >> /etc/hosts " + fi +fi + else + sed -i "s|.*<\/hostname>|${PUBLIC_IP}<\/hostname>|" $RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i "s||${PUBLIC_IP}<\/hostname>|" $RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + fi +} +## Description: OutBoundProxy configuration. +configOutboundProxy(){ + echo "Configure outbound-proxy" + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i "s|.*<\/outbound-proxy-uri>|$OUTBOUND_PROXY<\/outbound-proxy-uri>|" $FILE + sed -i "s|.*<\/outbound-proxy-user>|$OUTBOUND_PROXY_USERNAME<\/outbound-proxy-user>|" $FILE + sed -i "s|.*<\/outbound-proxy-password>|$OUTBOUND_PROXY_PASSWORD<\/outbound-proxy-password>|" $FILE + + sed -i "s||$OUTBOUND_PROXY<\/outbound-proxy-uri>|" $FILE + sed -i "s||$OUTBOUND_PROXY_USERNAME<\/outbound-proxy-user>|" $FILE + sed -i "s||$OUTBOUND_PROXY_PASSWORD<\/outbound-proxy-password>|" $FILE +} +## Description: Push notification server configuration. +configPushNotificationServer() { + echo "Configure push-notification-server" + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + sed -i "s|.*<\/push-notification-server-enabled>|$PUSH_NOTIFICATION_SERVER_ENABLED<\/push-notification-server-enabled>|" $FILE + sed -i "s|.*<\/push-notification-server-url>|$PUSH_NOTIFICATION_SERVER_URL<\/push-notification-server-url>|;" $FILE + sed -i "s|.*<\/push-notification-server-delay>|$PUSH_NOTIFICATION_SERVER_DELAY<\/push-notification-server-delay>|" $FILE + + sed -i "s||$PUSH_NOTIFICATION_SERVER_ENABLED<\/push-notification-server-enabled>|" $FILE + sed -i "s||$PUSH_NOTIFICATION_SERVER_URL<\/push-notification-server-url>|" $FILE + sed -i "s||$PUSH_NOTIFICATION_SERVER_DELAY<\/push-notification-server-delay>|" $FILE +} +## Description: Configures Voip Innovations Credentials +## Parameters : 1.Login +## 2.Password +## 3.Endpoint +configVoipInnovations() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + N; s|.*|$3| + }" $FILE + + sed -i "// { + N; s||$1| + N; s||$2| + N; s||$3| + }" $FILE + + echo 'Configured Voip Innovation credentials' +} + +## Description: PROVISION MANAGER configuration. +# MANAGERS : VI (Voip innovations),NX (nexmo),VB (Voxbone), BW(Bandwidth). +configDidProvisionManager() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + if [[ "$PROVISION_PROVIDER" == "VI" || "$PROVISION_PROVIDER" == "vi" ]]; then + sed -e "s|phone-number-provisioning class=\".*\"|phone-number-provisioning class=\"org.restcomm.connect.provisioning.number.vi.VoIPInnovationsNumberProvisioningManager\"|" $FILE > $FILE.bak + + mv $FILE.bak $FILE + + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + N; s|.*|$3| + }" $FILE + + sed -i "// { + N; s||$1| + N; s||$2| + N; s||$3| + }" $FILE + + sed -i "s|.*<\/outboudproxy-user-at-from-header>|"false"<\/outboudproxy-user-at-from-header>|" $FILE + sed -i "s||"false"<\/outboudproxy-user-at-from-header>|" $FILE + echo 'Configured Voip Innovation credentials' + else + if [[ "$PROVISION_PROVIDER" == "BW" || "$PROVISION_PROVIDER" == "bw" ]]; then + sed -e "s|phone-number-provisioning class=\".*\"|phone-number-provisioning class=\"org.restcomm.connect.provisioning.number.bandwidth.BandwidthNumberProvisioningManager\"|" $FILE > $FILE.bak + + mv $FILE.bak $FILE + + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + N; s|.*|$6| + N; s|.*|$4| + }" $FILE + + sed -i "// { + N; s||$1| + N; s||$2| + N; s||$6| + N; s||$4| + }" $FILE + + sed -i "s|.*<\/outboudproxy-user-at-from-header>|"false"<\/outboudproxy-user-at-from-header>|" $FILE + sed -i "s||"false"<\/outboudproxy-user-at-from-header>|" $FILE + echo 'Configured Bandwidth credentials' + else + if [[ "$PROVISION_PROVIDER" == "NX" || "$PROVISION_PROVIDER" == "nx" ]]; then + echo "Nexmo PROVISION_PROVIDER" + sed -i "s|phone-number-provisioning class=\".*\"|phone-number-provisioning class=\"org.restcomm.connect.provisioning.number.nexmo.NexmoPhoneNumberProvisioningManager\"|" $FILE + + if [[ -z "$8" ]]; then + sed -i "// { + N; s||| + N; s||| + N; s||| + N; s||| + }" $FILE + else + sed -i "// { + N; s||| + N; s||| + N; s||| + N; s||| + }" $FILE + fi + + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + N + N; s|.*|$7| + }" $FILE + + sed -i "// { + N; s||$1| + N; s||$2| + N + N; s||$7| + }" $FILE + + sed -i "s|.*<\/outboudproxy-user-at-from-header>|"true"<\/outboudproxy-user-at-from-header>|" $FILE + sed -i "s||"true"<\/outboudproxy-user-at-from-header>|" $FILE + + else + if [[ "$PROVISION_PROVIDER" == "VB" || "$PROVISION_PROVIDER" == "vb" ]]; then + echo "Voxbone PROVISION_PROVIDER" + sed -i "s|phone-number-provisioning class=\".*\"|phone-number-provisioning class=\"org.restcomm.connect.provisioning.number.voxbone.VoxbonePhoneNumberProvisioningManager\"|" $FILE + + sed -i "// { + N; s||| + N; s||| + N; s||| + N; s||| + }" $FILE + + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + }" $FILE + sed -i "// { + N; s||$1| + N; s||$2| + }" $FILE + sed -i "s|.*<\/outboudproxy-user-at-from-header>|"false"<\/outboudproxy-user-at-from-header>|" $FILE + sed -i "s||"false"<\/outboudproxy-user-at-from-header>|" $FILE + + fi + fi + fi + fi +} + +## Description: Configures Fax Service Credentials +## Parameters : 1.Username +## 2.Password +configFaxService() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + }" $FILE + + sed -i "// { + N; s||$1| + N; s||$2| + }" $FILE + + echo 'Configured Fax Service credentials' +} + +## Description: Configures Sms Aggregator +## Parameters : 1.Outbound endpoint IP +## +configSmsAggregator() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + sed -i "// { + N; s|.*|$2| + N; s|.*|$1| + }" $FILE + + sed -i "// { + N; s||$2| + N; s||$1| + }" $FILE + echo "Configured Sms Aggregator using OUTBOUND PROXY $1" +} + +## Description: Configures Speech Recognizer +## Parameters : 1.iSpeech Key +configSpeechRecognizer() { + if [ -n "$ISPEECH_KEY" ]; then + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + sed -i "// { + N; s||$1| + }" $FILE + + sed -i "// { + N; s||$1| + }" $FILE + + echo 'Configured the Speech Recognizer' + fi +} + +## Description: Configures available speech synthesizers +## Parameters : none +configSpeechSynthesizers() { + if [[ "$TTSSYSTEM" == "voicerss" ]]; then + configVoiceRSS $VOICERSS_KEY + + elif [[ "$TTSSYSTEM" == "awspolly" ]]; then + configAWSPolly $AWS_ACCESS_KEY $AWS_SECRET_KEY $AWS_REGION + + else + configAcapela $ACAPELA_APPLICATION $ACAPELA_LOGIN $ACAPELA_PASSWORD + fi +} + +## Description: Configures Acapela Speech Synthesizer +## Parameters : 1.Application Code +## 2.Login +## 3.Password +configAcapela() { + if [[ -z $ACAPELA_APPLICATION || -z $ACAPELA_LOGIN || -z $ACAPELA_PASSWORD ]]; then + echo '!Please make sure that all necessary settings for acapela are set!' + else + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i 's|||' $FILE + + sed -i "// { + N + N; s|.*|$1| + N; s|.*|$2| + N; s|.*|$3| + }" $FILE + + sed -i "// { + N + N; s||$1| + N; s||$2| + N; s||$3| + }" $FILE + + echo 'Configured Acapela Speech Synthesizer' + fi +} + + +## Description: Configures VoiceRSS Speech Synthesizer +## Parameters : 1.API key +configVoiceRSS() { + if [ -n "$VOICERSS_KEY" ]; then + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i 's|||' $FILE + + sed -i "/http:\/\/api.voicerss.org<\/service-root>/ { + N; s|.*|$1| + }" $FILE + + sed -i "/http:\/\/api.voicerss.org<\/service-root>/ { + N; s||$1| + }" $FILE + + echo 'Configured VoiceRSS Speech Synthesizer' + + else + echo 'Please set KEY for VoiceRSS TTS' + fi +} + +## Description: Configures AWS Polly Speech Synthesizer +## Parameters : 1.AWS Access Key +## 2.AWS Secret key +## 3.AWS Region +configAWSPolly() { + if [[ -z $AWS_ACCESS_KEY || -z $AWS_SECRET_KEY || -z $AWS_REGION ]]; then + echo '!Please make sure that all necessary settings for AWS Polly are set!' + else + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i 's|||' $FILE + + sed -i "// { + N + N; s|.*|$1| + N; s|.*|$2| + N; s|.*|$3| + }" $FILE + + sed -i "// { + N + N; s||$1| + N; s||$2| + N; s||$3| + }" $FILE + + echo 'Configured AWS Polly Speech Synthesizer' + fi +} + +## Description: Updates RestComm DARS properties for RestComm +## Parameters : none +configDARSProperties() { + FILE=$RESTCOMM_DARS/mobicents-dar.properties + sed -e 's|^ALL=.*|ALL=("RestComm", "DAR\:From", "NEUTRAL", "", "NO_ROUTE", "0")|' $FILE > $FILE.bak + mv $FILE.bak $FILE + echo "Updated mobicents-dar properties" +} + +## Description: Configures TeleStax Proxy +## Parameters : 1.Enabled +## 2.login +## 3.password +## 4.Endpoint +## 5.Proxy IP +configTelestaxProxy() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + enabled="$1" + if [ "$enabled" == "true" ] || [ "$enabled" == "TRUE" ]; then + sed -i "// { + N; s|.*|$1| + N; s|.*|$2| + N; s|.*|$3| + N; s|.*|$4| + N; s|.*|$6| + N; s|.*|http:\/\/$5:2080| + }" $FILE + + sed -i "// { + N; s||$1| + N; s||$2| + N; s||$3| + N; s||$4| + N; s||$6| + N; s||http:\/\/$5:2080| + }" $FILE + + echo 'Enabled TeleStax Proxy' + else + sed -i "// { + N; s|.*|false| + N; s|.*|| + N; s|.*|| + N; s|.*|| + N; s|.*|| + N; s|.*|http:\/\/127.0.0.1:2080| + }" $FILE + + sed -i "// { + N; s||false| + N; s||| + N; s||| + N; s||| + N; s||| + N; s||http:\/\/127.0.0.1:2080| + }" $FILE + + echo 'Disabled TeleStax Proxy' + fi +} + + +## Description: Configures Media Server Manager +## Parameters : 1.Enabled +## 2.private IP +## 3.public IP + +configMediaServerManager() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + bind_address="$1" + ms_address="$2" + ms_external_address="$3" + + #Check for Por Offset + local LOCALMGCP=$((LOCALMGCP + PORT_OFFSET)) + local REMOTEMGCP=$((REMOTEMGCP + PORT_OFFSET)) + + sed -e "s/.*<\/local-address>/$bind_address<\/local-address>/g;s//$bind_address<\/local-address>/g" \ + -e "s/.*<\/local-port>/$LOCALMGCP<\/local-port>/g;s//$LOCALMGCP<\/local-port>/g" \ + -e "s/.*<\/remote-address>/$ms_address<\/remote-address>/g;s//$ms_address<\/remote-address>/g" \ + -e "s/.*<\/remote-port>/$REMOTEMGCP<\/remote-port>/g;s//$REMOTEMGCP<\/remote-port>/g" \ + -e "s/.*<\/response-timeout>/$MGCP_RESPONSE_TIMEOUT<\/response-timeout>/g;s//$MGCP_RESPONSE_TIMEOUT<\/response-timeout>/g" \ + -e "s/<\!--.*.*<\/external-address>.*-->/$ms_external_address<\/external-address>/g;" \ + -e "s/.*<\/external-address>/$ms_external_address<\/external-address>/g;s//$ms_external_address<\/external-address>/g" $FILE > $FILE.bak + + mv $FILE.bak $FILE + echo 'Configured Media Server Manager' +} + +## Description: Configures SMPP Account Details +## Parameters : 1.activate +## 2.systemID +## 3.password +## 4.systemType +## 5.peerIP +## 6.peerPort +## 7.sourceMap +## 8.destinationMap + +configSMPPAccount() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + activate="$1" + systemID="$2" + password="$3" + systemType="$4" + peerIP="$5" + peerPort="$6" + sourceMap="$7" + destinationMap="$8" + + + sed -i "s|||g" $FILE + #Add sourceMap && destinationMap + + + if [ "$activate" == "true" ] || [ "$activate" == "TRUE" ]; then + sed -i "/.*|$systemID| + N; s|.*|$peerIP| + N; s|.*|$peerPort| + N + N + N; s|.*|$password| + N; s|.*|$systemType| + }" $FILE + + sed -i "/$systemID| + N; s||$peerIP| + N; s||$peerPort| + N + N + N; s||$password| + N; s||$systemType| + }" $FILE + + sed -i "s|||" $FILE + echo 'Configured SMPP Account Details' + + else + sed -i "/.*|| + N; s|.*|| + N; s|.*|| + N + N + N; s|.*|| + N; s|.*|| + }" $FILE + + sed -i "/|| + N; s||| + N; s||| + N + N + N; s||| + N; s||| + }" $FILE + + sed -i "s|||" $FILE + echo 'Configured SMPP Account Details' + fi +} + +## Description: Configures RestComm "prompts & cache" URIs +#Mostly used for external MS. +configRestCommURIs() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + #check for port offset + local HTTP_PORT=$((HTTP_PORT + PORT_OFFSET)) + local HTTPS_PORT=$((HTTPS_PORT + PORT_OFFSET)) + + if [ -n "$MS_ADDRESS" ] && [ "$MS_ADDRESS" != "$BIND_ADDRESS" ]; then + if [ "$DISABLE_HTTP" = "true" ]; then + PORT="$HTTPS_PORT" + SCHEME='https' + else + PORT="$HTTP_PORT" + SCHEME='http' + fi + + # STATIC_ADDRESS will be populated by user or script before + REMOTE_ADDRESS="${SCHEME}://${PUBLIC_IP}:${PORT}" + + sed -i "s|.*|$REMOTE_ADDRESS/restcomm/audio<\/prompts-uri>|" $FILE + sed -i "s|.*/cache-uri>|$REMOTE_ADDRESS/restcomm/cache|" $FILE + sed -i "s|.*|$REMOTE_ADDRESS/restcomm/errors|" $FILE + + sed -i "s||$REMOTE_ADDRESS/restcomm/audio<\/prompts-uri>|" $FILE + sed -i "s||$REMOTE_ADDRESS/restcomm/cache|" $FILE + sed -i "s||$REMOTE_ADDRESS/restcomm/errors|" $FILE + + echo "Updated prompts-uri cache-uri error-dictionary-uri External MSaddress for " + fi + echo 'Configured RestCommURIs' +} + +## Description: Specify the path where Recordings are saved. +updateRecordingsPath() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + if [ -n "$RECORDINGS_PATH" ]; then + sed -i "s|.*|file://${RECORDINGS_PATH}<\/recordings-path>|" $FILE + sed -i "s||file://${RECORDINGS_PATH}<\/recordings-path>|" $FILE + echo "Updated RECORDINGS_PATH " + + else + sed -i "s|.*|file://\${restcomm:home}/recordings<\/recordings-path>|" $FILE + sed -i "s||file://\${restcomm:home}/recordings<\/recordings-path>|" $FILE + fi + echo 'Configured Recordings path' +} + +## Description: Specify HTTP/S ports used. +#Needed when port offset is set. +configHypertextPort(){ + MSSFILE=$RESTCOMM_CONF/mss-sip-stack.properties + + #Check for Por Offset + local HTTP_PORT=$((HTTP_PORT + PORT_OFFSET)) + local HTTPS_PORT=$((HTTPS_PORT + PORT_OFFSET)) + + sed -e "s|org.mobicents.ha.javax.sip.LOCAL_HTTP_PORT=.*|org.mobicents.ha.javax.sip.LOCAL_HTTP_PORT=$HTTP_PORT|" \ + -e "s|org.mobicents.ha.javax.sip.LOCAL_SSL_PORT=.*|org.mobicents.ha.javax.sip.LOCAL_SSL_PORT=$HTTPS_PORT|" $MSSFILE > $MSSFILE.bak + mv $MSSFILE.bak $MSSFILE + echo "Configured HTTP ports" +} + +## Description: Other single configuration +#enable/disable SSLSNI (default:false) +otherRestCommConf(){ + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -e "s/.*<\/play-music-for-conference>/${PLAY_WAIT_MUSIC}<\/play-music-for-conference>/g;s//${PLAY_WAIT_MUSIC}<\/play-music-for-conference>/g" $FILE > $FILE.bak + mv $FILE.bak $FILE + + #Remove if is set in earlier run. + grep -q 'allowLegacyHelloMessages' $RESTCOMM_BIN/standalone.conf && sed -i -E "s/(.*)( -Dsun.security.ssl.allowLegacyHelloMessages=false -Djsse.enableSNIExtension=)(true|false)(.*)/\1\4/" $RESTCOMM_BIN/standalone.conf + + if [[ "$SSLSNI" == "false" || "$SSLSNI" == "FALSE" ]]; then + sed -i "s|-Djava.awt.headless=true|& -Dsun.security.ssl.allowLegacyHelloMessages=false -Djsse.enableSNIExtension=false|" $RESTCOMM_BIN/standalone.conf + else + sed -i "s|-Djava.awt.headless=true|& -Dsun.security.ssl.allowLegacyHelloMessages=false -Djsse.enableSNIExtension=true|" $RESTCOMM_BIN/standalone.conf + fi + + if [ -n "$HSQL_DIR" ]; then + echo "HSQL_DIR $HSQL_DIR" + FILEDB=$HSQL_DIR/restcomm.script + sed -i "s|.*|${HSQL_DIR}|" $FILE + if [ ! -f $FILEDB ]; then + mkdir -p $HSQL_DIR + cp $RESTCOMM_DEPLOY/WEB-INF/data/hsql/* $HSQL_DIR + fi + fi + + if [ -n "$USSDGATEWAYURI" ]; then + echo "USSD GATEWAY configuration" + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed -i "s|.*|$USSDGATEWAYURI|" $FILE + sed -i "s|.*|$USSDGATEWAYUSER|" $FILE + sed -i "s|.*|$USSDGATEWAYPASSWORD|" $FILE + + sed -i "s||$USSDGATEWAYURI|" $FILE + sed -i "s||$USSDGATEWAYUSER|" $FILE + sed -i "s||$USSDGATEWAYPASSWORD|" $FILE + fi + + echo "HTTP_RESPONSE_TIMEOUT $HTTP_RESPONSE_TIMEOUT" + sed -i"." "// { + N + N; + N; + N; + N; s|.*|$HTTP_RESPONSE_TIMEOUT| + }" $FILE + + sed -i"." "// { + N + N; + N; + N; + N; s||$HTTP_RESPONSE_TIMEOUT| + }" $FILE + + echo "CACHE_NO_WAV $CACHE_NO_WAV" + sed -i "s|.*|${CACHE_NO_WAV}|" $FILE + + echo "End Rest RestComm configuration" +} + +disableRVD() { + if [[ -f "$RVD_DEPLOY_PATH.deployed" || -f "$RVD_DEPLOY_PATH.dodeploy" ]]; then + rm -f "$RVD_DEPLOY_PATH.deployed" + rm -f "$RVD_DEPLOY_PATH.dodeploy" + echo "RVD undeployed (or not deployed at all)" + else + echo "RVD not deployed" + fi +} + +enableRVD() { + if [ -f "$RVD_DEPLOY_PATH.deployed" ]; then + echo "RVD already deployed" + else + touch "$RVD_DEPLOY_PATH".dodeploy + echo "RVD deployed" + fi +} + +confRVD(){ + if [[ "$RVD_UNDEPLOY" = true || "$RVD_UNDEPLOY" = True || "$RVD_UNDEPLOY" = TRUE ]]; then + disableRVD + else + enableRVD + echo "Configuring bundled RVD" + if [ -n "$RVD_LOCATION" ]; then + echo "RVD_LOCATION $RVD_LOCATION" + mkdir -p `echo $RVD_LOCATION` + sed -i "s|.*|${RVD_LOCATION}|" $RVD_DEPLOY_PATH/WEB-INF/rvd.xml + + COPYFLAG=$RVD_LOCATION/.demos_initialized + if [ -f "$COPYFLAG" ]; then + #Do nothing, we already copied the demo file to the new workspace + echo "RVD demo application are already copied" + else + echo "Will copy RVD demo applications to the new workspace $RVD_LOCATION" + cp -ar $RVD_DEPLOY_PATH/workspace/* $RVD_LOCATION + touch $COPYFLAG + fi + + fi + fi +} + +## Adds/removes / element based on $RVD_URL +## This version of confRcmlserver() will used xmlstarlet and will probably sed commands that rely on empty elements like instead of +#confRcmlserver(){ +# echo "Configuring ..." +# local RESTCOMM_XML=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml +# if [ -z "$RVD_URL" ]; then +# # remove / element altogether +# xmlstarlet ed -P -d "/restcomm/rcmlserver/base-url" "$RESTCOMM_XML" > "${RESTCOMM_XML}.bak" +# mv ${RESTCOMM_XML}.bak "$RESTCOMM_XML" +# else +# # remove existing element +# xmlstarlet ed -P -d /restcomm/rcmlserver/base-url "$RESTCOMM_XML" > "${RESTCOMM_XML}.bak" +# mv ${RESTCOMM_XML}.bak "$RESTCOMM_XML" +# # add it anew +# xmlstarlet ed -P -s /restcomm/rcmlserver -t elem -n base-url -v "$RVD_URL" "${RESTCOMM_XML}" > "${RESTCOMM_XML}.bak" +# mv "${RESTCOMM_XML}.bak" "$RESTCOMM_XML" +# fi +# echo " configured" +#} + +# Updates / according to $RVD_URL +# This version of confRcmlserver() used sed for backwards compatibility with existing sed commands in this +confRcmlserver() { + local RESTCOMM_XML=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + sed "//,/<\/rcmlserver>/ s|.*|${RVD_URL}|" "$RESTCOMM_XML" > "${RESTCOMM_XML}.bak" + mv ${RESTCOMM_XML}.bak "$RESTCOMM_XML" + echo "Configured . base-url set to '$RVD_URL'" +} + + +#Auto Configure RMS Networking, if MANUAL_SETUP=false. +configRMSNetworking() { + if [[ "$MANUAL_SETUP" == "false" || "$MANUAL_SETUP" == "FALSE" ]]; then + sed -i "s|BIND_ADDRESS=.*|BIND_ADDRESS=${BIND_ADDRESS}|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|MGCP_ADDRESS=.*|MGCP_ADDRESS=${BIND_ADDRESS}|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|NETWORK=.*|NETWORK=${BIND_NETWORK}|" $RESTCOMM_BIN/restcomm/mediaserver.conf + sed -i "s|SUBNET=.*|SUBNET=${BIND_SUBNET_MASK}|" $RESTCOMM_BIN/restcomm/mediaserver.conf + fi +} + +configAsrDriver() { + if [ ! -z "$MG_ASR_DRIVERS" ] && [ ! -z "$MG_ASR_DRIVER_DEFAULT" ]; then + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/mg-asr-drivers" \ + -s "/restcomm/runtime-settings" -t elem -n mg-asr-drivers \ + -i "/restcomm/runtime-settings/mg-asr-drivers" -t attr -n default -v "$MG_ASR_DRIVER_DEFAULT" \ + $FILE + for driverName in ${MG_ASR_DRIVERS//,/ }; do + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/mg-asr-drivers" -t elem -n "driver" -v "$driverName" \ + $FILE + done + fi +} + +## Description: DNS Provisioning Manager Configuration. +configDnsProvisioningManager() { + echo "Configure DnsProvisioningManager" + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/dns-provisioning" \ + -s "/restcomm/runtime-settings" -t elem -n dns-provisioning \ + -i "/restcomm/runtime-settings/dns-provisioning" -t attr -n class -v "$DNS_PROVISIONING_CLASS" \ + $FILE + + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/dns-provisioning" \ + -s "/restcomm/runtime-settings" -t elem -n dns-provisioning \ + -i "/restcomm/runtime-settings/dns-provisioning" -t attr -n enabled -v "$DNS_PROVISIONING_ENABLED" \ + $FILE + + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/dns-provisioning" \ + -s "/restcomm/runtime-settings" -t elem -n dns-provisioning \ + -i "/restcomm/runtime-settings/dns-provisioning" -t attr -n class -v "$DNS_PROVISIONING_CLASS" \ + $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning" -t attr -n "enabled" -v "$DNS_PROVISIONING_ENABLED" $FILE + + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/dns-provisioning/aws-route53" \ + -s "/restcomm/runtime-settings/dns-provisioning" -t elem -n aws-route53 $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "restcomm-a-record-value" -v "$DNS_PROVISIONING_AWS_ROUTE53_A_VALUE" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "restcomm-srv-record-value" -v "$DNS_PROVISIONING_AWS_ROUTE53_SRV_VALUE" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "access-key" -v "$DNS_PROVISIONING_AWS_ROUTE53_ACCESS_KEY" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "secret-key" -v "$DNS_PROVISIONING_AWS_ROUTE53_SECRET_KEY" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "region" -v "$DNS_PROVISIONING_AWS_ROUTE53_REGION" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "ttl" -v "$DNS_PROVISIONING_AWS_ROUTE53_TTL" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "hosted-zone-id" -v "$DNS_PROVISIONING_AWS_ROUTE53_HOSTED_ZONE_ID" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n "is-alias" -v "$DNS_PROVISIONING_AWS_ROUTE53_IS_ALIAS" $FILE + + + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/dns-provisioning/aws-route53/alias-target" \ + -s "/restcomm/runtime-settings/dns-provisioning/aws-route53" -t elem -n alias-target $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53/alias-target" -t elem -n "evaluate-target-health" -v "$DNS_PROVISIONING_AWS_ROUTE53_ALIAS_EVALUATE_TARGET_HEALTH" $FILE + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/dns-provisioning/aws-route53/alias-target" -t elem -n "hosted-zone-id" -v "$DNS_PROVISIONING_AWS_ROUTE53_ALIAS_HOSTED_ZONE_ID" $FILE + +} + +configConferenceTimeout(){ + echo "Configure conference timeout $CONFERENCE_TIMEOUT" + xmlstarlet ed --inplace -u "/restcomm/runtime-settings/conference-timeout" -v "$CONFERENCE_TIMEOUT" $FILE +} + +configSdrService(){ + xmlstarlet ed --inplace -d "/restcomm/runtime-settings/sdr-service" $FILE + if [ -n "$SDR_SERVICE_CLASS" ]; then + echo "Configure Sdr service" + xmlstarlet ed --inplace -s "/restcomm/runtime-settings" -t elem -n sdr-service \ + -i "/restcomm/runtime-settings/sdr-service" -t attr -n class -v "$SDR_SERVICE_CLASS" \ + $FILE + if [ -n "$SDR_SERVICE_HTTP_URI" ]; then + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/sdr-service" -t elem -n http-uri -v "$SDR_SERVICE_HTTP_URI" $FILE + fi + if [ -n "$SDR_SERVICE_AMQP_URI" ]; then + xmlstarlet ed --inplace -s "/restcomm/runtime-settings/sdr-service" -t elem -n amqp-uri -v "$SDR_SERVICE_AMQP_URI" $FILE + fi + fi +} + +# MAIN +echo 'Configuring RestComm...' +configRCJavaOpts +configDARSProperties +configRestcomm "$PUBLIC_IP" +#configVoipInnovations "$VI_LOGIN" "$VI_PASSWORD" "$VI_ENDPOINT" + +if [ "$ACTIVATE_LB" == "true" ] || [ "$ACTIVATE_LB" == "TRUE" ]; then + HOSTFORDID=$LBHOST +else + HOSTFORDID=$PUBLIC_IP + + #Check for port offset. + DID_URIPORT=$((DID_URIPORT + PORT_OFFSET)) +fi + +if [ -z "$MS_ADDRESS" ]; then + MS_ADDRESS=$BIND_ADDRESS +fi + +configDidProvisionManager "$DID_LOGIN" "$DID_PASSWORD" "$DID_ENDPOINT" "$DID_SITEID" "$HOSTFORDID" "$DID_ACCOUNTID" "$SMPP_SYSTEM_TYPE" "$DID_URIPORT" +configFaxService "$INTERFAX_USER" "$INTERFAX_PASSWORD" +configSmsAggregator "$SMS_OUTBOUND_PROXY" "$SMS_PREFIX" +configSpeechRecognizer "$ISPEECH_KEY" +configSpeechSynthesizers +configTelestaxProxy "$ACTIVE_PROXY" "$TP_LOGIN" "$TP_PASSWORD" "$INSTANCE_ID" "$PROXY_IP" "$SITE_ID" +configMediaServerManager "$BIND_ADDRESS" "$MS_ADDRESS" "$MEDIASERVER_EXTERNAL_ADDRESS" +configSMPPAccount "$SMPP_ACTIVATE" "$SMPP_SYSTEM_ID" "$SMPP_PASSWORD" "$SMPP_SYSTEM_TYPE" "$SMPP_PEER_IP" "$SMPP_PEER_PORT" "$SMPP_SOURCE_MAP" "$SMPP_DEST_MAP" +configRestCommURIs +updateRecordingsPath +configHypertextPort +configOutboundProxy +configPushNotificationServer +otherRestCommConf +confRcmlserver +confRVD +configRMSNetworking +configAsrDriver +configDnsProvisioningManager +configConferenceTimeout +configSdrService +echo 'Configured RestComm!' diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-rvd-logging.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-rvd-logging.sh new file mode 100755 index 0000000000..5aed5b9025 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-rvd-logging.sh @@ -0,0 +1,190 @@ +#!/bin/bash +## +## Logging configuration for RVD +## +## standalone-sip.xml is updated with RVD handler and loggers configuration. By default, if the respective +## configuration is missing it is added. Otherwise nothing happens. If the logging LEVEL is specified in the +## command line loggers are updated/created accordingly. +## +## usage: +## +## ./config-rvd-logging.sh - adds handler and logger (INFO) elements if missing +## ./config-rvd-logging.sh DEBUG - creates or updates loggers by setting level to DEBUG +## ./config-rvd-logging.sh DEBUG FILE - creates or updates loggers (DEBUG) but also configures them to use the 'FILE' periodic handler (main restcomm log) +## +## environment: +## +## requires RESTCOMM_HOME env variable to be set +## +## Author: otsakir@gmail.com - Orestis Tsakiridis + +# Default values +STANDALONE_SIP=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml +LOG_FILE="rvd/rvd.log"; # this is relative to "jboss.server.log.dir" +RVD_LOG_LEVEL=INFO # logging level that will be used if handlers/loggers are missing +LOGGING_HANDLER=RVD # the handler to be used for RVD logging. Set this to 'FILE' to redirect all messages to the main restcomm log (server.log) + +# Variables +XML_UPDATED=false # flag to format xml file only if updated +OVERRIDE=false + +error(){ + echo "error parsing standalone-sip.xml" + exit 1 +} + +createHandler(){ + + # create the RVD handler if it is missing + xmlstarlet sel -Q -N logns=urn:jboss:domain:logging:1.2 -t -m "//logns:periodic-rotating-file-handler[@name='RVD']" -o "found" $STANDALONE_SIP + result=$? + if [ "$result" -eq 1 ]; then + echo "adding RVD handler" + xmlstarlet ed -P -N logns=urn:jboss:domain:logging:1.2 -d "//logns:periodic-rotating-file-handler[@name='RVD']" -s "//logns:subsystem" -t elem -n periodic-rotating-file-handler_TMP -v "" \ + -i //periodic-rotating-file-handler_TMP -t attr -n name -v RVD \ + -i //periodic-rotating-file-handler_TMP -t attr -n autoflush -v true \ + -s //periodic-rotating-file-handler_TMP -t elem -n formatter_TMP -v "" \ + -s //formatter_TMP -t elem -n pattern-formatter_TMP -v "" \ + -i //pattern-formatter_TMP -t attr -n pattern -v "%d{MMdd HH:mm:ss,SSS X} %p (%t) %m %n" \ + -s //periodic-rotating-file-handler_TMP -t elem -n file_TMP -v "" \ + -i //file_TMP -t attr -n relative-to -v "jboss.server.log.dir" \ + -i //file_TMP -t attr -n path -v "rvd/rvd.log" \ + -s //periodic-rotating-file-handler_TMP -t elem -n suffix_TMP -v "" \ + -s //suffix_TMP -t attr -n value -v ".yyyy-MM-dd" \ + -s //periodic-rotating-file-handler_TMP -t elem -n append_TMP -v "" \ + -s //append_TMP -t attr -n value -v true \ + -r //periodic-rotating-file-handler_TMP -v periodic-rotating-file-handler \ + -r //formatter_TMP -v formatter \ + -r //pattern-formatter_TMP -v pattern-formatter \ + -r //file_TMP -v file \ + -r //suffix_TMP -v suffix \ + -r //append_TMP -v append \ + $STANDALONE_SIP > ${STANDALONE_SIP}_tmp + mv ${STANDALONE_SIP}_tmp $STANDALONE_SIP + XML_UPDATED=true + else + if [ "$result" -eq 3 ]; + then + error + fi + fi + +} + +createLoggers(){ + + # create RVD local logger if it is missing + xmlstarlet sel -Q -N logns=urn:jboss:domain:logging:1.2 -t -m "//logns:logger[@category='org.restcomm.connect.rvd.LOCAL']" -o "found" $STANDALONE_SIP + result=$? + if [ "$result" -eq 1 -o \( "$result" = 0 -a "$OVERRIDE" = true \) ]; then + echo "adding RVD local logger - $RVD_LOG_LEVEL/$LOGGING_HANDLER handler" + xmlstarlet ed -P -N logns=urn:jboss:domain:logging:1.2 -d "//logns:logger[@category='org.restcomm.connect.rvd.LOCAL']" \ + -s "//logns:subsystem" -t elem -n logger_TMP -v "" \ + -i //logger_TMP -t attr -n category -v "org.restcomm.connect.rvd.LOCAL" \ + -s //logger_TMP -t elem -n level_TMP -v "" \ + -i //level_TMP -t attr -n name -v "$RVD_LOG_LEVEL" \ + -s //logger_TMP -t elem -n handlers_TMP -v "" \ + -s //handlers_TMP -t elem -n handler_TMP -v "" \ + -s //handler_TMP -t attr -n name -v "$LOGGING_HANDLER" \ + -r //logger_TMP -v logger \ + -r //level_TMP -v level \ + -r //handlers_TMP -v handlers \ + -r //handler_TMP -v handler \ + $STANDALONE_SIP > ${STANDALONE_SIP}_tmp + mv ${STANDALONE_SIP}_tmp $STANDALONE_SIP + XML_UPDATED=true + else + if [ "$result" -eq 3 ]; + then + error + fi + fi + + # create RVD global logger if it is missing + xmlstarlet sel -Q -N logns=urn:jboss:domain:logging:1.2 -t -m "//logns:logger[@category='org.restcomm.connect.rvd.GLOBAL']" -o "found" $STANDALONE_SIP + result=$? + if [ "$result" -eq 1 -o \( "$result" = 0 -a "$OVERRIDE" = true \) ]; then + echo "adding RVD global logger - $RVD_LOG_LEVEL/$LOGGING_HANDLER handler" + xmlstarlet ed -P -N logns=urn:jboss:domain:logging:1.2 -d "//logns:logger[@category='org.restcomm.connect.rvd.GLOBAL']" \ + -s "//logns:subsystem" -t elem -n logger_TMP -v "" \ + -i //logger_TMP -t attr -n category -v "org.restcomm.connect.rvd.GLOBAL" \ + -s //logger_TMP -t elem -n level_TMP -v "" \ + -i //level_TMP -t attr -n name -v "$RVD_LOG_LEVEL" \ + -s //logger_TMP -t elem -n handlers_TMP -v "" \ + -s //handlers_TMP -t elem -n handler_TMP -v "" \ + -s //handler_TMP -t attr -n name -v "$LOGGING_HANDLER" \ + -r //logger_TMP -v logger \ + -r //level_TMP -v level \ + -r //handlers_TMP -v handlers \ + -r //handler_TMP -v handler \ + $STANDALONE_SIP > ${STANDALONE_SIP}_tmp + mv ${STANDALONE_SIP}_tmp $STANDALONE_SIP + XML_UPDATED=true + else + if [ "$result" -eq 3 ]; + then + error + fi + fi +} + +formatXml(){ + tmpfile=$(mktemp -t rvdconfigXXX) + xmlstarlet fo "$STANDALONE_SIP" > "$tmpfile" + mv "$tmpfile" "$STANDALONE_SIP" +} + +# MAIN + +if [ -z "$RESTCOMM_HOME" ] +then + echo "RESTCOMM_HOME env variable not set" + exit 1 +fi + +echo "Configuring RVD logging" + +# if no (level) argument is given, create default loggers only if they are missing +if [ -z $1 ] +then + # OVERRIDE is false + createHandler + createLoggers +else + case "$1" in + FATAL|ERROR|WARN|INFO|DEBUG|TRACE|ALL|OFF) + # specify logging handler to be used - RVD|FILE) + if [ -z "$2" ] + then + LOGGING_HANDLER=RVD + else + case "$2" in + RVD|FILE) + LOGGING_HANDLER=$2 + ;; + *) + echo "invalid arguments: handler should be one of RVD|FILE" + exit 1 + ;; + esac + fi + RVD_LOG_LEVEL=$1 + OVERRIDE=true + createHandler + createLoggers + ;; + *) + echo "invalid arguments: level should be one of FATAL|ERROR|WARN|INFO|DEBUG|TRACE|ALL|OFF" + exit 1 + ;; + esac + +fi + +# format output if any update happened +if [ "$XML_UPDATED" = true ] +then + formatXml + echo "$STANDALONE_SIP updated" +fi + diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-rvd.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-rvd.sh new file mode 100755 index 0000000000..2497dc9a13 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-rvd.sh @@ -0,0 +1,92 @@ +#!/bin/bash +## +## Configures rvd.xml based on global configuration options in restcomm.conf and advanced.conf. +## +## usage: +## +## ./config-rvd-logging.sh - adds handler and logger (INFO) elements if missing +## ./config-rvd-logging.sh DEBUG - creates or updates loggers by setting level to DEBUG +## ./config-rvd-logging.sh DEBUG FILE - creates or updates loggers (DEBUG) but also configures them to use the 'FILE' periodic handler (main restcomm log) +## +## requirements: +## +## RESTCOMM_HOME env variable to be set +## rvd.xml should be in place (under $RESTCOMM_HOME/standalone/deployments/restcomm-rvd.war) +## +## Author: otsakir@gmail.com - Orestis Tsakiridis + +# Variables +RVD_ROOT=$RESTCOMM_HOME/standalone/deployments/restcomm-rvd.war +RVD_XML_FILE=$RVD_ROOT/WEB-INF/rvd.xml + +updateVideoSupport() { + matchesCount=`xmlstarlet sel -t -v "count(/rvd/videoSupport)" "$RVD_XML_FILE"` + if [ $matchesCount -ge 1 ]; then + xmlstarlet ed -P -u "/rvd/videoSupport" -v "$1" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + else + xmlstarlet ed -P -s "/rvd" -t elem -n "videoSupport" -v "$1" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + fi +} + +updateMaxMediaFileSize() { + matchesCount=`xmlstarlet sel -t -v "count(/rvd/maxMediaFileSize)" "$RVD_XML_FILE"` + if [ $matchesCount -ge 1 ]; then + xmlstarlet ed -P -u "/rvd/maxMediaFileSize" -v "$1" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + else + xmlstarlet ed -P -s "/rvd" -t elem -n "maxMediaFileSize" -v "$1" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + fi +} + +# $1 is RVD_HTTP_TIMEOUT +updateHttpTimeout() { + if [ -z $1 ]; then + xmlstarlet ed -P -d "/rvd/defaultHttpTimeout" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + echo "disabled defaultHttpTimeout option"; + else + matchesCount=`xmlstarlet sel -t -v "count(/rvd/defaultHttpTimeout)" "$RVD_XML_FILE"` + if [ $matchesCount -ge 1 ]; then + xmlstarlet ed -P -u "/rvd/defaultHttpTimeout" -v "$1" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + else + xmlstarlet ed -P -s "/rvd" -t elem -n "defaultHttpTimeout" -v "$1" "$RVD_XML_FILE" > ${RVD_XML_FILE}_tmp + mv ${RVD_XML_FILE}_tmp ${RVD_XML_FILE} + fi + echo "set defaultHttpTimeout to $1" + fi +} + +# MAIN + +if [[ "$RVD_UNDEPLOY" = true || "$RVD_UNDEPLOY" = TRUE || "$RVD_UNDEPLOY" = True ]]; then + echo "Skipping RVD configuration since it's not deployed" +else + if [ -z "$RESTCOMM_HOME" ] + then + echo "RESTCOMM_HOME env variable not set. Aborting." + exit 1 + fi + if [ ! -f "$RVD_XML_FILE" ] + then + echo "rvd.xml not found. Aborting." + return + fi + + echo "Configuring RVD" + + if [[ "$RVD_VIDEO_SUPPORT" = true || "$RVD_VIDEO_SUPPORT" = TRUE || "$RVD_VIDEO_SUPPORT" = True ]] ; then + updateVideoSupport true + else + updateVideoSupport false + fi + updateMaxMediaFileSize "$RVD_MAX_MEDIA_FILE_SIZE" + + updateHttpTimeout "$RVD_HTTP_TIMEOUT" + + + echo "Updated rvd.xml" +fi \ No newline at end of file diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-sip-connectors.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-sip-connectors.sh new file mode 100755 index 0000000000..b0e86b523e --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-sip-connectors.sh @@ -0,0 +1,160 @@ +#!/bin/bash +## Description: Configures SIP connectors +## Author : Henrique Rosa (henrique.rosa@telestax.com) +## Author : Pavel Slegr (pavel.slegr@telestax.com) + +## Description: Configures the connectors for RestComm & configures Proxy if enabled +## Parameters : 1.Public IP +configConnectors() { + FILE=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml + static_address="$1" + + #delete additional connectors if any added to erlier run of the script. + if grep -q "" $FILE + then + echo "Additional Connectors Created earlier, going to delete the connectors" + sed '//,//d' $FILE > $FILE.bak + mv $FILE.bak $FILE + else + echo "Additional Connectors not Created earlier" + fi + + #IF LB activated. (Algorithm "use-load-balancer" used). + if [ "$ACTIVATE_LB" == "true" ] || [ "$ACTIVATE_LB" == "TRUE" ]; then + if [ -z "$LB_INTERNAL_IP" ]; then + LB_INTERNAL_IP=$LB_PUBLIC_IP + fi + sed -e "s|path-name=\"org.mobicents.ext\" \(app-dispatcher-class=.*\)|path-name=\"org.mobicents.ha.balancing.only\" \1|" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + $FILE > $FILE.bak + + else + + #Check for Por Offset + local SIP_PORT_UDP=$((SIP_PORT_UDP + PORT_OFFSET)) + local SIP_PORT_TCP=$((SIP_PORT_TCP + PORT_OFFSET)) + local SIP_PORT_TLS=$((SIP_PORT_TLS + PORT_OFFSET)) + local SIP_PORT_WS=$((SIP_PORT_WS + PORT_OFFSET)) + local SIP_PORT_WSS=$((SIP_PORT_WSS + PORT_OFFSET)) + + sed -e "s|path-name=\".*\" \(app-dispatcher-class=.*\)|path-name=\"org.mobicents.ext\" \1|" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + $FILE > $FILE.bak + fi + mv $FILE.bak $FILE + echo 'Configured SIP Connectors and Bindings' + + + #Enable SipServlet statistics + grep -q 'gather-statistics' $FILE || sed -i "s|congestion-control-interval=\".*\"|& gather-statistics=\"true\"|" $FILE + echo "Configured gather-statistics" +} + +#Socket Binding configuration for standalone-sip.xml +configSocketbinding() { +FILE=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml + + #delete additional bindings if any added to erlier run of the script. + if grep -q "" $FILE + then + echo "Additional Bindings Created earlier, going to delete the old bindings" + sed '//,//d' $FILE > $FILE.bak + mv $FILE.bak $FILE + else + echo "Additional Bindings not Created earlier" + fi + + #check for port offset + sed -i "s|\port-offset=\".*\"|port-offset=\"${PORT_OFFSET}\"|" $FILE + + sed -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + -e "s|||" \ + $FILE > $FILE.bak + mv $FILE.bak $FILE +} + +setMoreConnectors(){ +flag1=false +flag2=false + for i in $( set -o posix ; set | grep ^ADDITIONAL_CONNECTOR_ | sort -rn ); do + connector=$(echo ${i} | cut -d = -f2 | cut -d _ -f2 | cut -d : -f1) + port=$(echo ${i} | cut -d = -f2 | cut -d _ -f2 | cut -d : -f2) + if [ "$flag1" = false ] ; then + setInitialSign + flag1=true + fi + addConector $connector $port + addSocketBinding $connector $port + echo "Configuring log level for: $connector -> $port" + flag2=true + done + + if [ "$flag2" = true ] ; then + setFinalSign + fi +} + +addConector(){ +FILE=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml +connector=$1 +port=$2 + + #check for port offset at the new connectors. + local port=$((port + PORT_OFFSET)) + grep -q "connector name=\"${connector}\"" $FILE || sed -e "/path-name=\"org.mobicents.ext\"/a\ + " $FILE > $FILE.bak + + mv $FILE.bak $FILE + echo 'Configured additional SIP Connectors and Bindings' +} + +addSocketBinding(){ +FILE=$RESTCOMM_HOME/standalone/configuration/standalone-sip.xml +connector=$1 +port=$2 + + grep -q "socket-binding name=\"${connector}\"" $FILE || sed "/name=\"management-https\"/a " $FILE > $FILE.bak + mv $FILE.bak $FILE +} + +setInitialSign(){ + sed -e "/path-name=\"org.mobicents.ext\"/a\ + " $FILE > $FILE.bak + mv $FILE.bak $FILE + + sed "/name=\"management-https\"/a " $FILE > $FILE.bak + mv $FILE.bak $FILE +} + +setFinalSign(){ + sed -e "/path-name=\"org.mobicents.ext\"/a\ + " $FILE > $FILE.bak + + mv $FILE.bak $FILE + sed "/name=\"management-https\"/a " $FILE > $FILE.bak + mv $FILE.bak $FILE +} + +#MAIN +echo 'Configuring Application Server...' +configSocketbinding +configConnectors "$PUBLIC_IP" +if [ "$ACTIVATE_LB" == "true" ] || [ "$ACTIVATE_LB" == "TRUE" ]; then + echo "can not set additional connectors under LB." +else + setMoreConnectors +fi +echo 'Finished configuring Application Server!' diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-utensil.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-utensil.sh new file mode 100755 index 0000000000..5816553435 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfig.d/config-utensil.sh @@ -0,0 +1,155 @@ +#!/bin/bash +## +## Description: Configures RestComm +## Author: Henrique Rosa (henrique.rosa@telestax.com) +## Author: Pavel Slegr (pavel.slegr@telestax.com) +## Authos: Lefteris Banos (eleftherios.banos@telestax.com) + +# VARIABLES +RESTCOMM_BIN=$RESTCOMM_HOME/bin +RESTCOMM_DEPLOY=$RESTCOMM_HOME/standalone/deployments/restcomm.war + +configS3Bucket() { + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + + if [[ "$ACTIVATE_S3_BUCKET" == "true" || "$ACTIVATE_S3_BUCKET" == "TRUE" ]]; then + echo "S3_BUCKET_NAME $S3_BUCKET_NAME S3_ACCESS_KEY $S3_ACCESS_KEY S3_SECURITY_KEY $S3_SECURITY_KEY" + sed -e "// { + N; s|.*|true| + N; s|.*|${S3_BUCKET_NAME}| + N; s|.*|${S3_FOLDER_NAME}| + N; s|.*|${S3_ACCESS_KEY}| + N; s|.*|${S3_SECURITY_KEY}| + }" $FILE > $FILE.bak; + mv $FILE.bak $FILE + + if [ -n "$S3_BUCKET_REGION" ]; then + echo "S3_BUCKET_REGION $S3_BUCKET_REGION" + sed -e "s|.*|${S3_BUCKET_REGION}|" $FILE > $FILE.bak; + mv $FILE.bak $FILE + fi + else + sed -e "// { + N; s|.*|false| + N; s|.*|| + N; s|.*|| + N; s|.*|| + }" $FILE > $FILE.bak; + mv $FILE.bak $FILE + fi +} + +initUserPassword(){ + SQL_FILE=$RESTCOMM_DEPLOY/WEB-INF/data/hsql/restcomm.script + if [ -n "$INITIAL_ADMIN_USER" ]; then + # change admin user + if grep -q "uninitialized" $SQL_FILE; then + echo "Update Admin user" + sed -i "s/administrator@company.com/${INITIAL_ADMIN_USER}/g" $SQL_FILE + else + echo "Adminitrator User Already changed" + fi + fi + + if [ -n "$INITIAL_ADMIN_PASSWORD" ]; then + # change admin password + if grep -q "uninitialized" $SQL_FILE; then + PASSWORD_ENCRYPTED=`echo -n "${INITIAL_ADMIN_PASSWORD}" | md5sum |cut -d " " -f1` + #echo "Update password to ${INITIAL_ADMIN_PASSWORD}($PASSWORD_ENCRYPTED)" + sed -i "s/uninitialized/active/g" $SQL_FILE + sed -i "s/77f8c12cc7b8f8423e5c38b035249166/$PASSWORD_ENCRYPTED/g" $SQL_FILE + sed -i "s/2012-04-24 00:00:00.000000000/`echo "$(date +'%Y-%m-%d %H:%M:%S.%N')"`/" $SQL_FILE + sed -i "s/2012-04-24 00:00:00.000000000/`echo "$(date +'%Y-%m-%d %H:%M:%S.%N')"`/" $SQL_FILE + else + echo "Adminitrator Password Already changed" + fi + fi +} + +configSMTP(){ + FILE=$RESTCOMM_DEPLOY/WEB-INF/conf/restcomm.xml + if [[ -z $SMTP_USER || -z $SMTP_PASSWORD || -z $SMTP_HOST ]]; then + echo 'one or more variables are undefined' + echo 'Not possible to continue with SMTP configuration' + + else + echo "SMTP_USER $SMTP_USER SMTP_PASSWORD $SMTP_PASSWORD SMTP_HOST $SMTP_HOST" + sed -i "// { + N; s|.*|${SMTP_HOST}| + N; s|.*|${SMTP_USER}| + N; s|.*|${SMTP_PASSWORD}| + N; s|.*|${SMTP_PORT}| + }" $FILE + + sed -i "// { + N; s|.*|${SMTP_HOST}| + N; s|.*|${SMTP_USER}| + N; s|.*|${SMTP_PASSWORD}| + N; s|.*|${SMTP_PORT}| + }" $FILE + fi +} + +configMonitoring(){ + if [ -z ${GRAYLOG_SERVER} ]; then + echo "Graylog Monitoring is not configured"; + crontab -l 2>/dev/null > mycron + crontab -l | grep -q 'HDmonitor' && sed -i '/HDmonitor/d' mycron + crontab -l | grep -q 'RMSJVMonitor' && sed -i '/RMSJVMonitor/d' mycron + crontab -l | grep -q 'RCJVMonitor' && sed -i '/RCJVMonitor/d' mycron + crontab -l | grep -q 'SERVERAMonitor' && sed -i '/SERVERAMonitor/d' mycron + #install new cron file + crontab mycron + rm mycron + + else + echo "GRAYLOG_SERVER is: $GRAYLOG_SERVER"; + + #write out current crontab RMSJVMonitor + crontab -l 2>/dev/null > mycron + + #echo new cron into cron file + crontab -l | grep -q 'MAILTO=""' && echo 'entry exists' || echo "MAILTO=\"\"" >> mycron + if [[ "$HD_MONITOR" == "false" || "$HD_MONITOR" == "FALSE" ]]; then + sed -i '/HDmonitor/d' mycron + echo "HD_MONITOR: $HD_MONITOR" + else + crontab -l | grep -q 'Graylog_Monitoring.sh HDmonitor' && echo 'entry exists' || echo "*/30 * * * * $RESTCOMM_BIN/restcomm/monitoring/Graylog_Monitoring.sh HDmonitor" >> mycron; + fi + + if [[ "$RMSJVM_MONITOR" == "false" || "$RMSJVM_MONITOR" == "FALSE" ]]; then + sed -i '/RMSJVMonitor/d' mycron + echo "RMSJVM_MONITOR: $RMSJVM_MONITOR"; + else + crontab -l | grep -q 'Graylog_Monitoring.sh RMSJVMonitor' && echo 'entry exists' || echo "* * * * * $RESTCOMM_BIN/restcomm/monitoring/Graylog_Monitoring.sh RMSJVMonitor" >> mycron; + fi + + if [[ "$RCJVM_MONITOR" == "false" || "$RCJVM_MONITOR" == "FALSE" ]]; then + sed -i '/RCJVMonitor/d' mycron + echo "RCJVM_MONITOR: $RCJVM_MONITOR"; + else + crontab -l | grep -q 'Graylog_Monitoring.sh RCJVMonitor' && echo 'entry exists' || echo "* * * * * $RESTCOMM_BIN/restcomm/monitoring/Graylog_Monitoring.sh RCJVMonitor" >> mycron; + fi + + if [[ "$RAM_MONITOR" == "false" || "$RAM_MONITOR" == "FALSE" ]]; then + sed -i '/SERVERAMonitor/d' mycron + echo "RAM_MONITOR: $RAM_MONITOR"; + else + crontab -l | grep -q 'Graylog_Monitoring.sh SERVERAMonitor' && echo 'entry exists' || echo "* * * * * $RESTCOMM_BIN/restcomm/monitoring/Graylog_Monitoring.sh SERVERAMonitor" >> mycron; + fi + + #install new cron file + crontab mycron + rm mycron + + #set Server Label + sed -i "s|SERVERLABEL=.*|SERVERLABEL=\"${SERVERLABEL}\"|" $RESTCOMM_BIN/restcomm/monitoring/Graylog_Monitoring.sh; + sed -i "s|GRAYLOG_SERVER=.*|GRAYLOG_SERVER=\"${GRAYLOG_SERVER}\"|" $RESTCOMM_BIN/restcomm/monitoring/Graylog_Monitoring.sh; + fi +} + +# MAIN +configS3Bucket +initUserPassword +configSMTP +configMonitoring diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfigure.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfigure.sh new file mode 100755 index 0000000000..454c5dca4d --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/autoconfigure.sh @@ -0,0 +1,35 @@ +#! /bin/bash + +## Description: Executes all RestComm configuration scripts for a given version. +## Author : Henrique Rosa (henrique.rosa@telestax.com) + +autoconfigure() { + local BASEDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) + + ## We want this file to be executed last since its contains xmlstarlet based config script + ## https://telestax.atlassian.net/browse/RESTCOMM-1140 + local LAST_FILE_TO_BE_EXECUTED=$BASEDIR/autoconfig.d/config-restcomm.sh + + # load configuration values + #source $BASEDIR/restcomm.conf + echo '' + echo 'RestComm automatic configuration started:' + echo "LAST_FILE_TO_BE_EXECUTED is: $LAST_FILE_TO_BE_EXECUTED" + for f in $BASEDIR/autoconfig.d/*.sh; do + echo "Executing configuration file $f..." + if [ "$f" != "$LAST_FILE_TO_BE_EXECUTED" ]; then + source $f + echo "Finished executing configuration file $f!" + echo '' + fi + done + + source $LAST_FILE_TO_BE_EXECUTED + echo "Finished executing configuration file $LAST_FILE_TO_BE_EXECUTED!" + echo '' + + echo 'RestComm automatic configuration finished!' + echo '' +} + +autoconfigure \ No newline at end of file diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/collect_jmap.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/collect_jmap.sh new file mode 100755 index 0000000000..58b00dc67b --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/collect_jmap.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash +## +## Descript+ion: Script that collects all necessary system logs and data. +## Author : Lefteris Banos +## Author : George Vagenas +# + +##Global Parameters +DATE=$(date +%F_%H_%M) +DIR_NAME=restcomm_$DATE +BASEDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +JMAP_DIR=$BASEDIR/$DIR_NAME + +JMAP="true" +DTAR="true" + +## +## FUNCTIONS +## +getPID(){ + RESTCOMM_PID=" " + RMS_PID="" + + RESTCOMM_PID=$(jps | grep jboss-modules.jar | cut -d " " -f 1) + + while read -r line + do + if ps -ef | grep $line | grep -q mediaserver + then + RMS_PID=$line + fi + done < <(jps | grep Main | cut -d " " -f 1) + +} + +restcomm_jmap(){ +if [[ -z "$RESTCOMM_PID" ]]; then + getPID +fi + +if [[ -z "$RESTCOMM_PID" ]]; then + echo "Please make sure that RestComm is running..." + else + echo "****************************************************************" > $JMAP_DIR/restcomm_mem + echo "GC Histogram before GC.run" >> $JMAP_DIR/restcomm_mem + echo "****************************************************************" >> $JMAP_DIR/restcomm_mem + jcmd $RESTCOMM_PID GC.class_histogram | grep org.restcomm.connect >> $JMAP_DIR/restcomm_mem + + jcmd $RESTCOMM_PID GC.run + sleep 5 + + echo "****************************************************************" >> $JMAP_DIR/restcomm_mem + echo "GC Histogram after GC.run" >> $JMAP_DIR/restcomm_mem + echo "****************************************************************" >> $JMAP_DIR/restcomm_mem + jcmd $RESTCOMM_PID GC.class_histogram | grep org.restcomm.connect >> $JMAP_DIR/restcomm_mem + + echo "****************************************************************" >> $JMAP_DIR/restcomm_mem + echo "JVMTop" >> $JMAP_DIR/restcomm_mem + echo "****************************************************************" >> $JMAP_DIR/restcomm_mem + $BASEDIR/jvmtop.sh -n 1 >> $JMAP_DIR/restcomm_mem + + jmap -dump:live,format=b,file=restcomm_jmap_$DATE.bin $RESTCOMM_PID + mv restcomm_jmap_$DATE.bin $JMAP_DIR + fi + +} + +rms_jmap(){ +if [[ -z "$RMS_PID" ]]; then + getPID +fi + +if [[ -z "$RMS_PID" ]]; then + echo "Please make sure that Mediaserver is running..." + else + jcmd $RMS_PID GC.run + sleep 2 + jmap -dump:live,format=b,file=rms_jmap_$DATE.bin $RMS_PID + mv rms_jmap_$DATE.bin $JMAP_DIR + fi +} + +make_tar() { + if [ -d "$JMAP_DIR" ]; then + echo TAR_FILE : $JMAP_DIR.tar.gz + tar -zcf $JMAP_DIR.tar.gz -C $JMAP_DIR . 3>&1 1>&2 2>&3 + rm -rf $JMAP_DIR + return 0 + fi + exit 1 +} + +mkdir $JMAP_DIR +restcomm_jmap +rms_jmap +make_tar diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/gsed_macos.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/gsed_macos.sh new file mode 100755 index 0000000000..2c934ea154 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/gsed_macos.sh @@ -0,0 +1,6 @@ +#!/bin/bash +## Description: Change 'sed' to 'gsed' for MacOS users in order for the autoconfig scripts to work properly +## Prerequisites: Install gnu-sed using homebrew (brew install gnu-sed) +## Author: George Vagenas +gsed -i 's/sed/gsed/g' ./*.sh +gsed -i 's/sed/gsed/g' ./autoconfig.d/*.sh diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/jvmtop.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/jvmtop.sh new file mode 100755 index 0000000000..32aa5305b2 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/jvmtop.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# jvmtop - java monitoring for the command-line +# launch script +# +# author: Markus Kolb +# + +DIR=`cd "\`dirname "$0"\`" && pwd` + +if [ -z "$JAVA_HOME" ] ; then + JAVA_HOME=`readlink -f \`which java 2>/dev/null\` 2>/dev/null | \ + sed 's/\/bin\/java//'` +fi + +TOOLSJAR="$JAVA_HOME/../lib/tools.jar" + +if [ ! -f "$TOOLSJAR" ] ; then + echo "$JAVA_HOME seems to be no JDK!" >&2 + exit 1 +fi + +"$JAVA_HOME"/bin/java $JAVA_OPTS -cp "$DIR/jvmtop.jar:$TOOLSJAR" \ +com.jvmtop.JvmTop "$@" +exit $? diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/logs_collect.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/logs_collect.sh new file mode 100755 index 0000000000..f253f176be --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/logs_collect.sh @@ -0,0 +1,206 @@ +#!/bin/bash +## +## Descript+ion: Script that collects all necessary system logs and data. +## Author : Lefteris Banos +# +DATE=$(date +%F_%H_%M) +DIR_NAME=restcomm_$DATE +RESTCOMM_CORE_FILE=server.log +MEDIASERVER_FILE=server.log +SYSLOGS_DIR=/var/log +BASEDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +RESTCOMM_LOG_BASE=$(cd $BASEDIR/../../ && pwd) +RESTCOMM_CORE_LOG=$RESTCOMM_LOG_BASE/standalone/log +RVD_LOG=$RESTCOMM_LOG_BASE/standalone/log/rvd +RVD_LOG_FILE=rvd.log +MMS_LOGS=$RESTCOMM_LOG_BASE/mediaserver/log +LOGS_DIR_ZIP=$BASEDIR/$DIR_NAME + +restcomm_logs () { + if [ -f $RESTCOMM_CORE_LOG/$RESTCOMM_CORE_FILE ]; then + cp $RESTCOMM_CORE_LOG/$RESTCOMM_CORE_FILE $LOGS_DIR_ZIP/restcomm_server.log + fi +} +restcomm_logs_bytime () { + if [ -f $RESTCOMM_CORE_LOG/$RESTCOMM_CORE_FILE ]; then + IN=$1 + IFS="," + arr=($IN) + unset IFS + FROM=`grep -n "^${arr[0]}" $RESTCOMM_CORE_LOG/$RESTCOMM_CORE_FILE |cut -f1 -d: | tail -1` + TO=`grep -n "^${arr[1]}" $RESTCOMM_CORE_LOG/$RESTCOMM_CORE_FILE |cut -f1 -d: | tail -1` + awk 'NR=="'"$FROM"'", NR=="'"$TO"'"; NR=="'"$TO"'" {print; exit}' $RESTCOMM_CORE_LOG/$RESTCOMM_CORE_FILE > $LOGS_DIR_ZIP/RestCommlinesTime.log + fi +} +rvd_logs () { + if [ -f $RVD_LOG/$RVD_LOG_FILE ]; then + cp $RVD_LOG/$RVD_LOG_FILE $LOGS_DIR_ZIP/rvd_server.log + fi +} +mediaserver_logs () { + if [ -f $MMS_LOGS/$MEDIASERVER_FILE ]; then + cp $MMS_LOGS/$MEDIASERVER_FILE $LOGS_DIR_ZIP/mms_server.log + fi +} +system_logs () { + if [ -f $SYSLOGS_DIR/messages ]; then + cp $SYSLOGS_DIR/messages $LOGS_DIR_ZIP/ + fi + if [ -f $SYSLOGS_DIR/syslog ]; then + cp $SYSLOGS_DIR/syslog $LOGS_DIR_ZIP/ + fi +} +JVM_perfo_stats () { + if [ -n "$RESTCOMM_PID" ]; then + jstack -l $RESTCOMM_PID > $LOGS_DIR_ZIP/restcomm_jstack_trace_$DATE + fi + if [ -n "$RMS_PID" ]; then + jstack -l $RMS_PID > $LOGS_DIR_ZIP/mms_jstack_trace_$DATE + fi +} +system_usage_info () { + echo "---top:" > $LOGS_DIR_ZIP/usage_stats_$DATE + echo CPU\(s\): `top -b -n1 | grep "Cpu(s)" | awk '{print $2" : " $4}'` >> $LOGS_DIR_ZIP/usage_stats_$DATE + echo >> $LOGS_DIR_ZIP/usage_stats_$DATE + top -b -n1 | grep Mem >> $LOGS_DIR_ZIP/usage_stats_$DATE + echo "---free:" >> $LOGS_DIR_ZIP/usage_stats_$DATE + free >> $LOGS_DIR_ZIP/usage_stats_$DATE + echo "---df:" >> $LOGS_DIR_ZIP/usage_stats_$DATE + df -h >> $LOGS_DIR_ZIP/usage_stats_$DATE + ps aux > $LOGS_DIR_ZIP/top_$DATE +} +jvm_process_info () { + if [ -n "$RESTCOMM_PID" ]; then + echo "----------------------- restcomm ---------------------------" > $LOGS_DIR_ZIP/jvm_process_$DATE + echo "--------New Generation Heap-------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + jstat -gcnew $RESTCOMM_PID >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo "--------New Generation Space Size-------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + jstat -gcnewcapacity $RESTCOMM_PID >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo "--------Garbage-collected heap-------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + jstat -gc $RESTCOMM_PID >> $LOGS_DIR_ZIP/jvm_process_$DATE + fi + if [ -n "$RMS_PID" ]; then + echo "----------------------- mediaserver ---------------------------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo "-------- New Generation Heap -------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + jstat -gcnew $RMS_PID >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo "--------New Generation Space Size-------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + jstat -gcnewcapacity $RMS_PID >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo "--------Garbage-collected heap-------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + jstat -gc $RMS_PID >> $LOGS_DIR_ZIP/jvm_process_$DATE + fi + echo "--------------------------------- ---------------------------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo "----------------------- More INFO ---------------------------" >> $LOGS_DIR_ZIP/jvm_process_$DATE + echo " http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html " >> $LOGS_DIR_ZIP/jvm_process_$DATE +} +LWP_threads_logs () { + pat=`ps -ef | grep java | grep -v grep | awk '{print $2}'` + ps -eLo pid,lwp,nlwp,ruser,pcpu,stime,etime,args | grep -F "${pat}" > $LOGS_DIR_ZIP/lwpthread_$DATE.txt + return 0 +} +netstat_stats () { + echo "----------------------- netstat -s ---------------------------" > $LOGS_DIR_ZIP/netstat_stats_$DATE + netstat -s >> $LOGS_DIR_ZIP/netstat_stats_$DATE + echo >> $LOGS_DIR_ZIP/netstat_stats_$DATE + echo >> $LOGS_DIR_ZIP/netstat_stats_$DATE + echo "----------------------- netstat -anp ---------------------------" >> $LOGS_DIR_ZIP/netstat_stats_$DATE + netstat -anp >> $LOGS_DIR_ZIP/netstat_stats_$DATE +} +make_tar () { + echo TAR_FILE : $LOGS_DIR_ZIP.tar.gz + tar -zcf $LOGS_DIR_ZIP.tar.gz -C $LOGS_DIR_ZIP . 3>&1 1>&2 2>&3 + rm -rf $LOGS_DIR_ZIP +} +set_info() { + echo "$1" > $LOGS_DIR_ZIP/issue_info.txt +} +jvm_top() { + ./jvmtop.sh --once > $LOGS_DIR_ZIP/jvm_top.txt +} +sys_date() { + echo `date` > $LOGS_DIR_ZIP/sys_date.txt +} +getPID(){ + RESTCOMM_PID=$(jps | grep jboss-modules.jar | cut -d " " -f 1) + while read -r line + do + if ps -ef | grep $line | grep -q mediaserver + then + RMS_PID=$line + fi + done < <(jps | grep Main | cut -d " " -f 1) + if [[ -z "$RESTCOMM_PID" ]]; then + echo "RestComm is not Running, will try to collect all available logs" + fi + if [[ -z "$RMS_PID" ]]; then + echo "RMS is not Running, will try to collect all available logs" + fi +} +usage () { + cat << EOF +Usage: logs_collect.sh +options: +-m : optional message of the problem. +-t : Restcomm log file time extractor (e.g "06:20:0*,06:23:0*"). +-h : prints this message +-z : Create .tar file +EOF + exit 1 +} +#MAIN +tflag=false +zflag=false +TEMP=`getopt --long -o ":t:m:hz" "$@"` +eval set -- "$TEMP" +while true ; do + case "$1" in + -m ) + mkdir -p $LOGS_DIR_ZIP + set_info "$2" + shift 2 + ;; + -t ) + tflag=true + var=$2 + shift 2 + ;; + -z ) + zflag=true + break + ;; + -h ) + usage + ;; + *) + break + ;; + esac +done; +if [ ! -e $LOGS_DIR_ZIP ]; then + echo "create DIR $LOGS_DIR_ZIP" + mkdir -p $LOGS_DIR_ZIP +fi +if [ -d "$LOGS_DIR_ZIP" ]; then + getPID + restcomm_logs + rvd_logs + mediaserver_logs + system_logs + JVM_perfo_stats + jvm_process_info + LWP_threads_logs + system_usage_info + netstat_stats + jvm_top + sys_date + if $tflag ; then + restcomm_logs_bytime $var + fi + if $zflag ; then + make_tar + fi +else + echo "Directory $LOGS_DIR_ZIP not created, going to exit." + exit 1 +fi diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/monitoring/Graylog_Monitoring.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/monitoring/Graylog_Monitoring.sh new file mode 100755 index 0000000000..9e28525f0e --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/monitoring/Graylog_Monitoring.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +BASEDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +SERVERLABEL="" +GRAYLOG_SERVER="" + +HDmonitor(){ + #Collect HD Data from Host + hdusage=`df -hP $PWD | awk '/[0-9]%/{print $(NF-1)}'` + #Send data to graylog + message={"\"host\"":"\"${SERVERLABEL}\"","\"message\"":"\"${hdusage}\""} + curl --connect-timeout 10 --max-time 15 -XPOST http://$GRAYLOG_SERVER:5555/gelf -p0 -d ${message} +} + + +RCJVMonitor(){ + #FInd RMS process number + rcprocess=$(jps | grep jboss-modules.jar | cut -d " " -f 1) + #Run JVMTOP + jvmvars=` $BASEDIR/../jvmtop.sh --once | grep ${rcprocess} | sed -e "s/ */ /g" | sed -e "s/%//g" | sed -e "s/m//g" | cut -f3,4,5,6,7,8 -d ' ' ` + #Send data to graylog + IFS=" " read HPCUR HPMAX NHCUR NHMAX CPU GC <<< $jvmvars + message={"\"host\"":"\"${SERVERLABEL}\"","\"message\"":"\"RC_JVM_STATS\"","\"_HPCUR\"":"${HPCUR}","\"_HPMAX\"":"${HPMAX}","\"_NHCUR\"":"${NHCUR}","\"_NHMAX\"":"${NHMAX}","\"_CPU\"":"${CPU}","\"_GC\"":"${GC}"} + curl --connect-timeout 10 --max-time 15 -XPOST http://$GRAYLOG_SERVER:7777/gelf -p0 -d ${message} +} + + +RMSJVMonitor(){ + #FInd RMS process number + while read -r line + do + if ps -ef | grep $line | grep -q mediaserver + then + msprocess=$line + fi + done < <(jps | grep Main | cut -d " " -f 1) + + #Run JVMTOP + jvmvars=` $BASEDIR/../jvmtop.sh --once | grep ${msprocess} | sed -e "s/ */ /g" | sed -e "s/%//g" | sed -e "s/m//g" | cut -f3,4,5,6,7,8 -d ' ' ` + #Send data to graylog + IFS=" " read HPCUR HPMAX NHCUR NHMAX CPU GC <<< $jvmvars + message={"\"host\"":"\"${SERVERLABEL}\"","\"message\"":"\"MS_JVM_STATS\"","\"_HPCUR\"":"${HPCUR}","\"_HPMAX\"":"${HPMAX}","\"_NHCUR\"":"${NHCUR}","\"_NHMAX\"":"${NHMAX}","\"_CPU\"":"${CPU}","\"_GC\"":"${GC}"} + curl --connect-timeout 10 --max-time 15 -XPOST http://$GRAYLOG_SERVER:7777/gelf -p0 -d ${message} +} + +SERVERAMonitor(){ + #Collect RAM from host data + MemTotal=`awk '( $1 == "MemTotal:" ) { print $2/1048576 }' /proc/meminfo` + MemFree=`awk '( $1 == "MemFree:" ) { print $2/1048576 }' /proc/meminfo` + Buffers=`awk '( $1 == "Buffers:" ) { print $2/1048576 }' /proc/meminfo` + Cache=`awk '( $1 == "Cached:" ) { print $2/1048576 }' /proc/meminfo` + SwapTotal=`awk '( $1 == "SwapTotal:" ) { print $2/1048576 }' /proc/meminfo` + SwapFree=`awk '( $1 == "SwapFree:" ) { print $2/1048576 }' /proc/meminfo` + + #Send data to graylog + message={"\"host\"":"\"${SERVERLABEL}\"","\"message\"":"\"Host_Heap\"","\"_MemTotal\"":"${MemTotal}","\"_MemFree\"":"${MemFree}","\"_Buffers\"":"${Buffers}","\"_Cache\"":"${Cache}","\"_SwapTotal\"":"${SwapTotal}","\"_SwapFree\"":"${SwapFree}"} + curl --connect-timeout 10 --max-time 15 -XPOST http://$GRAYLOG_SERVER:6666/gelf -p0 -d ${message} +} + +echo $1 +$1 diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/restart-restcomm.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/restart-restcomm.sh new file mode 100755 index 0000000000..90e9470a76 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/restart-restcomm.sh @@ -0,0 +1,83 @@ +#!/usr/bin/env bash +## +## Descript+ion: Script that collects all necessary system logs and data. +## Author : Lefteris Banos +# + +JMAP="false" + +## +## FUNCTIONS +## +getPID(){ + RESTCOMM_PID=" " + RMS_PID="" + + RESTCOMM_PID=$(jps | grep jboss-modules.jar | cut -d " " -f 1) + + while read -r line + do + if ps -ef | grep $line | grep -q mediaserver + then + RMS_PID=$line + fi + done < <(jps | grep Main | cut -d " " -f 1) + +} + +stopRestComm(){ + echo "...stoping RestComm" + ./stop-restcomm.sh + + while [[ ! -z "$RESTCOMM_PID" || ! -z "$RMS_PID" ]]; do + getPID + echo "...waiting RestComm and MS to stop" + sleep 2 + done +} + +startRestComm(){ + echo "...starting RestComm" + ./start-restcomm.sh +} + +#MAIN +# parse the flag options (and their arguments) +while getopts "hmz" OPT; do + case "$OPT" in + h) + echo "Description: Collects system data. The output is a compressed file." + echo " " + echo "restart-restcomm.sh [options]" + echo " " + echo "options:" + echo "-m collect jmap" + echo "now will jusr restart Restcomm right now" + echo "-h show brief help" + exit 0 + ;; + m) + JMAP="true" + ;; + now) + JMAP="false" + ;; + ?) + echo "Invalid option: $OPTARG" + echo "Type \"restart-restcomm.sh -help\" for instructions" + exit 1 ;; + esac +done + +# get rid of the just-finished flag arguments +shift $(($OPTIND-1)) + + +if [ "$JMAP" == "true" ]; then + echo "...JMAP files will be collected" + ./collect_jmap.sh +fi + +stopRestComm +sleep 2 +startRestComm diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/set-log-level.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/set-log-level.sh new file mode 100755 index 0000000000..e3acd40f3b --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/set-log-level.sh @@ -0,0 +1,114 @@ +#!/bin/bash +## Description: Set log_level on the fly +## Author: Lefteris Banos +##Using Jboss Command Line Interface - CLI (https://developer.jboss.org/wiki/CommandLineInterface) + + +# VARIABLES +BASE_DIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +RESTCOMM_BIN=$BASE_DIR/.. +CLIFILE=$BASE_DIR/log.cli + + +changelog() { + cat <> $CLIFILE + /subsystem=logging/logger=$1:write-attribute(name=level,value=$2) +EOT +} + +changelogROOT() { + cat <> $CLIFILE + /subsystem=logging/root-logger=$1:write-attribute(name=level,value=$2) +EOT +} + +changelogCONSOLE() { + cat <> $CLIFILE + /subsystem=logging/console-handler=$1:write-attribute(name=level,value=$2) +EOT +} + + +listlog(){ + cat <> $CLIFILE +/subsystem=logging/logger=org.mobicents.servlet.sip:read-resource +/subsystem=logging/logger=org.mobicents.servlet.sip.restcomm:read-resource +/subsystem=logging/logger=org.restcomm.connect:read-resource +/subsystem=logging/logger=gov.nist:read-resource +/subsystem=logging/console-handler=CONSOLE:read-resource +/subsystem=logging/root-logger=ROOT:read-resource +EOT +} + +if [ $# -eq 0 ] + then + arr="help" +else + arr=( "$@" ) +fi + +for compt in $arr + do + case "$compt" in + servlet) + COMPONENT=org.mobicents.servlet.sip + changelog $COMPONENT $2 + ;; + + govnist) + COMPONENT=gov.nist + changelog $COMPONENT $2 + ;; + siprestcomm) + COMPONENT=org.mobicents.servlet.sip.restcomm + changelog $COMPONENT $2 + ;; + restcomm) + COMPONENT=org.restcomm.connect + changelog $COMPONENT $2 + # update RVD's logging level too. TODO do this separately on 'rvd)' when docker scripts are updated too + COMPONENT=org.restcomm.connect.rvd.LOCAL + changelog $COMPONENT $2 + COMPONENT=org.restcomm.connect.rvd.GLOBAL + changelog $COMPONENT $2 + ;; + rvd) + COMPONENT=org.restcomm.connect.rvd.LOCAL + changelog $COMPONENT $2 + COMPONENT=org.restcomm.connect.rvd.GLOBAL + changelog $COMPONENT $2 + ;; + root) + COMPONENT=ROOT + changelogROOT $COMPONENT $2 + ;; + console) + COMPONENT=CONSOLE + changelogCONSOLE $COMPONENT $2 + ;; + list) + listlog + ;; + *) + echo "Usage: $0 \"servlet govnist siprestcomm restscomm console root\" DEBUG. Can also set each element individually" + echo "Usage: $0 list (To list the actual log levels)" + exit 1 + esac +done + + n=0 + until [ $n -ge 5 ] + do + n=$[$n+1] + $RESTCOMM_BIN/jboss-cli.sh --connect controller=127.0.0.1 --file="$CLIFILE" # substitute your command here + if [ $? -eq 0 ]; then echo "LOG level changed properly" && break; fi + + if [ $n -eq 5 ]; then echo "Command Fail.. please try again"; fi + sleep 2 + done + + + +rm $CLIFILE + + diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/start-mediaserver.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/start-mediaserver.sh new file mode 100755 index 0000000000..cadee45e16 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/start-mediaserver.sh @@ -0,0 +1,19 @@ +#! /bin/bash + +## Description: Starts Media Server with auto-configuration. +## Author : Henrique Rosa (henrique.rosa@telestax.com) + +startMediaServer() { + local basedir=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) + local ms_conf=$basedir/mediaserver.conf + local ms_home=$RESTCOMM_HOME/mediaserver + + chmod +x $ms_home/*.sh + chmod +x $ms_home/.autoconfig/*.sh + chmod +x $ms_home/.autoconfig/autoconfig.d/*.sh + chmod +x $ms_home/bin/*.sh + + $ms_home/start-mediaserver.sh $ms_conf +} + +startMediaServer diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/start-restcomm.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/start-restcomm.sh new file mode 100755 index 0000000000..ae6ba7538e --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/start-restcomm.sh @@ -0,0 +1,165 @@ +#! /bin/bash +## +## Description: Starts RestComm with auto-configuration. +## +## Parameters : 1. Bind Address (default: 127.0.0.1) +## 2. Run Mode [standalone|standalone-lb|domain|domain-lb] (default:standalone) +## +## Author : Henrique Rosa +## +# set environment variables for execution +BASEDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +RESTCOMM_HOME=$(cd $BASEDIR/../../ && pwd) +MMS_HOME=$RESTCOMM_HOME/mediaserver +LB_HOME=$RESTCOMM_HOME/tools/sip-balancer + +## +## FUNCTIONS +## +startRestcomm() { + run_mode="$1" + bind_address="$2" + ExtraOpts="-Djboss.bind.address.management=127.0.0.1" + + # Check if RestComm is already running + if tmux ls | grep -q 'restcomm'; then + echo 'TelScale RestComm is already running on terminal session "restcomm"!' + exit 1; + fi + + if [ -n "$MGMT_PASS" ] && [ -n "$MGMT_USER" ]; then + echo "MGMT_PASS, MGMT_USER is set will be added to MGMNT configuration" + grep -q "$MGMT_USER" $RESTCOMM_HOME/standalone/configuration/mgmt-users.properties || $RESTCOMM_HOME/bin/add-user.sh "$MGMT_USER" "$MGMT_PASS" -s + #Management bind address + ExtraOpts="-Djboss.bind.address.management=$bind_address" + fi + + case $run_mode in + 'standalone'*) + # start restcomm on standalone mode + chmod +x $RESTCOMM_HOME/bin/standalone.sh + echo 'TelScale RestComm started running on standalone mode. Terminal session: restcomm.' + echo "Using IP Address: $BIND_ADDRESS" + if [[ "$RUN_DOCKER" == "true" || "$RUN_DOCKER" == "TRUE" ]]; then + $RESTCOMM_HOME/bin/standalone.sh -b $bind_address "${ExtraOpts}" + else + tmux new -s restcomm -d "$RESTCOMM_HOME/bin/standalone.sh -b $bind_address ${ExtraOpts}" + fi + ;; + 'domain'*) + # start restcomm on standalone mode + chmod +x $RESTCOMM_HOME/bin/domain.sh + tmux new -s restcomm -d "$RESTCOMM_HOME/bin/domain.sh -b $bind_address ${ExtraOpts}" + echo 'TelScale RestComm started running on domain mode. Screen session: restcomm.' + echo "Using IP Address: $BIND_ADDRESS" + ;; + *) + # start restcomm on standalone mode + chmod +x $RESTCOMM_HOME/bin/standalone.sh + tmux new -s restcomm -d "$RESTCOMM_HOME/bin/standalone.sh -b $bind_address ${ExtraOpts}" + echo 'TelScale RestComm started running on standalone mode. Screen session: restcomm.' + echo "Using IP Address: $BIND_ADDRESS" + ;; + esac + +} + +verifyDependencies() { + source $BASEDIR/verify-dependencies.sh +} + +loadConfigurationParams() { + source $BASEDIR/restcomm.conf + source $BASEDIR/advanced.conf +} + +## +## MAIN +## +verifyDependencies +loadConfigurationParams + +echo BASEDIR: $BASEDIR +echo RESTCOMM_HOME: $RESTCOMM_HOME + +# input parameters and default values +RUN_MODE='standalone' +BIND_ADDRESS='' + +while getopts "s:r:i:" optname +do + case "$optname" in + "s") + STATIC_ADDRESS="$OPTARG" + ;; + "r") + RUN_MODE="$OPTARG" + ;; + "i") + NET_INTERFACE="$OPTARG" + ;; + ":") + echo "No argument value for option $OPTARG" + exit 1 + ;; + "?") + echo "Unknown option $OPTARG" + exit 1 + ;; + *) + echo 'Unknown error while processing options' + exit 1 + ;; + esac +done + +# validate network interface and extract network properties +if [[ -z "$NET_INTERFACE" ]]; then +NET_INTERFACE='eth0' +echo "Looking for the appropriate interface" + NET_INTERFACES=$(ifconfig | expand | cut -c1-8 | sort | uniq -u | awk -F: '{print $1;}') + if [[ -z $(echo $NET_INTERFACES | sed -n "/$NET_INTERFACE/p") ]]; then + echo "The network interface $NET_INTERFACE is not available or does not exist." + echo "The list of available interfaces is: $NET_INTERFACES" + exit 1 + fi +fi + +# load network properties for chosen interface +if [[ -z "$PRIVATE_IP" || -z "$SUBNET_MASK" || -z "$NETWORK" || -z "$BROADCAST_ADDRESS" ]]; then +echo "Looking for the IP Address, subnet, network and broadcast_address" + source $BASEDIR/utils/read-network-props.sh "$NET_INTERFACE" +fi + +BIND_ADDRESS="$PRIVATE_IP" +BIND_NETWORK="$NETWORK" +BIND_SUBNET_MASK="$SUBNET_MASK" + +if [[ -z "$STATIC_ADDRESS" ]]; then + STATIC_ADDRESS=$BIND_ADDRESS +fi + +if [[ -z "$MEDIASERVER_EXTERNAL_ADDRESS" ]]; then + MEDIASERVER_EXTERNAL_ADDRESS="$STATIC_ADDRESS" +fi + +if [[ -z "$PUBLIC_IP" ]]; then + PUBLIC_IP=$STATIC_ADDRESS +fi + +if [[ -z "$SMS_OUTBOUND_PROXY" ]]; then + SMS_OUTBOUND_PROXY=$OUTBOUND_PROXY +fi + +# configure restcomm installation + +if [[ "$MANUAL_SETUP" == "false" || "$MANUAL_SETUP" == "FALSE" ]]; then + source $BASEDIR/autoconfigure.sh +fi + +if [[ "$MS_EXTERNAL" == "false" || "$MS_EXTERNAL" == "FALSE" ]]; then + source $BASEDIR/start-mediaserver.sh +fi +# start restcomm in selected run mode +startRestcomm "$RUN_MODE" "$BIND_ADDRESS" +exit 0 diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/stop-mediaserver.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/stop-mediaserver.sh new file mode 100755 index 0000000000..a8f2904939 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/stop-mediaserver.sh @@ -0,0 +1,11 @@ +#! /bin/bash + +## Description: Stops Media Server running in a terminal session. +## Author : Henrique Rosa (henrique.rosa@telestax.com) + +stopMediaServer() { + local ms_home=$RESTCOMM_HOME/mediaserver + $ms_home/stop-mediaserver.sh +} + +stopMediaServer diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/stop-restcomm.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/stop-restcomm.sh new file mode 100755 index 0000000000..6c91d6232d --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/stop-restcomm.sh @@ -0,0 +1,26 @@ +#! /bin/bash +## +## Description: Stops RestComm and Media Server processes running on terminal sessions +## Authors : Henrique Rosa (henrique.rosa@telestax.com) +## + +BASEDIR=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +RESTCOMM_HOME=$(cd $BASEDIR/../../ && pwd) +MS_HOME=$RESTCOMM_HOME/mediaserver + +stopMediaServer() { + source $BASEDIR/stop-mediaserver.sh +} + +stopRestComm() { + echo 'Shutting down RestComm...' + if tmux ls | grep -q 'restcomm'; then + tmux kill-session -t restcomm + echo '...stopped RestComm instance running on terminal session "restcomm"!' + else + echo '...restComm already stopped!' + fi +} + +stopMediaServer +stopRestComm diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/utils/read-network-props.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/utils/read-network-props.sh new file mode 100755 index 0000000000..096a496be7 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/utils/read-network-props.sh @@ -0,0 +1,48 @@ +#!/bin/bash +## +## Description : Utility script to find network properties +## Author : Henrique Rosa - henrique.rosa@telestax.com +## + +# VARIABLES +IP_ADDRESS_PATTERN="[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}" +INTERFACE="$1" + +## Description: Gets the private IP of the instance +## Parameters : none +getPrivateIP() { + echo "$INET_DATA" | grep -o "addr:$IP_ADDRESS_PATTERN" | awk -F: '{print $2}' +} + +## Description: Gets the broadcast address of the instance +## Parameters : none +getBroadcastAddress() { + echo "$INET_DATA" | grep "Bcast:$IP_ADDRESS_PATTERN" | awk '{print $3}' | awk -F: '{print $2}' +} + +## Description: Gets the Subnet Mask of the instance +## Parameters : none +getSubnetMask() { + /sbin/ifconfig $INTERFACE | grep "Mask:$IP_ADDRESS_PATTERN" | awk '{print $4}' | awk -F: '{print $2}' +} + +## Description: Gets the Network of the instance +## Parameters : 1.Private IP +## 2.Subnet Mask +getNetwork() { + #debian/ubuntu + NW=`ipcalc -n $1 $2 | grep -i "Network" | awk '{print $2}' | awk -F/ '{print $1}';` + if [[ -z "$NW" ]]; then + #rhel/centos/amazon + NW=`ipcalc -n $1 $2 | grep -i "Network" | awk -F= '{print $2}';` + fi + echo $NW +} + +# MAIN +INET_DATA=$(/sbin/ifconfig $INTERFACE | grep "inet ") + +PRIVATE_IP=$(getPrivateIP) +SUBNET_MASK=$(getSubnetMask) +NETWORK=$(getNetwork $PRIVATE_IP $SUBNET_MASK) +BROADCAST_ADDRESS=$(getBroadcastAddress) diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/verify-dependencies.sh b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/verify-dependencies.sh new file mode 100755 index 0000000000..dbf06b3195 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/bin/restcomm/verify-dependencies.sh @@ -0,0 +1,56 @@ +#!/bin/bash +## Description: Verifies if all dependencies are installed. +## Author: Henrique Rosa (henrique.rosa@telestax.com) + +verifyJava() { + if [ -n "$(which java)" ]; then + if [ $(java -version 2>&1 | head -n 1 | cut -d'"' -f2 | cut -d'.' -f2) -ne "7" ]; then + echo "Only Java 1.7 required." + exit 1 + fi + else + echo "Java dependency is missing." + echo "CentOS/RHEL: java-1.7.0-openjdk-devel.x86_64" + echo "Debian/Ubuntu:" + echo " add-apt-repository ppa:openjdk-r/ppa" + echo " apt-get update" + echo " apt-get install openjdk-7-jdk" + echo "macOS: brew cask install java7" + exit 1 + fi +} + +verifyTmux() { + if [ -z "$(which tmux)" ]; then + echo "TMux dependency is missing." + echo "CentOS/RHEL: yum install tmux" + echo "Debian/Ubuntu: apt-get install tmux" + echo "macOS: brew install tmux" + exit 1 + fi +} + +verifyXmlstarlet() { + if [ -z "$(which xmlstarlet)" ]; then + echo "XML Starlet dependency is missing." + echo "CentOS/RHEL: yum install xmlstarlet" + echo "Debian/Ubuntu: apt-get install xmlstarlet" + echo "macOS: brew install xmlstarlet" + exit 1 + fi +} + +verifyIpcalc() { + if [ -z "$(which ipcalc)" ]; then + echo "IP Calc dependency is missing." + echo "CentOS/RHEL: yum install ipcalc" + echo "Debian/Ubuntu: apt-get install ipcalc" + echo "macOS: brew install ipcalc" + exit 1 + fi +} + +verifyJava +verifyTmux +verifyXmlstarlet +verifyIpcalc diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/configuration/dars/mobicents-dar.properties b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/configuration/dars/mobicents-dar.properties new file mode 100644 index 0000000000..4027360c94 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/configuration/dars/mobicents-dar.properties @@ -0,0 +1,2 @@ +#Application Router Configuration +ALL=("RestComm","DAR\:From","ORIGINATING","","NO_ROUTE","0") diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/configuration/mss-sip-stack.properties b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/configuration/mss-sip-stack.properties new file mode 100644 index 0000000000..a1309d2c75 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/configuration/mss-sip-stack.properties @@ -0,0 +1,41 @@ +gov.nist.javax.sip.LOG_MESSAGE_CONTENT=true +gov.nist.javax.sip.LOG4J_LOGGER_NAME=gov.nist +gov.nist.javax.sip.TRACE_LEVEL=LOG4J +gov.nist.javax.sip.DEBUG_LOG=logs/mss-jsip-debuglog.txt +gov.nist.javax.sip.SERVER_LOG=logs/mss-jsip-messages.xml +javax.sip.STACK_NAME=Restcomm-SIP-Servlets +javax.sip.AUTOMATIC_DIALOG_SUPPORT=off +gov.nist.javax.sip.DELIVER_UNSOLICITED_NOTIFY=true +gov.nist.javax.sip.THREAD_POOL_SIZE=64 +gov.nist.javax.sip.REENTRANT_LISTENER=true +# prevent DOS attacks +gov.nist.javax.sip.MAX_LISTENER_RESPONSE_TIME=120 +gov.nist.javax.sip.MAX_MESSAGE_SIZE=40000 +# setting up the buffer size to reduce retransmissions and avoid loosing messages +gov.nist.javax.sip.RECEIVE_UDP_BUFFER_SIZE=131072 +gov.nist.javax.sip.SEND_UDP_BUFFER_SIZE=131072 +gov.nist.javax.sip.AGGRESSIVE_CLEANUP=true +gov.nist.javax.sip.MAX_FORK_TIME_SECONDS=0 +# set to true so that the stack do more validation on dialog, +# but won't work on chained applications so false by default +gov.nist.javax.sip.AUTOMATIC_DIALOG_ERROR_HANDLING=false +gov.nist.javax.sip.MESSAGE_PROCESSOR_FACTORY=gov.nist.javax.sip.stack.NioMessageProcessorFactory +org.mobicents.servlet.sip.USER_AGENT_HEADER=Restcomm ${project.version} +org.mobicents.servlet.sip.SERVER_HEADER=Restcomm ${project.version} +#Uncomment the following line to enable Congestion Control +#gov.nist.javax.sip.SIP_MESSAGE_VALVE=org.mobicents.ext.javax.sip.congestion.CongestionControlMessageValve +org.mobicents.ext.javax.sip.congestion.SIP_SCANNERS= +org.mobicents.ext.javax.sip.congestion.CONGESTION_CONTROL_MONITOR_INTERVAL=-1 +#org.mobicents.ext.javax.sip.congestion.MEMORY_THRESHOLD", "85"); +#org.mobicents.ext.javax.sip.congestion.BACK_TO_NORMAL_MEMORY_THRESHOLD", "80"); +#org.mobicents.ext.javax.sip.congestion.CPU_PROCESS_THRESHOLD", "85"); +#org.mobicents.ext.javax.sip.congestion.BACK_TO_NORMAL_CPU_PROCESS_THRESHOLD", "80"); +#org.mobicents.ext.javax.sip.congestion.SERVER_TRANSACTIONS_THRESHOLD", "15000"); +#org.mobicents.ext.javax.sip.congestion.BACK_TO_NORMAL_SERVER_TRANSACTIONS_THRESHOLD", "10000"); +#org.mobicents.ext.javax.sip.congestion.DIALOGS_THRESHOLD", "200000"); +#org.mobicents.ext.javax.sip.congestion.BACK_TO_NORMAL_DIALOGS_THRESHOLD", "180000"); +#Uncomment the following line to work with the Mobicents Load Balancer +#org.mobicents.ha.javax.sip.BALANCERS=127.0.0.1 +org.mobicents.ha.javax.sip.LOCAL_HTTP_PORT=8080 +org.mobicents.ha.javax.sip.LOCAL_SSL_PORT=8443 +#org.mobicents.ha.javax.sip.REACHABLE_CHECK= diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/deployments/olympus.war.dodeploy b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/deployments/olympus.war.dodeploy new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/deployments/olympus.war.dodeploy @@ -0,0 +1 @@ + diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/deployments/restcomm-management.war.dodeploy b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/deployments/restcomm-management.war.dodeploy new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/deployments/restcomm-management.war.dodeploy @@ -0,0 +1 @@ + diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/deployments/restcomm-rvd.war.dodeploy b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/deployments/restcomm-rvd.war.dodeploy new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/deployments/restcomm-rvd.war.dodeploy @@ -0,0 +1 @@ + diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/deployments/restcomm.war.dodeploy b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/deployments/restcomm.war.dodeploy new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/assembly-resources/standalone/deployments/restcomm.war.dodeploy @@ -0,0 +1 @@ + diff --git a/release/restcomm-assembly-wildfly10/src/main/resources/descriptor.xml b/release/restcomm-assembly-wildfly10/src/main/resources/descriptor.xml new file mode 100644 index 0000000000..c48601416a --- /dev/null +++ b/release/restcomm-assembly-wildfly10/src/main/resources/descriptor.xml @@ -0,0 +1,67 @@ + + assembly + + zip + + Restcomm-JBoss-Wildfly10-${project.version} + + + + ${project.build.directory}/dependency/restcomm-sip-servlets-${sipservletapi.version}-wildfly-10.0.0.Final + / + + + standalone/configuration/dars/mobicents-dar.properties + standalone/configuration/mss-sip-stack.properties + + + + + ${project.build.directory}/dependency/restcomm-media-server + /mediaserver + + + + ${project.build.directory}/classes/assembly-resources + / + + + + + /standalone/deployments + false + restcomm-rvd.war + + org.restcomm:restcomm-connect-rvd + + + + /standalone/deployments + false + olympus.war + + org.mobicents.webrtc:webrtc-ui + + + + + /standalone/deployments/restcomm.war + true + + org.restcomm:restcomm-connect.application + + + + false + /standalone/deployments + restcomm-management.war + + org.restcomm:restcomm-connect-management + + + + + + diff --git a/release/src/main/resources/common.xml b/release/src/main/resources/common.xml new file mode 100644 index 0000000000..5a828b6fc0 --- /dev/null +++ b/release/src/main/resources/common.xml @@ -0,0 +1,120 @@ + + + + + src/main/config/run.sh + bin/run.sh + + + + + src/main/config/log4j2.xml + conf/log4j2.xml + + + + src/main/config/mediaserver.xml + conf/mediaserver.xml + + + + + src/main/config/autoconfig/start-mediaserver.sh + start-mediaserver.sh + + + src/main/config/autoconfig/stop-mediaserver.sh + stop-mediaserver.sh + + + src/main/config/autoconfig/mediaserver.conf + mediaserver.conf + + + src/main/config/autoconfig/logger.conf + logger.conf + + + src/main/config/autoconfig/ssl.conf + ssl.conf + + + src/main/config/autoconfig/verify-dependencies.sh + .autoconfig/verify-dependencies.sh + + + src/main/config/autoconfig/autoconfigure.sh + .autoconfig/autoconfigure.sh + + + src/main/config/autoconfig/config-network.sh + .autoconfig/autoconfig.d/config-network.sh + + + src/main/config/autoconfig/config-controller-mgcp.sh + .autoconfig/autoconfig.d/config-controller-mgcp.sh + + + src/main/config/autoconfig/config-media.sh + .autoconfig/autoconfig.d/config-media.sh + + + src/main/config/autoconfig/config-resources.sh + .autoconfig/autoconfig.d/config-resources.sh + + + src/main/config/autoconfig/config-dtls.sh + .autoconfig/autoconfig.d/config-dtls.sh + + + src/main/config/autoconfig/config-logger.sh + .autoconfig/autoconfig.d/config-logger.sh + + + src/main/config/autoconfig/config-java-opts.sh + .autoconfig/autoconfig.d/config-java-opts.sh + + + src/main/config/autoconfig/config-ssl.sh + .autoconfig/autoconfig.d/config-ssl.sh + + + src/main/config/autoconfig/config-asr-drivers.sh + .autoconfig/autoconfig.d/config-asr-drivers.sh + + + + + src/main/config/dtls/x509-ca.pem + conf/dtls/x509-ca.pem + + + src/main/config/dtls/x509-ca-key.pem + conf/dtls/x509-ca-key.pem + + + src/main/config/dtls/x509-server.pem + conf/dtls/x509-server.pem + + + src/main/config/dtls/x509-server-key.pem + conf/dtls/x509-server-key.pem + + + src/main/config/dtls/x509-client-ecdsa.pem + conf/dtls/x509-client-ecdsa.pem + + + src/main/config/dtls/x509-client-key-ecdsa.pem + conf/dtls/x509-client-key-ecdsa.pem + + + src/main/config/dtls/x509-server-ecdsa.pem + conf/dtls/x509-server-ecdsa.pem + + + src/main/config/dtls/x509-server-key-ecdsa.pem + conf/dtls/x509-server-key-ecdsa.pem + + + \ No newline at end of file diff --git a/release/src/main/resources/descriptor.xml b/release/src/main/resources/descriptor.xml new file mode 100644 index 0000000000..277a903333 --- /dev/null +++ b/release/src/main/resources/descriptor.xml @@ -0,0 +1,31 @@ + + assembly + + zip + + ${project.build.finalName} + + + ${project.build.directory}/dependency/restcomm-sip-servlets-3.2.0-89-wildfly-10.0.0.Final + / + + + ${project.build.directory}/dependency/restcomm-media-server + /mediaserver + + + + + /standalone/deployments + false + + org.restcomm:restcomm-connect-rvd + org.mobicents.webrtc:webrtc-ui + + + + + + diff --git a/restcomm/pom.xml b/restcomm/pom.xml index 406cc5621a..d649d6819c 100644 --- a/restcomm/pom.xml +++ b/restcomm/pom.xml @@ -2,15 +2,13 @@ 4.0.0 - - org.restcomm - restcomm-parent - 4.0.1 - - + + org.restcomm + restcomm-connect-root + 9.0.0-SNAPSHOT + org.restcomm restcomm-connect - 9.0.0-SNAPSHOT pom RestComm-Connect A unified communications platform for web developers. @@ -141,7 +139,6 @@ - restcomm.application restcomm.commons restcomm.dao @@ -165,7 +162,6 @@ restcomm.telephony restcomm.tts.api restcomm.tts.voicerss - restcomm.testsuite restcomm.ui restcomm.tts.att restcomm.ussd @@ -190,125 +186,125 @@ org.restcomm restcomm-connect.sdr.api - ${project.version} - + ${project.version} + org.restcomm restcomm-connect.core - ${project.version} - + ${project.version} + org.restcomm restcomm-connect.mrb.api - ${project.version} + ${project.version} org.restcomm restcomm-connect.mrb - ${project.version} - + ${project.version} + org.restcomm restcomm-connect.application - ${project.version} - war - + ${project.version} + war + org.restcomm restcomm-connect.extension.api - ${project.version} + ${project.version} org.restcomm restcomm-connect.extension.controller ${project.version} - + org.restcomm restcomm-connect.monitoring.service - ${project.version} - + ${project.version} + org.restcomm restcomm-connect.dao - ${project.version} + ${project.version} org.restcomm restcomm-connect.telephony - ${project.version} - + ${project.version} + org.restcomm restcomm-connect.telephony.api - ${project.version} + ${project.version} org.restcomm restcomm-connect.http - ${project.version} - + ${project.version} + org.restcomm restcomm-connect.extension.api - ${project.version} + ${project.version} org.restcomm restcomm-connect.testsuite - ${project.version} - + ${project.version} + org.restcomm restcomm-connect.commons - ${project.version} - + ${project.version} + org.restcomm restcomm-connect.email.api - ${project.version} - - + ${project.version} + + org.restcomm restcomm-connect.sms - ${project.version} + ${project.version} org.restcomm restcomm-connect.mgcp - ${project.version} - - + ${project.version} + + org.restcomm restcomm-connect.mscontrol.api - ${project.version} + ${project.version} org.restcomm restcomm-connect.mscontrol.mms - ${project.version} + ${project.version} org.restcomm restcomm-connect.dns.api - ${project.version} - + ${project.version} + org.restcomm restcomm-connect-management ${project.version} - war + war - - - + + + @@ -582,12 +578,12 @@ ${sipservletapi.version} provided - + org.mobicents.servlet.sip sip-servlets-core-api ${sipservletapi.version} - + org.mobicents.servlet.sip @@ -618,19 +614,19 @@ - + org.apache.tomcat tomcat-catalina ${tomcat7.version} - + org.jboss.arquillian.junit arquillian-junit-container ${arquillian.version} - + org.mobicents.arquillian.container mss-arquillian-mediaserver-api @@ -640,7 +636,7 @@ org.mobicents.arquillian.container mss-arquillian-mediaserver-extension ${mss.arquillian.version} - + org.jboss.shrinkwrap.resolver @@ -655,12 +651,12 @@ ${shrinkwrap.resolver.version} test - + com.cloudhopper ch-commons-util ${ch-commons-util.version} - + org.mobicents.sipunit @@ -704,7 +700,7 @@ ${mockito-core.version} test - + org.mobicents.servlet.sip.containers sip-servlets-tomcat-7 @@ -737,7 +733,7 @@ standalone - + @@ -993,168 +989,109 @@ org.apache.maven.plugins maven-checkstyle-plugin ${checkstyle.plugin.version} - + - - - docs - - restcomm.docs - - - - set-git-hash - - - - org.codehaus.mojo - buildnumber-maven-plugin - 1.0 - - - validate - - create - - - - - false - false - - - - - - - maven-release - - - - maven-release-plugin - - - - - - generate-javadoc - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.7 - - true - - - - attach-javadoc - verify - - jar - - - - - - - - - release-sign-artifacts - - - performRelease - true - - - - - - org.apache.maven.plugins - maven-gpg-plugin - - - sign-artifacts - install - - sign - - - - - - - - - - - - mobicents-public-repository-group - Mobicens Public Maven Repository Group - https://oss.sonatype.org/content/groups/public - default - - true - never - - - true - never - - - - jboss-public-repository-group - JBoss Public Maven Repository Group - https://repository.jboss.org/nexus/content/groups/public-jboss/ - default - - true - never - - - true - never - - + + + docs + + restcomm.docs + + + + testsuite + + restcomm.testsuite + + + + set-git-hash + + + + org.codehaus.mojo + buildnumber-maven-plugin + 1.0 + + + validate + + create + + + + + false + false + + + + + + + maven-release + + + + maven-release-plugin + + + + + + generate-javadoc + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.7 + + true + + + + attach-javadoc + verify + + jar + + + + + + + + + release-sign-artifacts + + + performRelease + true + + + + + + org.apache.maven.plugins + maven-gpg-plugin + + + sign-artifacts + install + + sign + + + + + + + + - - - - - - - mobicents-public-repository-group - Mobicens Public Maven Repository Group - https://oss.sonatype.org/content/groups/public - default - - true - never - - - true - never - - - - jboss-public-repository-group - JBoss Public Maven Repository Group - https://repository.jboss.org/nexus/content/groups/public-jboss/ - default - - true - never - - - true - never - - - \ No newline at end of file diff --git a/restcomm/restcomm.core/pom.xml b/restcomm/restcomm.core/pom.xml index bcc864919b..551fd90ad4 100644 --- a/restcomm/restcomm.core/pom.xml +++ b/restcomm/restcomm.core/pom.xml @@ -1,5 +1,5 @@ + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 org.restcomm @@ -30,7 +30,12 @@ com.googlecode.libphonenumber libphonenumber - + + + log4j + log4j + provided + \ No newline at end of file diff --git a/restcomm/restcomm.routing/pom.xml b/restcomm/restcomm.routing/pom.xml index 3c05f7fca7..ef27fa48d1 100644 --- a/restcomm/restcomm.routing/pom.xml +++ b/restcomm/restcomm.routing/pom.xml @@ -9,7 +9,6 @@ org.restcomm restcomm-connect.routing - 9.0.0-SNAPSHOT restcomm-connect.routing http://maven.apache.org