diff --git a/install_functions b/install_functions new file mode 100644 index 0000000..4d71b44 --- /dev/null +++ b/install_functions @@ -0,0 +1,210 @@ +################################################################ +# Title:.......Automatic install/update OScam # +# Author:......Prilly # +# Support:.....prilly@speedbox.me # +# Date:........15 Mars 2016 # +# Description:.Automaticaly install OScam with systemd support # +# Updates OScam to latest or specific SVN version # +################################################################ + +run_install(){ +if [ $(whoami) != "root" ]; then + dialog --title "OScam Installer" --msgbox "\n Only ROOT can run this script!" 7 70 + return 1 +elif [ -f ${daemon_dir}/oscam1 ]; then + dialog --title "OScam Installer" --msgbox "\n OScam already installed! Try running OScam upgrade instead!" 7 70 + return 1 +else + dialog --title "Confirmation" --yesno "\n Install OScam CardServer?" 7 70 + if [ ${?} -eq 1 2>/dev/null ]; then + return 1 + else + check_distrib + if [ ${?} -eq 0 2>/dev/null ]; then + set_instances_count + install_reader_fw + copy_files + compile_oscam + restart_oscam + dialog --title "OScam Installer" --msgbox "\n Installation completed ok!\n Webif: http://IP-of-server:888[1-9]\n Webif user/pass = root/root" 9 70 + fi + fi +fi +} + +run_update(){ +dialog --title "OScam Installer" --msgbox "To run an upgrade of OScam, the install routine must have been run once earlier. +This script does NOT support upgrading OScam without OScam has been initially installed by the script. +IMPORTANT: SysV is now replaced with Systemd, use systemctl start|stop|restart oscam(1-9).service" 13 70 +if [ $(whoami) != "root" ]; then + dialog --title "OScam Installer" --msgbox "\n Only ROOT can run this script!" 7 70 + return 1 +elif [ ! -d ${conf_dir}/oscam1 ]; then + dialog --title "OScam Installer" --msgbox "\n OScam not installed! Try running OScam install instead!" 7 70 + return 1 +else + dialog --title "Confirmation" --yesno "\n Update OScam CardServer?" 7 70 + if [ ${?} -eq 1 2>/dev/null ]; then + return 1 + else + check_distrib + if [ ${?} -eq 0 2>/dev/null ]; then + set_instances_count + copy_files + compile_oscam + restart_oscam + dialog --title "OScam Installer" --msgbox "\n OScam CardServer upgrade completed!" 7 70 + fi + fi +fi +} + +check_distrib(){ +local cd_os="" +local cd_ver="" +if [ -f /etc/lsb-release ]; then + . /etc/lsb-release + cd_os="${DISTRIB_ID}" + cd_ver="${DISTRIB_RELEASE}" +elif [ -f /etc/debian_version ]; then + cd_os="Debian" + cd_ver="$(cat /etc/debian_version)" +elif [ -f /etc/redhat-release ]; then + cd_os="Red Hat" + cd_ver="$(cat /etc/redhat-release)" +elif [ -f /etc/SuSE-release ]; then + cd_os="SuSE" + cd_ver="$(cat /etc/SuSE-release)" +else + cd_os="$(uname -s)" + cd_ver="$(uname -r)" +fi +if [ "${cd_os}" = "Debian" ] || [ "${cd_os}" = "Ubuntu" ]; then + install_dep_deb + return 0 +else + dialog --title "OScam Installer" --msgbox "\n Your distribution: ${cd_os} ${cd_ver} is unsupported" 7 70 + return 1 +fi +} + +install_dep_deb(){ +apt-get update +apt-get -y install cmake sudo curl git build-essential libssl-dev libncurses-dev dialog +apt-get -y install usbutils libusb-dev libusb-1.0-0 libusb-1.0-0-dev +} + +set_instances_count(){ +local instances_count=$(find ${conf_dir}/oscam? -maxdepth 0 -type d 2>/dev/null | wc -l) +if [ ${instances_count} -eq 0 2>/dev/null ]; then + exec 3>&1 + local instances_var=$(dialog --title "OScam Installer" --inputbox "\n How many instances should be installed? (1->9):" 8 70 2>&1 1>&3) + exec 3>&-; + while [ ! ${instances_var} -gt 0 ] || [ ! ${instances_var} -le 9 ]; do + dialog --title "OScam Installer" --msgbox "\n Error -> valid range is: (1 to 9)" 7 70 + exec 3>&1 + local instances_var=$(dialog --title "OScam Installer" --inputbox "\n How many instances should be installed? (1->9):" 8 70 2>&1 1>&3) + exec 3>&-; + done + instances=${instances_var} +else + instances=${instances_count} +fi +} + +install_reader_fw(){ +dialog --title "Confirmation" --yesno "\n Install HID Omnikey USB card reader firmware?\n OMNIKEY: 512x, 532x, 1021, 3x21, 6121" 8 70 +if [ ${?} -eq 0 2>/dev/null ]; then + apt-get -y install pcscd pcsc-tools libpcsclite-dev + if [ $(getconf LONG_BIT) -eq 64 2>/dev/null ]; then + tar -xvzf pcsc/${fw_hid_64}.tar.gz -C pcsc + cd pcsc/${fw_hid_64} + ./install + else + tar -xvzf pcsc/${fw_hid_86}.tar.gz -C pcsc + cd pcsc/${fw_hid_86} + ./install + fi + cd - >/dev/null +fi +} + +copy_files(){ +if [ ! -d ${conf_dir} ]; then + mkdir -p ${conf_dir} +fi +for i in $(seq 1 ${instances}); do + if [ ! -f ${sysd_dir}/oscam${i}.service ]; then + cp script/systemd/oscam${i}.service ${sysd_dir}/oscam${i}.service + else + cp -u script/systemd/oscam${i}.service ${sysd_dir}/oscam${i}.service + fi + if [ ! -d ${log_dir}/oscam${i} ]; then + mkdir -p ${log_dir}/oscam${i} + fi + if [ ! -d ${conf_dir}/oscam${i} ]; then + mkdir -p ${conf_dir}/oscam${i} + fi + if [ ! -f ${conf_dir}/oscam${i}/oscam.conf ]; then + cp config/oscam${i}.conf ${conf_dir}/oscam${i}/oscam.conf + fi + chmod 755 ${sysd_dir}/oscam${i}.service + chmod 755 -R ${conf_dir}/oscam${i} + systemctl enable oscam${i}.service +done +} + +compile_oscam(){ +local co_build_opt="OSCAM_BIN=oscam" +local now=$(date +"%m_%d_%Y") +exec 3>&1 +local compile_var=$(dialog --title "OScam Installer" --inputbox "\n Compile OScam source: version or HEAD?: (10255/HEAD)" 8 70 2>&1 1>&3) +exec 3>&-; +if [ ${compile_var} -eq ${compile_var} 2>/dev/null ]; then + git clone --depth 1 --branch ${compile_var} ${git_url} ${work_dir}/oscam-svn +else + git clone --depth 1 ${git_url} ${work_dir}/oscam-svn +fi +cd ${work_dir}/oscam-svn +make config +if [ $(dpkg-query -W -f='${Status}' libpcsclite* 2>/dev/null | grep -c "ok installed") -eq 1 2>/dev/null ]; then + dialog --title "Confirmation" --yesno "\n Found libpcsclite -> Add USE_PCSC=1 to build option? (Default YES)" 7 80 + if [ ${?} -eq 0 2>/dev/null ]; then + co_build_opt+=" USE_PCSC=1" + fi +fi +if [ $(dpkg-query -W -f='${Status}' libusb-1.0-0-dev 2>/dev/null | grep -c "ok installed") -eq 1 2>/dev/null ]; then + dialog --title "Confirmation" --yesno "\n Found libusb -> Add USE_LIBUSB=1 to build option? (Default YES)" 7 80 + if [ ${?} -eq 0 2>/dev/null ]; then + co_build_opt+=" USE_LIBUSB=1" + fi +fi +make ${co_build_opt} +cd - >/dev/null +for i in $(seq 1 ${instances}); do + if [ -f ${sysd_dir}/oscam${i}.service ]; then + systemctl stop oscam${i}.service + else + killall -9 oscam${i} + fi + if [ -f ${daemon_dir}/oscam${i} ]; then + mv -f ${daemon_dir}/oscam${i} ${daemon_dir}/old_oscam${i}_${now} + fi + cp ${work_dir}/oscam-svn/oscam ${daemon_dir}/oscam${i} + chmod 755 ${daemon_dir}/oscam${i} +done +rm -rf ${work_dir}/oscam-svn +dialog --title "OScam Installer" --msgbox "\n OScam CardServer compiled successfully!" 7 70 +} + +restart_oscam(){ +for i in $(seq 1 ${instances}); do + if [ -f ${sysd_dir}/oscam${i}.service ]; then + systemctl stop oscam${i}.service + systemctl start oscam${i}.service + else + dialog --title "OScam Installer" --msgbox "\n ${sysd_dir}/oscam${i}.service file is missing!" 7 70 + fi + sleep 1 +done +}