bot-mwsm 3.0.4 → 3.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/Mwsm.yml +20 -57
- package/Dockerfile +95 -37
- package/README.md +10 -18
- package/bash/mwsm.sh +270 -142
- package/bash/setup.sh +47 -27
- package/mwsm.db +0 -0
- package/mwsm.js +464 -424
- package/package.json +6 -5
- package/version.json +2 -2
package/bash/mwsm.sh
CHANGED
|
@@ -31,21 +31,19 @@ pause_and_restore() {
|
|
|
31
31
|
# ===============================
|
|
32
32
|
# Diretórios dinâmicos globais
|
|
33
33
|
# ===============================
|
|
34
|
-
if [[ "$DISTRO_DETECT" == "docker" ]]; then
|
|
35
|
-
BASE_DIR="/app/Mwsm"
|
|
36
|
-
LOG_DIR="/app/logs"
|
|
37
|
-
else
|
|
38
34
|
BASE_DIR="/var/api/Mwsm"
|
|
39
|
-
LOG_DIR="/var/log
|
|
35
|
+
LOG_DIR="/var/log"
|
|
36
|
+
LOG_FILE="$LOG_DIR/mwsm.log"
|
|
37
|
+
TMP_SCRIPT="/tmp/mwsm.sh"
|
|
38
|
+
mkdir -p "$BASE_DIR" "$LOG_DIR"
|
|
39
|
+
touch "$LOG_FILE"
|
|
40
|
+
chmod 644 "$LOG_FILE"
|
|
41
|
+
|
|
42
|
+
if [ -s /proc/$$/fd/0 ]; then
|
|
43
|
+
cat /proc/$$/fd/0 > "$BASE_DIR/mwsm.sh"
|
|
44
|
+
chmod +x "$BASE_DIR/mwsm.sh"
|
|
40
45
|
fi
|
|
41
46
|
|
|
42
|
-
LOG_FILE="$LOG_DIR/mwsm.log"
|
|
43
|
-
|
|
44
|
-
mkdir -p "$BASE_DIR" "$LOG_DIR"
|
|
45
|
-
touch "$LOG_FILE"
|
|
46
|
-
chmod 644 "$LOG_FILE"
|
|
47
|
-
|
|
48
|
-
|
|
49
47
|
uninstall_concluido() {
|
|
50
48
|
local dirs=(
|
|
51
49
|
"$BASE_DIR"
|
|
@@ -186,6 +184,11 @@ NODE_REPO_FAILED=false
|
|
|
186
184
|
NODE_INSTALL_FAILED=false
|
|
187
185
|
NPM_INSTALL_FAILED=false
|
|
188
186
|
LAST_SUCCESS=""
|
|
187
|
+
detect_distro
|
|
188
|
+
if [ "$DISTRO" != "devuan" ] && [ "$DISTRO_DETECT" != "devuan" ]; then
|
|
189
|
+
export PIP_EXTRA_INDEX_URL="https://download.pytorch.org/whl/cpu"
|
|
190
|
+
fi
|
|
191
|
+
|
|
189
192
|
|
|
190
193
|
# =================================
|
|
191
194
|
# Modo de log completo
|
|
@@ -367,13 +370,39 @@ install() {
|
|
|
367
370
|
-o Dpkg::Options::='--force-confdef' \
|
|
368
371
|
-o Dpkg::Options::='--force-confold'" "Instalando pacotes extras..." install
|
|
369
372
|
else
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
373
|
+
run_step "(
|
|
374
|
+
$SUDO apt update -y >>\"$LOG_FILE\" 2>&1
|
|
375
|
+
$SUDO apt upgrade -y \
|
|
376
|
+
-o Dpkg::Options::='--force-confdef' \
|
|
377
|
+
-o Dpkg::Options::='--force-confold' >>\"$LOG_FILE\" 2>&1
|
|
378
|
+
$SUDO apt install -y curl git wget \
|
|
379
|
+
-o Dpkg::Options::='--force-confdef' \
|
|
380
|
+
-o Dpkg::Options::='--force-confold' >>\"$LOG_FILE\" 2>&1
|
|
381
|
+
)" "Instalando pacotes base..." install
|
|
382
|
+
|
|
383
|
+
run_step "$SUDO apt install -y \
|
|
384
|
+
ca-certificates fonts-liberation libappindicator3-1 \
|
|
385
|
+
libasound2 libatk-bridge2.0-0 libatk1.0-0 libc6 libcairo2 libcups2 \
|
|
386
|
+
libdbus-1-3 libexpat1 libfontconfig1 libgbm1 libgcc1 libglib2.0-0 \
|
|
387
|
+
libgtk-3-0 libnspr4 libnss3 libpango-1.0-0 libpangocairo-1.0-0 \
|
|
388
|
+
libstdc++6 libx11-6 libx11-xcb1 libxcb1 libxcomposite1 libxcursor1 \
|
|
389
|
+
libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 \
|
|
390
|
+
libxss1 libxtst6 lsb-release xdg-utils \
|
|
391
|
+
-o Dpkg::Options::='--force-confdef' \
|
|
392
|
+
-o Dpkg::Options::='--force-confold'" "Instalando pacotes extras..." install
|
|
393
|
+
|
|
394
|
+
run_step '(
|
|
395
|
+
set -e
|
|
396
|
+
if ! '"$SUDO"' apt-get install -y git wget curl jq build-essential libnss3-dev \
|
|
397
|
+
libgdk-pixbuf2.0-dev libgtk-3-dev libxss-dev libasound2 \
|
|
398
|
+
-o Dpkg::Options::="--force-confdef" \
|
|
399
|
+
-o Dpkg::Options::="--force-confold" >/dev/null 2>&1; then
|
|
400
|
+
'"$SUDO"' apt-get install -y libgdk-pixbuf-xlib-2.0-dev \
|
|
401
|
+
-o Dpkg::Options::="--force-confdef" \
|
|
402
|
+
-o Dpkg::Options::="--force-confold" >/dev/null 2>&1
|
|
403
|
+
fi
|
|
404
|
+
)' "Instalando dependências..." install
|
|
405
|
+
|
|
377
406
|
fi
|
|
378
407
|
|
|
379
408
|
# -------------------------
|
|
@@ -384,12 +413,12 @@ install() {
|
|
|
384
413
|
# -------------------------
|
|
385
414
|
# Node.js - Configurar repositório
|
|
386
415
|
# -------------------------
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
416
|
+
run_step "$SUDO bash -c '
|
|
417
|
+
cd /root || exit 1
|
|
418
|
+
apt-get update -y
|
|
419
|
+
apt-get install -y curl gnupg ca-certificates lsb-release apt-transport-https --no-install-recommends
|
|
420
|
+
curl -fsSL https://deb.nodesource.com/setup_20.x | bash - || exit 1
|
|
421
|
+
'" "Configurando repositório Node.js" install
|
|
393
422
|
|
|
394
423
|
if [ "$NODE_REPO_FAILED" = true ]; then
|
|
395
424
|
printf "❌ Instalando Node.js\n"
|
|
@@ -410,9 +439,12 @@ install() {
|
|
|
410
439
|
printf "❌ Iniciando serviços\n"
|
|
411
440
|
INSTALL_FAILED=true
|
|
412
441
|
else
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
442
|
+
|
|
443
|
+
# -------------------------
|
|
444
|
+
# 🐍 Python + Pip + Libs
|
|
445
|
+
# -------------------------
|
|
446
|
+
|
|
447
|
+
if [[ "$DISTRO_DETECT" == "devuan" ]]; then
|
|
416
448
|
run_step "$SUDO apt update -y >/dev/null 2>&1 && \
|
|
417
449
|
$SUDO apt install -y python3 python3-pip python3-venv \
|
|
418
450
|
-o Dpkg::Options::='--force-confdef' \
|
|
@@ -423,14 +455,10 @@ install() {
|
|
|
423
455
|
run_step "$SUDO python3 -m ensurepip --upgrade >/dev/null 2>&1" \
|
|
424
456
|
'Restaurando pip' install
|
|
425
457
|
fi
|
|
426
|
-
|
|
427
458
|
run_step "cd /tmp && \
|
|
428
459
|
PIP_DISABLE_PIP_VERSION_CHECK=1 PIP_ROOT_USER_ACTION=ignore \
|
|
429
460
|
$SUDO python3 -m pip install --quiet --no-input --upgrade pip setuptools wheel" \
|
|
430
|
-
'Atualizando Python'
|
|
431
|
-
|
|
432
|
-
# Instala libs Python dependendo da distro detectada
|
|
433
|
-
if [[ "$DISTRO_DETECT" == "devuan" ]]; then
|
|
461
|
+
'Atualizando Python' instal
|
|
434
462
|
run_step "cd /tmp && \
|
|
435
463
|
PIP_DISABLE_PIP_VERSION_CHECK=1 PIP_ROOT_USER_ACTION=ignore \
|
|
436
464
|
$SUDO python3 -m pip install --quiet --no-input \
|
|
@@ -440,44 +468,84 @@ install() {
|
|
|
440
468
|
'safetensors==0.3.1' \
|
|
441
469
|
'huggingface_hub==0.10.1'" \
|
|
442
470
|
'Instalando libs Python' install
|
|
471
|
+
else
|
|
472
|
+
run_step "$SUDO apt update -y >/dev/null 2>&1 && \
|
|
473
|
+
$SUDO apt install -y python3 python3-pip python3-venv \
|
|
474
|
+
-o Dpkg::Options::='--force-confdef' \
|
|
475
|
+
-o Dpkg::Options::='--force-confold' >/dev/null 2>&1" \
|
|
476
|
+
'Instalando Python' install
|
|
477
|
+
|
|
478
|
+
if ! command -v pip3 >/dev/null 2>&1; then
|
|
479
|
+
run_step "$SUDO python3 -m ensurepip --upgrade >/dev/null 2>&1" \
|
|
480
|
+
'Restaurando pip' install
|
|
481
|
+
fi
|
|
482
|
+
run_step "cd /tmp && \
|
|
483
|
+
PIP_DISABLE_PIP_VERSION_CHECK=1 PIP_ROOT_USER_ACTION=ignore \
|
|
484
|
+
$SUDO python3 -m ensurepip --upgrade >/dev/null 2>&1 && \
|
|
485
|
+
$SUDO python3 -m pip install --no-input --quiet --upgrade setuptools wheel >/dev/null 2>&1 || true" \
|
|
486
|
+
'Atualizando Python' install
|
|
487
|
+
run_step "PIP_DISABLE_PIP_VERSION_CHECK=1 PIP_ROOT_USER_ACTION=ignore \
|
|
488
|
+
$SUDO python3 -m pip install --quiet --no-input \
|
|
489
|
+
'flask==2.2.5' \
|
|
490
|
+
'sentence-transformers==2.2.2' \
|
|
491
|
+
'huggingface_hub==0.10.1' >/dev/null 2>&1 || true" \
|
|
492
|
+
'Instalando libs Python' install
|
|
493
|
+
fi
|
|
443
494
|
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
495
|
+
if [[ "$DISTRO_DETECT" == "devuan" ]]; then
|
|
496
|
+
# --- Compatibilidade Devuan (Beowulf) ---
|
|
497
|
+
run_step "
|
|
498
|
+
command -v pip3 >/dev/null 2>&1 || $SUDO apt install -y python3-pip >/dev/null 2>&1
|
|
499
|
+
$SUDO python3 -m pip show flask >/dev/null 2>&1 || $SUDO python3 -m pip install --quiet flask
|
|
500
|
+
$SUDO python3 -m pip show sentence-transformers >/dev/null 2>&1 || $SUDO python3 -m pip install --quiet sentence-transformers
|
|
501
|
+
$SUDO python3 -m pip show huggingface_hub >/dev/null 2>&1 || $SUDO python3 -m pip install --quiet huggingface_hub
|
|
502
|
+
" 'Verificando integridade Python' install
|
|
503
|
+
else
|
|
504
|
+
# --- Compatibilidade Debian 11+ / Ubuntu 20+ ---
|
|
505
|
+
run_step "
|
|
506
|
+
command -v pip3 >/dev/null 2>&1 || $SUDO apt install -y python3-pip >/dev/null 2>&1
|
|
507
|
+
for pkg in flask sentence-transformers huggingface_hub; do
|
|
508
|
+
python3 -m pip show \$pkg >/dev/null 2>&1 || $SUDO python3 -m pip show \$pkg >/dev/null 2>&1 || \
|
|
509
|
+
$SUDO python3 -m pip install --quiet --no-input \$pkg >/dev/null 2>&1 || true
|
|
510
|
+
done
|
|
511
|
+
" 'Verificando integridade Python' install
|
|
512
|
+
fi
|
|
453
513
|
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
514
|
+
|
|
515
|
+
# -------------------------
|
|
516
|
+
# Repositório Mwsm
|
|
517
|
+
# -------------------------
|
|
518
|
+
cp "$0" "$TMP_SCRIPT" >/dev/null 2>&1 || true
|
|
519
|
+
run_step "rm -rf $BASE_DIR && mkdir -p $BASE_DIR && cd $BASE_DIR && \
|
|
520
|
+
git init && git remote add origin https://github.com/MKCodec/Mwsm.git && \
|
|
521
|
+
git config core.sparseCheckout true && \
|
|
522
|
+
echo -e 'fonts/\nicon.png\nindex.html\njquery.js\nmwsm.db\nmwsm.js\nmwsm.json\nnodemon.json\npackage.json\nscript.js\nsocket.io.js\nstyle.css\nversion.json\nmwsm.py' > .git/info/sparse-checkout && \
|
|
523
|
+
git pull origin main || git pull origin master" "Baixando repositório Mwsm" install
|
|
524
|
+
|
|
525
|
+
# 🧩 Se já existir instalação anterior, ativa modo silencioso
|
|
526
|
+
if [ -f "$BASE_DIR/mwsm.sh" ]; then
|
|
527
|
+
silent_menu
|
|
528
|
+
exit 0
|
|
529
|
+
fi
|
|
458
530
|
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
Setup_Mwsm
|
|
469
|
-
if [ -f $BASE_DIR/mwsm.sh ]; then
|
|
470
|
-
ln -sf $BASE_DIR/mwsm.sh /usr/local/bin/mwsm 2>/dev/null || $SUDO ln -sf $BASE_DIR/mwsm.sh /usr/local/bin/mwsm
|
|
471
|
-
chmod +x /usr/local/bin/mwsm 2>/dev/null || $SUDO chmod +x /usr/local/bin/mwsm
|
|
472
|
-
fi
|
|
531
|
+
if [ -f "$TMP_SCRIPT" ]; then
|
|
532
|
+
cp "$TMP_SCRIPT" "$BASE_DIR/mwsm.sh" >/dev/null 2>&1
|
|
533
|
+
chmod +x "$BASE_DIR/mwsm.sh"
|
|
534
|
+
ln -sf "$BASE_DIR/mwsm.sh" /usr/local/bin/mwsm 2>/dev/null || $SUDO ln -sf "$BASE_DIR/mwsm.sh" /usr/local/bin/mwsm
|
|
535
|
+
rm -f "$TMP_SCRIPT"
|
|
536
|
+
fi
|
|
537
|
+
|
|
538
|
+
CURRENT_USER=$(logname 2>/dev/null || echo "$USER")
|
|
539
|
+
$SUDO chown -R "$CURRENT_USER":"$CURRENT_USER" "$BASE_DIR"
|
|
473
540
|
|
|
474
541
|
# -------------------------
|
|
475
542
|
# Dependências Node
|
|
476
543
|
# -------------------------
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
544
|
+
cd $BASE_DIR || return
|
|
545
|
+
run_step "node -v >/dev/null 2>&1" "Verificando instalação do Node.js" install
|
|
546
|
+
run_step "$SUDO npm install -g npm@latest --quiet --no-progress" "Atualizando NPM" install
|
|
547
|
+
run_step "$SUDO npm cache clean --force >/dev/null 2>&1" "Limpando cache NPM" install
|
|
548
|
+
run_step "npm config set registry https://registry.npmjs.org >/dev/null 2>&1" "Configurando registro NPM" install
|
|
481
549
|
|
|
482
550
|
if [[ "$DISTRO_DETECT" == "devuan" ]]; then
|
|
483
551
|
run_step "$SUDO npm install -g npm@latest node-gyp@latest" "Atualizando npm e node-gyp" install
|
|
@@ -515,20 +583,25 @@ install() {
|
|
|
515
583
|
# -------------------------
|
|
516
584
|
# Instalação e atualização do PM2
|
|
517
585
|
# -------------------------
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
586
|
+
if command -v pm2 >/dev/null 2>&1; then
|
|
587
|
+
CURRENT_PM2_VERSION=$(pm2 -v | head -n1 | tr -d '[:space:]')
|
|
588
|
+
LATEST_PM2_VERSION=$(npm view pm2 version 2>/dev/null | tr -d '[:space:]')
|
|
589
|
+
|
|
590
|
+
if [[ -n "$LATEST_PM2_VERSION" && "$CURRENT_PM2_VERSION" != "$LATEST_PM2_VERSION" ]]; then
|
|
591
|
+
echo "$(date '+%Y-%m-%d %H:%M:%S') - [INFO] Atualizando PM2 de $CURRENT_PM2_VERSION para $LATEST_PM2_VERSION" >>"$LOG_FILE"
|
|
592
|
+
run_step "$SUDO npm install -g pm2@$LATEST_PM2_VERSION --silent --no-audit --no-fund" \
|
|
593
|
+
"Atualizando PM2" install
|
|
594
|
+
else
|
|
595
|
+
echo "$(date '+%Y-%m-%d %H:%M:%S') - [INFO] PM2 já está atualizado (v$CURRENT_PM2_VERSION)" >>"$LOG_FILE"
|
|
596
|
+
run_step "$SUDO pm2 update >/dev/null 2>&1 || true" \
|
|
597
|
+
"Sincronizando PM2" install
|
|
598
|
+
fi
|
|
599
|
+
else
|
|
600
|
+
run_step "$SUDO npm install -g pm2@latest --silent --no-audit --no-fund" \
|
|
601
|
+
"Instalando PM2" install
|
|
602
|
+
run_step "$SUDO timeout 15s pm2 update >/dev/null 2>&1 || { $SUDO pm2 kill >/dev/null 2>&1; rm -rf ~/.pm2; $SUDO pm2 update >/dev/null 2>&1 || true; }" \
|
|
603
|
+
"Inicializando PM2" install
|
|
604
|
+
fi
|
|
532
605
|
|
|
533
606
|
# -------------------------
|
|
534
607
|
# Inicialização dos serviços
|
|
@@ -716,14 +789,27 @@ update() {
|
|
|
716
789
|
run_step "$SUDO pm2 flush" "Limpando logs PM2" update
|
|
717
790
|
run_step "$SUDO pm2 delete all && $SUDO pm2 kill" "Parando serviços" update
|
|
718
791
|
fi
|
|
719
|
-
|
|
720
792
|
run_step "backup_mwsm_db" "Exportando dados Mwsm" update
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
793
|
+
|
|
794
|
+
cp "$0" "$TMP_SCRIPT" >/dev/null 2>&1 || true
|
|
795
|
+
|
|
796
|
+
run_step "cd $BASE_DIR && \
|
|
797
|
+
git fetch origin main && git reset --hard origin/main" \
|
|
798
|
+
"Atualizando repositório Mwsm" update
|
|
799
|
+
|
|
800
|
+
if [ -f "$TMP_SCRIPT" ]; then
|
|
801
|
+
cp "$TMP_SCRIPT" "$BASE_DIR/mwsm.sh" >/dev/null 2>&1
|
|
802
|
+
chmod +x "$BASE_DIR/mwsm.sh"
|
|
803
|
+
ln -sf "$BASE_DIR/mwsm.sh" /usr/local/bin/mwsm 2>/dev/null || \
|
|
804
|
+
$SUDO ln -sf "$BASE_DIR/mwsm.sh" /usr/local/bin/mwsm
|
|
805
|
+
rm -f "$TMP_SCRIPT"
|
|
806
|
+
fi
|
|
807
|
+
|
|
808
|
+
CURRENT_USER=$(logname 2>/dev/null || echo "$USER")
|
|
809
|
+
$SUDO chown -R "$CURRENT_USER":"$CURRENT_USER" "$BASE_DIR" >/dev/null 2>&1
|
|
810
|
+
|
|
811
|
+
Setup_Mwsm
|
|
812
|
+
|
|
727
813
|
run_step "$SUDO apt-get update -y >/dev/null 2>&1" "Verificando repositórios APT" update
|
|
728
814
|
run_step "$SUDO apt --fix-broken install -y >/dev/null 2>&1 || true" "Corrigindo pacotes quebrados" update
|
|
729
815
|
run_step "$SUDO apt-get install -y git wget curl jq build-essential sqlite3 --no-install-recommends >/dev/null 2>&1" "Verificando dependências" update
|
|
@@ -746,24 +832,51 @@ update() {
|
|
|
746
832
|
fi
|
|
747
833
|
|
|
748
834
|
run_step "$SUDO npm install --silent --no-fund --no-audit" "Atualizando dependências Node.js" update
|
|
835
|
+
|
|
836
|
+
# -------------------------
|
|
837
|
+
# 🐍 Atualização Python + Pip + Libs
|
|
838
|
+
# -------------------------
|
|
839
|
+
|
|
840
|
+
if [[ "$DISTRO_DETECT" == "devuan" ]]; then
|
|
749
841
|
if ! command -v python3 >/dev/null 2>&1; then
|
|
750
842
|
run_step "$SUDO apt install -y python3 python3-pip python3-venv --no-install-recommends >/dev/null 2>&1" "Instalando Python" update
|
|
751
843
|
fi
|
|
752
844
|
run_step "$SUDO python3 -m pip install --quiet --upgrade pip setuptools wheel" "Atualizando pip" update
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
845
|
+
run_step "cd /tmp && \
|
|
846
|
+
PIP_DISABLE_PIP_VERSION_CHECK=1 PIP_ROOT_USER_ACTION=ignore \
|
|
847
|
+
$SUDO python3 -m pip install --quiet --no-input \
|
|
756
848
|
'flask==2.2.5' \
|
|
757
849
|
'sentence-transformers==2.2.2' \
|
|
758
850
|
'transformers==4.25.1' \
|
|
759
851
|
'safetensors==0.3.1' \
|
|
760
|
-
'huggingface_hub==0.10.1'
|
|
761
|
-
|
|
762
|
-
|
|
852
|
+
'huggingface_hub==0.10.1' >/dev/null 2>&1 || true" \
|
|
853
|
+
"Atualizando libs Python" update
|
|
854
|
+
else
|
|
855
|
+
|
|
856
|
+
if ! command -v python3 >/dev/null 2>&1; then
|
|
857
|
+
run_step "$SUDO apt update -y >/dev/null 2>&1 && \
|
|
858
|
+
$SUDO apt install -y python3 python3-pip python3-venv \
|
|
859
|
+
-o Dpkg::Options::='--force-confdef' \
|
|
860
|
+
-o Dpkg::Options::='--force-confold' >/dev/null 2>&1" \
|
|
861
|
+
"Instalando Python" update
|
|
862
|
+
fi
|
|
863
|
+
|
|
864
|
+
run_step "cd /tmp && \
|
|
865
|
+
PIP_DISABLE_PIP_VERSION_CHECK=1 PIP_ROOT_USER_ACTION=ignore \
|
|
866
|
+
$SUDO python3 -m ensurepip --upgrade >/dev/null 2>&1 && \
|
|
867
|
+
$SUDO python3 -m pip install --no-input --quiet --upgrade setuptools wheel >/dev/null 2>&1 || true" \
|
|
868
|
+
"Atualizando pip" update
|
|
869
|
+
|
|
870
|
+
run_step "cd /tmp && \
|
|
871
|
+
PIP_DISABLE_PIP_VERSION_CHECK=1 PIP_ROOT_USER_ACTION=ignore \
|
|
872
|
+
$SUDO python3 -m pip install --quiet --no-input \
|
|
763
873
|
'flask==2.2.5' \
|
|
764
874
|
'sentence-transformers==2.2.2' \
|
|
765
|
-
'huggingface_hub==0.10.1'
|
|
766
|
-
|
|
875
|
+
'huggingface_hub==0.10.1' >/dev/null 2>&1 || true" \
|
|
876
|
+
"Atualizando libs Python" update
|
|
877
|
+
fi
|
|
878
|
+
|
|
879
|
+
|
|
767
880
|
|
|
768
881
|
if command -v pm2 >/dev/null 2>&1; then
|
|
769
882
|
CURRENT_PM2_VERSION=$(pm2 -v | head -n1 | tr -d '[:space:]')
|
|
@@ -951,6 +1064,15 @@ reinstall() {
|
|
|
951
1064
|
}
|
|
952
1065
|
|
|
953
1066
|
view_log_hidden() {
|
|
1067
|
+
# sempre restaura o terminal ao sair (mesmo se der erro)
|
|
1068
|
+
cleanup_view() {
|
|
1069
|
+
stty sane >/dev/null 2>&1 || true
|
|
1070
|
+
tput cnorm >/dev/null 2>&1 || true
|
|
1071
|
+
tput sgr0 >/dev/null 2>&1 || true
|
|
1072
|
+
}
|
|
1073
|
+
trap cleanup_view EXIT
|
|
1074
|
+
|
|
1075
|
+
cleanup_view # garante início limpo
|
|
954
1076
|
while true; do
|
|
955
1077
|
clear
|
|
956
1078
|
echo "====================================="
|
|
@@ -963,50 +1085,50 @@ view_log_hidden() {
|
|
|
963
1085
|
echo "-------------------------------------"
|
|
964
1086
|
printf "Escolha uma opção: "
|
|
965
1087
|
|
|
966
|
-
|
|
967
|
-
read -rsn1 log_choice
|
|
968
|
-
case "$log_choice" in
|
|
969
|
-
[0-3]) break ;;
|
|
970
|
-
*) continue ;;
|
|
971
|
-
esac
|
|
972
|
-
done
|
|
1088
|
+
read -rsn1 log_choice
|
|
973
1089
|
echo "$log_choice"
|
|
974
1090
|
|
|
975
1091
|
case $log_choice in
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
break
|
|
1007
|
-
;;
|
|
1092
|
+
1)
|
|
1093
|
+
cleanup_view
|
|
1094
|
+
cutoff_date=$(date -d '24 hours ago' '+%Y-%m-%d %H:%M:%S')
|
|
1095
|
+
grep -E "^[0-9]{4}-[0-9]{2}-[0-9]{2}" "$LOG_FILE" | \
|
|
1096
|
+
awk -v cutoff="$cutoff_date" '
|
|
1097
|
+
{
|
|
1098
|
+
if ($0 >= cutoff) print $0
|
|
1099
|
+
}' | iconv -f utf-8 -t utf-8
|
|
1100
|
+
echo
|
|
1101
|
+
read -rp "Pressione ENTER para voltar..."
|
|
1102
|
+
;;
|
|
1103
|
+
2)
|
|
1104
|
+
cleanup_view
|
|
1105
|
+
grep "^[0-9]\\{4\\}-" "$LOG_FILE" | iconv -f utf-8 -t utf-8
|
|
1106
|
+
echo
|
|
1107
|
+
read -rp "Pressione ENTER para voltar..."
|
|
1108
|
+
;;
|
|
1109
|
+
3)
|
|
1110
|
+
cleanup_view
|
|
1111
|
+
grep -v "^[0-9]\\{4\\}-" "$LOG_FILE" | iconv -f utf-8 -t utf-8
|
|
1112
|
+
echo
|
|
1113
|
+
read -rp "Pressione ENTER para voltar..."
|
|
1114
|
+
;;
|
|
1115
|
+
0)
|
|
1116
|
+
cleanup_view
|
|
1117
|
+
break
|
|
1118
|
+
;;
|
|
1119
|
+
*)
|
|
1120
|
+
continue
|
|
1121
|
+
;;
|
|
1008
1122
|
esac
|
|
1009
1123
|
done
|
|
1124
|
+
|
|
1125
|
+
cleanup_view
|
|
1126
|
+
trap - EXIT
|
|
1127
|
+
sleep 0.1
|
|
1128
|
+
clear
|
|
1129
|
+
stty sane >/dev/null 2>&1 || true
|
|
1130
|
+
tput civis >/dev/null 2>&1 || true
|
|
1131
|
+
|
|
1010
1132
|
}
|
|
1011
1133
|
|
|
1012
1134
|
# ========================
|
|
@@ -1018,6 +1140,8 @@ clear_log_hidden() {
|
|
|
1018
1140
|
echo "🧹 Log limpo com sucesso!"
|
|
1019
1141
|
echo "-------------------------------------"
|
|
1020
1142
|
sleep 2
|
|
1143
|
+
stty sane >/dev/null 2>&1 || true
|
|
1144
|
+
tput civis >/dev/null 2>&1 || true
|
|
1021
1145
|
}
|
|
1022
1146
|
|
|
1023
1147
|
# ========================
|
|
@@ -1027,9 +1151,10 @@ menu() {
|
|
|
1027
1151
|
command -v tput >/dev/null 2>&1 && tput civis >/dev/null 2>&1 || true
|
|
1028
1152
|
detect_distro
|
|
1029
1153
|
while true; do
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1154
|
+
|
|
1155
|
+
if [ -t 0 ]; then
|
|
1156
|
+
stty sane >/dev/null 2>&1 || true
|
|
1157
|
+
fi
|
|
1033
1158
|
|
|
1034
1159
|
clear
|
|
1035
1160
|
|
|
@@ -1052,13 +1177,16 @@ menu() {
|
|
|
1052
1177
|
|
|
1053
1178
|
command -v tput >/dev/null 2>&1 && tput civis >/dev/null 2>&1 || true
|
|
1054
1179
|
|
|
1055
|
-
|
|
1056
|
-
|
|
1057
|
-
|
|
1058
|
-
|
|
1059
|
-
|
|
1060
|
-
|
|
1061
|
-
|
|
1180
|
+
|
|
1181
|
+
while true; do
|
|
1182
|
+
stty -echo -icanon time 0 min 0 2>/dev/null || true
|
|
1183
|
+
read -rsn1 choice
|
|
1184
|
+
stty sane 2>/dev/null || true
|
|
1185
|
+
case "$choice" in
|
|
1186
|
+
[0-6]) break ;;
|
|
1187
|
+
*) continue ;;
|
|
1188
|
+
esac
|
|
1189
|
+
done
|
|
1062
1190
|
|
|
1063
1191
|
echo "$choice"
|
|
1064
1192
|
|
package/bash/setup.sh
CHANGED
|
@@ -130,15 +130,26 @@ SPIN_PID=$!
|
|
|
130
130
|
echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] Verificando dependências..." >>"$LOG_FILE"
|
|
131
131
|
|
|
132
132
|
# ==============================
|
|
133
|
-
# 🐋 Caso esteja em Docker
|
|
133
|
+
# 🐋 Caso esteja em Docker
|
|
134
134
|
# ==============================
|
|
135
135
|
if [[ "$DISTRO_DETECT" == "docker" ]]; then
|
|
136
|
-
echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] Ambiente Docker detectado -
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP]
|
|
136
|
+
echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] Ambiente Docker detectado - iniciando modo ultrarrápido" >>"$LOG_FILE"
|
|
137
|
+
if ! systemctl is-active --quiet docker; then
|
|
138
|
+
echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] Iniciando serviço Docker" >>"$LOG_FILE"
|
|
139
|
+
$SUDO systemctl start docker >/dev/null 2>&1
|
|
140
|
+
fi
|
|
141
|
+
echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] Baixando imagem mkcodec/mwsm:latest" >>"$LOG_FILE"
|
|
142
|
+
$SUDO docker pull mkcodec/mwsm:latest >/dev/null 2>&1
|
|
143
|
+
if $SUDO docker ps -a --format '{{.Names}}' | grep -q '^mwsm$'; then
|
|
144
|
+
echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] Removendo container antigo Mwsm" >>"$LOG_FILE"
|
|
145
|
+
$SUDO docker stop mwsm >/dev/null 2>&1
|
|
146
|
+
$SUDO docker rm mwsm >/dev/null 2>&1
|
|
147
|
+
fi
|
|
148
|
+
echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] Iniciando container Mwsm" >>"$LOG_FILE"
|
|
149
|
+
$SUDO docker run -d --name mwsm -p 8000:8000 -p 5005:5005 mkcodec/mwsm:latest >/dev/null 2>&1
|
|
150
|
+
sleep 5
|
|
151
|
+
echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] Acessando logs do PM2 dentro do container" >>"$LOG_FILE"
|
|
152
|
+
$SUDO docker exec -it mwsm pm2 logs
|
|
142
153
|
else
|
|
143
154
|
# ==============================
|
|
144
155
|
# 🧩 Correção silenciosa Debian antigo
|
|
@@ -157,27 +168,36 @@ SPIN_PID=$!
|
|
|
157
168
|
' >>"$LOG_FILE" 2>&1
|
|
158
169
|
fi
|
|
159
170
|
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
171
|
+
# ==============================
|
|
172
|
+
# 📦 Curl e dependências
|
|
173
|
+
# ==============================
|
|
174
|
+
if ! command -v curl >/dev/null 2>&1; then
|
|
175
|
+
echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] Instalando curl" >>"$LOG_FILE"
|
|
176
|
+
$SUDO apt-get update -qq >/dev/null 2>&1
|
|
177
|
+
$SUDO apt-get install -y -qq curl >/dev/null 2>&1
|
|
178
|
+
fi
|
|
168
179
|
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
180
|
+
# ==============================
|
|
181
|
+
# 🕒 Ajuste de fuso horário e NTP
|
|
182
|
+
# ==============================
|
|
183
|
+
if command -v timedatectl >/dev/null 2>&1; then
|
|
184
|
+
$SUDO timedatectl set-timezone America/Sao_Paulo >/dev/null 2>&1
|
|
185
|
+
$SUDO timedatectl set-ntp true >/dev/null 2>&1
|
|
186
|
+
echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] timedatectl detectado - timezone e NTP configurados" >>"$LOG_FILE"
|
|
187
|
+
CURRENT_TIME="$(date '+%Y-%m-%d %H:%M:%S')"
|
|
188
|
+
echo "$CURRENT_TIME - [SETUP] timedatectl detectado - timezone e NTP configurados" >>"$LOG_FILE"
|
|
189
|
+
echo "$CURRENT_TIME - [SETUP] Hora atual do sistema: $(date '+%Y-%m-%d %H:%M:%S')" >>"$LOG_FILE"
|
|
190
|
+
else
|
|
191
|
+
if [ -f /usr/share/zoneinfo/America/Sao_Paulo ]; then
|
|
192
|
+
$SUDO ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime >/dev/null 2>&1
|
|
193
|
+
echo "America/Sao_Paulo" | $SUDO tee /etc/timezone >/dev/null 2>&1
|
|
194
|
+
command -v hwclock >/dev/null 2>&1 && $SUDO hwclock --systohc >/dev/null 2>&1
|
|
195
|
+
echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] Fallback manual aplicado (sem timedatectl)" >>"$LOG_FILE"
|
|
196
|
+
CURRENT_TIME="$(date '+%Y-%m-%d %H:%M:%S')"
|
|
197
|
+
echo "$CURRENT_TIME - [SETUP] Fallback manual aplicado (sem timedatectl)" >>"$LOG_FILE"
|
|
198
|
+
echo "$CURRENT_TIME - [SETUP] Hora atual do sistema: $(date '+%Y-%m-%d %H:%M:%S')" >>"$LOG_FILE"
|
|
199
|
+
fi
|
|
200
|
+
fi
|
|
181
201
|
|
|
182
202
|
# ==============================
|
|
183
203
|
# ⬇️ Download do mwsm.sh (modo normal)
|
package/mwsm.db
CHANGED
|
Binary file
|