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).