add lsyncd to csync container
This commit is contained in:
@@ -1,9 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
set -e
|
set -e
|
||||||
HOST_ETC_CSYNC=/host/etc/csync
|
HOST_DIR=`dirname $CSYNC_CONFIG`
|
||||||
if [ ! -e $CSYNC_CONFIG ]; then
|
CONTAINER_DIR=/usr/local/etc
|
||||||
cp /usr/local/etc/csync2* $HOST_ETC_CSYNC/
|
if [ ! -e $HOST_DIR/csync2.pem ]; then
|
||||||
csync2 -k $HOST_ETC_CSYNC/csync2.pem
|
csync2 -k $HOST_DIR/csync2.pem
|
||||||
|
cp -f $CONTAINER_DIR/csync2* $HOST_DIR/
|
||||||
fi
|
fi
|
||||||
rm -r /usr/local/etc
|
rm -r $CONTAINER_DIR
|
||||||
ln -sf $HOST_ETC_CSYNC/ /usr/local/etc
|
ln -sf $HOST_DIR/ $CONTAINER_DIR
|
||||||
|
cp -f $HOST_DIR/csync2_$HOSTNAME.cfg $HOST_DIR/csync2.cfg
|
||||||
88
build/boot/lsync.sh
Normal file
88
build/boot/lsync.sh
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
if [ ! -e $LSYNC_CONFIG ]; then
|
||||||
|
CSYNC_BIN=`which csync2`
|
||||||
|
CSYNC_CONFIG_DIR=`dirname $CSYNC_CONFIG`
|
||||||
|
cat << EOF > $LSYNC_CONFIG
|
||||||
|
settings {
|
||||||
|
logident = "lsyncd",
|
||||||
|
logfacility = "user",
|
||||||
|
logfile = "$LSYNC_LOG",
|
||||||
|
statusFile = "$LSYNC_STATUS",
|
||||||
|
statusInterval = 1
|
||||||
|
}
|
||||||
|
initSync = {
|
||||||
|
delay = 1,
|
||||||
|
maxProcesses = 1,
|
||||||
|
action = function(inlet)
|
||||||
|
local config = inlet.getConfig()
|
||||||
|
local elist = inlet.getEvents(function(event)
|
||||||
|
return event.etype ~= "Init"
|
||||||
|
end)
|
||||||
|
local directory = string.sub(config.source, 1, -2)
|
||||||
|
local paths = elist.getPaths(function(etype, path)
|
||||||
|
return "\t" .. config.syncid .. ":" .. directory .. path
|
||||||
|
end)
|
||||||
|
log("Normal", "Processing syncing list:\n", table.concat(paths, "\n"))
|
||||||
|
spawn(elist, "$CSYNC_BIN", "-C", config.syncid, "-x")
|
||||||
|
end,
|
||||||
|
collect = function(agent, exitcode)
|
||||||
|
local config = agent.config
|
||||||
|
if not agent.isList and agent.etype == "Init" then
|
||||||
|
if exitcode == 0 then
|
||||||
|
log("Normal", "Startup of '", config.syncid, "' instance finished.")
|
||||||
|
elseif config.exitcodes and config.exitcodes[exitcode] == "again" then
|
||||||
|
log("Normal", "Retrying startup of '", config.syncid, "' instance.")
|
||||||
|
return "again"
|
||||||
|
else
|
||||||
|
log("Error", "Failure on startup of '", config.syncid, "' instance.")
|
||||||
|
terminate(-1)
|
||||||
|
end
|
||||||
|
return
|
||||||
|
end
|
||||||
|
local rc = config.exitcodes and config.exitcodes[exitcode]
|
||||||
|
if rc == "die" then
|
||||||
|
return rc
|
||||||
|
end
|
||||||
|
if agent.isList then
|
||||||
|
if rc == "again" then
|
||||||
|
log("Normal", "Retrying events list on exitcode = ", exitcode)
|
||||||
|
else
|
||||||
|
log("Normal", "Finished events list = ", exitcode)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if rc == "again" then
|
||||||
|
log("Normal", "Retrying ", agent.etype, " on ", agent.sourcePath, " = ", exitcode)
|
||||||
|
else
|
||||||
|
log("Normal", "Finished ", agent.etype, " on ", agent.sourcePath, " = ", exitcode)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return rc
|
||||||
|
end,
|
||||||
|
init = function(event)
|
||||||
|
local inlet = event.inlet;
|
||||||
|
local config = inlet.getConfig();
|
||||||
|
log("Normal", "Recursive startup sync: ", config.syncid, ":", config.source)
|
||||||
|
spawn(event, "$CSYNC_BIN", "-C", config.syncid, "-x")
|
||||||
|
end,
|
||||||
|
prepare = function(config)
|
||||||
|
if not config.syncid then
|
||||||
|
error("Missing 'syncid' parameter.", 4)
|
||||||
|
end
|
||||||
|
local c = "csync2_" .. config.syncid .. ".cfg"
|
||||||
|
local f, err = io.open("$CSYNC_CONFIG_DIR" .. c, "r")
|
||||||
|
if not f then
|
||||||
|
error("Invalid 'syncid' parameter: " .. err, 4)
|
||||||
|
end
|
||||||
|
f:close()
|
||||||
|
end
|
||||||
|
}
|
||||||
|
local sources = {
|
||||||
|
-- change the node1 value with respective host
|
||||||
|
-- ["/home/website/public_html"] = "node1"
|
||||||
|
}
|
||||||
|
for key, value in pairs(sources) do
|
||||||
|
sync {initSync, source=key, syncid=value}
|
||||||
|
end
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
@@ -1,4 +1,6 @@
|
|||||||
csync: base sshd compile
|
csync: base sshd compile
|
||||||
$(call script,$@)
|
$(call script,$@)
|
||||||
$(call runit,xinetd)
|
$(call runit,xinetd)
|
||||||
$(call boot,02,$@)
|
$(call runit,lsyncd)
|
||||||
|
$(call boot,02,$@)
|
||||||
|
$(call boot,02,lsync)
|
||||||
|
|||||||
3
build/runit/lsyncd
Normal file
3
build/runit/lsyncd
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
set -e
|
||||||
|
/usr/local/bin/lsyncd -nodaemon $LSYNC_CONFIG
|
||||||
@@ -1,6 +1,10 @@
|
|||||||
## Configuration
|
## Configuration
|
||||||
export_env CSYNC_VERSION 2.0
|
export_env CSYNC_VERSION 2.0
|
||||||
export_env CSYNC_CONFIG /host/etc/csync/csync2.cfg
|
export_env CSYNC_CONFIG /host/etc/csync/csync2.cfg
|
||||||
|
export_env LSYNC_CONFIG /host/etc/lsyncd.conf
|
||||||
|
export_env LSYNC_LOG /host/var/log/lsyncd.log
|
||||||
|
export_env LSYNC_STATUS /host/var/log/lsyncd_status.log
|
||||||
|
export_env HOSTALIASES /host/etc/host.aliases
|
||||||
|
|
||||||
## Dependencies
|
## Dependencies
|
||||||
apt_install_permanent librsync-dev libsqlite3-dev libgnutls28-dev pkg-config
|
apt_install_permanent librsync-dev libsqlite3-dev libgnutls28-dev pkg-config
|
||||||
@@ -15,7 +19,7 @@ make
|
|||||||
make install
|
make install
|
||||||
make cert
|
make cert
|
||||||
|
|
||||||
## xinetd
|
## Xinetd
|
||||||
apt_install_permanent xinetd
|
apt_install_permanent xinetd
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
@@ -33,8 +37,25 @@ service csync2
|
|||||||
EOF
|
EOF
|
||||||
echo "csync2 30865/tcp" >> /etc/services
|
echo "csync2 30865/tcp" >> /etc/services
|
||||||
|
|
||||||
|
## Lsyncd dependencies
|
||||||
|
apt_install_permanent lua5.2 liblua5.2-dev bash-completion
|
||||||
|
ln -s /usr/share/bash-completion/completions/a2x /usr/bin/a2x
|
||||||
|
chmod +x /usr/bin/a2x
|
||||||
|
|
||||||
|
## Lsyncd
|
||||||
|
cd /opt
|
||||||
|
git clone https://github.com/axkibe/lsyncd.git
|
||||||
|
cd lsyncd
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake ..
|
||||||
|
sed -i 's,a2x,#,' CMakeFiles/manpage.dir/build.make
|
||||||
|
make
|
||||||
|
make install
|
||||||
|
|
||||||
## Remove installation files
|
## Remove installation files
|
||||||
if [ $MODE == "minimal" ]; then
|
if [ $MODE == "minimal" ]; then
|
||||||
cd /opt
|
cd /opt
|
||||||
rm -rf csync2-$CSYNC_VERSION*
|
rm -rf csync2-$CSYNC_VERSION*
|
||||||
|
rm -r lsyncd
|
||||||
fi
|
fi
|
||||||
Reference in New Issue
Block a user