# ISO Linux Personalizada Para NVR

Objetivo: gerar uma ISO Ubuntu/Debian que instala o sistema operacional e executa o instalador do NVR no primeiro boot, deixando o PC pronto como DVR/NVR.

Este arquivo e um roteiro de arquitetura. O fluxo mantido no repositorio fica em `scripts/appliance/iso/` e em `docs/appliance/ISO_INSTALLER.md`. O perfil final instala automaticamente em disco vazio, mas bloqueia disco com dados/particoes ou selecao ambigua ate confirmacao explicita `APAGAR`. Use somente em VM, PC ou disco dedicado ao NVR, com acesso administrativo por chave SSH, console local ou outro fluxo gerenciado.

## Ubuntu Autoinstall

Use Ubuntu Server com Subiquity/autoinstall. A ISO customizada deve incluir um `user-data` com `late-commands` que copie ou baixe o pacote NVR para `/opt/nvr-src` e registre um servico de primeiro boot. Mantenha rede, storage e usuario interativos ate existir uma politica destrutiva de disco explicitamente testada:

```yaml
#cloud-config
autoinstall:
  version: 1
  identity:
    hostname: nvr-appliance
    username: nvr-setup
    # Perfil final: senha local temporaria para console fisico, troca obrigatoria
    # no primeiro login. SSH por senha permanece desativado.
    password: "<hash-criptografado-de-Nvr-Setup-2026>"
  ssh:
    install-server: true
    allow-pw: false
  early-commands:
    - bash -eu /cdrom/nvr-appliance/storage-guard.sh
  storage:
    layout:
      name: direct
      match:
        path: __NVR_INSTALL_DISK__
  packages:
    - git
    - curl
  late-commands:
    - curtin in-target -- mkdir -p /opt/nvr-src
    - cp -a /cdrom/nvr/* /target/opt/nvr-src/
    - curtin in-target -- bash -lc 'cat >/etc/systemd/system/nvr-first-install.service <<EOF
[Unit]
Description=Primeira instalacao do appliance NVR
After=network.target local-fs.target

[Service]
Type=oneshot
WorkingDirectory=/opt/nvr-src
ExecStart=/usr/bin/bash /opt/nvr-src/scripts/appliance/install-nvr-appliance.sh
ExecStartPost=/usr/bin/systemctl disable nvr-first-install.service
RemainAfterExit=yes
TimeoutStartSec=45min

[Install]
WantedBy=multi-user.target
EOF
systemctl enable nvr-first-install.service'
```

## Politica De Disco

O guard de disco roda antes do particionamento e deve manter a instalacao falhando fechada:

- disco interno unico sem particoes e sem assinaturas: prossegue;
- disco com Windows, Linux, particoes, assinaturas ou dados: exige `nvr_wipe_confirm=APAGAR`;
- multiplos discos: exige `nvr_install_disk=/dev/...` ou `nvr_install_disk_serial=...`;
- registrar a decisao em log e copiar para o sistema instalado.

O iniciador Windows em `scripts/windows/Start-NvrApplianceInstall.ps1` cobre o modo iniciado pelo cliente no Windows: exibe aviso destrutivo, lista discos, bloqueia disco de boot/sistema, exige digitar `APAGAR`, prepara boot/ISO gravavel e reinicia opcionalmente. Ele nao formata nem particiona o Windows ativo; o apagamento ocorre somente no instalador Linux/NVR apos nova validacao.

## Debian Preseed

Em Debian, use preseed com `late_command` para copiar o bundle e habilitar o mesmo servico systemd. O fluxo e equivalente: instalar pacotes minimos, preparar `/opt/nvr-src`, habilitar `nvr-first-install.service`, reiniciar.

## Geracao Da ISO

Fluxo recomendado:

1. Baixar ISO oficial Ubuntu Server LTS ou Debian stable.
2. Extrair a ISO em uma pasta de trabalho.
3. Adicionar `user-data`, `meta-data` e o diretorio `nvr/` com este monorepo.
4. Ajustar GRUB/isolinux para usar autoinstall/preseed.
5. Recriar a ISO com `xorriso`.
6. Gerar arquivos auxiliares `.sha256`, `.build.log` e `.check.log`.
7. Testar primeiro em VM com disco limpo e rede isolada.

Comando base para Ubuntu:

```bash
xorriso -as mkisofs -r -V "NVR_APPLIANCE" -o nvr-appliance.iso \
  -J -l -b boot/grub/i386-pc/eltorito.img -no-emul-boot \
  -boot-load-size 4 -boot-info-table \
  -eltorito-alt-boot -e EFI/boot/bootx64.efi -no-emul-boot \
  extracted-iso/
```

## Contratos Mantidos

A ISO futura deve manter:

- Portal como entrada oficial em `/`.
- NVR publicado em `/nvr`.
- Sem login independente no NVR.
- Gateway local na porta `9080`.
- Gravacoes em `/var/lib/nvr/recordings` ou disco dedicado montado em `/mnt/nvr`.
- Execucao automatica de `scripts/appliance/install-nvr-appliance.sh` no primeiro boot.
- `/etc/nvr-appliance/nvr-appliance.env` e logs sensiveis com `0600 root:root`.
- Validacao de variaveis antes do primeiro boot carregar configuracao.
- `CREATE_INITIAL_ADMIN=0` como default de producao; admin local apenas em contingencia tecnica explicita.
- Guard de disco vazio vs disco com dados antes de qualquer particionamento destrutivo.
- Marcador `/var/lib/nvr/FIRST_BOOT_DONE` para impedir repeticao.
- Reinicializacao pos-primeiro-boot por padrao, desativavel somente por `REBOOT_AFTER_FIRST_BOOT=0` em diagnostico.
