KVM+NixOS安装过程记录

前置准备

目标服务器上已经安装好了KVM,能够正常使用virsh命令。

以下是博主的一台古董服务器

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.6 LTS
Release:        18.04
Codename:       bionic

$ qemu-x86_64 --version
qemu-x86_64 version 2.11.1(Debian 1:2.11+dfsg-1ubuntu7.41)
Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers

$ virsh --version
4.0.0

$  sudo apt list | grep ovmf
ovmf/bionic-security,bionic-security,bionic-updates,bionic-updates,now 0~20180205.c0d9813c-2ubuntu0.3 all [已安装]

开搞

1. 下载NixOs镜像

官方下载地址:https://nixos.org/download/#nixos-iso

因为是作为开发环境,这里选择了Minimal ISO image版本

image

下载完成后我这里放在了imgs/latest-nixos-minimal-x86_64-linux.iso

2. 写一个virt脚本并运行

也可以直接运行,写脚本是方便复用和管理

#!/bin/bash

usage() {
  echo "Usage: $0 <owner> <seq> <cdrom_path> <vnc_port>" >&2
  echo "       Or run with --help to see detailed information." >&2
  echo "" >&2
  echo "Parameters:" >&2
  echo "  <owner>      - prefix for VM name (e.g. myvm)" >&2
  echo "  <seq>        - sequence number (e.g. 01)" >&2
  echo "  <cdrom_path> - path to ISO or CDROM image" >&2
  echo "  <vnc_port>   - VNC display port" >&2
  exit 1
}

if [[ "$1" == "--help" ]]; then
  usage
  exit 0
fi

if [ "$#" -ne 4 ]; then
  usage
fi

owner=$1
seq=$2
name=${owner}${seq}
cdrom=$3
disk_path=./${name}.qcow2
vnc_port=$4

qemu-img create -f qcow2 ${disk_path} 100G

virt-install --virt-type kvm \
--name ${name} \
--ram 16384 \
--vcpus 8 \
--cdrom=${cdrom} \
--disk path=${disk_path},format=qcow2 \
--network bridge=br0 \
--graphics vnc,port=${vnc_port},listen=0.0.0.0 \
--noautoconsole \
--os-type=linux --boot uefi

这里的--network bridge=br0需要已经配置好网桥才可以,实际上可以配置为--network default来使用默认的NAT网络。

这里的--boot uefi非常重要,因为NixOS官方更推荐UEFI模式,而KVM默认是BIOS。

使用方法如下,这里我意图创建一个名为egod7的虚拟机,并且vnc端口设置为5967。

# vms/
#   - create_new.sh
#   - imgs/
#     - latest-nixos-minimal-x86_64-linux.iso 
sudo bash create_new.sh egod 7 imgs/latest-nixos-minimal-x86_64-linux.iso 5967

3. 完成NixOS的安装

这里需要使用VNC连接到目标服务器的5967端口,VNC软件推荐使用MobaXterm或者RealVNC Viewer,都是免费的。

NixOS的安装步骤大部分都照搬官方教程

NixOS默认不帮忙分区,也不提供全自动安装功能,所以需要从分区开始操作。

sudo -i # 进入root模式
lsblk # 查看硬盘情况,一般情况下是 /dev/sda

# 进行GPT分区(UEFI)
parted /dev/sda -- mklabel gpt
parted /dev/sda -- mkpart root ext4 512MB -8GB
parted /dev/sda -- mkpart swap linux-swap -8GB 100%
parted /dev/sda -- mkpart ESP fat32 1MB 512MB
parted /dev/sda -- set 3 esp on

# 格式化分区
mkfs.ext4 -L nixos /dev/sda1
mkswap -L swap /dev/sda2
swapon /dev/sda2
mkfs.fat -F 32 -n boot /dev/sda3   

# 挂载分区
mount /dev/disk/by-label/nixos /mnt
mkdir -p /mnt/boot                   
mount -o umask=077 /dev/disk/by-label/boot /mnt/boot 

# 自动生成配置
nixos-generate-config --root /mnt

# 修改配置,在正确的UEFI模式下,应该会自动生成boot.loader.systemd-boot.enable=true。
# 可以改一下时区为Asia/Shanghai
# 取消注释一下`users.users.alice`并将alice改成自己喜欢的用户名,我这里使用`egod`
vim /mnt/etc/nixos/configuration.nix

# 安装NixOs并按照提示设置root的密码
nixos-install

# 设置用户密码
nixos-enter --root /mnt -c 'passwd egod'

# 取消挂载(极其重要,一定不能忘)
umount -r /mnt 

# 重启
reboot

正常情况下reboot并不能成功,需要在服务器上执行virsh start来手动开机,然后就可以正式进入NixOS了。

4. 简单使用

后续可以通过sudo vim /etc/nixos/configuration.conf来修改网络、用户、系统层软件等。

比如修改envrioment.systemPackages增加vim和htop。

然后通过 sudo nixos-rebuild switch --upgrade来更新需要安装的软件。

其他操作就需要慢慢学NixOS了。

posted @ 2026-05-02 20:24  凉快李某  阅读(36)  评论(0)    收藏  举报