OpenWrt Forum Archive

Topic: Olsrd not connecting on Cambria.

The content of this topic has been archived on 30 Apr 2018. There are no obvious gaps in this topic, but there may still be some posts missing at the end.

Been working on this for awhile. I am running OpenWrt 8.09.2 (r18961) on a Gateworks Cambria gw2358-4. I've installed the packages and plugins for OLSRD-Luci. I believe I have OLSRD setup properly but I still keep getting "Unable to connect to the OLSR daemon!". I have the txtinfo plugin enabled. I will post the codes for my OLSRD, Network, Firewall and whatever configs i thought would be important. For testing purposes, I've only enabled 1 wifi connection. I would like to enable all 4 and run OLSRD. Please any help will be greatly appreciated.

/etc/init.d/olsrd

#!/bin/sh /etc/rc.common
# Copyright (C) 2008  Alina Friedrichsen <x-alina@gmx.net>
# Special thanks to bittorf wireless ))
START=50

BIN=/usr/sbin/olsrd
CONF=/var/etc/olsrd.conf
PID=/var/run/olsrd.pid

OLSRD_OLSRD_SCHEMA='ignore:internal config_file:internal DebugLevel=0 IpVersion=4 AllowNoInt:bool=1 Pollrate=0.025 TcRedundancy=2 MprCoverage=3 LinkQualityFishEye=1 LinkQualityDijkstraLimit=0+9.0 FIBMetric=flat ClearScreen:bool=1 Willingness=3 LinkQualityAging=0.1 LinkQualityAlgorithm=etx_fpm MinTCVTime=500.0'
OLSRD_IPCCONNECT_SCHEMA='ignore:internal Host:list Net:list2'
OLSRD_LOADPLUGIN_SCHEMA='ignore:internal library:internal Host:list Net:list2 Ping:list redistribute:list NonOlsrIf:list name:list lat lon latlon_infile HNA::list2 hosts:list2'
OLSRD_INTERFACE_SCHEMA='ignore:internal interface:internal AutoDetectChanges:bool Ip4Broadcast HelloInterval=5.0 HelloValidityTime=40.0 TcInterval=2.0 TcValidityTime=256.0 MidInterval=18.0 MidValidityTime=324.0 HnaInterval=18.0 HnaValidityTime=108.0'

T='     '
N='
'

validate_varname() {
        local varname=$1
        [ -z "$varname" -o "$varname" != "${varname%%[!A-Za-z0-9_]*}" ] && return 1
        return 0
}

validate_ifname() {
        local ifname=$1
        [ -z "$ifname" -o "$ifname" != "${ifname%%[!A-Za-z0-9.:_-]*}" ] && return 1
        return 0
}

validate_olsrd_option() {
        local str=$1
        [ -z "$str" -o "$str" != "${str%%[!     0-9A-Za-z./:_-]*}" ] && return 1
        return 0
}

get_ifname() {
        IFNAME=
        local interface=$1
        validate_varname "$interface" || return 1
        local ifname

        config_get ifname "$interface" ifname
        validate_ifname "$ifname" || return 1
        IFNAME=$ifname

        return 0
}

system_config() {
        local cfg=$1
        local cfgt
        local hostname
        local latlon

        config_get cfgt "$cfg" TYPE

        if [ "$cfgt" = "system" ]; then
                config_get hostname "$cfg" hostname
                hostname=${hostname:-OpenWrt}
                SYSTEM_HOSTNAME=$hostname
        fi

        if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then
                config_get latlon "$cfg" latlon
                IFS=" ${T}${N},"
                set -- $latlon
                unset IFS
                SYSTEM_LAT=$1
                SYSTEM_LON=$2
        fi

        if [ -z "$SYSTEM_LAT" -o -z "$SYSTEM_LON" ]; then
                config_get latlon "$cfg" latlon
                IFS=" ${T}${N},"
                set -- $latlon
                unset IFS
                SYSTEM_LAT=$1
                SYSTEM_LON=$2
        fi
}

olsrd_find_config_file() {
        local cfg=$1
        validate_varname "$cfg" || return 0

        config_get_bool ignore "$cfg" ignore 0
        [ "$ignore" -ne 0 ] && return 0
        config_get OLSRD_CONFIG_FILE "$cfg" config_file

        return 0
}

warning_invalid_value() {
        local package=$1
        validate_varname "$package" || package=
        local config=$2
        validate_varname "$config" || config=
        local option=$3
        validate_varname "$option" || option=

        echo -n "Warning: Invalid value" 1>&2

        if [ -n "$package" -a -n "$config" ]; then
                echo -n " in option '$package.$config${option:+.}$option'" 1>&2
        fi

        echo ", skipped" 1>&2

        return 0
}

olsrd_write_option() {
        local param=$1
        local cfg=$2
        validate_varname "$cfg" || return 1
        local option=$3
        validate_varname "$option" || return 1
        local value=$4
        local option_type=$5

        if [ "$option_type" = bool ]; then
                case "$value" in
                        1|on|true|enabled|yes) value=yes;;
                        0|off|false|disabled|no) value=no;;
                        *) warning_invalid_value olsrd "$cfg" "$option"; return 1;;
                esac
        fi

        if ! validate_olsrd_option "$value"; then
                warning_invalid_value olsrd "$cfg" "$option"
                return 1
        fi

        if [ "$value" != "${value%%[G-Zg-z_-]*}" ]; then
                if [ "$option" != "Ip6AddrType" -a "$value" != "yes" -a "$value" != "no" ]; then
                        value="\"$value\""
                fi
        fi

        echo -n "${N}$param$option $value"

        return 0
}

olsrd_write_plparam() {
        local param=$1
        local cfg=$2
        validate_varname "$cfg" || return 1
        local option=$3
        validate_varname "$option" || return 1
        local value=$4
        local option_type=$5
        local _option

        if [ "$option_type" = bool ]; then
                case "$value" in
                        1|on|true|enabled|yes) value=yes;;
                        0|off|false|disabled|no) value=no;;
                        *) warning_invalid_value olsrd "$cfg" "$option"; return 1;;
                esac
        fi

        if ! validate_olsrd_option "$value"; then
                warning_invalid_value olsrd "$cfg" "$option"
                return 1
        fi

        IFS='-_'
        set -- $option
        option="$*"
        unset IFS
        _option="$option"
        if [ "$option" = 'hosts' ]; then
                set -- $value
                option=$1
                shift
                value="$*"
        fi

        echo -n "${N}${param}PlParam \"$option\" \"$value\""

        return 0
}

config_update_schema() {
        unset IFS
        local schema_varname=$1
        validate_varname "$schema_varname" || return 1
        local command=$2
        validate_varname "$command" || return 1
        local option=$3
        validate_varname "$option" || return 1
        local value=$4
        local schema
        local cur_option

        case "$varname" in
                *_LENGTH) return 0;;
                *_ITEM*) return 0;;
        esac

        eval "export -n -- \"schema=\${$schema_varname}\""

        for cur_option in $schema; do
                [ "${cur_option%%[:=]*}" = "$option" ] && return 0
        done

        if [ "$command" = list ]; then
                set -- $value
                if [ "$#" -ge "3" ]; then
                        schema_entry="$option:list3"
                elif [ "$#" -ge "2" ]; then
                        schema_entry="$option:list2"
                else
                        schema_entry="$option:list"
                fi
        else
                schema_entry="$option"
        fi

        append "$schema_varname" "$schema_entry"

        return 0
}

config_write_options() {
        unset IFS
        local schema=$1
        local cfg=$2
        validate_varname "$cfg" || return 1
        local write_func=$3
        [ -z "$write_func" ] && output_func=echo
        local write_param=$4
        local schema_entry
        local option
        local option_length
        local option_type
        local default
        local value
        local list_size
        local list_item
        local list_value
        local i
        local position

        for schema_entry in $schema; do
                default=${schema_entry#*[=]}
                [ "$default" = "$schema_entry" ] && default=
                option=${schema_entry%%[=]*}
                IFS=':'
                set -- $option
                unset IFS
                option=$1
                option_type=$2
                validate_varname "$option" || continue
                [ -z "$option_type" ] || validate_varname "$option_type" || continue
                [ "$option_type" = internal ] && continue
                config_get value "$cfg" "$option"

                if [ -z "$value" ]; then
                        IFS='+'
                        set -- $default
                        unset IFS
                        value=$*
                elif [ "$value" = '-' -a -n "$default" ]; then
                        continue
                fi

                [ -z "$value" ] && continue

                case "$option_type" in
                        list) list_size=1;;
                        list2) list_size=2;;
                        list3) list_size=3;;
                        *) list_size=0;;
                esac

                if [ "$list_size" -gt 0 ]; then
                        config_get option_length "$cfg" "${option}_LENGTH"
                        if [ -n "$option_length" ]; then
                                i=1
                                while [ "$i" -le "$option_length" ]; do
                                        config_get list_value "$cfg" "${option}_ITEM$i"
                                        "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type" || break
                                        i=$((i + 1))
                                done
                        else
                                list_value=
                                i=0
                                for list_item in $value; do
                                        append "list_value" "$list_item"
                                        i=$((i + 1))
                                        position=$((i % list_size))
                                        if [ "$position" -eq 0 ]; then
                                                "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type" || break
                                                list_value=
                                        fi
                                done
                                [ "$position" -ne 0 ] && "$write_func" "$write_param" "$cfg" "$option" "$list_value" "$option_type"
                        fi
                else
                        "$write_func" "$write_param" "$cfg" "$option" "$value" "$option_type"
                fi
        done

        return 0
}

olsrd_write_olsrd() {
        local cfg=$1
        validate_varname "$cfg" || return 0
        local ignore

        config_get_bool ignore "$cfg" ignore 0
        [ "$ignore" -ne 0 ] && return 0

        [ "$OLSRD_COUNT" -gt 0 ] && return 0

        config_write_options "$OLSRD_OLSRD_SCHEMA" "$cfg" olsrd_write_option
        echo
        OLSRD_COUNT=$((OLSRD_COUNT + 1))

        return 0
}

olsrd_write_ipcconnect() {
        local cfg=$1
        validate_varname "$cfg" || return 0
        local ignore

        config_get_bool ignore "$cfg" ignore 0
        [ "$ignore" -ne 0 ] && return 0

        [ "$IPCCONNECT_COUNT" -gt 0 ] && return 0

        echo -n "${N}IpcConnect${N}{"
        config_write_options "$OLSRD_IPCCONNECT_SCHEMA" "$cfg" olsrd_write_option "${T}"
        echo "${N}}"
        IPCCONNECT_COUNT=$((IPCCONNECT_COUNT + 1))

        return 0
}

olsrd_write_hna4() {
        local cfg=$1
        validate_varname "$cfg" || return 0
        local ignore

        config_get_bool ignore "$cfg" ignore 0
        [ "$ignore" -ne 0 ] && return 0

        config_get netaddr "$cfg" netaddr
        if ! validate_olsrd_option "$netaddr"; then
                warning_invalid_value olsrd "$cfg" "netaddr"
                return 0
        fi

        config_get netmask "$cfg" netmask
        if ! validate_olsrd_option "$netmask"; then
                warning_invalid_value olsrd "$cfg" "netmask"
                return 0
        fi

        [ "$HNA4_COUNT" -le 0 ] && echo -n "${N}Hna4${N}{"
        echo -n "${N}${T}$netaddr $netmask"
        HNA4_COUNT=$((HNA4_COUNT + 1))

        return 0
}

olsrd_write_hna6() {
        local cfg=$1
        validate_varname "$cfg" || return 0
        local ignore
        config_get_bool ignore "$cfg" ignore 0
        [ "$ignore" -ne 0 ] && return 0

        config_get netaddr "$cfg" netaddr
        if ! validate_olsrd_option "$netaddr"; then
                warning_invalid_value olsrd "$cfg" "netaddr"
                return 0
        fi

        config_get prefix "$cfg" prefix
        if ! validate_olsrd_option "$prefix"; then
                warning_invalid_value olsrd "$cfg" "prefix"
                return 0
        fi

        [ "$HNA6_COUNT" -le 0 ] && echo -n "${N}Hna6${N}{"
        echo -n "${N}${T}$netaddr $prefix"
        HNA6_COUNT=$((HNA6_COUNT + 1))

        return 0
}

olsrd_write_loadplugin() {
        local cfg=$1
        validate_varname "$cfg" || return 0
        local ignore
        local name
        local suffix
        local lat
        local lon
        local latlon_infile

        config_get_bool ignore "$cfg" ignore 0
        [ "$ignore" -ne 0 ] && return 0

        config_get library "$cfg" library
        if ! validate_olsrd_option "$library"; then
                warning_invalid_value olsrd "$cfg" "library"
                return 0
        fi
        if ! [ -x "/lib/$library" -o -x "/usr/lib/$library" -o -x "/usr/local/lib/$library" ]; then
                echo "Warning: Plugin library '$library' not found, skipped" 1>&2
                return 0
        fi

        case "$library" in
                olsrd_nameservice.*)
                        config_get name "$cfg" name
                        [ -z "$name" ] && config_set "$cfg" name $SYSTEM_HOSTNAME

                        config_get suffix "$cfg" suffix
                        [ -z "$suffix" ] && config_set "$cfg" suffix '.olsr'

                        config_get lat "$cfg" lat
                        config_get lon "$cfg" lon
                        config_get latlon_infile "$cfg" latlon_infile
                        if [ \( -z "$lat" -o -z "$lat" \) -a -z "$latlon_infile" ]; then
                                if [ -f '/var/run/latlon.txt' ]; then
                                        config_set "$cfg" lat ''
                                        config_set "$cfg" lon ''
                                        config_set "$cfg" latlon_infile '/var/run/latlon.txt'
                                else
                                        config_set "$cfg" lat "$SYSTEM_LAT"
                                        config_set "$cfg" lon "$SYSTEM_LON"
                                fi
                        fi

                        config_get latlon_file "$cfg" latlon_file
                ;;
        esac

        echo -n "${N}LoadPlugin \"$library\"${N}{"
        config_write_options "$OLSRD_LOADPLUGIN_SCHEMA" "$cfg" olsrd_write_plparam "${T}"
        echo "${N}}"

        return 0
}

olsrd_write_interface() {
        local cfg=$1
        validate_varname "$cfg" || return 0
        local ignore
        local interfaces
        local interface
        local ifnames

        config_get_bool ignore "$cfg" ignore 0
        [ "$ignore" -ne 0 ] && return 0

        ifnames=
        config_get interfaces "$cfg" interface
        for interface in $interfaces; do
                if validate_varname "$interface"; then
                        if get_ifname "$interface"; then
                                ifnames="$ifnames \"$IFNAME\""
                        else
                                echo "Warning: Interface '$interface' not found, skipped" 1>&2
                        fi
                else
                        warning_invalid_value olsrd "$cfg" "interface"
                fi
        done

        [ -z "$ifnames" ] && return 0

        echo -n "${N}Interface$ifnames${N}{"
        config_write_options "$OLSRD_INTERFACE_SCHEMA" "$cfg" olsrd_write_option "${T}"
        echo "${N}}"
        INTERFACES_COUNT=$((INTERFACES_COUNT + 1))

        return 0
}

olsrd_update_schema() {
        local command="$1"
        validate_varname "$command" || return 0
        local varname="$2"
        validate_varname "$varname" || return 0
        local value="$3"
        local cfg="$CONFIG_SECTION"
        local cfgt
        local cur_varname
        config_get cfgt "$cfg" TYPE
        case "$cfgt" in
                olsrd) config_update_schema OLSRD_OLSRD_SCHEMA "$command" "$varname" "$value";;
                IpcConnect) config_update_schema OLSRD_IPCCONNECT_SCHEMA "$command" "$varname" "$value";;
                LoadPlugin) config_update_schema OLSRD_LOADPLUGIN_SCHEMA "$command" "$varname" "$value";;
                Interface) config_update_schema OLSRD_INTERFACE_SCHEMA "$command" "$varname" "$value";;
        esac

        return 0
}

olsrd_write_config() {
        OLSRD_COUNT=0
        config_foreach olsrd_write_olsrd olsrd
        IPCCONNECT_COUNT=0
        config_foreach olsrd_write_ipcconnect IpcConnect
        HNA4_COUNT=0
        config_foreach olsrd_write_hna4 Hna4
        [ "$HNA4_COUNT" -gt 0 ] && echo "${N}}"
        HNA6_COUNT=0
        config_foreach olsrd_write_hna6 Hna6
        [ "$HNA6_COUNT" -gt 0 ] && echo "${N}}"
        config_foreach olsrd_write_loadplugin LoadPlugin
        INTERFACES_COUNT=0
        config_foreach olsrd_write_interface Interface
        echo

        return 0
}

start() {
        ### check for running instance
        if [ -s $PID ]; then
                if kill -0 $(cat $PID) 2>&-; then
                        echo "there is already a running instance ($(cat $PID))"
                        return 1
                fi
        fi

        ### disable icmp redirects
        echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects

        SYSTEM_HOSTNAME=
        SYSTEM_LAT=
        SYSTEM_LON=
        config_load system
        config_foreach system_config system

        option_cb() {
                olsrd_update_schema "option" "$@"
        }

        list_cb() {
                olsrd_update_schema "list" "$@"
        }

        include /lib/network
        scan_interfaces
        config_load olsrd
        reset_cb

        OLSRD_CONFIG_FILE=
        config_foreach olsrd_find_config_file olsrd

        if [ -z "$OLSRD_CONFIG_FILE" ]; then
                ### generate config
                mkdir -p ${CONF%/*}
                olsrd_write_config > $CONF
                if [ "$INTERFACES_COUNT" -gt 0 -a "$OLSRD_COUNT" -gt 0 ]; then
                        OLSRD_CONFIG_FILE=$CONF
                fi
        fi

        [ -z "$OLSRD_CONFIG_FILE" ] && return 1

        ### start olsrd
        start-stop-daemon -q -b -m -p $PID -x $BIN -S -- -f $CONF -nofork
}

stop() {
        ### stop olsrd
        start-stop-daemon -q -p $PID -x $BIN -K

        ### re-enable icmp redirects
        echo 1 > /proc/sys/net/ipv4/conf/all/send_redirects
}

restart() {
        ### override generic restart because we need some time between stop and start
        stop; sleep 3; start
}

/etc/config/network

config 'interface' 'loopback'
        option 'ifname' 'lo'
        option 'proto' 'static'
        option 'ipaddr' '127.0.0.1'
        option 'netmask' '255.0.0.0'

config 'interface' 'lan'
        option 'ifname' 'eth0'
        option 'proto' 'static'
        option 'ipaddr' '192.168.1.1'
        option 'netmask' '255.255.255.0'
        option 'defaultroute' '0'
        option 'peerdns' '0'

config 'interface' 'wan'
        option 'proto' 'dhcp'
        option 'ifname' 'eth1'
        option 'defaultroute' '0'
        option 'peerdns' '0'

config 'interface' 'vlan0'
        option 'proto' 'static'
        option 'ipaddr' '192.168.2.1'
        option 'netmask' '255.255.255.0'
        option 'defaultroute' '0'
        option 'peerdns' '0'
        option 'bcast' '255.255.255.255'
        option 'ifname' 'ath0'

/etc/config/olsrd

config 'olsrd'
        option 'IpVersion' '4'
        option 'FIBMetric' 'flat'
        option 'LinkQualityAlgorithm' 'etx_ff'
        option 'DebugLevel' '0'
        option 'Pollrate' '0.2'
        option 'TcRedundancy' '2'
        option 'MprCoverage' '7'
        option 'LinkQualityLevel' '2'
        option 'LinkQualityFishEye' '1'
        option 'LinkQualityWinSize' '100'
        option 'LinkQualityDijkstraLimit' '0 7.0'
        option 'ClearScreen' 'yes'
        option 'Willingness' '3'

config 'Interface'
        option 'interface' 'vlan0'
        option 'Ip4Broadcast' '255.255.255.255'
        option 'HelloInterval' '5.0'
        option 'HelloValidityTime' '90.0'
        option 'TcInterval' '3.0'
        option 'TcValidityTime' '270.0'
        option 'MidInterval' '15.0'
        option 'MidValidityTime' '270.0'
        option 'HnaInterval' '15.0'
        option 'HnaValidityTime' '90.0'
        option 'AutoDetectChanges' 'yes'
        option 'ignore' '0'

config 'LoadPlugin'
        option 'library' 'olsrd_dyn_gw_plain.so.0.4'

config 'LoadPlugin'
        option 'library' 'olsrd_nameservice.so.0.3'
        option 'suffix' '.olsr'
        option 'hosts_file' '/var/etc/hosts.olsr'

config 'LoadPlugin'
        option 'library' 'olsrd_txtinfo.so.0.1'
        option 'accept' '127.0.0.1'

config 'Hna4'
        option 'netmask' '255.255.255.0'
        option 'netaddr' '192.168.2.0/24'

config 'LoadPlugin'
        option 'library' 'olsrd_watchdog.so.0.1'
        option 'ignore' '1'

config 'LoadPlugin'
        option 'library' 'olsrd_arprefresh.so.0.1'
        option 'ignore' '1'

config 'LoadPlugin'
        option 'library' 'olsrd_secure.so.0.5'
        option 'ignore' '1'

config 'LoadPlugin'
        option 'library' 'olsrd_dyn_gw.so.0.4'
        option 'ignore' '1'

config 'LoadPlugin'
        option 'library' 'olsrd_bmf.so.1.5.3'
        option 'ignore' '1'

config 'LoadPlugin'
        option 'library' 'olsrd_quagga.so.0.2.2'
        option 'ignore' '1'

config 'LoadPlugin'
        option 'library' 'olsrd_httpinfo.so.0.1'
        option 'ignore' '1'

config 'LoadPlugin'
        option 'library' 'olsrd_dot_draw.so.0.3'
        option 'ignore' '1'

config 'LoadPlugin'
        option 'library' 'olsrd_mdns.so.1.0.0'
        option 'ignore' '1'

/var/etc/olsrd.conf

DebugLevel 0
IpVersion 4
AllowNoInt yes
Pollrate 0.2
TcRedundancy 2
MprCoverage 7
LinkQualityFishEye 1
LinkQualityDijkstraLimit 0 7.0
FIBMetric "flat"
ClearScreen yes
Willingness 3
LinkQualityAging 0.1
LinkQualityAlgorithm "etx_ff"
MinTCVTime 500.0
LinkQualityLevel 2
LinkQualityWinSize 100

Hna4
{
        192.168.2.0/24 255.255.255.0
}

LoadPlugin "olsrd_dyn_gw_plain.so.0.4"
{
}

LoadPlugin "olsrd_nameservice.so.0.3"
{
        PlParam "name" "OpenWrt"
        PlParam "suffix" ".olsr"
        PlParam "hosts-file" "/var/etc/hosts.olsr"
}

LoadPlugin "olsrd_txtinfo.so.0.1"
{
        PlParam "accept" "127.0.0.1"
}

Interface "ath0"
{
        AutoDetectChanges yes
        Ip4Broadcast 255.255.255.255
        HelloInterval 5.0
        HelloValidityTime 90.0
        TcInterval 3.0
        TcValidityTime 270.0
        MidInterval 15.0
        MidValidityTime 270.0
        HnaInterval 15.0
        HnaValidityTime 90.0
}

/etc/config/firewall

config 'defaults'
        option 'syn_flood' '1'
        option 'input' 'ACCEPT'
        option 'output' 'ACCEPT'
        option 'forward' 'ACCEPT'

config 'zone'
        option 'name' 'lan'
        option 'input' 'ACCEPT'
        option 'output' 'ACCEPT'
        option 'forward' 'ACCEPT'
        option 'masq' '1'

config 'zone'
        option 'name' 'wan'
        option 'output' 'ACCEPT'
        option 'masq' '1'
        option 'mtu_fix' '1'
        option 'input' 'ACCEPT'
        option 'forward' 'ACCEPT'

config 'forwarding'
        option 'src' 'lan'
        option 'dest' 'wan'

config 'rule'
        option 'src' 'wan'
        option 'proto' 'udp'
        option 'dest_port' '68'
        option 'target' 'ACCEPT'

config 'include'
        option 'path' '/etc/firewall.user'

config 'zone'
        option 'name' 'vlan0'
        option 'input' 'ACCEPT'
        option 'output' 'ACCEPT'
        option 'forward' 'ACCEPT'
        option 'masq' '1'

I'm curious if the information at http://nuwiki.openwrt.org/oldwiki/olsrmeshhowto is still accurate as well. Do I still need to use this line of code?

ln -s /etc/init.d/olsrd /etc/rc.d/S60olsrd

Is there another way to key this for the latest version of kamikaze? Is firewall.user configured the same way as in the link or is it not necessary anymore? An updated HowTo would be great if there is any.

The discussion might have continued from here.