Metadata-Version: 2.4
Name: vcanonici-autoinstall-workstation
Version: 1.0.0
Summary: Provisionamento retomável de uma workstation Ubuntu 24.04
Author: Vinicius Canonici
License-Expression: MIT
Project-URL: Documentation, https://pypi.org/project/vcanonici-autoinstall-workstation/
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Operating System :: POSIX :: Linux
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: System :: Installation/Setup
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
License-File: REALTEK-NOTICE.md
Requires-Dist: rich<15,>=13.9
Provides-Extra: dev
Requires-Dist: build>=1.2.2; extra == "dev"
Requires-Dist: coverage[toml]>=7.6; extra == "dev"
Requires-Dist: mypy>=1.13; extra == "dev"
Requires-Dist: pip-audit>=2.7; extra == "dev"
Requires-Dist: pytest>=8.3; extra == "dev"
Requires-Dist: pytest-cov>=6; extra == "dev"
Requires-Dist: ruff>=0.8; extra == "dev"
Requires-Dist: twine>=6; extra == "dev"
Dynamic: license-file

# Autoinstall Workstation

Provisionamento interativo e retomável para **Ubuntu 24.04 Desktop amd64 recém-instalado**.
A distribuição pública é `vcanonici-autoinstall-workstation`; este repositório pode
permanecer privado.

> A versão 1.0.0 não é um autoinstall do instalador Ubuntu/NoCloud. Ela configura a
> workstation depois do primeiro login de um usuário comum membro de `sudo`.

## Instalação

Copie o bloco inteiro no Terminal da máquina nova. Ele pede `sudo` uma vez, mantém o
ticket apenas enquanto estiver ativo, instala `python3-venv`, cria um runtime isolado e
instala exatamente a versão 1.0.0 do PyPI:

```bash
VERSION=1.0.0
RUNTIME="$HOME/.local/share/vcanonici-autoinstall/workstation-$VERSION"
export PIP_CACHE_DIR="$RUNTIME/pip-cache"
sudo -v
(while sudo -n true; do sleep 50; done) & KEEPALIVE=$!
cleanup() { kill "$KEEPALIVE" 2>/dev/null || true; sudo -k; }
trap cleanup EXIT HUP INT TERM
sudo apt-get -o Acquire::Retries=5 -o DPkg::Lock::Timeout=300 update
sudo apt-get -o Acquire::Retries=5 -o DPkg::Lock::Timeout=300 -y install python3-venv
python3 -m venv "$RUNTIME"
"$RUNTIME/bin/python" -m pip install --upgrade pip
"$RUNTIME/bin/python" -m pip install "vcanonici-autoinstall-workstation==$VERSION"
sudo --preserve-env=DISPLAY,WAYLAND_DISPLAY,XDG_RUNTIME_DIR,DBUS_SESSION_BUS_ADDRESS,XDG_CURRENT_DESKTOP,DESKTOP_SESSION \
  "$RUNTIME/bin/autoinstall-workstation" install
```

O alias `autoinstall` oferece a mesma CLI. O instalador mostra todas as perguntas
normais antes de alterar o sistema. Não forneça senhas, tokens ou chaves como argumentos.

## Comandos

```text
autoinstall-workstation install [--dry-run] [--yes] [--no-reboot]
autoinstall-workstation resume [--yes] [--no-reboot]
autoinstall-workstation status
autoinstall-workstation report
autoinstall-workstation support-bundle
autoinstall-workstation cleanup
autoinstall-workstation --version
```

- `--dry-run` faz detecção, perguntas e plano sem downloads ou alterações.
- `resume` recupera módulos interrompidos e executa as verificações pós-boot.
- `support-bundle` cria um `.tar.zst` local; nada é enviado.
- `cleanup` remove runtime temporário, estado, caches e autostart. Aplicativos,
  `lan-ssh`, relatório, logs e bundle são preservados.

Exit codes: `0` sucesso, `2` parcial, `10` ambiente não suportado, `20` pausado e
retomável, `30` falha crítica da CLI.

## Segurança operacional

- Suporte exclusivo a Ubuntu 24.04 Desktop amd64, GNOME e usuário comum em `sudo`.
- Estado atômico `0600` em `/var/lib/vcanonici-autoinstall/state.json`.
- Eventos JSONL e stdout/stderr sanitizados em `/var/log/vcanonici-autoinstall/<runId>/`.
- Nenhuma telemetria, upload, credencial de aplicativo ou chave PyPI.
- APT usa repositórios assinados. Discord, Windscribe e o keyring CUDA usam URLs,
  tamanhos e SHA-256 congelados no manifesto; ausência ou divergência pausa por padrão.
- SSH termina fechado. `sudo lan-ssh up` abre a porta 22 somente para a sub-rede da
  rota padrão e persiste até `sudo lan-ssh down`; `--interface` escolhe outra interface.
- O grupo Docker equivale a acesso root.
- Atualizações automáticas são desabilitadas depois da atualização inicial; manutenção
  futura passa a ser manual e aparece no relatório.

Os blobs Realtek do MA530 têm autorização de redistribuição, checksums fixos e licença
separada em [REALTEK-NOTICE.md](REALTEK-NOTICE.md). O instalador nunca substitui o
`btusb` assinado do Ubuntu e não usa DKMS.

## Desenvolvimento

```bash
python3.12 -m venv .venv
. .venv/bin/activate
python -m pip install -e '.[dev]'
ruff check .
mypy src tests
pytest
python -m build
SOURCE_DATE_EPOCH=1784073600 python scripts/normalize_sdist.py dist/*.tar.gz
twine check dist/*
python scripts/inspect_distribution.py dist/*
shellcheck bootstrap.sh src/vcanonici_autoinstall_workstation/assets/lan-ssh
```

A arquitetura e o fluxo operacional estão em [docs/architecture.md](docs/architecture.md).
A publicação sem tokens está descrita em [docs/publishing.md](docs/publishing.md).

## Limites de aceitação

CI e testes simulam APT, systemd, GNOME, downloads e retomada. Antes de declarar a
1.0.0 estável, valide numa VM Ubuntu 24.04 sem GPU e depois na máquina-alvo com RTX,
MA530 e múltiplos monitores. Preserve o bundle dessa execução como evidência para 1.0.1.
