summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rvi_ubuntu.config366
-rwxr-xr-xscripts/rvi.sh192
2 files changed, 0 insertions, 558 deletions
diff --git a/rvi_ubuntu.config b/rvi_ubuntu.config
deleted file mode 100644
index e54ca63..0000000
--- a/rvi_ubuntu.config
+++ /dev/null
@@ -1,366 +0,0 @@
-%% -*- erlang -*-
-
-%% Copyright (C) 2014, Jaguar Land Rover
-%%
-%% This program is licensed under the terms and conditions of the
-%% Mozilla Public License, version 2.0. The full text of the
-%% Mozilla Public License is at https://www.mozilla.org/MPL/2.0/
-%%
-%% Configuration file for the (in-vehicle) IVI used by the hvac_demo
-%%
-%% See ../hvac_demo/README.md for details on the demo.
-%%
-%% See ../CONFIGURE.md for a details on the configuration process
-%% itself.
-%%
-[
- %% All erlang apps needed to fire up a node. Do not touch.
- {apps,
- [kernel,
- stdlib,
- sasl,
- {setup, load},
- syntax_tools,
- lager,
- crypto,
- public_key,
- exo,
- compiler,
- ssl,
- asn1,
- %% RVI-specific apps.
-
- %% Do not touch unless you are replacing apps with your own
- %% version. If you are replacing an app with a non-Erlang version,
- %% it still has to be loaded in order to resolve.
- %% If, for example, you want to deploy your own scheduler
- %% outside Erlang, replace
- %%
- %% schedule,
- %% with
- %% { schedule, load },
- %%
- rvi,
- rvi_common,
- service_discovery,
- service_edge,
- authorize,
- schedule,
- dlink_tcp,
- %%{bt,load},
- %%{dlink_bt, load}
- proto_bert,
- proto_json
- ]},
-
- %%
- %% Custom environment settings
- %% for all apps running on the node.
- %%
- {env,
- [
- %% Lager is the main logging mechanism.
- %% See https://github.com/basho/lager for details.
- %%
- {lager,
- [ { handlers,
- %% Change this to debug, info, notice, warning, or error in
- %% order to lower the console chatter.
- [ {lager_console_backend, notice} ]
- }
- ]
- },
-
- %% All RVI configuration is done here.
- %%
- %% Please note that the rvi_node.sh launch script
- %% can still override the port range and static nodes
- %% through its command line parameters.
- %%
- %% Value substitution:
- %% All string values under the rvi tuple tree are scanned
- %% for specific dokens during startup. If a token is
- %% found, it will be replaced with a value referenced by it.
- %% Tokens can one of the following:
- %%
- %% $rvi_file(FileName,Default) - File content
- %% When an $rvi_file() token is encountered, the first line of
- %% the referenced file is read. The line (without the newline)
- %% replaces the token.
- %%
- %% Example:
- %% { node_service_prefix, "jlr.com/vin/$rvi_file(/etc/vin,default_vin)"},
- %%
- %% will be substituted with the first line from the file
- %% /etc/vin:
- %%
- %% { node_service_prefix, "jlr.com/vin/2GKEG25HXP4093669"},
- %%
- %% If /etc/vin cannot be opened, the value default_vin
- %% will be used instead.
- %%
- %%
- %% $rvi_env(EnvironemtnName,Default) - Environment variable
- %% When an $rvi_env() token is encountered, the value of
- %% the Linux process environment variable (such as $HOME) is read
- %% to replace the token.
- %%
- %% Example:
- %% { node_service_prefix, "jlr.com/vin/$rvi_env(VIN,default_vin)"},
- %%
- %% will be substituted with the value of the $VIN environment
- %% variable:
- %%
- %% { node_service_prefix, "jlr.com/vin/2GKEG25HXP4093669"},
- %%
- %% If VIN is not a defined environment variable, the value
- %% default_vin will be used instead.
- %%
- %%
- %% $rvi_uuid(Default) - Unique machine identifier
- %% When an $rvi_uuid() token is encountered, the UUID of the root
- %% disk used by the system is read to replace the token.
- %% The UUID of the root disk is retrieved by opening /proc/cmdline
- %% and extracting the root=UUID=[DiskUUID] value.
- %% This value is generated at system install time and is reasonably
- %% world wide unique.
- %%
- %% Example:
- %% { node_service_prefix, "jlr.com/vin/$uuid(default_vin)"},
- %%
- %% will be substituted with the value of the root disk UUID:
- %%
- %% { node_service_prefix,
- %% "jlr.com/vin/afc0a6d8-0264-4f8a-bb3e-51ff8655b51c"},
- %%
- %% If the root UUID cannot be retrieved, the value default_vin
- %% will be used instead.
- %%
-
- {rvi,
- [
-
- %% Specify the node address that data_link uses to listen to
- %% incoming traffic from other rvi nodes.
- %%
- %% This is the address that is announced to
- %% other rvi nodes during service discovery and should be
- %% forwarded through firewalls and port forwarding to to the port
- %% specified by the configuration entry rvi -> components ->
- %% data_link -> bert_rpc_server (see below).
- %%
- %% If this node is sitting behind a firewall and cannot
- %% receive incomign connections on any address, its
- %% node_address should be set to "0.0.0.0:0" to inform
- %% the remote node that it should not attempt to
- %% connect back to self.
- { node_address, "127.0.0.1:8807" },
-
- %% Specify the prefix of all services that this rvi node is hosting.
- %%
- %% All local services regsitering with service edge will be prefixed with
- %% the string below when they are announced to remote rvi nodes
- %% that connect to this node (using the address specified
- %% by node_address above).
- %%
- %% If a locally connected service registers itself as
- %% "hvac/fan_speed", and the node_service_prefix is
- %% "jlr.com/vin/1234/", this node will announce the service
- %% "jlr.com/vin/1234/hvac/fan_speed" as being available
- %% to remotely connected rvi nodes.
- %%
- %% Two rvi nodes should never have the same node_service_prefix
- %% value unless all services add a system-wide unique name
- %% to it.
- %%
- { node_service_prefix, "jlr.com/vin/$rvi_file(/etc/rvi/device_id,default_vin)/"},
-
-
- %% Routing rules determine how to get a message targeting a specific
- %% service to its destination.
- %%
- %% Please note that if a remotely initiated (== client) data link is
- %% available and has announced that the targeted service is available,
- %% that data link will be used regardless of what it is.
- %%
- %% In other words, if you setup routing rules for how to reach out
- %% to a vehicle using SMS, and that vehicle happens to have a 3G
- %% connection up when the message is sent, the 3G connection will be used.
- %%
- %% We will add a blacklist feature in the future to optionally block
- %% such opportunistic routing in the future.
- %%
- { routing_rules,
- [
- %% Service name prefix that rules are specified for
- %% The service prefix with the longest match against the service targeted
- %% by the message will be used.
- %%
- %% Example: Targeted service = jlr.com/backend/sota/get_updates
- %%
- %% Prefix1: { "jlr.com/backend", [...]}
- %% Prefix2: { "jlr.com/backend/sota", [...]}
- %%
- %% Prefix2 will be used.
- %%
- %% This allows you, for example, to setup different servers
- %% for different types of services (SOTA, remote door unlock,
- %% HVAC etc).
- %%
-
- %% Make sure to have a default if you don't want your message
- %% to error out immediately. With a default the message will
- %% be queued until it times out, waiting for a remote node
- %% to connect and announce that it can handle the targeted service.
- { "",
- [
- { proto_json_rpc, dlink_tcp_rpc}
- ]
- },
-
- { "jlr.com/backend/",
- %% Which protocol and data link pair to use when transmitting the message
- %% to the targeted service. If a pair reports a failure, the next pair is tried.
-
- %% Use JSON-based protocol and data link. Have the data link connect
- %% to a given target in order to reach the node hosting
- %% "jlr.com/backend" prefixed services.
- [
- { proto_json_rpc, { dlink_tcp_rpc, [ { target, "38.129.64.13:8807" } ]}}
- ]
- },
-
- %% Used to communicate with vehicles
- { "jlr.com/vin/",
- [
- { proto_bert_rpc, { dlink_tcp_rpc, [ broadcast, { interface, "wlan0" } ] } },
- %% server_3g is augmented with hinting, provided to
- { bert_rpc, { server_3g, [ initiate_outbound ]} },
-
- %% Protocols can have hinting as well.
- %% In this case bert_rpc should only be used if the
- %% resulting message size can fit in an SMS (140 bytes).
-
- { { bert_rpc, [ { max_msg_size, 140 } ] } , server_sms }
- ]
- }
- ]
- },
- { components,
- [
- %% A note about JSON-RPC calls vs gen_server calls:
- %%
- %% All locally connected services communicate with Service Edge
- %% through JSON-RPC.
- %%
- %% Communication between the internal RVI components, however,
- %% can be either JSON-RPC or gen_server calls.
- %%
- %% JSON-RPC calls provide compatability with replacement components
- %% written in languages other than Erlang.
- %%
- %% Gen_server calls provide native erlang inter-process calls that
- %% are about 4x faster than JSON-RPC when transmitting large data volumes.
- %%
- %% If one or more of the components below are replaced with external
- %% components, use JSON-RPC by specifying IP address and port in
- %% json_rpc_address for all interfaced by the external components.
- %%
- %% If you are running an all-native erlang system, use gen_server calls
- %% by specifying gen_server for all components
- %%
- %% Please note that communication between two RVI nodes are
- %% not affected by this since data_link_bert_rpc will use
- %% BERT-RPC to communicate ( using the address/port specified
- %% by bert_rpc_server).
- %%
-
- %% Service_edge.
- %% The service_edge tuple is a top level configuration
- %% container for everything about service edge.
- %% In theory, we can support multiple different service edge
- %% components (written in different languages).
- %%
- %% However, until we've sorted out internal routing, we will
- %% only support the native service_edge_rpc component,
- %% accessed either as a gen_server or through JSON-RPC.
- %%
- {service_edge,
- [
- %% Service_edge_rpc component is used as a gen_server
- { service_edge_rpc, gen_server,
- [
- %% JSON-RPC address will be translated to
- %% an URL looking like this:
- %% http://127.0.0.1:8801
- %%
- %% This URL is used both for communication with
- %% locally connected services and for intra-component
- %% communication in case the access method for
- %% service_edge_rpc is specified as json_rpc.
- { json_rpc_address, { "127.0.0.1", 8801 } },
-
- %% Websocket is used for websocket access, preferably
- %% through the rvi.js package available for Javascript
- %% apps in browsers and crosswalk who wants to interface
- %% RVI.
- { websocket, [ { port, 8808}]}
- ]
- }
- ]
- },
- { service_discovery,
- [ { service_discovery_rpc, gen_server,
- [
- { json_rpc_address, { "127.0.0.1", 8802 }}
- ]
- }
- ]
- },
- { schedule,
- [ { schedule_rpc, gen_server,
- [
- { json_rpc_address, { "127.0.0.1", 8803 }}
- ]
- }
- ]
- },
- { authorize,
- [ { authorize_rpc, gen_server,
- [
- { json_rpc_address, { "127.0.0.1", 8804 } }
- ]
- }
- ]
- },
- { protocol,
- [ { proto_json_rpc, gen_server,
- [
- { json_rpc_address, { "127.0.0.1", 8805 } }
- ]
- }
- ]
- },
- { data_link,
- [ { dlink_tcp_rpc, gen_server,
- [
- { json_rpc_address, { "127.0.0.1", 8806 } },
- %% Bert_rpc server specifies the port we should
- %% listen to for incoming connections
- %% from other rvi nodes.
- %% A specific NIC address can also be specified
- %% through the {ip, "192.168.0.1" } tuple.
- { server_opts, [ { port, 8807 }]},
-
- %% Persistent connections are connected to at
- %% startup, and will be reconnected to in case they fail
- { persistent_connections, [ "38.129.64.13:8807" ]}
- ]
- }
- ]
- }
- ]
- }
- ]}
- ]}
-].
diff --git a/scripts/rvi.sh b/scripts/rvi.sh
deleted file mode 100755
index 7b69d8d..0000000
--- a/scripts/rvi.sh
+++ /dev/null
@@ -1,192 +0,0 @@
-#!/bin/sh
-#
-# Copyright (C) 2014, Jaguar Land Rover
-#
-# Mozilla Public License, version 2.0. The full text of the
-# Mozilla Public License is at https://www.mozilla.org/MPL/2.0/
-#
-#
-# Setup a correct configuration and launch an RVI release node.
-# If a UUID file has not been created, it will be done at this time.
-# Init.d script to start and stop an RVI system installed
-# through an RPM.
-#
-
-SELF_DIR=$(dirname $(readlink -f "$0"))
-
-ERL=${ERL:=erl}
-
-usage() {
- echo "Usage: $0 -d config_dir -c config_file -l log_dir \\"
- echo " start|stop|console|attach|ping"
- echo
- echo " -c config_file Configuration file to launch rvi node with. "
- echo " If omitted the rvi_sample.config in the configuration "
- echo " directory will be used."
- echo
- echo " -s short_name Erlang node short name. Defaults to 'rvi_core'"
- echo
- echo " -C cookie Erlang node cookie to use. Defaults to 'rvi_cookue'"
- echo
- echo " -d config_dir Directory to put generated uuid 'device_id' file and"
- echo " processed config files."
- echo " Defauts to the '/etc/opt/rvi'."
- echo
- echo " -l log_dir The directory to store log files in."
- echo " Defaults to '/tmp/rvi/[config]/log' where [config]"
- echo " is the base name of the configuration file."
- echo
- echo " console [defaut] Start an rvi in foreground mode."
- echo
- echo " start Start an rvi node with the given configuration file."
- echo
- echo " stop Stop an rvi node previously started with 'start'."
- echo
- echo " attach Attach to an rvi node previously started with 'start'."
- echo
- echo " ping Ping to check if an rvi node is up. Returns 0 if up."
- exit 1
-}
-
-CONFIG_FILE=""
-
-SNAME=rvi_core
-COOKIE=rvi_cookie
-unset CONFIG_DIR
-unset LOG_DIR
-while getopts "c:d:l:s:C:" o; do
- case "${o}" in
- s)
- SNAME=${OPTARG}
- ;;
- c)
- CONFIG_FILE=${OPTARG}
- ;;
- C)
- COOKIE=${OPTARG}
- ;;
- d)
- CONFIG_DIR=${OPTARG}
- ;;
- l)
- LOG_DIR=${OPTARG}
- ;;
- *)
- usage
- ;;
- esac
-done
-
-CONFIG_DIR=${CONFIG_DIR:=/etc/opt/rvi}
-
-shift $((${OPTIND}-1))
-
-if [ "${#}" = "0" ]
-then
- CMD="console"
-else
- CMD=$1
-fi
-
-if [ "${CMD}" != "start" -a "${CMD}" != "attach" -a "${CMD}" != "stop" -a "${CMD}" != "console" -a "${CMD}" != "ping" ]
-then
- usage
-fi
-
-export ERL_LIBS=${SELF_DIR}/rvi_core:${SELF_DIR}/rvi_core/deps:${SELF_DIR}/rvi_core/components
-
-# Convert config dir to abs path
-if [ $(echo ${CONFIG_DIR} | cut -c 1,1) != "/" ]
-then
- CONFIG_DIR=${PWD}/${CONFIG_DIR}
-fi
-
-# Check that we have a config dir
-if [ ! -d ${CONFIG_DIR} ]
-then
- install -d --mode=0755 ${CONFIG_DIR}
-fi
-
-# Check if we have a uuid file.
-if [ ! -f ${CONFIG_DIR}/device_id ]
-then
- echo "Creating device ID in ${CONFIG_DIR}/device_id"
- cat /proc/sys/kernel/random/uuid > ${CONFIG_DIR}/device_id
-fi
-
-#
-# See if we need to process a config file
-#
-if [ ${CMD} = "start" -o ${CMD} = "console" ]
-then
- # Default to rvi.config
- CONFIG_FILE=${CONFIG_FILE:=${CONFIG_DIR}/rvi_sample.config}
- #
- # Check if we need to prepend current dir
- # to relative config file path
- #
- if [ $(echo ${CONFIG_FILE} | cut -c 1,1) != "/" ]
- then
- CONFIG_FILE=${PWD}/${CONFIG_FILE}
- fi
-
- # Check that config file can be read.
- if [ ! -r "${CONFIG_FILE}" ]
- then
- echo "${CONFIG_FILE} cannot be opened for reading."
- usage
- fi
- #
- # Generate a config file that will end up as
- # /tmp/rvi/sys.config
- #
- (
- cd ${CONFIG_DIR}
- ${SELF_DIR}/scripts/setup_gen rvi ${CONFIG_FILE} rvi
- )
-
- # Did we succeed with config generation?
- if [ "$?" != "0" ]
- then
- # Nope
- echo "Failed to process configuration file."
- exit "$?"
- fi
-fi
-
-TMP_DIR=/tmp/rvi/$(basename ${CONFIG_FILE} .config)
-LOG_DIR=${LOG_DIR:=${TMP_DIR}/rvi/log}
-
-if [ $(echo ${LOG_DIR} | cut -c 1,1) != "/" ]
-then
- LOG_DIR=${PWD}/${LOG_DIR}
-fi
-
-LAUNCH="${ERL} +A 128 -boot ${CONFIG_DIR}/rvi/start -sname ${SNAME} -config ${CONFIG_DIR}/rvi/sys -setcookie ${COOKIE}"
-
-case "${CMD}" in
- start)
- install -d --mode 0755 ${TMP_DIR}
- install -d --mode 0755 ${LOG_DIR}
- cd ${SELF_DIR}
- exec run_erl -daemon ${TMP_DIR}/ ${LOG_DIR} "exec ${LAUNCH}"
- ;;
-
- console)
- cd ${SELF_DIR}
- exec ${LAUNCH}
- ;;
-
- stop)
- exec ${SELF_DIR}/scripts/nodetool -sname ${SNAME} -setcookie ${COOKIE} stop
- ;;
-
- ping)
- exec ${SELF_DIR}/scripts/nodetool -sname ${SNAME} -setcookie ${COOKIE} ping
- ;;
-
- attach)
- exec to_erl ${TMP_DIR}
- ;;
-
-esac