summaryrefslogtreecommitdiff
path: root/scripts/rvi_install
blob: f1148fd9a14200922ec825dd60ec16a4478cef71 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/bin/sh
#
# 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/
#

#
# Setup an RVI release
#
#

SELF_DIR=$(dirname $(readlink -f "$0"))
SETUP_GEN=$SELF_DIR/setup_gen  # Ulf's kitchen sink setup utility

usage() {
    echo "Usage: $0 -r root_pub_key [-d device_key_pair] [-l log_dir ] [-s prefix_strip] target_dir"
    echo 
    echo "Install a built RVI system into a target directory"
    echo 
    echo "NOTE: The last component of 'taget_dir' must be named 'rvi_core'"
    echo "       Example: /opt/rvi_core"
    echo 
    echo "-l log_dir      - Log directory. Default: ${target_dir}/log."
    echo "-s prefix_strip - See below. Default: nil."
    echo "-r root_pub_key - Public root key to use. See below."
    echo
    echo "The created node can be started with: 'target'/rvi_ctl"
    echo "The RVI installation will rely on a separate erlang install"
    echo "to run."
    echo
    echo "PREFIX STRIPPING"

    echo "  If '-s prefix_strip' is provided, that part of the directories above"
    echo "  will be stripped of the given prefix in all internlal references."
    echo "  This is useful in debian and other build systems."
    echo
    echo "  If, for example, 'target_dir' is './build/root/usr/bin', and"
    echo "  'prefix_strip' is './build/root', all internal references"
    echo "  in the files installed under './build/root/usr/bin' will"
    echo "  reference '/usr/bin'."
    echo 
    echo "ROOT KEY"
    echo "  The root key is used to validate remote certificates."
    echo "  
    exit 1
}

TARGET_DIR=""
LIB_DIR=""
LOG_DIR=""

while getopts "s:l:" o; do
    case "${o}" in

        l)
	    LOG_DIR=${OPTARG}
	    ;;

        s)
	    PREFIX_STRIP=${OPTARG}
            ;;

        *)
            usage
            ;;
    esac
done

shift $((${OPTIND}-1))

if [ "${#}" = "0" ]
then
    echo "ERROR: Missing 'target_dir'."
    echo
    usage
fi

if [ "${#}" != "1" ]
then
    echo "ERROR: Wrong number of arguments."
    echo
    usage
fi

TARGET_DIR=${1}

if [ $(basename ${TARGET_DIR}) != "rvi_core" ]
then
    echo "ERROR: Last component of 'target_dir' must be named rvi_core."
    echo "       Example: $(dirname ${TARGET_DIR})/rvi_core"
    echo
    exit 255
fi 

# For now LIB_DIR is always same as TARGET_DIR
LIB_DIR=${TARGET_DIR}

if [ -z "${LOG_DIR}" ]
then
    LOG_DIR=${TARGET_DIR}/log
fi

rm -rf ${LIB_DIR} ${TARGET_DIR} > /dev/null 2>&1 

install -m 0755 -d ${TARGET_DIR}
install -m 0755 -d ${LIB_DIR}
install -m 0755 -d ${LOG_DIR}

FILE_SET=$(find ebin components deps -name ebin -o -name priv)

tar cf - ${FILE_SET} | (cd ${LIB_DIR} ; tar xf - )

# Patch up the rvi with the correct directories.
if [ -s "${PREFIX_STRIP}" ] 
then
    STRIP_TARGET_DIR=$(echo ${TARGET_DIR} | sed "s|^${PREFIX_STRIP}||")
    STRIP_LIB_DIR=$(echo ${LIB_DIR} | sed "s|^${PREFIX_STRIP}||")
    STRIP_LOG_DIR=$(echo ${LOG_DIR} | sed "s|^${PREFIX_STRIP}||")
else
    STRIP_TARGET_DIR=${TARGET_DIR}
    STRIP_LIB_DIR=${LIB_DIR}
    STRIP_LOG_DIR=${LOG_DIR}
fi

sed -e "s|__RVI_LIBDIR__|${STRIP_LIB_DIR}|g" \
    -e "s|__RVI_BINDIR__|${STRIP_TARGET_DIR}|g" \
    -e "s|__RVI_LOGDIR__|${STRIP_LOG_DIR}|g" < scripts/rvi_ctl > /tmp/rvi_ctl

install -m 0755 /tmp/rvi_ctl ${TARGET_DIR}
install -m 0755 scripts/setup_gen ${TARGET_DIR}
install -m 0755 rel/files/nodetool ${TARGET_DIR}
install -m 0755 python/rvi_service.py ${TARGET_DIR}/rvi_service
install -m 0755 python/rvi_call.py ${TARGET_DIR}/rvi_call
install -m 0644 python/rvilib.py ${TARGET_DIR}
install -m 0755 python/rvi_get_services.py ${TARGET_DIR}/rvi_get_services
install -m 0755 -D priv/config/rvi_common.config ${TARGET_DIR}/priv/config/rvi_common.config

echo "RVI binary files installed under ${TARGET_DIR}"
# echo "RVI library files installed under ${LIB_DIR}"
echo "RVI will log to ${LOG_DIR}"
echo
echo "Start:              ${TARGET_DIR}/rvi_ctl -c <config_file> start"
echo "Attach started RVI: ${TARGET_DIR}/rvi_ctl attach"
echo "Stop:               ${TARGET_DIR}/rvi_ctl stop"
echo "Start console mode: ${TARGET_DIR}/rvi_ctl -c <config_file> console"
echo
exit 0