3

I've been trying to install IDAS GE in a CentOS 7 VM on my machine through the UL2.0 RPMs(download link!) available in its catalogue page.

I followed the instructions on github, but I get stuck in starting the IoT as per section 3 of the Deployment section of the instructions. If I execute the init_iotagent.sh, where I inserted the local IP of the VM, I get the error:

log4cplus:ERROR No appenders could be found for logger (main).
log4cplus:ERROR Please initialize the log4cplus system properly.
HTTPFilter DESTRUCTOR 0
HTTPFilter DESTRUCTOR 0

Also, in the instructions for Starting IoTAgent as a Service, it's said that:

After installing iot-agent-base RPM an init.d script can be found in this folder /usr/local/iot/init.d .

But this file is not there, leading me to believe that the IoTAgent wasn't installed properly from the RPMs provided.

Also, I can't find log files regarding IoTAgent, only the MongoDB has its log file at /usr/local/iot/mongodb-linux-x86_64-2.6.9/log/mongoc.log.

If anyone could help, it would be apreciated. Also, if more info is needed, please let me know.

Thank you

A. Vieira
  • 1,213
  • 2
  • 11
  • 27

1 Answers1

3

I recommend you to get the GitHub repository and build the RPMs from the source and then install it in your CentOS. Like is explained in the documentation:

NOTE: I changed the BUILD_TYPE to Release, so I created the Release dir. GIT_VERSION and GIT_COMMIT are not the latest ones.

git clone https://github.com/telefonicaid/fiware-IoTAgent-Cplusplus.git
cd fiware....
mkdir -p build/Release
cd build/Release
cmake -DGIT_VERSION=20527 -DGIT_COMMIT=217023407f25ed258043cfc00a46b6c05fb0b52c -DMQTT=ON -DCMAKE_BUILD_TYPE=Release ../../
make install
make package

The packages will be in pack/Linux/RPM/

rpm -i iot-agent-base-xxxxxxx (xxxxxxx will be the numbers of the build)
rpm -i iot-agent-ul-xxxxxx (xxxxxxx will be the numbers of the build)

Once installed with RPMs the init.d file is in: /usr/local/iot/init.d/iotagent

This is the content of the file:

#!/bin/bash
# Copyright 2015 Telefonica Investigación y Desarrollo, S.A.U
# 
# This file is part of fiware-IoTagent-Cplusplus (FI-WARE project).
# 
# iotagent         Start/Stop iotagent
#
# chkconfig: 2345 99 60
# description: iotagent

. /etc/rc.d/init.d/functions

PARAM=$1
INSTANCE=$2
USERNAME=iotagent
EXECUTABLE=/usr/local/iot/bin/iotagent
CONFIG_PATH=/usr/local/iot/config

iotagent_start()
{


    local result=0
    local instance=${1}

    if [[ ! -x ${EXECUTABLE} ]]; then
        printf "%s\n" "Fail - missing ${EXECUTABLE} executable"
        exit 1
    fi

    if [[ -z ${instance} ]]; then
        list_instances="${CONFIG_PATH}/iotagent_*.conf"
    else
        list_instances="${CONFIG_PATH}/iotagent_${instance}.conf"
    fi

    for instance_config in ${list_instances}
    do
        local NAME
        NAME=${instance_config%.conf}
        NAME=${NAME#*iotagent_}

        source ${instance_config}

        local IOTAGENT_PID_FILE="/var/run/iot/iotagent_${NAME}.pid"

        printf "Starting iotagent ${NAME}..."

        status -p ${IOTAGENT_PID_FILE} ${EXECUTABLE} &> /dev/null 
        if [[ ${?} -eq 0 ]]; then
            printf "%s\n" " Already running, skipping $(success)"
            continue
        fi


        # Load the environment
        set -a
        source ${instance_config}

        # Mandatory parameters
        IOTAGENT_OPTS="   ${IS_MANAGER}              \
                       -n ${IOTAGENT_SERVER_NAME}    \
                       -v ${IOTAGENT_LOG_LEVEL}      \
                       -i ${IOTAGENT_SERVER_ADDRESS} \
                       -p ${IOTAGENT_SERVER_PORT}    \
                       -d ${IOTAGENT_LIBRARY_DIR}    \
                       -c ${IOTAGENT_CONFIG_FILE}"

        su ${USERNAME} -c "LD_LIBRARY_PATH=\"${IOTAGENT_LIBRARY_DIR}\" \
        ${EXECUTABLE} ${IOTAGENT_OPTS} & echo \$! > ${IOTAGENT_PID_FILE}" &> /dev/null 
        sleep 2 # wait some time to leave iotagent start
        local PID=$(cat ${IOTAGENT_PID_FILE})
        local var_pid=$(ps -ef | grep ${PID} | grep -v grep)
        if [[ -z "${var_pid}" ]]; then
            printf "%s" "pidfile not found"
            printf "%s\n" "$(failure)" 
            exit 1
        else
            printf "%s\n" "$(success)"
        fi
    done

    return ${result}

}

iotagent_stop()
{
    local result=0
    local iotagent_instance=${1}


    if [[ -z ${iotagent_instance} ]]; then
        list_run_instances="/var/run/iot/iotagent_*.pid"
    else
        list_run_instances="/var/run/iot/iotagent_${iotagent_instance}.pid"
    fi

    if [[ $(ls -l ${list_run_instances} 2> /dev/null | wc -l) -eq 0 ]]; then
        printf "%s\n" "There aren't any instance of IoTAgent ${iotagent_instance} running $(success)"
        return 0
    fi

    for run_instance in ${list_run_instances}
    do

        local NAME
        NAME=${run_instance%.pid}
        NAME=${NAME#*iotagent_}

        printf "%s" "Stopping IoTAgent ${NAME}..."

        local RUN_PID=$(cat ${run_instance})
        kill ${RUN_PID}  &> /dev/null
        local KILLED_PID=$(ps -ef | grep ${RUN_PID} | grep -v grep | awk '{print $2}')
        if [[ -z ${KILLED_PID} ]]; then
            printf "%s\n" "$(success)"
        else
            printf "%s\n" "$(failure)"
            result=$((${result}+1))
        fi

        rm -f ${run_instance} &> /dev/null 

    done
    return ${result}
}

iotagent_status()
{
    local result=0
    local iotagent_instance=${1}

    if [[ -z ${iotagent_instance} ]]; then
        list_run_instances="/var/run/iot/iotagent_*.pid"
    else
        list_run_instances="/var/run/iot/iotagent_${iotagent_instance}.pid"
    fi

    if [[ $(ls -l ${list_run_instances} 2> /dev/null | wc -l) -eq 0 ]]; then
        printf "%s\n" "There aren't any instance of IoTAgent ${iotagent_instance} running."
        return 1
    fi

    for run_instance in ${list_run_instances}
    do

        local NAME
        NAME=${run_instance%.pid}
        NAME=${NAME#*iotagent_}

        printf "%s\n" "IoTAgent ${NAME} status..."
        status -p ${run_instance} ${NODE_EXEC}
        result=$((${result}+${?}))

    done

    return ${result}
}


case ${PARAM} in

    'start')
        iotagent_start ${INSTANCE}
        ;;

    'stop')
        iotagent_stop ${INSTANCE}
        ;; 

    'restart')
        iotagent_stop ${INSTANCE}
        iotagent_start ${INSTANCE}
        ;;

    'status')
        iotagent_status ${INSTANCE}
        ;;
esac

And the logs file are in /tmp/ :

IoTAgent-IoTPlatform.log    
IoTAgent.log    
IoTAgent-Manager.log

Hope this helps you.

  • 1
    I tried this on two machines and the two fail in 'make install' as it is trying to build mongo-driver. Boost and log4cplus are built correctly, but for some reason mongo-driver fails. Should I post this on another question with details? Make output: `[ 9%] Performing update step for 'mongo-driver' [ 10%] No configure step for 'mongo-driver' [ 10%] Performing build step for 'mongo-driver' /bin/sh: scons: command not found make[2]: *** [third_party/mongo-driver/src/mongo-driver-stamp/mongo-driver-build] Error 127 make[1]: *** [CMakeFiles/mongo-driver.dir/all] Error 2 make: *** [all] Error 2` – A. Vieira Sep 09 '15 at 10:06
  • 1
    It was missing scons. Just did 'yum install scons'. It's compiling. – A. Vieira Sep 09 '15 at 11:06