zeus
4 years ago
7 changed files with 265 additions and 7 deletions
@ -0,0 +1,52 @@ |
|||
#!/bin/bash |
|||
# SPDX-License-Identifier: GPL-2.0 |
|||
# |
|||
# Copyright (C) 2015-2020 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. |
|||
|
|||
exec < <(exec wg show all dump) |
|||
|
|||
printf '{' |
|||
while read -r -d $'\t' device; do |
|||
if [[ $device != "$last_device" ]]; then |
|||
[[ -z $last_device ]] && printf '\n' || printf '%s,\n' "$end" |
|||
last_device="$device" |
|||
read -r private_key public_key listen_port fwmark |
|||
printf '\t"%s": {' "$device" |
|||
delim=$'\n' |
|||
[[ $private_key == "(none)" ]] || { printf '%s\t\t"privateKey": "%s"' "$delim" "$private_key"; delim=$',\n'; } |
|||
[[ $public_key == "(none)" ]] || { printf '%s\t\t"publicKey": "%s"' "$delim" "$public_key"; delim=$',\n'; } |
|||
[[ $listen_port == "0" ]] || { printf '%s\t\t"listenPort": %u' "$delim" $(( $listen_port )); delim=$',\n'; } |
|||
[[ $fwmark == "off" ]] || { printf '%s\t\t"fwmark": %u' "$delim" $(( $fwmark )); delim=$',\n'; } |
|||
printf '%s\t\t"peers": {' "$delim"; end=$'\n\t\t}\n\t}' |
|||
delim=$'\n' |
|||
else |
|||
read -r public_key preshared_key endpoint allowed_ips latest_handshake transfer_rx transfer_tx persistent_keepalive |
|||
printf '%s\t\t\t"%s": {' "$delim" "$public_key" |
|||
delim=$'\n' |
|||
[[ $preshared_key == "(none)" ]] || { printf '%s\t\t\t\t"presharedKey": "%s"' "$delim" "$preshared_key"; delim=$',\n'; } |
|||
[[ $endpoint == "(none)" ]] || { printf '%s\t\t\t\t"endpoint": "%s"' "$delim" "$endpoint"; delim=$',\n'; } |
|||
[[ $latest_handshake == "0" ]] || { printf '%s\t\t\t\t"latestHandshake": %u' "$delim" $(( $latest_handshake )); delim=$',\n'; } |
|||
[[ $transfer_rx == "0" ]] || { printf '%s\t\t\t\t"transferRx": %u' "$delim" $(( $transfer_rx )); delim=$',\n'; } |
|||
[[ $transfer_tx == "0" ]] || { printf '%s\t\t\t\t"transferTx": %u' "$delim" $(( $transfer_tx )); delim=$',\n'; } |
|||
[[ $persistent_keepalive == "off" ]] || { printf '%s\t\t\t\t"persistentKeepalive": %u' "$delim" $(( $persistent_keepalive )); delim=$',\n'; } |
|||
printf '%s\t\t\t\t"allowedIps": [' "$delim" |
|||
delim=$'\n' |
|||
if [[ $allowed_ips != "(none)" ]]; then |
|||
old_ifs="$IFS" |
|||
IFS=, |
|||
for ip in $allowed_ips; do |
|||
printf '%s\t\t\t\t\t"%s"' "$delim" "$ip" |
|||
delim=$',\n' |
|||
done |
|||
IFS="$old_ifs" |
|||
delim=$'\n' |
|||
fi |
|||
printf '%s\t\t\t\t]' "$delim" |
|||
printf '\n\t\t\t}' |
|||
delim=$',\n' |
|||
fi |
|||
|
|||
|
|||
done |
|||
printf '%s\n' "$end" |
|||
printf '}\n' |
@ -0,0 +1,127 @@ |
|||
#!/bin/bash |
|||
|
|||
|
|||
SOURCE="${BASH_SOURCE[0]}" |
|||
while [ -h "$SOURCE" ]; do # resolve $SOURCE until the file is no longer a symlink |
|||
TARGET="$(readlink "$SOURCE")" |
|||
if [[ $TARGET == /* ]]; then |
|||
#echo "SOURCE '$SOURCE' is an absolute symlink to '$TARGET'" |
|||
SOURCE="$TARGET" |
|||
else |
|||
DIR="$( dirname "$SOURCE" )" |
|||
#echo "SOURCE '$SOURCE' is a relative symlink to '$TARGET' (relative to '$DIR')" |
|||
SOURCE="$DIR/$TARGET" # if $SOURCE was a relative symlink, we need to resolve it relative to the path where the symlink file was located |
|||
fi |
|||
done |
|||
|
|||
SRPATH="$( dirname "$SOURCE" )" |
|||
SFPATH="$( cd -P "$( dirname "$SOURCE" )" && pwd )" |
|||
if [ "$SFPATH" != "$SRPATH" ]; then |
|||
RDIR=$SRPATH # relativ path directory |
|||
fi |
|||
|
|||
cwdir=$PWD |
|||
wdir=$SFPATH |
|||
|
|||
if [ "$cwdir" != "$wdir" ]; then |
|||
cd $wdir |
|||
fi |
|||
|
|||
# |
|||
#files/mongo/ |
|||
# docker-compose.yml |
|||
# .env |
|||
# logs |
|||
# mongod.conf |
|||
# package.json |
|||
# venus-stats.js |
|||
# wg-json |
|||
# |
|||
|
|||
function EPHEMERAL_PORT() { |
|||
LOW_BOUND=49152 |
|||
RANGE=16384 |
|||
while true; do |
|||
CANDIDATE=$[$LOW_BOUND + ($RANDOM % $RANGE)] |
|||
(echo "" >/dev/tcp/127.0.0.1/${CANDIDATE}) >/dev/null 2>&1 |
|||
if [ $? -ne 0 ]; then |
|||
echo $CANDIDATE |
|||
break |
|||
fi |
|||
done |
|||
} |
|||
|
|||
if [ ! -d $wdir/hybrid/venus-stats ]; then |
|||
mkdir -p $wdir/hybrid/venus-stats |
|||
fi |
|||
|
|||
cp -raf $wdir/files/mongo/wg-json $wdir/hybrid/venus-stats |
|||
cp -raf $wdir/files/mongo/mongod.conf $wdir/hybrid/venus-stats |
|||
cp -raf $wdir/files/mongo/docker-compose.yml $wdir/hybrid/venus-stats |
|||
cp -raf $wdir/files/mongo/files/mongo/venus-stats.js $wdir/hybrid/venus-stats |
|||
|
|||
|
|||
swuser=swarmlab |
|||
swpass=$(tr -dc A-Za-z0-9 </dev/urandom | head -c 13 ; echo '') |
|||
db=venus |
|||
conf=$wdir/hybrid/venus-stats/mongod.conf |
|||
port=$(EPHEMERAL_PORT) |
|||
coll=logs |
|||
ip='127.0.0.1' |
|||
|
|||
|
|||
cat << FOE > $wdir/hybrid/venus-stats/.env |
|||
#!/bin/bash |
|||
|
|||
MONGO_INITDB_ROOT_USERNAME=$swuser |
|||
MONGO_INITDB_ROOT_PASSWORD=$swpass |
|||
MONGO_INITDB_DATABASE=$db |
|||
|
|||
MONGO_VENUS_CONF=$conf |
|||
MONGO_VENUS_IP=$ip |
|||
MONGO_VENUS_PORT=$port |
|||
MONGO_VENUS_COLLECTION=$coll |
|||
FOE |
|||
|
|||
|
|||
cat << FOE > $wdir/hybrid/venus-stats/start |
|||
#!/bin/bash |
|||
|
|||
cd $wdir/hybrid/venus-stats; |
|||
|
|||
docker-compose down && |
|||
docker-compose rm && |
|||
docker-compose pull && |
|||
docker-compose build --no-cache && |
|||
docker-compose up -d --force-recreate |
|||
cd $wdir |
|||
FOE |
|||
|
|||
chmod +x $wdir/hybrid/venus-stats/start |
|||
|
|||
cat << FOE > $wdir/hybrid/venus-stats/stop |
|||
#!/bin/bash |
|||
|
|||
cd $wdir/hybrid/venus-stats; |
|||
|
|||
docker-compose down && |
|||
docker-compose rm |
|||
cd $wdir |
|||
FOE |
|||
|
|||
chmod +x $wdir/hybrid/venus-stats/stop |
|||
|
|||
|
|||
setconfig=$(jq \ |
|||
--arg key0 'mongo_user' --arg mongo_user $swuser \ |
|||
--arg key1 'mongo_pass' --arg mongo_pass $swpass \ |
|||
--arg key2 'mongo_db' --arg mongo_db $db \ |
|||
--arg key3 'mongo_ip' --arg mongo_ip $ip \ |
|||
--arg key4 'mongo_port' --arg mongo_port $port \ |
|||
--arg key5 'mongo_coll' --arg mongo_coll $coll \ |
|||
'. | .[$key0]=$mongo_user | .[$key1]=$mongo_pass | .[$key2]=$mongo_db | .[$key3]=$mongo_ip | .[$key4]=$mongo_port | .[$key5]=$mongo_coll' <<<'{}' |
|||
) |
|||
|
|||
echo $setconfig > $wdir/hybrid/venus-stats/config.json |
|||
|
|||
|
Loading…
Reference in new issue