muscari: add disko config, hardcode mikl ssh key
This commit is contained in:
parent
aedf727849
commit
99b887e97f
6 changed files with 85 additions and 45 deletions
21
flake.lock
21
flake.lock
|
|
@ -1,5 +1,25 @@
|
|||
{
|
||||
"nodes": {
|
||||
"disko": {
|
||||
"inputs": {
|
||||
"nixpkgs": [
|
||||
"nixpkgs"
|
||||
]
|
||||
},
|
||||
"locked": {
|
||||
"lastModified": 1781152676,
|
||||
"narHash": "sha256-RxWs5ND31KzTG7wvMM+PMfUjyNpmIEr999lqNARaM5o=",
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"rev": "ff8702b4de27f72b4c78573dfb89ec74e36abdf1",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "nix-community",
|
||||
"repo": "disko",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1782188297,
|
||||
|
|
@ -18,6 +38,7 @@
|
|||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"disko": "disko",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"sops-nix": "sops-nix"
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,9 +8,14 @@
|
|||
url = "github:Mic92/sops-nix";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
|
||||
disko = {
|
||||
url = "github:nix-community/disko";
|
||||
inputs.nixpkgs.follows = "nixpkgs";
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, sops-nix, ... }:
|
||||
outputs = { self, nixpkgs, sops-nix, disko, ... }:
|
||||
let
|
||||
system = "x86_64-linux";
|
||||
|
||||
|
|
@ -20,6 +25,7 @@
|
|||
./hosts/common
|
||||
./hosts/${hostname}
|
||||
sops-nix.nixosModules.sops
|
||||
disko.nixosModules.disko
|
||||
{
|
||||
# SOPS для каждого хоста: secrets/<hostname>.yaml
|
||||
# приватный age-ключ лежит в /etc/sops/age/keys.txt (chmod 600)
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
{ config, pkgs, lib, ... }:
|
||||
{
|
||||
imports = [
|
||||
./hardware-configuration.nix
|
||||
./disk-config.nix
|
||||
../../modules/users/mikl.nix
|
||||
../../modules/services/k3s.nix
|
||||
];
|
||||
|
|
@ -20,6 +20,13 @@
|
|||
];
|
||||
};
|
||||
|
||||
# Bootloader — extlinux (совместимо с YC BIOS boot)
|
||||
boot.loader.grub.enable = false;
|
||||
boot.loader.generic-extlinux-compatible.enable = true;
|
||||
|
||||
# fileSystems — определяется через disko (см. disk-config.nix)
|
||||
# Не задаём явно fileSystems."/" чтобы не конфликтовать с disko
|
||||
|
||||
# После nixos-anywhere первая установка может быть 26.05,
|
||||
# потом не трогаем (NixOS convention)
|
||||
system.stateVersion = "25.11";
|
||||
|
|
|
|||
40
hosts/muscari/disk-config.nix
Normal file
40
hosts/muscari/disk-config.nix
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
# disk-config.nix для muscari — Yandex Cloud VM
|
||||
# YC VM из образа Debian 12: один диск /dev/vda (virtio scsi), GPT
|
||||
# Используем disko для переформатирования под NixOS одну EFI + root
|
||||
#
|
||||
# NB: extlinux (не grub) — YC использует MBR для legacy BIOS boot
|
||||
# YC поддерживает и EFI, и BIOS — выбираем extlinux для совместимости с образом
|
||||
|
||||
{ lib, ... }:
|
||||
{
|
||||
disko.devices = {
|
||||
disk.disk1 = {
|
||||
device = lib.mkDefault "/dev/vda";
|
||||
type = "disk";
|
||||
content = {
|
||||
type = "gpt";
|
||||
partitions = {
|
||||
ESP = {
|
||||
name = "ESP";
|
||||
size = "512M";
|
||||
type = "EF00";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "vfat";
|
||||
mountpoint = "/boot";
|
||||
};
|
||||
};
|
||||
root = {
|
||||
name = "root";
|
||||
size = "100%FREE";
|
||||
content = {
|
||||
type = "filesystem";
|
||||
format = "ext4";
|
||||
mountpoint = "/";
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
};
|
||||
}
|
||||
|
|
@ -1,26 +0,0 @@
|
|||
# Hardware configuration для muscari (Yandex Cloud VM)
|
||||
# PLACEHOLDER — будет заменён реальным после создания VM в YC
|
||||
# (см. ../k3s/NIXOS-SETUP.md, шаг 4-5)
|
||||
|
||||
# Временный placeholder чтобы flake.nix компилировался
|
||||
# После создания VM в YC с Debian 12:
|
||||
# 1. SSH в VM как debian
|
||||
# 2. Сгенерировать реальный hardware-config через nixos-generate-config
|
||||
# 3. Заменить этот файл
|
||||
# 4. Перезапустить nixos-anywhere
|
||||
|
||||
{ ... }:
|
||||
{
|
||||
# NixOS ругается без fileSystems и boot.loader, поэтому минимальный placeholder
|
||||
# ПОМЕНЯТЬ после первого старта VM
|
||||
fileSystems."/" = {
|
||||
device = "/dev/vda1";
|
||||
fsType = "ext4";
|
||||
};
|
||||
|
||||
boot.loader.grub.enable = false;
|
||||
boot.loader.generic-extlinux-compatible.enable = true;
|
||||
|
||||
# Для YC: virtio scsi
|
||||
boot.initrd.availableKernelModules = [ "virtio_pci" "virtio_mmio" "virtio_blk" "virtio_scsi" ];
|
||||
}
|
||||
|
|
@ -1,28 +1,20 @@
|
|||
# mikl — пользователь с SSH-доступом через forgejo .keys endpoint
|
||||
# Live-ключи с git.iscg.dev/mikl.keys (sha256-pinned)
|
||||
# Hardcoded fallback для восстановления если forgejo недоступен
|
||||
# mikl — пользователь с SSH-доступом
|
||||
# Ключи захардкожены (recovery-friendly — не зависит ни от чего)
|
||||
|
||||
{ pkgs, ... }:
|
||||
let
|
||||
# Live-ключи с forgejo — обновляются автоматически при изменении на forgejo
|
||||
# sha256 защищает от подмены: новое содержимое = явный коммит с новым хэшем
|
||||
forgejoKeys = pkgs.fetchurl {
|
||||
url = "https://git.iscg.dev/mikl.keys";
|
||||
sha256 = "sha256-4n6QLUPozdhHOmsRCuFn7HR9BU3nF0/GR2E7s5Lpz+Q=";
|
||||
};
|
||||
in
|
||||
{
|
||||
users.users.mikl = {
|
||||
isNormalUser = true;
|
||||
extraGroups = [ "wheel" ];
|
||||
uid = 1000;
|
||||
|
||||
openssh.authorizedKeys.keyFiles = [ forgejoKeys ];
|
||||
# Hardcoded ключи — надёжно, не зависит от forgejo
|
||||
openssh.authorizedKeys.keys = [
|
||||
# poppy-legacy (id_ed25519) — основной ключ
|
||||
"ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH0TxZWagV8rjwJkmspEyLyyW9Uwty99pkVx4/pgO3Zj poppy-legacy"
|
||||
];
|
||||
|
||||
# Hardcoded fallback key — НЕ зависит ни от чего
|
||||
# Вставить сюда свой recovery-ключ когда сгенерируешь (например, YubiKey)
|
||||
# openssh.authorizedKeys = [
|
||||
# "ssh-ed25519 AAAA... my-recovery-key"
|
||||
# ];
|
||||
# TODO: подключить git.iscg.dev/mikl.keys через fetchurl когда починим sha256
|
||||
# openssh.authorizedKeys.keyFiles = [ forgejoKeys ];
|
||||
};
|
||||
}
|
||||
Loading…
Reference in a new issue