sandbox-tokyo: Debian → NixOS 25.05 전환 (Linode zlambda)
- 새 노트 infra/sandbox-tokyo-nixos.md 작성 (설치 과정, configuration, 후속 작업) - infra-hosts: 호스트 항목 NixOS 베이스로 갱신, Tailscale IP 100.79.87.48 → 100.78.51.18, vault-prod/wg-easy 항목 제거 - netbis: NixOS 전환으로 APISIX/etcd 컨테이너 모두 제거된 상태 표기, DR 미가동 - searxng: tlsproxy/microsocks 중단, 새 IP 반영 - vault: SSH CA에서 sandbox-tokyo 재등록 필요 표기 - postgresql-ha: /apisix/tokyo prefix 미사용 표기
This commit is contained in:
109
infra/sandbox-tokyo-nixos.md
Normal file
109
infra/sandbox-tokyo-nixos.md
Normal file
@@ -0,0 +1,109 @@
|
||||
---
|
||||
title: sandbox-tokyo (NixOS)
|
||||
updated: 2026-04-08
|
||||
tags: [nixos, linode, sandbox-tokyo, infra]
|
||||
---
|
||||
|
||||
## 개요
|
||||
|
||||
Linode Tokyo VM (라벨 `zlambda`, id 47271589)을 2026-04-08 Debian 12 → **NixOS 25.05 (Warbler)** 로 교체. nixos-anywhere로 무관리 원격 설치.
|
||||
|
||||
이전에 운영하던 [[netbis]] DR APISIX, microsocks, tlsproxy, vault-prod, wg-easy 등은 모두 제거됨. 현재는 베이스(sshd + tailscaled + docker)만 떠 있는 상태.
|
||||
|
||||
## 접속
|
||||
|
||||
| 방법 | 명령 |
|
||||
|------|------|
|
||||
| Tailscale | `ssh root@sandbox-tokyo` (100.78.51.18) |
|
||||
| 공인 IP | `ssh root@139.162.71.52` |
|
||||
| LISH 콘솔 | `ssh -tt netbis@lish-tokyo2.linode.com zlambda` (Linode profile.authorized_keys에 kaffa-Macmini RSA 등록 필요) |
|
||||
|
||||
## Linode 설정
|
||||
|
||||
| 항목 | 값 |
|
||||
|------|-----|
|
||||
| 라벨 | zlambda |
|
||||
| ID | 47271589 |
|
||||
| 타입 | g6-standard-1 (1 vCPU, 2GB RAM, 50GB SSD) |
|
||||
| 리전 | ap-northeast (Tokyo, lish-tokyo2) |
|
||||
| 공인 IP | 139.162.71.52 |
|
||||
| Configuration profile | "NixOS Direct Disk" (id 99124808) |
|
||||
| Kernel | `linode/direct-disk` ← Linode emulated GRUB은 NixOS grub.cfg를 못 읽어서 변경 |
|
||||
| 디스크 sda | 121448048, ext4, 50688 MB → / |
|
||||
| 디스크 sdb | 121448049, swap, 512 MB → swap |
|
||||
| Linode Firewall | id 691875 "zlambda" — TCP22(any), TCP80/443(Cloudflare), UDP41641(any), ICMP(any), default DROP |
|
||||
| Linode API token | Vault `secret/cloud/linode` (netbis 계정용) |
|
||||
|
||||
## 디스크 레이아웃
|
||||
|
||||
```
|
||||
sda (49.5G)
|
||||
├── sda1 (1M) BIOS boot partition (EF02)
|
||||
└── sda2 (49.5G) ext4, mountpoint /
|
||||
sdb (512M)
|
||||
└── sdb1 (510M) swap
|
||||
```
|
||||
|
||||
GRUB은 BIOS-GPT 방식, sda MBR + BIOS boot partition + /boot inside / fs.
|
||||
|
||||
## NixOS Configuration
|
||||
|
||||
Mac 로컬에 `~/nixos-zlambda/` 디렉토리(아직 Gitea 미푸시):
|
||||
|
||||
```
|
||||
~/nixos-zlambda/
|
||||
├── flake.nix # disko + nixpkgs 25.05
|
||||
├── configuration.nix # 메인 설정
|
||||
└── hardware-configuration.nix # nixos-anywhere가 자동 생성
|
||||
```
|
||||
|
||||
flake input:
|
||||
- nixpkgs: `github:NixOS/nixpkgs/nixos-25.05`
|
||||
- disko: `github:nix-community/disko`
|
||||
|
||||
활성화된 모듈/서비스:
|
||||
- `services.openssh` (PermitRootLogin prohibit-password, PasswordAuth off)
|
||||
- `services.tailscale.enable = true`
|
||||
- `virtualisation.docker.enable = true` (autoPrune 켜짐)
|
||||
- `nix.settings.experimental-features = [ "nix-command" "flakes" ]`
|
||||
- 패키지: vim git curl wget htop tmux jq rsync
|
||||
- TZ: Asia/Tokyo, locale en_US.UTF-8
|
||||
- `networking.firewall.enable = false` (Linode firewall에 일임)
|
||||
- `system.stateVersion = "25.05"`
|
||||
|
||||
GRUB 설정: disko의 EF02 파티션이 자동으로 grub.devices를 채워주므로 `boot.loader.grub.devices`는 명시하지 않음 (명시하면 mirroredBoots 중복 오류 남).
|
||||
|
||||
### 재배포/변경 방법
|
||||
|
||||
원격 변경(권장, swap 있어서 안전):
|
||||
|
||||
```fish
|
||||
cd ~/nixos-zlambda
|
||||
nixos-rebuild switch --flake .#zlambda --target-host root@sandbox-tokyo --build-host root@sandbox-tokyo
|
||||
```
|
||||
|
||||
또는 nixos-anywhere로 처음부터 재설치 (디스크 wipe):
|
||||
|
||||
```fish
|
||||
cd ~/nixos-zlambda
|
||||
nix run github:nix-community/nixos-anywhere -- \
|
||||
--flake .#zlambda --build-on remote \
|
||||
root@139.162.71.52
|
||||
```
|
||||
|
||||
## 설치 과정 메모 (2026-04-08)
|
||||
|
||||
1. **상황**: 누군가 nixos-anywhere를 시도하다가 14시간째 nixos-installer에 멈춰 있었음. 이전 Debian 디스크는 wipe되어 있었고, 원본 데이터는 모두 손실.
|
||||
2. **첫 시도 실패**: installer 환경에서 sda(512MB)/sdb(50GB) 순서가 뒤바뀜 + 1.9GB RAM에 swap 없이 nixos-install 실행 → OOM-lock으로 SSH banner도 응답 안 함.
|
||||
3. **회복**: Linode `POST /linode/instances/{id}/rebuild`로 Debian 12 클린 설치 → 디스크 순서 정상화(sda=50G, sdb=512M).
|
||||
4. **nixos-anywhere 실행**: `--build-on remote --generate-hardware-config`로 자동 진행. 첫 실행에서 disko + grub `mirroredBoots` 중복 오류 → `boot.loader.grub.devices`를 빼고 disko의 자동 설정을 사용하도록 수정 후 재실행 성공.
|
||||
5. **부팅 안 됨**: Linode 프로필 kernel이 `linode/grub2`(Linode emulated GRUB)였는데, NixOS grub.cfg 경로를 인식 못해서 `grub>` 프롬프트에 멈춤. LISH 콘솔로 확인.
|
||||
6. **해결**: Configuration profile kernel을 `linode/direct-disk`로 변경 후 reboot → 정상 부팅.
|
||||
7. **Tailscale**: API key로 ephemeral auth key 발급(`POST /api/v2/tailnet/-/keys`) → `tailscale up --authkey`. 옛 device(`100.79.87.48`)는 offline이라 새 device가 `sandbox-tokyo-1`로 가입됨 → 옛 device 삭제(API DELETE) + rename으로 `sandbox-tokyo` 이름 회수.
|
||||
|
||||
## 알려진 후속 작업
|
||||
|
||||
- [ ] `~/nixos-zlambda/`를 Gitea 리포지토리로 푸시
|
||||
- [ ] [[vault]] SSH CA에 새 호스트키 등록 (vault.md 참조)
|
||||
- [ ] 필요 시 [[netbis]] APISIX/etcd Docker compose 재배포
|
||||
- [ ] 필요 시 [[searxng]]용 tlsproxy/microsocks 재배포
|
||||
Reference in New Issue
Block a user