mirror of
https://github.com/smg1024/homelab.git
synced 2026-05-22 20:32:58 +09:00
initial install yggdrasil
This commit is contained in:
parent
5b3f78c854
commit
b538626c12
7 changed files with 186 additions and 72 deletions
30
INSTALL.md
30
INSTALL.md
|
|
@ -1,7 +1,7 @@
|
|||
# NixOS Homelab Install Guide
|
||||
|
||||
이 문서는 `yggdrasil`, `midgard`를 NixOS installer USB에서 부팅한 뒤
|
||||
이 repo를 source of truth로 사용해 최초 설치하는 절차를 설명한다.
|
||||
이 문서는 `yggdrasil`, `midgard`를 NixOS installer USB에서 부팅한 뒤 이 repo를
|
||||
source of truth로 사용해 최초 설치하는 절차를 설명한다.
|
||||
|
||||
기본 원칙:
|
||||
|
||||
|
|
@ -85,8 +85,8 @@ installer shell이 뜨면 대상 머신 콘솔에서 root 비밀번호를 임시
|
|||
sudo passwd root
|
||||
```
|
||||
|
||||
이 비밀번호는 installer live environment에서만 쓰는 임시 비밀번호다.
|
||||
설치 후 재부팅하면 최종 NixOS 설정이 적용되고 root SSH login은 비활성화된다.
|
||||
이 비밀번호는 installer live environment에서만 쓰는 임시 비밀번호다. 설치 후
|
||||
재부팅하면 최종 NixOS 설정이 적용되고 root SSH login은 비활성화된다.
|
||||
|
||||
SSH 서버를 시작한다.
|
||||
|
||||
|
|
@ -224,7 +224,8 @@ ssh root@<YGGDRASIL_INSTALLER_IP> \
|
|||
|
||||
- `hardware-configuration.nix`는 대상 머신에서 생성한 값을 사용한다.
|
||||
- yggdrasil에서 생성한 파일을 midgard에 재사용하지 않는다.
|
||||
- disko가 `/`와 `/boot` 파일시스템을 선언하므로 생성된 hardware config를 그대로 믿지 말고 검토한다.
|
||||
- disko가 `/`와 `/boot` 파일시스템을 선언하므로 생성된 hardware config를 그대로
|
||||
믿지 말고 검토한다.
|
||||
|
||||
`hardware-configuration.nix`에는 보통 이런 내용이 남으면 된다.
|
||||
|
||||
|
|
@ -243,8 +244,8 @@ hardware.cpu.intel.updateMicrocode = ...;
|
|||
hardware.cpu.amd.updateMicrocode = ...;
|
||||
```
|
||||
|
||||
다음 항목은 `disko.nix`와 중복되거나 installer/live 환경의 값일 수 있으므로
|
||||
특히 확인한다.
|
||||
다음 항목은 `disko.nix`와 중복되거나 installer/live 환경의 값일 수 있으므로 특히
|
||||
확인한다.
|
||||
|
||||
```nix
|
||||
fileSystems."/"
|
||||
|
|
@ -252,9 +253,9 @@ fileSystems."/boot"
|
|||
swapDevices
|
||||
```
|
||||
|
||||
이 repo에서는 `/`와 `/boot`는 `disko.nix`가 담당한다. swap은 `modules/swap.nix`의
|
||||
zram swap이 담당한다. 따라서 hardware config에 위 항목이 들어 있다면 왜 필요한지
|
||||
확실할 때만 남긴다.
|
||||
이 repo에서는 `/`와 `/boot`는 `disko.nix`가 담당한다. swap은
|
||||
`modules/swap.nix`의 zram swap이 담당한다. 따라서 hardware config에 위 항목이
|
||||
들어 있다면 왜 필요한지 확실할 때만 남긴다.
|
||||
|
||||
## 6. host default.nix imports 활성화
|
||||
|
||||
|
|
@ -321,16 +322,18 @@ nix-instantiate --parse hosts/yggdrasil/hardware-configuration.nix >/dev/null
|
|||
```bash
|
||||
nix run github:nix-community/nixos-anywhere -- \
|
||||
--flake .#yggdrasil \
|
||||
--build-on-remote \
|
||||
root@<YGGDRASIL_INSTALLER_IP>
|
||||
```
|
||||
|
||||
워크스테이션의 Nix에서 flakes가 꺼져 있다는 에러가 나면 같은 명령에
|
||||
experimental features를 명시한다.
|
||||
워크스테이션의 Nix에서 flakes가 꺼져 있다는 에러가 나면 같은 명령에 experimental
|
||||
features를 명시한다.
|
||||
|
||||
```bash
|
||||
nix --extra-experimental-features "nix-command flakes" \
|
||||
run github:nix-community/nixos-anywhere -- \
|
||||
--flake .#yggdrasil \
|
||||
--build-on-remote \
|
||||
root@<YGGDRASIL_INSTALLER_IP>
|
||||
```
|
||||
|
||||
|
|
@ -583,7 +586,8 @@ ssh root@midgard
|
|||
|
||||
## 15. 롤백 기본
|
||||
|
||||
NixOS 설정 변경 후 문제가 생기면 대상 머신에서 이전 generation으로 되돌릴 수 있다.
|
||||
NixOS 설정 변경 후 문제가 생기면 대상 머신에서 이전 generation으로 되돌릴 수
|
||||
있다.
|
||||
|
||||
```bash
|
||||
sudo nixos-rebuild switch --rollback
|
||||
|
|
|
|||
91
flake.lock
generated
Normal file
91
flake.lock
generated
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
{
|
||||
"nodes": {
|
||||
"disko": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1779226674,
|
||||
"narHash": "sha256-wuOkjI6pRiN4sEn/EPBRnNW5cmcpvd7xtIM8y5LooAs=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "65fb947964bd44fc0008faf77d1fcb7a9f40bb32",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"home-manager": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1778905220,
|
||||
"narHash": "sha256-ox/5IHc8uwy6UTw6N7Shp6uCHIgu/S2PsWeuXsOHSo8=",
|
||||
"owner": "nix-community",
|
||||
"repo": "home-manager",
|
||||
"rev": "d1686dc7d36cbd1234cb226ad6ef97e882716acb",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"ref": "release-25.11",
|
||||
"repo": "home-manager",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1779102034,
|
||||
"narHash": "sha256-vZJZjLo513IeI8hjzHFc6TDezUd4uCE2Eq4SNO3DNNg=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "687f05a9184cad4eaf905c48b63649e3a86f5433",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "NixOS",
|
||||
"ref": "nixos-25.11",
|
||||
"repo": "nixpkgs",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"disko": "disko",
|
||||
"home-manager": "home-manager",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"sops-nix": "sops-nix"
|
||||
}
|
||||
},
|
||||
"sops-nix": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1777944972,
|
||||
"narHash": "sha256-VfGRo1qTBKOe3s2gOv8LSoA6Fk19PvBlwQ1ECN0Evn8=",
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"rev": "c591bf665727040c6cc5cb409079acb22dcce33c",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "Mic92",
|
||||
"repo": "sops-nix",
|
||||
"type": "github"
|
||||
}
|
||||
}
|
||||
},
|
||||
"root": "root",
|
||||
"version": 7
|
||||
}
|
||||
12
flake.nix
12
flake.nix
|
|
@ -20,19 +20,16 @@
|
|||
};
|
||||
};
|
||||
|
||||
outputs =
|
||||
inputs@{
|
||||
outputs = inputs @ {
|
||||
nixpkgs,
|
||||
disko,
|
||||
home-manager,
|
||||
sops-nix,
|
||||
...
|
||||
}:
|
||||
let
|
||||
}: let
|
||||
system = "x86_64-linux";
|
||||
|
||||
mkHost =
|
||||
hostModule:
|
||||
mkHost = hostModule:
|
||||
nixpkgs.lib.nixosSystem {
|
||||
inherit system;
|
||||
specialArgs = {
|
||||
|
|
@ -60,8 +57,7 @@
|
|||
hostModule
|
||||
];
|
||||
};
|
||||
in
|
||||
{
|
||||
in {
|
||||
nixosConfigurations = {
|
||||
yggdrasil = mkHost ./hosts/yggdrasil;
|
||||
midgard = mkHost ./hosts/midgard;
|
||||
|
|
|
|||
|
|
@ -10,5 +10,11 @@
|
|||
|
||||
networking.hostName = "midgard";
|
||||
|
||||
services.logind.settings.Login = {
|
||||
HandleLidSwitch = "ignore";
|
||||
HandleLidSwitchExternalPower = "ignore";
|
||||
HandleLidSwitchDocked = "ignore";
|
||||
};
|
||||
|
||||
system.stateVersion = "25.11";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,14 +1,16 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
# Enable these imports after collecting disk IDs and generated hardware config
|
||||
# during the NixOS installer phase.
|
||||
# imports = [
|
||||
# ./hardware-configuration.nix
|
||||
# ./disko.nix
|
||||
# ];
|
||||
{...}: {
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
./disko.nix
|
||||
];
|
||||
|
||||
networking.hostName = "yggdrasil";
|
||||
|
||||
services.logind.settings.Login = {
|
||||
HandleLidSwitch = "ignore";
|
||||
HandleLidSwitchExternalPower = "ignore";
|
||||
HandleLidSwitchDocked = "ignore";
|
||||
};
|
||||
|
||||
system.stateVersion = "25.11";
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,8 @@
|
|||
{ ... }:
|
||||
|
||||
{
|
||||
{...}: {
|
||||
disko.devices = {
|
||||
disk.main = {
|
||||
type = "disk";
|
||||
device = "/dev/disk/by-id/REPLACE_WITH_YGGDRASIL_DISK_ID";
|
||||
device = "/dev/disk/by-id/ata-SAMSUNG_MZNLN128HCGR-000_S200NYAG700346";
|
||||
|
||||
content = {
|
||||
type = "gpt";
|
||||
|
|
|
|||
|
|
@ -1,5 +1,22 @@
|
|||
{ ... }:
|
||||
|
||||
# Do not modify this file! It was generated by ‘nixos-generate-config’
|
||||
# and may be overwritten by future invocations. Please make changes
|
||||
# to /etc/nixos/configuration.nix instead.
|
||||
{
|
||||
# TODO: Replace with generated yggdrasil hardware configuration.
|
||||
config,
|
||||
lib,
|
||||
pkgs,
|
||||
modulesPath,
|
||||
...
|
||||
}: {
|
||||
imports = [
|
||||
(modulesPath + "/installer/scan/not-detected.nix")
|
||||
];
|
||||
|
||||
boot.initrd.availableKernelModules = ["ahci" "xhci_pci" "usb_storage" "sd_mod" "sdhci_pci" "rtsx_usb_sdmmc"];
|
||||
boot.initrd.kernelModules = ["dm-snapshot"];
|
||||
boot.kernelModules = ["kvm-intel"];
|
||||
boot.extraModulePackages = [];
|
||||
|
||||
nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux";
|
||||
hardware.cpu.intel.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue