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/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/Mwsm"
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
- run_step "$SUDO apt update -y; $SUDO apt upgrade -y \
371
- -o Dpkg::Options::='--force-confdef' \
372
- -o Dpkg::Options::='--force-confold'" "Atualizando pacotes..." install
373
- run_step "$SUDO apt-get install -y git wget curl jq build-essential libnss3-dev \
374
- libgdk-pixbuf2.0-dev libgtk-3-dev libxss-dev libasound2 \
375
- -o Dpkg::Options::='--force-confdef' \
376
- -o Dpkg::Options::='--force-confold'" "Instalando dependências..." install
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
- run_step "$SUDO bash -c '
388
- cd /root || exit 1
389
- apt-get update -y
390
- apt-get install -y curl gnupg ca-certificates --no-install-recommends
391
- curl -fsSL https://deb.nodesource.com/setup_20.x | bash - || exit 1
392
- '" "Configurando repositório Node.js" install
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
- # 🐍 Python + Pip + Libs
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' install
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
- else
445
- run_step "cd /tmp && \
446
- PIP_DISABLE_PIP_VERSION_CHECK=1 PIP_ROOT_USER_ACTION=ignore \
447
- $SUDO python3 -m pip install --quiet --no-input \
448
- 'flask==2.2.5' \
449
- 'sentence-transformers==2.2.2' \
450
- 'huggingface_hub==0.10.1'" \
451
- 'Instalando libs Python' install
452
- fi
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
- run_step "python3 -m pip show flask >/dev/null 2>&1 && \
455
- python3 -m pip show sentence-transformers >/dev/null 2>&1 && \
456
- python3 -m pip show huggingface_hub >/dev/null 2>&1" \
457
- 'Verificando integridade Python' install
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
- # Repositório Mwsm
461
- # -------------------------
462
- run_step "rm -rf $BASE_DIR && mkdir -p $BASE_DIR && cd $BASE_DIR && \
463
- git init && git remote add origin https://github.com/MKCodec/Mwsm.git && \
464
- git config core.sparseCheckout true && 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 && \
465
- git pull origin main || git pull origin master" "Baixando repositório Mwsm" install
466
- CURRENT_USER=$(logname 2>/dev/null || echo "$USER")
467
- $SUDO chown -R "$CURRENT_USER":"$CURRENT_USER" $BASE_DIR
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
- cd $BASE_DIR || return
478
- run_step "node -v >/dev/null 2>&1" "Verificando instalação do Node.js" install
479
- run_step "$SUDO npm cache clean --force" "Limpando cache NPM" install
480
- run_step "npm config set registry https://registry.npmjs.org" "Configurando registro NPM" install
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
- if command -v pm2 >/dev/null 2>&1; then
519
- CURRENT_PM2_VERSION=$(pm2 -v | head -n1 | tr -d '[:space:]')
520
- LATEST_PM2_VERSION=$(npm view pm2 version 2>/dev/null | tr -d '[:space:]')
521
- if [[ -n "$LATEST_PM2_VERSION" && "$CURRENT_PM2_VERSION" != "$LATEST_PM2_VERSION" ]]; then
522
- echo "$(date '+%Y-%m-%d %H:%M:%S') - [INFO] Atualizando PM2 de $CURRENT_PM2_VERSION para $LATEST_PM2_VERSION" >>"$LOG_FILE"
523
- run_step "$SUDO npm install -g pm2@$LATEST_PM2_VERSION --silent --no-audit --no-fund" "Atualizando PM2" install
524
- else
525
- echo "$(date '+%Y-%m-%d %H:%M:%S') - [INFO] PM2 já está atualizado (v$CURRENT_PM2_VERSION)" >>"$LOG_FILE"
526
- run_step "$SUDO pm2 update >/dev/null 2>&1 || true" "Sincronizando PM2" install
527
- fi
528
- else
529
- run_step "$SUDO npm install -g pm2@latest --silent --no-audit --no-fund" "Instalando PM2" install
530
- 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; }" "Inicializando PM2" install
531
- fi
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
- run_step "git fetch origin main && git reset --hard origin/main" "Atualizando repositório Mwsm" update
722
- Setup_Mwsm
723
- if [ -f $BASE_DIR/mwsm.sh ]; then
724
- ln -sf $BASE_DIR/mwsm.sh /usr/local/bin/mwsm 2>/dev/null || $SUDO ln -sf $BASE_DIR/mwsm.sh /usr/local/bin/mwsm
725
- chmod +x /usr/local/bin/mwsm 2>/dev/null || $SUDO chmod +x /usr/local/bin/mwsm
726
- fi
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
- if [[ "$DISTRO_DETECT" == "devuan" ]]; then
755
- run_step "$SUDO python3 -m pip install --quiet --no-input \
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'" "Atualizando libs Python" update
761
- else
762
- run_step "$SUDO python3 -m pip install --quiet --no-input \
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'" "Atualizando libs Python" update
766
- fi
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
- while true; do
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
- 1)
977
- cutoff_epoch=$(date -d '24 hours ago' +%s)
978
- awk -v cutoff="$cutoff_epoch" '
979
- {
980
- if (match($0, /[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]/)) {
981
- ts = substr($0, RSTART, RLENGTH)
982
- cmd = "date -d \"" ts "\" +%s"
983
- cmd | getline t
984
- close(cmd)
985
- if (t >= cutoff) print $0
986
- }
987
- }' "$LOG_FILE" | iconv -f utf-8 -t utf-8
988
-
989
- printf "\\nPressione ENTER para voltar ao menu principal..."
990
- IFS= read -r _
991
- break
992
- ;;
993
- 2)
994
- cat "$LOG_FILE" | grep "^[0-9]\\{4\\}-" | iconv -f utf-8 -t utf-8
995
- printf "\\nPressione ENTER para voltar ao menu principal..."
996
- IFS= read -r _
997
- break
998
- ;;
999
- 3)
1000
- cat "$LOG_FILE" | grep -v "^[0-9]\\{4\\}-" | iconv -f utf-8 -t utf-8
1001
- printf "\\nPressione ENTER para voltar ao menu principal..."
1002
- IFS= read -r _
1003
- break
1004
- ;;
1005
- 0)
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
- if [ -t 0 ]; then
1031
- stty -echo -icanon time 0 min 0 || true
1032
- fi
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
- while true; do
1056
- read -rsn1 choice
1057
- case "$choice" in
1058
- [0-6]) break ;; # aceita apenas 0–6
1059
- *) continue ;;
1060
- esac
1061
- done
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 (modo ultrarrápido)
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 - usando modo rápido" >>"$LOG_FILE"
137
- $SUDO mkdir -p /var/api/Mwsm >/dev/null 2>&1
138
- MWSM_URL="https://raw.githubusercontent.com/MKCodec/Mwsm/refs/heads/main/bash/mwsm.sh?nocache=$(date +%s)"
139
- $SUDO curl -sSL "$MWSM_URL" -o /var/api/Mwsm/mwsm.sh >/dev/null 2>&1
140
- $SUDO chmod +x /var/api/Mwsm/mwsm.sh >/dev/null 2>&1
141
- echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] Docker pronto, prosseguindo" >>"$LOG_FILE"
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
- # 📦 Curl e dependências
162
- # ==============================
163
- if ! command -v curl >/dev/null 2>&1; then
164
- echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] Instalando curl" >>"$LOG_FILE"
165
- $SUDO apt-get update -qq >/dev/null 2>&1
166
- $SUDO apt-get install -y -qq curl >/dev/null 2>&1
167
- fi
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
- # 🕒 Ajuste de fuso horário e NTP
171
- # ==============================
172
- echo "$(date '+%Y-%m-%d %H:%M:%S') - [SETUP] Ajustando fuso horário e NTP" >>"$LOG_FILE"
173
- if command -v timedatectl >/dev/null 2>&1; then
174
- $SUDO timedatectl set-timezone America/Sao_Paulo >/dev/null 2>&1
175
- $SUDO timedatectl set-ntp true >/dev/null 2>&1
176
- else
177
- $SUDO ln -sf /usr/share/zoneinfo/America/Sao_Paulo /etc/localtime >/dev/null 2>&1
178
- echo "America/Sao_Paulo" | $SUDO tee /etc/timezone >/dev/null 2>&1
179
- command -v hwclock >/dev/null 2>&1 && $SUDO hwclock --systohc >/dev/null 2>&1
180
- fi
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