호스트네임/Tailscale 노드 이름/git 레포 모두 zlambda로 통일하면서 obsidian 정리. 변경: - infra/sandbox-tokyo-nixos.md → infra/zlambda.md (git mv, alias frontmatter 추가) - zlambda.md 내용 갱신: 접속 명령, configuration 위치, 커널/sysctl 튜닝, 후속 변경 메모 - infra/infra-hosts.md 표: sandbox-tokyo 행을 zlambda로 갱신, 위키링크 [[zlambda]] - infra/vault.md SSH CA 등록 호스트 목록: [[zlambda]] 위키링크 - services/netbis.md: title/aliases/호스트명/SSH 명령 갱신 - dev/nixos-manual/_index.md: 관련 문서 링크 [[zlambda]]로 갱신 postgresql-ha.md, crowdsec-safeline.md, services/searxng.md의 sandbox-tokyo 언급은 역사적 기록(과거 운영 상태)이라 그대로 유지.
157 lines
8.0 KiB
Markdown
157 lines
8.0 KiB
Markdown
---
|
|
title: zlambda (Linode 도쿄, NixOS)
|
|
updated: 2026-04-08
|
|
aliases: [sandbox-tokyo, sandbox-tokyo-nixos]
|
|
tags: [nixos, linode, zlambda, infra]
|
|
---
|
|
|
|
> **이름 변경 안내**: 이 노드는 2026-04-08까지 `sandbox-tokyo`로 불렸으나 OS hostname / Tailscale machine name / git 레포가 모두 `zlambda`로 통일되었습니다. 옛 이름 `sandbox-tokyo`는 Mac ssh config 및 본 문서 alias로만 남아 있습니다.
|
|
|
|
## 개요
|
|
|
|
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@zlambda` (100.78.51.18) |
|
|
| Tailscale (alias) | `ssh root@sandbox-tokyo` ← Mac ssh config alias로만 동작 |
|
|
| 공인 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
|
|
|
|
**Gitea 저장소**: https://gitea.inouter.com/kaffa/nixos-infra (private)
|
|
|
|
```
|
|
nixos-infra/
|
|
├── README.md
|
|
├── .gitignore
|
|
├── flake.nix # disko + nixpkgs 25.05
|
|
├── flake.lock # 잠긴 input 버전
|
|
├── configuration.nix # 메인 설정
|
|
└── hardware-configuration.nix # nixos-anywhere가 자동 생성
|
|
```
|
|
|
|
**clone 위치**:
|
|
- kaffa-macmini: `~/nixos-infra/` (작성/수정용, push 권한). remote는 토큰 임베드 https URL
|
|
- zlambda: `/root/nixos-infra/` (실제 빌드/적용용). remote는 SSH (`git@gitea.inouter.com:kaffa/nixos-infra.git`), gitea repo deploy key 등록됨 (`/root/.ssh/gitea_nixos_infra`, read-only, fingerprint `SHA256:Amz8LUDKHU59qxyMS48hfoP+KxRE/o6CITfkXzkAFNU`)
|
|
- macbookair: 아직 clone 안 함 (필요 시 `git clone https://gitea.inouter.com/kaffa/nixos-infra.git`)
|
|
|
|
향후 두 번째 NixOS 노드 추가 시 `hosts/<name>/` 구조로 재편 예정 (README.md 참조).
|
|
|
|
flake input:
|
|
- nixpkgs: `github:NixOS/nixpkgs/nixos-25.05`
|
|
- disko: `github:nix-community/disko`
|
|
|
|
활성화된 모듈/서비스:
|
|
- `networking.hostName = "zlambda"`
|
|
- `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"`
|
|
|
|
**커널 / sysctl 튜닝** (2026-04-08 추가):
|
|
- `boot.kernelModules = [ "br_netfilter" ]` (docker bridge sysctl 활성화용)
|
|
- 네트워크: BBR + fq qdisc, somaxconn 4096, tcp_fin_timeout 15, tcp_tw_reuse, tcp_keepalive 600/30/6, netdev_max_backlog 16384, tcp_max_syn_backlog 8192
|
|
- 포워딩: ip_forward, IPv6 forwarding, bridge-nf-call-{ip,ip6}tables (docker)
|
|
- 메모리: vm.swappiness=10, vm.overcommit_memory=1, vm.dirty_ratio=10/5
|
|
- 파일/inotify: file-max=1048576, inotify watches=524288, instances=8192, queued_events=65536
|
|
- 콘솔: kernel.printk = "3 4 1 3"
|
|
|
|
GRUB 설정: disko의 EF02 파티션이 자동으로 grub.devices를 채워주므로 `boot.loader.grub.devices`는 명시하지 않음 (명시하면 mirroredBoots 중복 오류 남).
|
|
|
|
### 재배포/변경 방법
|
|
|
|
**1. 호스트에서 직접 rebuild (권장, 가장 빠름)**
|
|
|
|
```fish
|
|
# kaffa-macmini에서 변경
|
|
cd ~/nixos-infra
|
|
$EDITOR configuration.nix
|
|
git add -A && git commit -m "..." && git push
|
|
|
|
# zlambda에서 적용 (deploy key 자동 인증)
|
|
ssh root@zlambda
|
|
cd /root/nixos-infra
|
|
git pull
|
|
nixos-rebuild switch --flake .#zlambda
|
|
```
|
|
|
|
**2. macOS에서 원격 rebuild는 권장하지 않음**
|
|
|
|
macOS는 aarch64-darwin이라 x86_64-linux용 nixos-rebuild 래퍼를 native build 못 함.
|
|
시도하면 cross-build 단계에서 실패하거나 한참 걸림. 대신 호스트에서 직접 rebuild 권장.
|
|
필요 시 kaffa-macmini에 linux-builder VM을 켜면 가능.
|
|
|
|
**3. nixos-anywhere로 처음부터 재설치 (디스크 wipe)**
|
|
|
|
```fish
|
|
cd ~/nixos-infra
|
|
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` 이름 회수.
|
|
|
|
## 후속 변경 (2026-04-08, 같은 날)
|
|
|
|
- **Gitea 리포지토리 [[kaffa/nixos-infra]]** (private) 생성 → `kaffa-macmini ~/nixos-infra/`와 `zlambda /root/nixos-infra/` 양쪽에 clone. zlambda는 deploy key (read-only SSH) 사용.
|
|
- **macbookair ed25519 키**(`SHA256:kdYCep0k22+QxnOq...`)를 `users.users.root.openssh.authorizedKeys.keys`에 영구 등록 → macbookair에서 직접 `ssh root@zlambda` 가능.
|
|
- **호스트네임 `sandbox-tokyo` → `zlambda`**: NixOS configuration.nix의 `networking.hostName`, `/etc/hostname`, kernel hostname, Tailscale device name(API rename, deviceId `6511000756301111`) 모두 통일. macbookair `~/.ssh/config`에 `Host zlambda sandbox-tokyo` alias 양쪽 유지.
|
|
- **커널 / sysctl 튜닝**: BBR + fq qdisc, conntrack/inotify/file 한도 증가, swappiness 등. 위 "활성화된 모듈/서비스" 섹션 참조.
|
|
|
|
## 알려진 후속 작업
|
|
|
|
- [x] Gitea 리포지토리로 푸시 → `kaffa/nixos-infra` (private)
|
|
- [x] zlambda에 deploy key 설정 (gitea repo deploy key id 1, fingerprint `SHA256:Amz8LUDKHU59qxyMS48hfoP+KxRE/o6CITfkXzkAFNU`)
|
|
- [x] macbookair ed25519 등록 + 호스트네임 zlambda 통일
|
|
- [x] 커널/sysctl 튜닝
|
|
- [ ] [[vault]] SSH CA에 새 호스트키 등록 (vault.md 참조)
|
|
- [ ] 필요 시 [[netbis]] APISIX/etcd Docker compose 재배포
|
|
- [ ] 필요 시 [[searxng]]용 tlsproxy/microsocks 재배포
|