}
 
 
+check_mysql_table() {
+       local db=$1
+       local table=$2
+       mysqlshow $MYSQL_ARGS $db 2>/dev/null | tail -n +5 | grep "\<$table\>" > /dev/null 2>&1
+}
+
+
 config_glite_lb_authz() {
        superusers="$1"
        rtm="$2"
        setup_authz=1
        setup_harvester=1
        setup_bdii=1
+       setup_emir=1
        setup_upgrade=1
        setup_startup=1
 }
        -h,--help .... usage
 
 ACTIONS are:
-       db certs msg authz harvester bdii upgrade startup
+       db certs msg authz harvester bdii emir upgrade startup
        krb    .... setup Kerberos
        krbgsi .... setup Kerberos and enable GSI autentization
        all ....... all actions (default)
        authz)  setup_authz=1 ;;
        harvester) setup_harvester=1 ;;
        bdii)   setup_bdii=1 ;;
+       emir)   setup_emir=1 ;;
        upgrade) setup_upgrade=1 ;;
        startup) setup_startup=1 ;;
        krb)    setup_kerberos=1 ;;
        esac
        shift
 done
-for action in db certs msg authz harvester bdii upgrade startup kerberos kerberos_gsi all none yaim logger; do
+for action in db certs msg authz harvester bdii emir upgrade startup kerberos kerberos_gsi all none yaim logger; do
        eval value=\"$`echo setup_$action`\"
        if test "$value" = "1"; then
                setup=1;
 fi
 
 if test "$setup_check" = "1"; then
-       if check_mysql_connection && mysqlshow $MYSQL_ARGS | grep "\<lbserver20\>" > /dev/null 2>&1; then
-               qecho "Database lbserver20 already exists."
+       if check_mysql_connection && \
+          mysqlshow $MYSQL_ARGS 2>/dev/null | grep "\<lbserver20\>" > /dev/null 2>&1 && \
+          check_mysql_table lbserver20 job_connections; then
+               qecho "database lbserver20 already exists."
                exit 0
        fi
        rm -f /tmp/glite-setup.$$
        fi
 
        # check if database exist and setup if necessary
-       if ! mysqlshow $MYSQL_ARGS | grep "\<lbserver20\>" > /dev/null 2>&1 || \
-          ! mysqlshow $MYSQL_ARGS lbserver20 jobs | grep 'Table: jobs\>' > /dev/null 2>&1; then
+       if ! mysqlshow $MYSQL_ARGS 2>/dev/null | grep "\<lbserver20\>" > /dev/null 2>&1 || \
+          ! check_mysql_table lbserver20 jobs; then
                mysql $MYSQL_ARGS -e "CREATE DATABASE lbserver20"
                mysql $MYSQL_ARGS -e "GRANT ALL PRIVILEGES on lbserver20.* to lbserver IDENTIFIED BY '' WITH GRANT OPTION;"
                mysql $MYSQL_ARGS -e "GRANT ALL PRIVILEGES on lbserver20.* to lbserver@'$HOSTNAME' IDENTIFIED BY '' WITH GRANT OPTION;"
 
        # migrate L&B 3.x to L&B 4.0
        if test -f $GLITE_LOCATION_ETC/glite-lb/glite-lb-migrate_db2version40; then
-               if ! mysqlshow $MYSQL_ARGS lbserver20 job_connections | grep 'Table: job_connection\>' > /dev/null 2>&1; then
+               if ! check_mysql_table lbserver20 job_connections; then
                        sh $GLITE_LOCATION_ETC/glite-lb/glite-lb-migrate_db2version40 -s
                        if test $? -eq 0; then
                                qecho "Database migrated to L&B 4.x"
 
 if test "$setup_bdii" = "1"; then
        export INFO_SERVICE_CONFIG='/etc/glite/info/service'
-       bdii=0
        if test -x /etc/init.d/bdii; then
                if test -f  ${INFO_SERVICE_CONFIG}/glite-info-service-lbserver.conf.template -a -f  ${INFO_SERVICE_CONFIG}/glite-info-glue2-lbserver.conf.template; then
-                       bdii=1
+                       if test -n "`which sudo 2>/dev/null`"; then
+                               bdii=1
+                       else
+                               echo "glite-lb-setup: WARNING: sudo not found, BDII won't be configured"
+                       fi
                else
                        echo "glite-lb-setup: WARNING: glite-info-provider-service not installed, BDII won't be configured"
                fi
        fi
 fi
 
+# ==== emir ====
+
+if test "$setup_emir" = "1"; then
+       if test -z "$EMIR_URL"; then
+               echo "glite-lb-setup: WARNING: EMIR_URL not set, EMIR won't be configured"
+               emir=0
+       fi
+       if test -n "`which emir-serp 2>/dev/null`"; then
+               emir_daemon=emir-serp
+               emir_conf=emir-serp
+               emir_mult=1
+       fi
+       if test -n "`which emird 2>/dev/null`"; then
+               emir_daemon=emird
+               emir_conf=emir
+               emir_mult=60
+       fi
+       if test "$emir" != "0" -a -z "$emir_daemon"; then
+               echo "glite-lb-setup: WARNING: emir-serp (emird) not installed, EMIR won't be configured"
+               emir=0
+       fi
+fi
+if test "$setup_emir" = "1" -a "$emir" != "0"; then
+       # interface version
+       if egrep -i "Debian|Ubuntu" /etc/issue >/dev/null; then
+               out=`dpkg-query -W glite-lb-ws-interface 2>/dev/null | cut -f2 | cut -d- -f1`
+       else
+               out=`rpm -q glite-lb-ws-interface 2>/dev/null | cut -d- -f5`
+       fi
+       if test -z  "$out"; then
+               out=`cat $GLITE_LOCATION/include/glite/lb/ws_interface_version.h 2>/dev/null | sed 's/.*"\(.*\)"/\1/'`
+       fi
+       GLITE_LB_INTERFACE_VERSION=${out:-'?.?.?'}
+
+       # some GLUE2 Service Location parameters
+       SITE_LONGITUDE=${SITE_LONGITUDE:-$SITE_LONG}
+       SITE_LATITUDE=${SITE_LATITUDE:-$SITE_LAT}
+       for i in Longitude Latitude Address Place Country PostCode; do
+               key=SITE_`echo $i | tr '[:lower:]' '[:upper:]'`
+               eval value="\$$key"
+               if test -n "$value"; then
+                       if ! echo $i | grep ^L >/dev/null 2>&1; then value="\"$value\""; fi
+                       json="$json     \"Service_Location_$i\": $value,
+"
+               fi
+       done
+
+       # L&B service info
+       mkdir -p /var/cache/$emir_daemon 2>/dev/null
+       cat > /var/cache/$emir_daemon/glite-lb-bkserver.json <<EOF
+{
+$json  "Service_ID": "`hostname -f`_lbserver",
+       "Service_Name": "${SITE_NAME:-site}-Server",
+       "Service_Type": "org.glite.lb.Server",
+       "Service_QualityLevel": "production",
+       "Service_CreationTime": { "\$date": "`TZ=C date +%FT%TZ`" },
+       "Service_Endpoint_ID": "`hostname -f`_lbserver_org.glite.lb.Server",
+       "Service_Endpoint_URL": "https://`hostname -f`:9003",
+       "Service_Endpoint_Capability": "information.logging",
+       "Service_Endpoint_Technology": "webservice",
+       "Service_Endpoint_InterfaceName": "org.glite.lb.Server",
+       "Service_Endpoint_InterfaceVersion": "$GLITE_LB_INTERFACE_VERSION",
+       "Service_Endpoint_ServingState": "production",
+       "Service_Endpoint_QualityLevel": "production",
+       "Service_Endpoint_WSDL": "http://egee.cesnet.cz/cms/export/sites/egee/en/WSDL/3.1/LB.wsdl"
+}
+EOF
+
+       period=$((4*$emir_mult))
+       validity=$((24*$emir_mult))
+       cat > /etc/emi/$emir_daemon/$emir_daemon.ini << EOF
+[$emir_conf]
+url = $EMIR_URL
+period = $period
+validity = $validity
+
+#cert = /etc/grid-security/emi/hostcert.pem
+#key = /etc/grid-security/emi/hostkey.pem
+#cadir = /etc/grid-security/certificates
+
+verbosity = debug
+
+[advancedService]
+json_file_location = /var/cache/$emir_daemon/glite-lb-bkserver.json
+EOF
+
+       # enable (for Debain) after configuring
+       if test -d /etc/default -a -f /etc/default/$emir_daemon; then
+               sed -i 's/.*ENABLED.*=.*/ENABLED=yes/' /etc/default/$emir_daemon
+       fi
+
+       # start the beast
+       if test -x /sbin/service; then
+               /sbin/chkconfig $emir_daemon on 2>/dev/null
+               # emird doesn't support chkconfig
+               if test $? -ne 0 && ! grep "$emir_daemon start" /etc/rc.local >/dev/null 2>&1; then
+                       echo "/etc/init.d/$emir_daemon start" >> /etc/rc.local
+                       chmod +x /etc/rc.local
+                       qecho "$emir_daemon added to /etc/rc.local"
+               fi
+               out="`/sbin/service $emir_daemon restart 2>&1`"
+       else
+               out="`/etc/init.d/$emir_daemon restart 2>&1`"
+       fi
+       if test $? -eq 0; then
+               qecho "EMIR configured"
+       else
+               echo "$out"
+               error="$error emir"
+       fi
+fi
+
+
 # ==== upgrade ====
 
 if test "$setup_upgrade" = "1"; then
                kerberos=0
        fi
 
-       if ! test -x `which klist`; then
+       if ! test -n "`which klist 2>/dev/null`"; then
                echo "glite-lb-setup: ERROR: kerberos clients not found"
                kerberos=0
        fi
 fi
 
 if test "$setup_kerberos_gsi" = "1"; then
-       if ! ldd $GLITE_LOCATION/bin/glite-lb-bkserver | grep libheim >/dev/null 2>&1; then
+       if ! ldd $GLITE_LOCATION/bin/glite-lb-bkserverd | grep libheim >/dev/null 2>&1; then
                echo "glite-lb-setup: ERROR: GSI mode with kerberos requires L&B built in Heimdal Kerberos implementation"
                error="$error krbgsi"
                kerberos=0
        fi
        if test "$kerberos" != "0"; then
+               libfile=`ldconfig -p | grep libglobus_gssapi_gsi.so | sed 's/.*=>\s*//'`
+               if test -z "$libfile"; then
+                       echo "glite-lb-setup: ERROR: libglobus_gssapi_gsi.so not found, GSI mode not configured"
+                       error="$error krbgsi"
+                       kerberos=0
+               fi
+       fi
+       if test "$kerberos" != "0"; then
                mkdir /etc/gss >/dev/null 2>&1
-               echo "gsi       1.3.6.1.4.1.3536.1.1    /usr/lib/libglobus_gssapi_gsi.so.4" > /etc/gss/mech
+               echo "gsi       1.3.6.1.4.1.3536.1.1    $libfile" > /etc/gss/mech
 
                qecho "GSI mode with Kerberos configured"
                echo "glite-lb-setup: NOTE: tuned Globus and Heimdal Kerberos libraries required for support GSI with Kerberos"