runv-server

server tooling for runv.club
Log | Files | Refs | README

05-tools-and-system-experience.md (5572B)


      1 # Ferramentas e experiência de sistema
      2 
      3 [← Índice](README.md)
      4 
      5 ## Script: `tools/tools.py`
      6 
      7 **Função:** orquestrar no servidor Debian:
      8 
      9 1. Pacotes APT listados em `tools/manifests/apt_packages.txt` (alias `chat` → metapacote `weechat`). O manifesto inclui **`weechat-curses`** explicitamente porque `tools.py` usa `apt-get install --no-install-recommends`: sem isso, o metapacote `weechat` pode satisfazer-se **só** com `weechat-headless` e o comando `chat` deixa de encontrar cliente interactivo (`weechat` / `weechat-curses` no PATH).
     10 2. Cópia de `tools/bin/` para `/usr/local/bin` (`runv-help`, `runv-links`, `runv-status`, `chat`, `runv-profile`, `runv-finger`, `runv-who`, `runv-bulletin`, …) e de `tools/lib/runv_community.py` para `/usr/local/share/runv/lib/`.
     11 3. MOTD dinâmico: `tools/motd/60-runv` → `/etc/update-motd.d/60-runv` (ver secção [MOTD](#motd-e-runv-help) abaixo).
     12 4. Modelos para novas contas: `tools/skel/` → `/etc/skel/` (inclui `.plan`, `.project`, `.runv/profile.json`).
     13 5. Drop-in SSH para utilizadores jailed: `tools/sshd/90-runv-jailed.conf` → `/etc/ssh/sshd_config.d/`.
     14 6. Sudo administrativo para `pmurad-admin`: `tools/sudoers/90-runv-pmurad-admin` → `/etc/sudoers.d/`.
     15 7. Reconciliação do jail SSH em membros existentes via `scripts/admin/perm1.py`.
     16 
     17 **Princípios declarados no código:** Python stdlib; **sem `shell=True`** em subprocess.
     18 
     19 ## Execução
     20 
     21 ```bash
     22 cd REPO/tools
     23 sudo python3 tools.py --help
     24 sudo python3 tools.py --dry-run --verbose   # simular
     25 sudo python3 tools.py
     26 ```
     27 
     28 Flags úteis: `--force`, `--skip-apt`, `--reconcile-existing-users` (ver `--help`).
     29 
     30 ## IRC / comando `chat`
     31 
     32 - **Utilizador:** no servidor, use apenas o comando `chat` (wrapper em `/usr/local/bin/chat` após `tools/tools.py` ou `patches/patch_irc.py`). O cliente gráfico no terminal é `weechat` / `weechat-curses` (pacote `chat` no manifesto APT).
     33 - **Por omissão** (após `patches/patch_irc.py`): ao correr `chat`, o WeeChat conecta no servidor interno **`runv`** (`irc.tilde.chat`, porta **6697**, **TLS ligado**), entra automaticamente em **`#runv`** e mostra a lista lateral de nicks quando o terminal tiver espaço utilizável. Outras redes que o utilizador adicionar manualmente **não** autoconectam por defeito (o patch desliga `autoconnect` nos outros servidores já existentes, sem apagar redes).
     34 - **Provisionamento:** o patch corre com `weechat-headless -a -r '…' --stdout` (o `-a` evita auto-connect durante o batch). O launcher **`chat` não usa `-a`**. Novas contas Unix criadas com `scripts/admin/create_runv_user.py` invocam o patch automaticamente para esse utilizador. O `tools/tools.py --reconcile-existing-users` aplica o backfill IRC com `--force`.
     35 - **Backfill / admin:** `sudo python3 patches/patch_irc.py --all-users --force` (ou `--user NOME --force`) reaplica servidor, autojoin em `#runv` e nicklist visível. Requer `weechat-headless` no sistema.
     36 
     37 ## Isolamento e permissões
     38 
     39 - `pmurad-admin` fica explicitamente fora do grupo `runv-jailed` e recebe sudo administrativo via `/etc/sudoers.d/90-runv-pmurad-admin`.
     40 - Membros normais continuam a usar o modelo `runv-jailed` + `ChrootDirectory /srv/jail/%u`, para não saírem das respetivas homes na shell SSH normal.
     41 - `tools/tools.py` não altera contas já existentes por omissão. Se quiser reconciliar jail SSH e IRC em membros antigos, use `--reconcile-existing-users`.
     42 
     43 ## MOTD e `runv-help`
     44 
     45 O ficheiro [`tools/motd/60-runv`](../tools/motd/60-runv) gera a mensagem de boas-vindas no login SSH (via `update-motd.d`). Secções:
     46 
     47 | Secção | Conteúdo |
     48 |--------|----------|
     49 | Arte RUNV + tagline | Identidade visual alinhada ao site |
     50 | Comandos úteis | `runv-help`, `runv-links`, `lynx`, `tmux`, `byobu`, `mutt`, `chat`, `runvers`, `runv-games` |
     51 | Comunidade runv | `runv-profile`, `runv-finger`, `runv-who`, `runv-bulletin`, `runv-email-alias` |
     52 | Últimos acessos recentes | Grelha 3×3 com até **9 membros distintos** (`last -w`); ordem = login mais recente de cada um; **não** é quem está online agora |
     53 
     54 A ajuda completa está em `runv-help` (inclui a secção Comunidade e email de membro). Detalhes dos comandos: [17-community-commands.md](17-community-commands.md) e [08-email.md](08-email.md).
     55 
     56 ### Cache do MOTD (Debian)
     57 
     58 O conteúdo mostrado no login costuma vir de `/run/motd.dynamic`, gerado por `run-parts /etc/update-motd.d/`. Em alguns sistemas o ficheiro é **actualizado em intervalo** (`motd-news`), não em cada login — a grelha de sessões pode parecer «congelada» até o cache refrescar.
     59 
     60 **Diagnóstico (admin):**
     61 
     62 ```bash
     63 stat /run/motd.dynamic
     64 sudo /etc/update-motd.d/60-runv | tail -25
     65 ```
     66 
     67 **Forçar refresh após alterar o script:**
     68 
     69 ```bash
     70 cd /opt/runv-server/tools
     71 sudo python3 tools.py --skip-apt --force
     72 # O redireccionamento tem de correr como root (senão: Permission denied em /run/motd.dynamic)
     73 sudo sh -c 'run-parts /etc/update-motd.d > /run/motd.dynamic'
     74 ```
     75 
     76 Alternativa equivalente:
     77 
     78 ```bash
     79 sudo run-parts /etc/update-motd.d | sudo tee /run/motd.dynamic > /dev/null
     80 ```
     81 
     82 Se o MOTD continuar desactualizado entre logins, rever `/etc/default/motd-news` na VPS (intervalo ou desactivar cache), conforme a política do servidor.
     83 
     84 ### `runv-who` e `users.json`
     85 
     86 Para membros listarem utilizadores sem varrer `/home` (e sem erros em homes inacessíveis), o ficheiro canónico deve ser legível pelo grupo `runv-members`:
     87 
     88 ```bash
     89 sudo chown root:runv-members /var/lib/runv/users.json
     90 sudo chmod 640 /var/lib/runv/users.json
     91 ```
     92 
     93 Próximo: [06-site-and-apache.md](06-site-and-apache.md).