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