diff --git a/build/Makefile.am b/build/Makefile.am index 61ac412d42..936ab56843 100644 --- a/build/Makefile.am +++ b/build/Makefile.am @@ -1,5 +1,6 @@ MK=`echo $(MAKE) | $(AWK) '{printf "%5s\n", $$0}' ` + all: @echo " +---------- FreeSWITCH Build Complete ----------+" @echo " + FreeSWITCH has been successfully built. +" @@ -54,6 +55,13 @@ install: @echo " + Install/Re-install default config: +" @echo " + ---------------------------------- +" @echo " + $(MK) samples +" +if SYSTEMD_INIT + @echo " + +" + @echo " + Install systemd startup scripts: +" + @echo " + -------------------------------- +" + @echo " + +" + @echo " + build/startup/install_systemd.sh +" +endif @echo " + +" @echo " + +" @echo " + Additional resources: +" diff --git a/build/freeswitch-tmpfiles.conf b/build/freeswitch-tmpfiles.conf deleted file mode 100644 index 881873fb29..0000000000 --- a/build/freeswitch-tmpfiles.conf +++ /dev/null @@ -1 +0,0 @@ -d /run/freeswitch 0750 freeswitch daemon - diff --git a/build/freeswitch.service b/build/freeswitch.service deleted file mode 100644 index ae6921b4df..0000000000 --- a/build/freeswitch.service +++ /dev/null @@ -1,17 +0,0 @@ -[Unit] -Description=FreeSWITCH -After=syslog.target network.target -After=postgresql.service postgresql-9.3.service postgresql-9.4.service mysqld.service httpd.service - -[Service] -User=freeswitch -EnvironmentFile=-/etc/sysconfig/freeswitch -# RuntimeDirectory is not yet supported in CentOS 7. A workaround is to use /etc/tmpfiles.d/freeswitch.conf -#RuntimeDirectory=/run/freeswitch -#RuntimeDirectoryMode=0750 -WorkingDirectory=/run/freeswitch -ExecStart=/usr/bin/freeswitch -nc -nf $FREESWITCH_PARAMS -ExecReload=/usr/bin/kill -HUP $MAINPID - -[Install] -WantedBy=multi-user.target diff --git a/build/startup/freeswitch.default b/build/startup/freeswitch.default new file mode 100644 index 0000000000..41cd0758c6 --- /dev/null +++ b/build/startup/freeswitch.default @@ -0,0 +1,2 @@ +# /etc/default/freeswitch +DAEMON_OPTS="-nonat" diff --git a/build/startup/freeswitch.service.in b/build/startup/freeswitch.service.in new file mode 100644 index 0000000000..f580ba2480 --- /dev/null +++ b/build/startup/freeswitch.service.in @@ -0,0 +1,32 @@ +[Unit] +Description=freeswitch +After=syslog.target network.target local-fs.target + +[Service] +; service +Type=forking +PIDFile=@runtimedir@/freeswitch.pid +PermissionsStartOnly=true +Environment="DAEMON_OPTS=-nonat" +EnvironmentFile=-/etc/sysconfig/freeswitch +EnvironmentFile=-/etc/default/freeswitch +ExecStart=@bindir_expanded@/freeswitch -u freeswitch -g freeswitch -ncwait -rp ${DAEMON_OPTS} +TimeoutSec=20s +Restart=on-failure +; exec +User=root +Group=daemon +LimitCORE=infinity +LimitNOFILE=100000 +LimitNPROC=60000 +;LimitSTACK=240 +LimitRTPRIO=infinity +LimitRTTIME=7000000 +IOSchedulingClass=realtime +IOSchedulingPriority=2 +CPUSchedulingPolicy=rr +CPUSchedulingPriority=89 +UMask=0007 + +[Install] +WantedBy=multi-user.target diff --git a/build/startup/freeswitch.tmpfile b/build/startup/freeswitch.tmpfile new file mode 100644 index 0000000000..baea7b8113 --- /dev/null +++ b/build/startup/freeswitch.tmpfile @@ -0,0 +1 @@ +d /var/run/freeswitch 0755 freeswitch freeswitch - - diff --git a/build/startup/install_systemd.sh.in b/build/startup/install_systemd.sh.in new file mode 100644 index 0000000000..3f77c4f8b3 --- /dev/null +++ b/build/startup/install_systemd.sh.in @@ -0,0 +1,59 @@ +#!/bin/bash +# Niek Vlessert + +USER=`whoami` +DISTRO=$(source /etc/os-release && echo $PRETTY_NAME) +if [ $USER != "root" ] ; then + SUDO=`which sudo | awk -F"/" '{print $NF}'` + if [ -z $SUDO ] ; then + echo "No root and no sudo... please run this as root or install sudo and make sure your user has permissions to use it." + exit + else + read -p "The currently active user is not root but sudo is available... do you want to install using sudo? (y/n) " -n 1 -r + if ! [[ $REPLY =~ ^[yY]$ ]] + then + echo + exit + fi + fi +fi + +echo +echo "This will do several things on your $DISTRO installation:" +echo "- Create user freeswitch and add it to group freeswitch" +FSPATH=@prefix@ +if [[ $FSPATH == *"freeswitch"* ]] +then + echo "- Set permissions on @prefix@ and files in @bindir_expanded@" +fi +echo "- Install systemd unit file and other required files" +echo +read -p "Do you want to continue? (y/n) " -n 1 -r +if [[ $REPLY =~ ^[yY]$ ]] +then + echo + echo "Installing..." + $SUDO useradd -d @confdir@ -r -U -s /bin/false -c "FreeSWITCH open source softswitch" freeswitch + if [[ $FSPATH == *"freeswitch"* ]] + then + $SUDO chown -R freeswitch:freeswitch @prefix@ + $SUDO chmod -R ug=rwX,o= @prefix@ + $SUDO chmod -R u=rwx,g=rx @bindir_expanded@/* + fi + $SUDO cp build/startup/freeswitch.service /etc/systemd/system/ + $SUDO cp build/startup/freeswitch.tmpfile /etc/tmpfiles.d/freeswitch.conf + if [ -d /etc/sysconfig ]; then + $SUDO cp build/startup/freeswitch.default /etc/sysconfig/freeswitch + else + $SUDO cp build/startup/freeswitch.default /etc/default/freeswitch + fi + $SUDO systemd-tmpfiles --clean --create + $SUDO systemctl daemon-reload + echo + if [ -f @confdir@/vars.xml ] ; then + echo "You may now start Freeswitch using 'systemctl start freeswitch'" + else + echo "Make sure your config files are in place in @confdir@, if they are you can start Freeswitch using 'systemctl start freeswitch'" + fi + echo "Then start fs_cli by running @bindir_expanded@/fs_cli" +fi diff --git a/configure.ac b/configure.ac index 10d13898b0..4f3e0d24e6 100644 --- a/configure.ac +++ b/configure.ac @@ -83,6 +83,8 @@ default_certsdir="$prefix/certs" default_fontsdir="$prefix/fonts" default_imagesdir="$prefix/images" +eval bindir_expanded="${bindir}" + if test "${enable_fhs}" = "yes"; then eval full_datadir="${datadir}/freeswitch" eval datadir=$full_datadir @@ -771,6 +773,14 @@ case "$host" in ;; *linux*) APR_ADDTO([PLATFORM_CORE_LIBS], [-ldl -lcrypt -lrt]) + systemdinit=false + if test -d /run/systemd/system; then + systemdinit=true + AC_SUBST(bindir_expanded) + AC_CONFIG_FILES([build/startup/install_systemd.sh], [chmod +x build/startup/install_systemd.sh]) + AC_CONFIG_FILES([build/startup/freeswitch.service]) + fi + AM_CONDITIONAL([SYSTEMD_INIT], [test x$systemdinit = xtrue]) ;; esac