-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinstall.sh
More file actions
174 lines (151 loc) · 5.65 KB
/
Copy pathinstall.sh
File metadata and controls
174 lines (151 loc) · 5.65 KB
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
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
#!/bin/bash
set -e
# 0.1 Удаление старого nexus-node.service (если он существует)
if [[ -f "/etc/systemd/system/nexus-node.service" ]]; then
echo "⚠️ Обнаружен systemd-сервис nexus-node"
echo "⏹ Останавливаем и удаляем старый nexus-node.service..."
systemctl stop nexus-node || true
systemctl disable nexus-node || true
rm -f /etc/systemd/system/nexus-node.service
systemctl daemon-reload
echo "✅ Старый nexus-node.service удалён"
else
echo "ℹ️ systemd-сервис nexus-node отсутствует — продолжаем"
fi
# Установка nexus-cli
curl -s https://cli.nexus.xyz/ | sh
source /root/.bashrc
# Переменные
SERVICE_NAME="nexus-node"
USER="root"
BIN_PATH="/root/.nexus/bin/nexus-network"
CLI_BIN="nexus-cli"
CONFIG_FILE="/root/.nexus/config.json"
LOG_PATH="/var/log/${SERVICE_NAME}.log"
SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service"
LOGROTATE_FILE="/etc/logrotate.d/${SERVICE_NAME}"
MONITOR_SCRIPT="/opt/monitor/monitor.sh"
# Ввод количества потоков
read -p "Введите количество потоков (например: 6): " THREADS
if ! [[ "$THREADS" =~ ^[0-9]+$ ]] || [[ "$THREADS" -lt 1 ]]; then
echo "❌ Некорректное значение потоков: $THREADS"
exit 1
fi
# Проверка бинарников
for cmd in "$BIN_PATH" "$CLI_BIN"; do
if [[ ! -x "$cmd" && -z "$(command -v $cmd)" ]]; then
echo "❌ Не найден: $cmd"
exit 1
fi
done
# Установка jq при необходимости
if ! command -v jq &>/dev/null; then
echo "📦 Устанавливаем jq..."
apt-get update -y && apt-get install -y jq
fi
# Получение node_id и wallet из config или регистрация
if [[ -f "$CONFIG_FILE" ]]; then
echo "📁 Обнаружен конфиг: $CONFIG_FILE"
NODE_ID=$(jq -r '.node_id' "$CONFIG_FILE")
WALLET=$(jq -r '.wallet_address' "$CONFIG_FILE")
if [[ -z "$NODE_ID" || -z "$WALLET" || "$NODE_ID" == "null" || "$WALLET" == "null" ]]; then
echo "❌ config.json повреждён или неполный."
read -p "❓ Удалить повреждённый конфиг и зарегистрировать заново? (y/N): " choice
if [[ "$choice" =~ ^[Yy]$ ]]; then
rm -f "$CONFIG_FILE"
echo "🗑️ Удалён: $CONFIG_FILE"
read -p "Введите адрес кошелька: " WALLET
if [[ -z "$WALLET" ]]; then
echo "❌ Адрес кошелька не может быть пустым"
exit 1
fi
echo "🔐 Регистрируем пользователя..."
nexus-cli register-user --wallet-address "$WALLET" || {
echo "❌ Не удалось зарегистрировать пользователя"
exit 1
}
echo "🆔 Регистрируем ноду..."
NODE_ID=$(nexus-cli register-node | grep "Node registered successfully" | grep -oE '[0-9]+')
if [[ -z "$NODE_ID" ]]; then
echo "❌ Не удалось получить node ID"
exit 1
fi
echo "✅ Node ID: $NODE_ID"
else
echo "🚫 Прервано пользователем"
exit 1
fi
else
echo "✅ Используем node_id: $NODE_ID"
fi
else
read -p "Введите адрес кошелька: " WALLET
if [[ -z "$WALLET" ]]; then
echo "❌ Адрес кошелька не может быть пустым"
exit 1
fi
echo "🔐 Регистрируем пользователя..."
nexus-cli register-user --wallet-address "$WALLET" || {
echo "❌ Не удалось зарегистрировать пользователя"
exit 1
}
echo "🆔 Регистрируем ноду..."
NODE_ID=$(nexus-cli register-node | grep "Node registered successfully" | grep -oE '[0-9]+')
if [[ -z "$NODE_ID" ]]; then
echo "❌ Не удалось получить node ID"
exit 1
fi
echo "✅ Node ID: $NODE_ID"
fi
# Создание systemd unit-файла
echo "📦 Создаём systemd unit: $SERVICE_FILE"
cat > "$SERVICE_FILE" <<EOF
[Unit]
Description=Nexus Network Node
After=network.target
[Service]
Type=simple
ExecStart=$BIN_PATH start --node-id $NODE_ID --max-threads $THREADS --headless
Restart=always
RestartSec=5
User=$USER
WorkingDirectory=/root
StandardOutput=append:$LOG_PATH
StandardError=append:$LOG_PATH
[Install]
WantedBy=multi-user.target
EOF
# Настройка logrotate
echo "🌀 Настраиваем logrotate: $LOGROTATE_FILE"
cat > "$LOGROTATE_FILE" <<EOF
$LOG_PATH {
daily
rotate 7
compress
missingok
notifempty
copytruncate
}
EOF
# Перезапуск systemd
echo "🔄 Перезапуск systemd..."
systemctl daemon-reload
systemctl enable "$SERVICE_NAME"
systemctl restart "$SERVICE_NAME"
# Добавление в мониторинг
if [[ -f "$MONITOR_SCRIPT" ]]; then
echo "📡 Обновляем мониторинг: $MONITOR_SCRIPT"
if ! grep -q "$SERVICE_NAME" "$MONITOR_SCRIPT"; then
sed -i "/^services=(/ s/)/ \"$SERVICE_NAME\")/" "$MONITOR_SCRIPT"
echo "✅ Добавлен $SERVICE_NAME в мониторинг"
systemctl restart server-monitor || echo "⚠️ Не удалось перезапустить мониторинг"
else
echo "ℹ️ $SERVICE_NAME уже отслеживается"
fi
else
echo "⚠️ Мониторинг-скрипт не найден по пути: $MONITOR_SCRIPT (пропущено)"
fi
# Финальный вывод
echo "✅ Установка завершена!"
systemctl status "$SERVICE_NAME" --no-pager
tail -f $LOG_PATH