312 lines
8.4 KiB
Markdown

# Build Log
This file records chronological Atlas build and infrastructure milestones. Do not fabricate dates, command output, validation results, or operator names.
## Entries
### Date
2026-07-10
### Phase
Phase 2 nginx and firewall baseline.
### Objective
Install nginx, deploy a minimal Atlas status site, restrict SQL Server binding, and enable a safe UFW baseline.
### Changes
- Added `install/phases/40-nginx.sh`.
- Installed nginx `1.28.3` from Ubuntu `resolute-updates`.
- Added Atlas default nginx site under `config/nginx/`.
- Deployed static site content to `/var/www/atlas`.
- Enabled `/health` endpoint.
- Enabled UFW with default deny incoming and default allow outgoing.
- Allowed inbound TCP `22`, `80`, and `443`.
- Allowed inbound TCP `1433` only from `192.168.10.0/24`.
- Changed SQL Server container binding to `192.168.10.10:1433:1433`.
### Validation
- `nginx -t` passed.
- HTTP checks passed for `127.0.0.1` and `192.168.10.10`.
- `/health` returned HTTP 200.
- nginx restart test passed.
- SQL Server remained healthy after container recreation.
- SQL data persisted after container recreation.
- SQL LAN connection test passed.
- Atlas discovery and validation passed.
### Problems
- Initial nginx deployment encountered a duplicate default-server config while the Ubuntu default site was still enabled. The installer now validates before and after disabling the default site.
### Decisions
- Keep nginx HTTP-only until a later TLS phase.
- Keep the temporary Atlas status site separate from future PlotDirector proxy configuration.
- Do not rely on UFW alone for Docker-published SQL Server; bind SQL Server to the Atlas LAN address.
### Git Commit
Not yet committed.
### Operator
Codex.
### Date
2026-07-10
### Phase
Phase 2 Docker and SQL Server container platform.
### Objective
Install Docker Engine and run SQL Server 2025 Developer using Microsoft's official container image with persistent storage on `/sql`.
### Changes
- Added `install/phases/30-docker.sh`.
- Installed Docker Engine `29.6.1` from Docker's official Ubuntu `resolute` APT repository.
- Installed Docker Compose plugin `v5.3.1` and Docker Buildx plugin `v0.35.0`.
- Added user `nick` to the `docker` group.
- Added `install/phases/20-sql-server.sh`.
- Added SQL Server Compose configuration under `config/sql-server/`.
- Added `scripts/sql/sqlcmd.sh`.
- Deployed SQL Server 2025 Developer container `atlas-sql-server`.
- Stored SQL Server data under `/sql/mssql`.
- Stored live SQL Server environment secrets outside Git at `/etc/atlas/sql-server.env`.
### Validation
- Docker hello-world test passed.
- Docker non-root validation passed with `sg docker`.
- SQL Server container reached healthy state.
- SQL version and edition queries passed.
- Temporary database create, insert, read, and drop test passed.
- Container restart and Docker service restart tests passed.
- Container recreation with persistent storage passed.
- SQL installer idempotency passed after correcting protected env-file detection.
### Problems
- Native SQL Server packages are not supported for Ubuntu 26.04, so the official container route was used.
- Initial SQL container recreation exposed an env-file permissions issue. The installer now checks the protected env file through sudo.
### Decisions
- Use Docker's official APT repository rather than Ubuntu `docker.io`.
- Use SQL Server image `mcr.microsoft.com/mssql/server:2025-CU1-ubuntu-24.04`.
- Bind SQL Server port `1433` for LAN development access without changing UFW or router rules.
### Git Commit
Not yet committed.
### Operator
Codex.
### Date
2026-07-10
### Phase
Phase 2 .NET development platform.
### Objective
Install the .NET SDKs required for Atlas and PlotDirector development.
### Changes
- Added `install/phases/10-dotnet.sh`.
- Installed .NET 8 SDK `8.0.128`.
- Installed .NET 10 SDK `10.0.109`.
- Used the official Ubuntu .NET backports PPA for .NET 8.
- Used the built-in Ubuntu `resolute-updates` and `resolute-security` package sources for .NET 10.
- Did not install .NET 9, SQL Server, nginx, or Docker.
### Validation
- `bash -n install/phases/10-dotnet.sh` passed.
- `install/phases/10-dotnet.sh --help` passed.
- `install/phases/10-dotnet.sh --dry-run` passed.
- `install/phases/10-dotnet.sh` installed the missing SDKs.
- A second `install/phases/10-dotnet.sh` run detected both SDKs already installed.
- `dotnet --info`, `dotnet --list-sdks`, and `dotnet --list-runtimes` passed.
- Temporary .NET 8 and .NET 10 console projects built and ran outside the repository.
- `scripts/system/validate-host.sh` passed after installation.
### Problems
- Initial package-candidate detection in `10-dotnet.sh` was corrected after it failed under `pipefail` before installing SDK packages.
- No unresolved .NET installation problems recorded.
### Decisions
- Use Ubuntu package feeds for .NET SDK installation on Ubuntu 26.04.
### Git Commit
Not yet committed.
### Operator
Codex.
### Date
2026-07-10
### Phase
Phase 2A.
### Objective
Create the shared installation framework, system-discovery tooling, and host-validation conventions used by later Atlas installation scripts.
### Changes
- Added shared Bash installer libraries under `install/lib/`.
- Added `install/bootstrap.sh` as a read-only Phase 2A scaffold.
- Added baseline command manifest under `install/manifests/`.
- Added system discovery tooling under `scripts/system/`.
- Added host validation tooling under `scripts/system/`.
- Documented runtime directories for logs, reports, and future state.
- Documented free-space validation thresholds for `/`, `/srv`, and `/sql`.
- No .NET, SQL Server, nginx, or Docker installation was started.
### Validation
- Bash syntax validation passed for all Phase 2A shell scripts.
- `install/bootstrap.sh --help`, `--version`, and `--dry-run` passed.
- `scripts/system/discover-system.sh` passed in human-readable and JSON modes.
- Discovery JSON parsed successfully with `jq`.
- `scripts/system/validate-host.sh` passed with no required failures.
- Controlled failure-path tests returned the expected validation and usage exit codes.
- Generated logs and reports were written outside the repository.
### Problems
- No unresolved Phase 2A implementation problems recorded.
### Decisions
- Installer logs use `/var/log/atlas/install/`.
- Generated reports use `/var/log/atlas/reports/`.
- Future persistent installer state and marker files use `/var/lib/atlas/`.
- Phase 2A does not create speculative future component installer scripts.
### Git Commit
Not yet committed.
### Operator
Codex.
### Date
Not recorded.
### Phase
Baseline server preparation before Phase 1 repository completion.
### Objective
Prepare Atlas as a dedicated AI development server with storage, network, SSH, Git, Gitea access, Codex CLI, and standard development utilities.
### Changes
- Ubuntu 26.04 LTS installed.
- Hostname set to `atlas`.
- Static IP configured as `192.168.10.10`.
- OS SSD configured with full-disk LVM.
- OS logical volume expanded to use available LVM capacity.
- SQL SSD mounted at `/sql`.
- Development SSD mounted at `/srv`.
- SSH access configured.
- Gitea SSH authentication configured.
- Git installed.
- Git LFS installed.
- Node.js installed.
- Standard development utilities installed.
- Codex CLI installed and authenticated.
- Codex full-access mode configured with no approval prompts.
- Passwordless sudo configured for the dedicated development user.
- Infrastructure repository created and cloned at `/srv/repos/AI-Development-Server`.
### Validation
- Server identity and storage were later inspected during Phase 1 planning.
- Repository remote was later inspected during Phase 1 planning.
- Original command output was not captured in this repository.
### Problems
- No baseline problems were recorded in this repository.
### Decisions
- Atlas will use this repository as the authoritative infrastructure and operations source.
- Atlas will be rebuilt over time through documented, version-controlled, idempotent automation.
### Git Commit
Not yet committed.
### Operator
TODO: Confirm during the relevant implementation phase.
## Entry Template
Copy this template for future entries.
```markdown
### Date
YYYY-MM-DD
### Phase
Phase name or number.
### Objective
What this work was intended to achieve.
### Changes
- Change made.
### Validation
- Validation performed.
### Problems
- Problem encountered, or `None recorded.`
### Decisions
- Decision made, or `None recorded.`
### Git Commit
Commit hash, or `Not yet committed.`
### Operator
Name or role.
```