forked from esculapeso/core-geth
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbash.sh
114 lines (105 loc) · 4.05 KB
/
bash.sh
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
#!/bin/bash
# Function to check if a string is a valid IP address
is_ip() {
local ip="$1"
# Check if the input matches the format of an IP address
if [[ $ip =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
return 0 # It is an IP address
else
return 1 # It is not an IP address
fi
}
# Function to get IP address from DDNS or return the input if it is already an IP address
get_ip_from_ddns() {
local ddns_name="$1"
local ip
if is_ip "$ddns_name"; then
ip="$ddns_name"
else
# Use nslookup to get the IP address
ip=$(nslookup "$ddns_name" | awk '/^Address: / { print $2 }' | tail -n1)
fi
if [ -z "$ip" ]; then
echo "No IP address found for $ddns_name"
return 1
else
echo "$ip"
fi
}
# Function to detect if running on Windows (Git Bash)
is_windows() {
case "$(uname -s)" in
CYGWIN*|MINGW32*|MSYS*|MINGW*)
return 0
;;
*)
return 1
;;
esac
}
esacoin() {
local prefix=""
local ipc_path="/root/.esa/geth.ipc"
local bash_path="/bin/bash"
local conv_ip=$(get_ip_from_ddns "$this_ip")
if is_windows; then
prefix="winpty"
fi
convert_path() {
if is_windows; then
# Convert /path/to to //path//to
echo "$1" | sed 's,/,//,g'
else
echo "$1"
fi
}
if [ "$1" = "exec" ]; then
if [ "$2" = "bash" ]; then
${prefix} docker exec -it esanode $(convert_path "$bash_path")
else
${prefix} docker exec -it esanode ./build/bin/geth attach ipc:$(convert_path "$ipc_path")
fi
elif [ "$1" = "run" ]; then
if [ "$2" = "sh" ]; then
docker run --name esanode -d -p 8545:8545 -p 30303:30303 -p 8546:8546 -v ${this_root_path}:/root/.esa -e IP=$conv_ip esacoin/esanode:latest sh
elif [ "$2" = "tag" ]; then
docker run --name esanode -d -p 8545:8545 -p 30303:30303 -p 8546:8546 -v ${this_root_path}:/root/.esa -e IP=$conv_ip esacoin/esanode:$3
elif [ "$2" = "boot" ]; then
docker run --name esanode --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 -d -p 8545:8545 -p 30303:30303 -p 8546:8546 -v ${this_root_path}:/root/.esa -e IP=$conv_ip -e OPTIONS="$OPTIONS" -e BOOTNODES="enode://1208561ffa896031a1f59807eabd32bacf8067bfe82d55079848505d6a2b839975b4dad1266cb25bb8430b0b695cec7a1cab6a6b1f9c101072d3116303fac225@65.108.151.70:30303?discport=0" esacoin/esanode:latest
else
docker run --name esanode --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 -d -p 8545:8545 -p 30303:30303 -p 8546:8546 -v ${this_root_path}:/root/.esa -e IP=$conv_ip -e OPTIONS="$OPTIONS" esacoin/esanode:latest
fi
elif [ "$1" = "stop" ]; then
if [ "$2" = "only" ]; then
docker stop esanode
else
docker stop esanode
docker rm esanode
fi
elif [ "$1" = "restart" ]; then
docker stop esanode
docker rm esanode
sudo rm $this_root_path/geth/transactions.rlp
docker run --name esanode --log-driver=json-file --log-opt max-size=10m --log-opt max-file=3 -d -p 8545:8545 -p 30303:30303 -p 8546:8546 -v ${this_root_path}:/root/.esa -e IP=$conv_ip -e OPTIONS="$OPTIONS" esacoin/esanode:latest
elif [ "$1" = "docker" ]; then
if [ "$2" = "build" ]; then
docker build --no-cache -t esacoin/esanode:latest .
elif [ "$2" = "pull" ]; then
docker pull esacoin/esanode:latest
elif [ "$2" = "push" ]; then
docker push esacoin/esanode:latest
else
docker ps
fi
elif [ "$1" = "clean" ]; then
sudo rm -rf $this_root_path
if [ "$2" = "all" ]; then
docker stop $(docker ps -q)
docker rm $(docker ps -a -q)
docker rmi $(docker images -q)
docker volume rm $(docker volume ls -q)
docker network rm $(docker network ls -q)
docker system prune -a --volumes
fi
fi
}