Files
obsidian/infra/sandbox-tokyo-nixos.md
kaffa 862ca9bae8 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 미사용 표기
2026-04-08 14:27:03 +09:00

4.7 KiB

title, updated, tags
title updated tags
sandbox-tokyo (NixOS) 2026-04-08
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 있어서 안전):

cd ~/nixos-zlambda
nixos-rebuild switch --flake .#zlambda --target-host root@sandbox-tokyo --build-host root@sandbox-tokyo

또는 nixos-anywhere로 처음부터 재설치 (디스크 wipe):

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 재배포