LTSP on LXD:一次有趣的开发之旅

发布: (2025年12月12日 GMT+8 06:27)
7 min read
原文: Dev.to

Source: Dev.to

介绍

最近,我对搭建一个小型 “homelab” 来实验虚拟机(VM)、容器、Linux 管理和网络感到兴奋。

有两个问题:第一,我还没有硬盘来给我的机器使用;第二,我还没有一个合适的地方来放置这些机器。

为了解决第一个问题(缺少硬盘),我在寻找一个多年前第一次玩过的项目——LTSP,即 Linux Terminal Server Project。LTSP 让 “维护数十甚至数百台 无盘 客户端和维护一台普通 PC 一样容易”。这些 “终端”(客户端机器)将通过网络启动,无需任何永久存储。

为了解决第二个问题(缺少空间),我最初打算完全跳过设置任何物理客户端机器。思路是把 LTSP 服务器和 LTSP 客户端 “机器” 都作为容器化实例运行在我的开发机器(例如笔记本)里。有很多实现方式,许多 homelab 爱好者如果已经在运行 Proxmox 可能会使用它,但今天我将使用 Canonical(Ubuntu 背后的公司)提供的 LXD 软件。稍后,在虚拟系统搭建完成后,我可以很少改动地接入真实的物理机器,让它们直接工作。

在本文中,我将讨论使用 LXD 与 LTSP,但相同的方法同样适用于任何你想用于开发的实例集合。我会用 “实例” 来指代虚拟机实例或系统容器实例。

文章 © 2025。保留所有权利。禁止用于 AI/ML 训练或数据挖掘。

为什么选 LXD?

我们使用 LXD 是因为它能够同时管理虚拟机和系统容器。

  • 如果我们只想在容器里运行单个应用,通常会使用 Docker。
  • 在本例中我们需要在容器里运行完整的 Linux 操作系统,这可以通过 Linux 内核的 LXC(“Linux Containers”)实现。我们将把 LTSP 客户端设置为通过 iPXE 启动的 VM,把 LTSP 服务器设置为系统容器。

LXD 提供基于 KVM 的虚拟机和基于 LXC 的系统容器——能够运行完整 Linux OS——在同一个开源虚拟化平台上。ref

注意: LXC 代表 “Linux Containers”,因此 LXD 自然代表 “Linux Container Daemon”。如果对 “lxd” 与 “lxc” 的区别感到困惑,请参见此处解释

这种设置还能让我们在个人机器上开发,而无需在裸金属上安装 Proxmox,从而省去专用服务器的需求。

旁注

  • 2023 年,Canonical 对 LXD 项目(自始至终都是其赞助者)取得了更直接的控制权;这促成了社区分支 Incus 的创建。两者可以基本互换使用,如果你想切换,这些笔记 可能会有帮助。

为什么选 LTSP?

Linux Terminal Server Project 让管理多台无盘计算机变得轻而易举。它在实验室、学校、家庭,甚至是 小型科研集群 中都能降低成本或管理工作量。

LTSP 可以有多种部署方式。我将模拟的假想 LTSP 网络如下所示:

LTSP 网络示例图(由 FossFlow 绘制)

(我们将简化:因为所有假想客户端都是相同的,所以从单个客户端开始。)

前置条件

如果你想跟着操作,需要准备:

  • 一台运行 Linux、具备互联网访问且拥有 root/sudo 权限的电脑(Debian 或 Ubuntu 系列发行版最佳)。
  • 该电脑上有足够的磁盘空间来存放 VM 镜像。

就这些!在后续的文章中,我会分享如何在真实客户端机器上进行测试。

你也可以在 macOS/Windows 上运行 Linux 虚拟机,或使用诸如 Killercoda Ubuntu Playground 的在线环境来跟随本文。

本指南我们使用 Linux Mint,因为它在学校环境中是个不错的选择。(我最初尝试了 Ubuntu 25.10,但遇到了 cloud‑init 与 LTSP 的冲突,Mint 能避免这些麻烦。以后可能会写一个解决方案。)

虚拟网络概览

架构很简单:一台“电脑”作为服务器,另一台作为客户端(以后可以再添加更多客户端)。该设置的目标是:

  1. 大致匹配上面示意图中的物理网络拓扑(服务器有两条连接:互联网和交换机)。
  2. 绕过在使用 LXD 运行 LTSP 网络时可能出现的 问题

服务器可以是 VM 也可以是系统容器,但客户端 必须 是 VM,以便能够完整执行启动过程。

LXD 网络图

对不熟悉的读者来说,lxdbr0lxdbr1 是 LXD 在宿主机上创建的桥接设备。它们的作用类似于物理交换机,使容器之间以及容器与外部世界通信。在我们的设置中,服务器和客户端通过 lxdbr1 进行通信。这些桥接还提供 DHCP 和 NAT 功能,因此 lxdbr0 实际上相当于物理拓扑中的互联网路由器。

现在你已经了解了整体思路,下面开始动手吧!

步骤 1:安装 LXD

以下命令适用于现代的基于 Ubuntu 的系统。如果你的环境不同,请参考 LXD 文档‘first steps’ 教程。

sudo snap install lxd
sudo lxd init   # run as root

随后系统会提示你配置 LXD。

Back to Blog

相关文章

阅读更多 »