droonga-engine 1.0.5 → 1.0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/bin/droonga-engine-absorb-data +2 -1
- data/bin/droonga-engine-catalog-generate +21 -5
- data/bin/droonga-engine-catalog-modify +22 -6
- data/bin/droonga-engine-configure +215 -0
- data/bin/droonga-engine-join +48 -123
- data/bin/droonga-engine-unjoin +14 -1
- data/doc/text/news.md +21 -0
- data/droonga-engine.gemspec +12 -10
- data/install/centos/droonga-engine +60 -0
- data/install/centos/functions.sh +35 -0
- data/install/debian/droonga-engine +155 -0
- data/install/debian/functions.sh +33 -0
- data/install.sh +360 -0
- data/lib/droonga/address.rb +3 -1
- data/lib/droonga/catalog/dataset.rb +2 -0
- data/lib/droonga/catalog/version1.rb +16 -3
- data/lib/droonga/catalog/version2.rb +16 -3
- data/lib/droonga/catalog_fetcher.rb +51 -0
- data/lib/droonga/catalog_generator.rb +6 -5
- data/lib/droonga/catalog_modifier.rb +45 -0
- data/lib/droonga/command/droonga_engine.rb +96 -29
- data/lib/droonga/command/droonga_engine_service.rb +5 -0
- data/lib/droonga/command/remote.rb +368 -0
- data/lib/droonga/command/serf_event_handler.rb +37 -304
- data/lib/droonga/dispatcher.rb +15 -1
- data/lib/droonga/engine/version.rb +1 -1
- data/lib/droonga/engine.rb +11 -4
- data/lib/droonga/engine_state.rb +2 -0
- data/lib/droonga/farm.rb +14 -5
- data/lib/droonga/fluent_message_receiver.rb +23 -6
- data/lib/droonga/fluent_message_sender.rb +5 -1
- data/lib/droonga/node_status.rb +67 -0
- data/lib/droonga/path.rb +28 -4
- data/lib/droonga/plugins/catalog.rb +40 -0
- data/lib/droonga/safe_file_writer.rb +1 -1
- data/lib/droonga/searcher.rb +3 -15
- data/lib/droonga/serf.rb +17 -32
- data/lib/droonga/serf_downloader.rb +26 -1
- data/lib/droonga/service_installation.rb +123 -0
- data/lib/droonga/session.rb +4 -0
- data/lib/droonga/slice.rb +22 -12
- data/lib/droonga/supervisor.rb +16 -2
- data/lib/droonga/worker_process_agent.rb +13 -1
- data/sample/droonga-engine.yaml +5 -0
- data/test/command/config/default/catalog.json +1 -1
- data/test/command/config/default/droonga-engine.yaml +4 -0
- data/test/command/config/version1/catalog.json +1 -1
- data/test/command/suite/catalog/fetch.expected +64 -0
- data/test/command/suite/catalog/fetch.test +6 -0
- data/test/unit/catalog/test_version1.rb +2 -2
- data/test/unit/catalog/test_version2.rb +3 -3
- data/test/unit/helper/sandbox.rb +3 -1
- data/test/unit/plugins/catalog/test_fetch.rb +76 -0
- data/test/unit/test_catalog_generator.rb +7 -3
- metadata +74 -27
- data/bin/droonga-engine-data-publisher +0 -66
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
#
|
3
|
+
# /etc/rc.d/init.d/droonga-engine
|
4
|
+
#
|
5
|
+
# <Droonga engine is a core component in Droonga system>
|
6
|
+
# chkconfig: 2345 20 80
|
7
|
+
|
8
|
+
# TODO: we have to migrate to systemd based management in near future...
|
9
|
+
SYSTEMCTL_SKIP_REDIRECT=yes
|
10
|
+
|
11
|
+
# Source function library.
|
12
|
+
. /etc/init.d/functions
|
13
|
+
|
14
|
+
NAME=droonga-engine
|
15
|
+
USER=$NAME
|
16
|
+
GROUP=droonga
|
17
|
+
DAEMON=/usr/local/bin/$NAME
|
18
|
+
export DROONGA_BASE_DIR=/home/$NAME/droonga
|
19
|
+
cd $DROONGA_BASE_DIR
|
20
|
+
PIDFILE=/run/$NAME/$NAME.pid
|
21
|
+
DAEMON_ARGS="--daemon --pid-file=$PIDFILE"
|
22
|
+
|
23
|
+
[ -x $DAEMON ] || exit 0
|
24
|
+
|
25
|
+
start() {
|
26
|
+
echo -n "Starting $NAME: "
|
27
|
+
daemon --user $USER --pidfile $PIDFILE $DAEMON $DAEMON_ARGS
|
28
|
+
RET_CODE=$?
|
29
|
+
touch /var/lock/subsys/$NAME
|
30
|
+
return $RET_CODE
|
31
|
+
}
|
32
|
+
|
33
|
+
stop() {
|
34
|
+
echo -n "Shutting down $NAME: "
|
35
|
+
killproc -p $PIDFILE $DAEMON
|
36
|
+
RET_CODE=$?
|
37
|
+
rm -f /var/lock/subsys/$NAME
|
38
|
+
return $RET_CODE
|
39
|
+
}
|
40
|
+
|
41
|
+
case "$1" in
|
42
|
+
start)
|
43
|
+
start
|
44
|
+
;;
|
45
|
+
stop)
|
46
|
+
stop
|
47
|
+
;;
|
48
|
+
status)
|
49
|
+
status $NAME
|
50
|
+
;;
|
51
|
+
restart)
|
52
|
+
stop
|
53
|
+
start
|
54
|
+
;;
|
55
|
+
*)
|
56
|
+
echo "Usage: $NAME {start|stop|status|reload|restart[|probe]"
|
57
|
+
exit 1
|
58
|
+
;;
|
59
|
+
esac
|
60
|
+
exit $?
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# Copyright (C) 2014 Droonga Project
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License version 2.1 as published by the Free Software Foundation.
|
6
|
+
#
|
7
|
+
# This library is distributed in the hope that it will be useful,
|
8
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
9
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
10
|
+
# Lesser General Public License for more details.
|
11
|
+
#
|
12
|
+
# You should have received a copy of the GNU Lesser General Public
|
13
|
+
# License along with this library; if not, write to the Free Software
|
14
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
15
|
+
|
16
|
+
register_service() {
|
17
|
+
local NAME=$1
|
18
|
+
local USER=$2
|
19
|
+
local GROUP=$3
|
20
|
+
|
21
|
+
#TODO: we should migrate to systemd in near future...
|
22
|
+
|
23
|
+
local pid_dir=/run/$NAME
|
24
|
+
mkdir -p $pid_dir
|
25
|
+
chown -R $USER:$GROUP $pid_dir
|
26
|
+
|
27
|
+
curl -o /etc/rc.d/init.d/$NAME $(download_url "install/centos/$NAME")
|
28
|
+
if [ $? -ne 0 ]; then
|
29
|
+
echo "ERROR: Failed to download service script!"
|
30
|
+
exit 1
|
31
|
+
fi
|
32
|
+
|
33
|
+
chmod +x /etc/rc.d/init.d/$NAME
|
34
|
+
/sbin/chkconfig --add $NAME
|
35
|
+
}
|
@@ -0,0 +1,155 @@
|
|
1
|
+
#! /bin/sh
|
2
|
+
### BEGIN INIT INFO
|
3
|
+
# Provides: droonga-engine
|
4
|
+
# Required-Start: $remote_fs $syslog
|
5
|
+
# Required-Stop: $remote_fs $syslog
|
6
|
+
# Default-Start: 2 3 4 5
|
7
|
+
# Default-Stop: 0 1 6
|
8
|
+
# Short-Description: Droonga engine is a core component in Droonga system
|
9
|
+
### END INIT INFO
|
10
|
+
|
11
|
+
# Do NOT "set -e"
|
12
|
+
|
13
|
+
# PATH should only include /usr/* if it runs after the mountnfs.sh script
|
14
|
+
PATH=/sbin:/usr/sbin:/bin:/usr/bin
|
15
|
+
DESC=""
|
16
|
+
NAME=droonga-engine
|
17
|
+
USER=$NAME
|
18
|
+
GROUP=droonga
|
19
|
+
DAEMON=/usr/local/bin/$NAME
|
20
|
+
export DROONGA_BASE_DIR=/home/$NAME/droonga
|
21
|
+
PIDFILE=/var/run/$NAME/$NAME.pid
|
22
|
+
DAEMON_ARGS="--daemon --pid-file=$PIDFILE"
|
23
|
+
SCRIPTNAME=/etc/init.d/$NAME
|
24
|
+
|
25
|
+
# Exit if the package is not installed
|
26
|
+
[ -x "$DAEMON" ] || exit 0
|
27
|
+
|
28
|
+
# Read configuration variable file if it is present
|
29
|
+
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
|
30
|
+
|
31
|
+
# Load the VERBOSE setting and other rcS variables
|
32
|
+
. /lib/init/vars.sh
|
33
|
+
|
34
|
+
# Define LSB log_* functions.
|
35
|
+
# Depend on lsb-base (>= 3.2-14) to ensure that this file is present
|
36
|
+
# and status_of_proc is working.
|
37
|
+
. /lib/lsb/init-functions
|
38
|
+
|
39
|
+
#
|
40
|
+
# Function that starts the daemon/service
|
41
|
+
#
|
42
|
+
do_start()
|
43
|
+
{
|
44
|
+
# Return
|
45
|
+
# 0 if daemon has been started
|
46
|
+
# 1 if daemon was already running
|
47
|
+
# 2 if daemon could not be started
|
48
|
+
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --user $USER --test > /dev/null \
|
49
|
+
|| return 1
|
50
|
+
start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --user $USER --chuid $USER:$GROUP --chdir $DROONGA_BASE_DIR -- \
|
51
|
+
$DAEMON_ARGS \
|
52
|
+
|| return 2
|
53
|
+
# Add code here, if necessary, that waits for the process to be ready
|
54
|
+
# to handle requests from services started subsequently which depend
|
55
|
+
# on this one. As a last resort, sleep for some time.
|
56
|
+
}
|
57
|
+
|
58
|
+
#
|
59
|
+
# Function that stops the daemon/service
|
60
|
+
#
|
61
|
+
do_stop()
|
62
|
+
{
|
63
|
+
# Return
|
64
|
+
# 0 if daemon has been stopped
|
65
|
+
# 1 if daemon was already stopped
|
66
|
+
# 2 if daemon could not be stopped
|
67
|
+
# other if a failure occurred
|
68
|
+
start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
|
69
|
+
RETVAL="$?"
|
70
|
+
[ "$RETVAL" = 2 ] && return 2
|
71
|
+
# Wait for children to finish too if this is a daemon that forks
|
72
|
+
# and if the daemon is only ever run from this initscript.
|
73
|
+
# If the above conditions are not satisfied then add some other code
|
74
|
+
# that waits for the process to drop all resources that could be
|
75
|
+
# needed by services started subsequently. A last resort is to
|
76
|
+
# sleep for some time.
|
77
|
+
start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
|
78
|
+
[ "$?" = 2 ] && return 2
|
79
|
+
# Many daemons don't delete their pidfiles when they exit.
|
80
|
+
rm -f $PIDFILE
|
81
|
+
return "$RETVAL"
|
82
|
+
}
|
83
|
+
|
84
|
+
#
|
85
|
+
# Function that sends a SIGHUP to the daemon/service
|
86
|
+
#
|
87
|
+
do_reload() {
|
88
|
+
#
|
89
|
+
# If the daemon can reload its configuration without
|
90
|
+
# restarting (for example, when it is sent a SIGHUP),
|
91
|
+
# then implement that here.
|
92
|
+
#
|
93
|
+
start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
|
94
|
+
return 0
|
95
|
+
}
|
96
|
+
|
97
|
+
case "$1" in
|
98
|
+
start)
|
99
|
+
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
|
100
|
+
do_start
|
101
|
+
case "$?" in
|
102
|
+
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
103
|
+
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
104
|
+
esac
|
105
|
+
;;
|
106
|
+
stop)
|
107
|
+
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
|
108
|
+
do_stop
|
109
|
+
case "$?" in
|
110
|
+
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
|
111
|
+
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
|
112
|
+
esac
|
113
|
+
;;
|
114
|
+
status)
|
115
|
+
status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
|
116
|
+
;;
|
117
|
+
#reload|force-reload)
|
118
|
+
#
|
119
|
+
# If do_reload() is not implemented then leave this commented out
|
120
|
+
# and leave 'force-reload' as an alias for 'restart'.
|
121
|
+
#
|
122
|
+
#log_daemon_msg "Reloading $DESC" "$NAME"
|
123
|
+
#do_reload
|
124
|
+
#log_end_msg $?
|
125
|
+
#;;
|
126
|
+
restart|force-reload)
|
127
|
+
#
|
128
|
+
# If the "reload" option is implemented then remove the
|
129
|
+
# 'force-reload' alias
|
130
|
+
#
|
131
|
+
log_daemon_msg "Restarting $DESC" "$NAME"
|
132
|
+
do_stop
|
133
|
+
case "$?" in
|
134
|
+
0|1)
|
135
|
+
do_start
|
136
|
+
case "$?" in
|
137
|
+
0) log_end_msg 0 ;;
|
138
|
+
1) log_end_msg 1 ;; # Old process is still running
|
139
|
+
*) log_end_msg 1 ;; # Failed to start
|
140
|
+
esac
|
141
|
+
;;
|
142
|
+
*)
|
143
|
+
# Failed to stop
|
144
|
+
log_end_msg 1
|
145
|
+
;;
|
146
|
+
esac
|
147
|
+
;;
|
148
|
+
*)
|
149
|
+
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
|
150
|
+
echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
|
151
|
+
exit 3
|
152
|
+
;;
|
153
|
+
esac
|
154
|
+
|
155
|
+
:
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# Copyright (C) 2014 Droonga Project
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License version 2.1 as published by the Free Software Foundation.
|
6
|
+
#
|
7
|
+
# This library is distributed in the hope that it will be useful,
|
8
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
9
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
10
|
+
# Lesser General Public License for more details.
|
11
|
+
#
|
12
|
+
# You should have received a copy of the GNU Lesser General Public
|
13
|
+
# License along with this library; if not, write to the Free Software
|
14
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
15
|
+
|
16
|
+
register_service() {
|
17
|
+
local NAME=$1
|
18
|
+
local USER=$2
|
19
|
+
local GROUP=$3
|
20
|
+
|
21
|
+
local pid_dir=/var/run/$NAME
|
22
|
+
mkdir -p $pid_dir
|
23
|
+
chown -R $USER:$GROUP $pid_dir
|
24
|
+
|
25
|
+
curl -o /etc/init.d/$NAME $(download_url "install/debian/$NAME")
|
26
|
+
if [ $? -ne 0 ]; then
|
27
|
+
echo "ERROR: Failed to download service script!"
|
28
|
+
exit 1
|
29
|
+
fi
|
30
|
+
|
31
|
+
chmod +x /etc/init.d/$NAME
|
32
|
+
update-rc.d $NAME defaults
|
33
|
+
}
|
data/install.sh
ADDED
@@ -0,0 +1,360 @@
|
|
1
|
+
# Copyright (C) 2014 Droonga Project
|
2
|
+
#
|
3
|
+
# This library is free software; you can redistribute it and/or
|
4
|
+
# modify it under the terms of the GNU Lesser General Public
|
5
|
+
# License version 2.1 as published by the Free Software Foundation.
|
6
|
+
#
|
7
|
+
# This library is distributed in the hope that it will be useful,
|
8
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
9
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
10
|
+
# Lesser General Public License for more details.
|
11
|
+
#
|
12
|
+
# You should have received a copy of the GNU Lesser General Public
|
13
|
+
# License along with this library; if not, write to the Free Software
|
14
|
+
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
15
|
+
|
16
|
+
# Usage:
|
17
|
+
#
|
18
|
+
# Ubuntu:
|
19
|
+
#
|
20
|
+
# Install a release version:
|
21
|
+
# $ curl https://raw.githubusercontent.com/droonga/droonga-engine/master/install.sh | sudo bash
|
22
|
+
# Install the latest revision from the repository:
|
23
|
+
# $ curl https://raw.githubusercontent.com/droonga/droonga-engine/master/install.sh | sudo VERSION=master bash
|
24
|
+
# Install with the specified hostname (disabling auto-detection):
|
25
|
+
# $ curl https://raw.githubusercontent.com/droonga/droonga-engine/master/install.sh | sudo HOST=xxx.xxx.xxx.xxx bash
|
26
|
+
#
|
27
|
+
# CentOS 7:
|
28
|
+
#
|
29
|
+
# Install a release version:
|
30
|
+
# # curl https://raw.githubusercontent.com/droonga/droonga-engine/master/install.sh | bash
|
31
|
+
# Install the latest revision from the repository:
|
32
|
+
# # curl https://raw.githubusercontent.com/droonga/droonga-engine/master/install.sh | VERSION=master bash
|
33
|
+
# Install with the specified hostname (disabling auto-detection):
|
34
|
+
# # curl https://raw.githubusercontent.com/droonga/droonga-engine/master/install.sh | HOST=xxx.xxx.xxx.xxx bash
|
35
|
+
|
36
|
+
NAME=droonga-engine
|
37
|
+
DOWNLOAD_URL_BASE=https://raw.githubusercontent.com/droonga/$NAME
|
38
|
+
REPOSITORY_URL=https://github.com/droonga/$NAME.git
|
39
|
+
USER=$NAME
|
40
|
+
GROUP=droonga
|
41
|
+
DROONGA_BASE_DIR=/home/$USER/droonga
|
42
|
+
TEMPDIR=/tmp/install-$NAME
|
43
|
+
|
44
|
+
: ${VERSION:=release}
|
45
|
+
: ${HOST:=Auto Detect}
|
46
|
+
|
47
|
+
case $(uname) in
|
48
|
+
Darwin|*BSD|CYGWIN*) sed="sed -E" ;;
|
49
|
+
*) sed="sed -r" ;;
|
50
|
+
esac
|
51
|
+
|
52
|
+
ensure_root() {
|
53
|
+
if [ "$EUID" != "0" ]; then
|
54
|
+
echo "You must run this script as the root."
|
55
|
+
exit 1
|
56
|
+
fi
|
57
|
+
}
|
58
|
+
|
59
|
+
guess_platform() {
|
60
|
+
if [ -e /etc/debian_version ] || [ -e /etc/debian_release ]; then
|
61
|
+
echo "debian"
|
62
|
+
return 0
|
63
|
+
elif [ -e /etc/centos-release ]; then
|
64
|
+
echo "centos"
|
65
|
+
return 0
|
66
|
+
fi
|
67
|
+
return 1
|
68
|
+
}
|
69
|
+
|
70
|
+
exist_command() {
|
71
|
+
type "$1" > /dev/null 2>&1
|
72
|
+
}
|
73
|
+
|
74
|
+
exist_all_commands() {
|
75
|
+
for command in $@; do
|
76
|
+
if ! exist_command $command; then
|
77
|
+
return 1
|
78
|
+
fi
|
79
|
+
done
|
80
|
+
return 0
|
81
|
+
}
|
82
|
+
|
83
|
+
exist_yum_repository() {
|
84
|
+
if ! yum --enablerepo=$1 repolist; then
|
85
|
+
return 1
|
86
|
+
fi
|
87
|
+
yum --enablerepo=$1 repolist | grep --quiet "$1"
|
88
|
+
}
|
89
|
+
|
90
|
+
exist_user() {
|
91
|
+
id "$1" > /dev/null 2>&1
|
92
|
+
}
|
93
|
+
|
94
|
+
prepare_user() {
|
95
|
+
echo ""
|
96
|
+
echo "Preparing the user..."
|
97
|
+
|
98
|
+
groupadd $GROUP
|
99
|
+
|
100
|
+
if ! exist_user $USER; then
|
101
|
+
useradd -m $USER
|
102
|
+
fi
|
103
|
+
|
104
|
+
usermod -G $GROUP $USER
|
105
|
+
return 0
|
106
|
+
}
|
107
|
+
|
108
|
+
setup_configuration_directory() {
|
109
|
+
echo ""
|
110
|
+
echo "Setting up the configuration directory..."
|
111
|
+
|
112
|
+
[ ! -e $DROONGA_BASE_DIR ] &&
|
113
|
+
mkdir $DROONGA_BASE_DIR
|
114
|
+
|
115
|
+
if [ ! -e $DROONGA_BASE_DIR/catalog.json -o \
|
116
|
+
! -e $DROONGA_BASE_DIR/$NAME.yaml ]; then
|
117
|
+
[ "$HOST" = "Auto Detect" ] &&
|
118
|
+
HOST=$(determine_hostname)
|
119
|
+
|
120
|
+
if [ "$HOST" = "" ]; then
|
121
|
+
HOST=$(hostname)
|
122
|
+
echo "********************** CAUTION!! **********************"
|
123
|
+
echo "Installation process coudln't detect the hostname of"
|
124
|
+
echo "this node, which is accessible from other nodes."
|
125
|
+
echo "You may have to configure droonga-engine manually"
|
126
|
+
echo "to refer a valid accessible hostname for this node,"
|
127
|
+
echo "by following command line:"
|
128
|
+
echo ""
|
129
|
+
echo " droonga-engine-configure --reset-config --reset-catalog"
|
130
|
+
echo "*******************************************************"
|
131
|
+
fi
|
132
|
+
echo "This node is configured with a hostname $HOST."
|
133
|
+
fi
|
134
|
+
|
135
|
+
droonga-engine-configure --quiet \
|
136
|
+
--host=$HOST
|
137
|
+
if [ $? -ne 0 ]; then
|
138
|
+
echo "ERROR: Failed to configure $NAME!"
|
139
|
+
exit 1
|
140
|
+
fi
|
141
|
+
|
142
|
+
chown -R $USER:$GROUP $DROONGA_BASE_DIR
|
143
|
+
}
|
144
|
+
|
145
|
+
|
146
|
+
guess_global_hostname() {
|
147
|
+
if hostname -d > /dev/null 2>&1; then
|
148
|
+
local domain=$(hostname -d)
|
149
|
+
local hostname=$(hostname -s)
|
150
|
+
if [ "$domain" != "" ]; then
|
151
|
+
echo "$hostname.$domain"
|
152
|
+
return 0
|
153
|
+
fi
|
154
|
+
fi
|
155
|
+
echo ""
|
156
|
+
return 1
|
157
|
+
}
|
158
|
+
|
159
|
+
determine_hostname() {
|
160
|
+
local global_hostname=$(guess_global_hostname)
|
161
|
+
if [ "$global_hostname" != "" ]; then
|
162
|
+
echo "$global_hostname"
|
163
|
+
return 0
|
164
|
+
fi
|
165
|
+
|
166
|
+
local address=$(hostname -i | \
|
167
|
+
$sed -e "s/127\.[0-9]+\.[0-9]+\.[0-9]+//g" \
|
168
|
+
-e "s/[0-9a-f:]+%[^ ]+//g" \
|
169
|
+
-e "s/ +/ /g" \
|
170
|
+
-e "s/^ +| +\$//g" |\
|
171
|
+
cut -d " " -f 1)
|
172
|
+
if [ "$address" != "" ]; then
|
173
|
+
echo "$address"
|
174
|
+
return 0
|
175
|
+
fi
|
176
|
+
|
177
|
+
echo ""
|
178
|
+
return 1
|
179
|
+
}
|
180
|
+
|
181
|
+
download_url() {
|
182
|
+
if [ "$VERSION" = "master" ]; then
|
183
|
+
echo "$DOWNLOAD_URL_BASE/master/$1"
|
184
|
+
else
|
185
|
+
echo "$DOWNLOAD_URL_BASE/v$(installed_version)/$1"
|
186
|
+
fi
|
187
|
+
}
|
188
|
+
|
189
|
+
installed_version() {
|
190
|
+
$NAME --version | cut -d " " -f 2
|
191
|
+
}
|
192
|
+
|
193
|
+
|
194
|
+
install_rroonga() {
|
195
|
+
# Install Rroonga globally from a public gem, because custom build
|
196
|
+
# doesn't work as we expect for Droonga...
|
197
|
+
if exist_command grndump; then
|
198
|
+
local current_version=$(grndump -v | cut -d " " -f 2)
|
199
|
+
local version_matcher=$(cat $NAME.gemspec | \
|
200
|
+
grep rroonga | \
|
201
|
+
cut -d "," -f 2 | \
|
202
|
+
cut -d '"' -f 2)
|
203
|
+
local compared_version=$(echo "$version_matcher" | \
|
204
|
+
cut -d " " -f 2)
|
205
|
+
local operator=$(echo "$version_matcher" | cut -d " " -f 1)
|
206
|
+
local compare_result=$(ruby -e "puts('$current_version' $operator '$compared_version')")
|
207
|
+
if [ "$compare_result" = "true" ]; then return 0; fi
|
208
|
+
fi
|
209
|
+
gem install rroonga --no-ri --no-rdoc
|
210
|
+
}
|
211
|
+
|
212
|
+
install_master() {
|
213
|
+
gem install bundler --no-ri --no-rdoc
|
214
|
+
|
215
|
+
cd $TEMPDIR
|
216
|
+
|
217
|
+
if [ -d $NAME ]
|
218
|
+
then
|
219
|
+
cd $NAME
|
220
|
+
install_rroonga
|
221
|
+
git reset --hard
|
222
|
+
git pull --rebase
|
223
|
+
bundle update
|
224
|
+
else
|
225
|
+
git clone $REPOSITORY_URL
|
226
|
+
cd $NAME
|
227
|
+
install_rroonga
|
228
|
+
bundle install
|
229
|
+
fi
|
230
|
+
rm -rf pkg
|
231
|
+
bundle exec rake build
|
232
|
+
gem install "pkg/*.gem" --no-ri --no-rdoc
|
233
|
+
}
|
234
|
+
|
235
|
+
|
236
|
+
|
237
|
+
# ====================== for Debian/Ubuntu ==========================
|
238
|
+
prepare_environment_in_debian() {
|
239
|
+
local use_groonga_package=no
|
240
|
+
if apt-cache policy | grep --quiet groonga; then
|
241
|
+
use_groonga_package=yes
|
242
|
+
else
|
243
|
+
if [ "$(lsb_release -i -s)" = "Ubuntu" ]; then
|
244
|
+
add-apt-repository -y ppa:groonga/ppa
|
245
|
+
use_groonga_package=yes
|
246
|
+
else
|
247
|
+
local groonga_list=/etc/apt/sources.list.d/groonga.list
|
248
|
+
echo "deb http://packages.groonga.org/debian/ wheezy main" >> $groonga_list
|
249
|
+
echo "deb-src http://packages.groonga.org/debian/ wheezy main" >> $groonga_list
|
250
|
+
apt-get update
|
251
|
+
apt-get install -y --allow-unauthenticated groonga-keyring
|
252
|
+
use_groonga_package=yes
|
253
|
+
fi
|
254
|
+
fi
|
255
|
+
|
256
|
+
apt-get update
|
257
|
+
apt-get install -y curl ruby ruby-dev build-essential
|
258
|
+
|
259
|
+
if [ "$use_groonga_package" = "yes" ]; then
|
260
|
+
apt-get install -y libgroonga-dev
|
261
|
+
fi
|
262
|
+
|
263
|
+
if [ "$VERSION" = "master" ]; then
|
264
|
+
apt-get install -y git
|
265
|
+
fi
|
266
|
+
}
|
267
|
+
# ====================== /for Debian/Ubuntu =========================
|
268
|
+
|
269
|
+
|
270
|
+
|
271
|
+
# ========================= for CentOS 7 ============================
|
272
|
+
prepare_environment_in_centos() {
|
273
|
+
local use_groonga_package=no
|
274
|
+
if ! exist_yum_repository groonga; then
|
275
|
+
rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
|
276
|
+
|
277
|
+
# disable it by default!
|
278
|
+
groonga_repo=/etc/yum.repos.d/groonga.repo
|
279
|
+
backup=/tmp/$(basename $groonga_repo).bak
|
280
|
+
mv $groonga_repo $backup
|
281
|
+
cat $backup | $sed -e "s/enabled=1/enabled=0/" \
|
282
|
+
> $groonga_repo
|
283
|
+
fi
|
284
|
+
|
285
|
+
if exist_yum_repository groonga; then
|
286
|
+
use_groonga_package=yes
|
287
|
+
yum -y --enablerepo=groonga makecache
|
288
|
+
else
|
289
|
+
yum -y makecache
|
290
|
+
fi
|
291
|
+
yum -y groupinstall development
|
292
|
+
yum -y install curl ruby-devel
|
293
|
+
|
294
|
+
if [ "$use_groonga_package" = "yes" ]; then
|
295
|
+
yum -y --enablerepo=groonga install groonga-devel
|
296
|
+
fi
|
297
|
+
|
298
|
+
if [ "$VERSION" = "master" ]; then
|
299
|
+
yum -y install git
|
300
|
+
fi
|
301
|
+
}
|
302
|
+
# ========================= /for CentOS 7 ===========================
|
303
|
+
|
304
|
+
|
305
|
+
|
306
|
+
install() {
|
307
|
+
mkdir -p $TEMPDIR
|
308
|
+
|
309
|
+
echo "Preparing the environment..."
|
310
|
+
prepare_environment_in_$PLATFORM
|
311
|
+
|
312
|
+
echo ""
|
313
|
+
if [ "$VERSION" = "master" ]; then
|
314
|
+
echo "Installing $NAME from the git repository..."
|
315
|
+
install_master
|
316
|
+
else
|
317
|
+
echo "Installing $NAME from RubyGems..."
|
318
|
+
gem install droonga-engine --no-rdoc --no-ri
|
319
|
+
fi
|
320
|
+
|
321
|
+
if ! exist_command droonga-engine; then
|
322
|
+
echo "ERROR: Failed to install $NAME!"
|
323
|
+
exit 1
|
324
|
+
fi
|
325
|
+
|
326
|
+
curl -o $TEMPDIR/functions.sh $(download_url "install/$PLATFORM/functions.sh")
|
327
|
+
if ! source $TEMPDIR/functions.sh; then
|
328
|
+
echo "ERROR: Failed to download post-installation script!"
|
329
|
+
exit 1
|
330
|
+
fi
|
331
|
+
if ! exist_command register_service; then
|
332
|
+
echo "ERROR: Downloaded post-installation script is broken!"
|
333
|
+
exit 1
|
334
|
+
fi
|
335
|
+
|
336
|
+
prepare_user
|
337
|
+
|
338
|
+
setup_configuration_directory
|
339
|
+
|
340
|
+
echo ""
|
341
|
+
echo "Registering $NAME as a service..."
|
342
|
+
# this function is defined by the downloaded "functions.sh"!
|
343
|
+
register_service $NAME $USER $GROUP
|
344
|
+
|
345
|
+
echo ""
|
346
|
+
echo "Successfully installed $NAME."
|
347
|
+
}
|
348
|
+
|
349
|
+
|
350
|
+
ensure_root
|
351
|
+
|
352
|
+
PLATFORM=$(guess_platform)
|
353
|
+
if [ "$PLATFORM" = "" ]; then
|
354
|
+
echo "Not supported platform."
|
355
|
+
exit 255
|
356
|
+
fi
|
357
|
+
|
358
|
+
install
|
359
|
+
|
360
|
+
exit 0
|
data/lib/droonga/address.rb
CHANGED
@@ -13,6 +13,8 @@
|
|
13
13
|
# License along with this library; if not, write to the Free Software
|
14
14
|
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
15
15
|
|
16
|
+
require "socket"
|
17
|
+
|
16
18
|
module Droonga
|
17
19
|
class Address
|
18
20
|
class << self
|
@@ -33,7 +35,7 @@ module Droonga
|
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
36
|
-
DEFAULT_HOST =
|
38
|
+
DEFAULT_HOST = Socket.gethostname
|
37
39
|
DEFAULT_PORT = 10031
|
38
40
|
DEFAULT_TAG = "droonga"
|
39
41
|
|