[Share Experiences] 制作自定义的 Linux live 镜像 Resolved
Tofloor
poster avatar
SamLukeYes
deepin
2022-05-01 20:03
Author

对于喜欢折腾系统的人来说,常备一个用于救急的启动盘是必不可少的。但是,有的时候找到能完全符合自己的需求的 iso 镜像并不是一件容易的事情。

Ventoy 在一定程度上解决了这个问题,它可以把多个 iso 镜像放在一个启动盘里。然而,假如我需要先用 gparted 调整分区,再用 timeshift 恢复系统,而这两个应用不在同一个 iso 里,那我可能需要先启动包含 gparted 的 iso,再重启进入包含 timeshift 的 iso,这样多少还是有些不便。

如果能按照自己的意愿,制作一个自定义的 live 镜像,把 gparted 和 timeshift 都放进去,不就完美解决这个问题了like

这样的事情,我从去年就开始做了。当时我在 Surface Pro 6 上使用 Arch Linux,于是就做了一个在 Surface 上能完全使用触屏操作的 archiso。但后来我的 SP6 触屏坏了,我也就没有动力继续维护这个项目了,现在已经停止开发。

直到最近,一位 NixOS 用户的自定义 live 镜像让我眼前一亮。原来,仅仅通过一个简单的 iso.nix 文件,就可以自定义一个 NixOS iso。那么,如果我把 arch-install-scripts 和 timeshift 也塞进 NixOS 的 iso,那不就是我理想的 live 镜像了吗?我的下一个 Arch Linux 救援镜像何必是 archisojoy

pacstrap.png

说干就干。于是我开始制作自己的 NixOS iso。但我也很快发现,自己想做的定制可远远不是一个 iso.nix 文件这么简单。作为一个 Nix 新手,我花了好几天的工夫才修好 NixOS 上的 pacman 和 arch-install-scripts。即便如此,用 Nix 来自制 live 镜像相对于 archiso 而言还是有不少优势的。首先,最让我印象深刻的是,在对配置文件进行小修改后,重新构建 NixOS iso 比重新构建 archiso 要快很多,因为除了重新生成 squashfs 和 iso 文件以外,Nix 只会重新构建修改了的部分,而 archiso 则需要删掉构建目录整个重来一遍。其次,在 NixOS iso 中添加 nixpkgs 中所没有的软件包,或者修改官方的软件包,只需要自己写好 nix 文件即可,而在 archiso 中添加第三方软件包或修改过的软件包则需要另外维护的软件仓库来提供这些软件包。再者,archiso 的构建过程依赖于 pacman,并非所有发行版都能很方便地安装 pacman,但绝大多数发行版都很容易安装 Nix

也许以后我还会在我的 NixOS iso 中加入 debootstrap,这样说不定就能安装 deepin 了。据我初步的测试,debootstrap 在 NixOS 上似乎是开箱即用的,至少 nixpkgs 中提供的版本不会在安装软件包的时候 buffer overflow。另外,dde 的 NixOS 移植也有人在做了,以后也可以考虑在 iso 里加入一些 deepin 的工具。等以后更加完善了,或许我会把成品 iso 分享出来。不过,授人以鱼不如授人以渔,如果大家感兴趣的话,有空我会考虑另开一帖具体说说如何用 Nix 来构建 live 镜像。

Reply Favorite View the author
Comments
poster avatar
符华
2022-05-04 02:16
厉害
All Replies
enforcee
deepin
2022-05-01 20:36
#1

之前论坛也有坛友提出用squashfs(mksquashfs)和Ubuntu的liveCD做

blush

Reply View the author
SamLukeYes
deepin
2022-05-01 20:49
#2
enforcee

之前论坛也有坛友提出用squashfs(mksquashfs)和Ubuntu的liveCD做

blush

生成 squashfs 是制作启动盘的一个步骤,archiso 和 nix 都会自动完成这个步骤,不需要用户考虑具体怎么 mksquashfs。当然,如果想改变压缩格式之类的(默认的 xz 巨慢无比,我一般都改成 zstd),还是有选项可以调的。

Reply View the author
安洛
deepin
2022-05-02 00:55
#3

支持。deepin live长年不更新,deepin安装盘默认又没有livecd选项,一直让我非常困扰。

Reply View the author
Ziggy
deepin
2022-05-02 01:28
#4
安洛

支持。deepin live长年不更新,deepin安装盘默认又没有livecd选项,一直让我非常困扰。

启动参数去掉deepin-installer

Reply View the author
安洛
deepin
2022-05-02 01:30
#5
Ziggy

启动参数去掉deepin-installer

隔很久没用很容易就忘了😂 它为什么不能添加一个启动项呢?

不过deepin的安装镜像也不能说是一个优秀的live,很多常用维护软件都没有。

Reply View the author
pzm9012
Moderator
2022-05-02 02:33
#6
安洛

隔很久没用很容易就忘了😂 它为什么不能添加一个启动项呢?

不过deepin的安装镜像也不能说是一个优秀的live,很多常用维护软件都没有。

论坛上有人做了一个deepin live cd ,可以看看:

https://bbs.deepin.org/zh/post/235125

Reply View the author
SamLukeYes
deepin
2022-05-04 01:37
#7
安洛

支持。deepin live长年不更新,deepin安装盘默认又没有livecd选项,一直让我非常困扰。

Reply View the author
风吹过的绿洲
deepin
2022-09-01 16:37
#8

在Nix的概念里,内核,软件源,整个运行环境都是可以自由配置的。

如果我们只配置某一项,其余会用Nix官方的。

如果我们改变源,包管理器,桌面环境等,可以变为任何发行版的nix化iso。。

是这么理解的吗?请纠正

Reply View the author
SamLukeYes
deepin
2022-09-01 17:01
#9
风吹过的绿洲

在Nix的概念里,内核,软件源,整个运行环境都是可以自由配置的。

如果我们只配置某一项,其余会用Nix官方的。

如果我们改变源,包管理器,桌面环境等,可以变为任何发行版的nix化iso。。

是这么理解的吗?请纠正

实际上这样做出来的就是 nixos 的 iso,但是你可以在这个 iso 里集成便于维护其他发行版的工具,甚至还可以让它的根目录遵循 FHS

Reply View the author
SamLukeYes
deepin
2022-09-01 17:43
#10
风吹过的绿洲

在Nix的概念里,内核,软件源,整个运行环境都是可以自由配置的。

如果我们只配置某一项,其余会用Nix官方的。

如果我们改变源,包管理器,桌面环境等,可以变为任何发行版的nix化iso。。

是这么理解的吗?请纠正

如果要用 nix 生成其他发行版的 iso,理论上也是可行的,但重新构建快的优点大概就无了tail

Reply View the author
风吹过的绿洲
deepin
2022-09-02 01:09
#11
SamLukeYes

如果要用 nix 生成其他发行版的 iso,理论上也是可行的,但重新构建快的优点大概就无了tail

意思是说,最好还是用NixOS提供的基础,想用某个发行版的特色,就对应改一下配置,就可以体验了。对吗

Reply View the author
SamLukeYes
deepin
2022-09-02 01:43
#12
风吹过的绿洲

意思是说,最好还是用NixOS提供的基础,想用某个发行版的特色,就对应改一下配置,就可以体验了。对吗

所谓 NixOS,就是基于 nixpkgs 构建的操作系统。这个系统可以是装在硬盘里的系统,也可以是用来急救的 live 镜像。它可以包含任何你想要的东西,包括你所说的“其他发行版的特色”,只不过 nixpkgs 中没有的部分可能需要你自己实现(写 module 或 derivation);也可以不包含某些你不想要的东西,甚至可以连 nix 本身都扔掉,只不过这样会让系统难以修改其自身。

我之前提到的理论上可以用 nix 构建其他发行版的 iso,是看在 nixpkgs 里也有一些比较神奇的 builder,能声明一个其他发行版的虚拟机,并在其中构建其他发行版的软件包。理论上用这样的技术构建其他发行版的 iso 是完全可行的,大概也已经有相应的 builder 了,只是我还没仔细了解。但这种方式仅仅是利用了 nix 语言声明式的特点和 nixpkgs 中用于构建镜像和虚拟机的软件,有时也是为了蹭 hydra 服务而特意用 nix 来写,并没有充分利用 nix store 的特性。

Reply View the author