V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
luffy
V2EX  ›  Linux

没人谈谈如何制作 Linux 发行版嘛

  •  1
     
  •   luffy · 2022-05-13 10:31:44 +08:00 · 5608 次点击
    这是一个创建于 960 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不太清楚制作流程。

    我猜可能需要

    • 写启动脚本
    • 开发包管理 或者 集成现有包管理
    • 做一些桌面定制,甚至自己开发桌面
    • 如果是基于现成的发行版做的,需要考虑要把哪些包删除,哪些包可以引入
    • 烧录 ISO,提供镜像下载, 准备论坛,提供交流平台

    但问题是,如何把上面这几点整合起来。

    所有的 linux 相关的软件都是开源的,都可以自由获取。问题是如何整合?

    第 1 条附言  ·  2022-05-13 13:36:44 +08:00
    有朋友谈到 LFS, gentoo 。

    这两个发行版还是侧重于,从零在自己的电脑上构建 linux 。的确是在自己的电脑上做到完全的 DIY.

    如果把这个讨论主题换成是: 假如你希望构建一个像 debian / arch 这样的发行版,你会怎么做? 需要有自己的包管理,当然也要有自己的启动流程 等。
    28 条回复    2022-06-05 21:40:43 +08:00
    knir
        1
    knir  
       2022-05-13 10:37:47 +08:00
    geekvcn
        2
    geekvcn  
       2022-05-13 10:41:49 +08:00
    最省事的就是用 Debian 内核和包管理,然后其他的自己调整封装
    huangmingyou
        3
    huangmingyou  
       2022-05-13 10:45:58 +08:00
    @geekvcn 然后发现,其实这些调整封装用 ansible 就能做
    Biwood
        5
    Biwood  
       2022-05-13 10:53:13 +08:00
    我的理解,基于 Debian 的发行版,和跟 Debian 并行的发行版的整合方式不是一回事,前者应该容易一些,类似二次开发,后者需要对内核模块比较熟悉。

    而且,首先你要搞清楚的是为什么要做这个发行版,是有什么更好的软件架构方案,可以超越 Debian/Arch/RHEL 等发行版,还是说仅仅在 UI 体验上做做手脚,抑或是仅仅抱着学习的目的走一边流程。
    Tink
        6
    Tink  
       2022-05-13 10:57:14 +08:00 via Android
    lfs 看一下
    whenov
        7
    whenov  
       2022-05-13 11:51:43 +08:00
    Linux 发行版的关键是社区。只想走一遍流程的话,可以看看 LFS ( Linux From Scratch )
    duke807
        8
    duke807  
       2022-05-13 12:25:02 +08:00 via Android
    你試試安裝一下 gentoo 你就知道了,稍加改動就能出自己的發行版
    CEBBCAT
        9
    CEBBCAT  
       2022-05-13 12:51:01 +08:00
    《 Linux From Scratch 》+1

    与其说是没人谈,不如说是不会搜
    luffy
        10
    luffy  
    OP
       2022-05-13 13:32:03 +08:00
    这里有几点困惑
    1. archlinux, debian 等 是怎么从 0 开始制作出来的? 跟 LFS 有关联嘛?

    2. LFS 是对包括内核在内的每个包从 0 编译到自己的电脑上,能制成 iso ,安装在别人的电脑上?其它人的电脑硬件跟自己的不太一样, 自己编译出来的内核能在这些不同硬件设备上的电脑用?

    感觉我的问题应该改成:

    从 0 制作一个类似 arch / debian 发行版的流程
    gam2046
        11
    gam2046  
       2022-05-13 13:43:06 +08:00
    问个相关问题:如何定制 Linux 并进行批量化的安装。

    比如公司内需要统一安装一批服务器环境,同时也有自定义需求,那么如何根据自己的需求修改完毕后,方便的部署到其他设备上呢? dd 当然是一个可选项,还有其他更优雅的实现方式嘛,可以让非技术人员也可以自己安装
    luffy
        12
    luffy  
    OP
       2022-05-13 13:47:19 +08:00
    @gam2046 你的这个问题 跟 我问的问题 其实本质上是同一个问题。

    就是把需要的定制化的软件做成可以让其它人轻易安装。区别只是定制化程度不同,具体的做法跟工作量会有不同。
    比如,假设,要基于 debian 做一个发行版,但只需要把默认的 gnome 换成 kde 之类。
    billlee
        13
    billlee  
       2022-05-13 13:52:49 +08:00
    @gam2046 redhat 系可以用 anaconda
    moonjourney
        14
    moonjourney  
       2022-05-13 14:11:15 +08:00
    `nixos-generate -f iso -c ./config.nix`
    就一份配置一个命令
    root01
        15
    root01  
       2022-05-13 14:44:26 +08:00
    我能搞个 linux live cd 我就知足了
    baobao1270
        16
    baobao1270  
       2022-05-13 16:45:12 +08:00 via Android
    首先你需要一个包管理器+自动构建工具
    这个做好了就完成一半的工作了
    启动脚本其实很简单,甚至没有 initrd 直接 boot 到 ext4 都可以,现在都是 systemd 统管一切了
    ISO 稍微麻烦一点,但是也不难
    exiledkingcc
        17
    exiledkingcc  
       2022-05-13 17:27:30 +08:00
    如果只是想定制化发行版,比如 ubuntu ,可以直接用工具:
    https://github.com/PJ-Singh-001/Cubic

    如果是做自己的发行版,那就是 LFS 。
    geekvcn
        18
    geekvcn  
       2022-05-13 18:11:17 +08:00
    @luffy 自己从头编译就是先编译或者自己写个 bootloader ,开源的有 grub ,uboot 等。然后编译 Linux 内核,想要兼容的硬件就同时编译对应的内核驱动模块。这两个都做好了就是写自己的包管理,打包用软件和部署自己的服务器源。最后在内核的基础上安装你想默认安装的软件包,然后封装发行,用户直接 dd 安装。想要个性化安装就是封装的时候搞个初始化系统,带上磁盘工具方便调整和格式化分区。
    geekvcn
        19
    geekvcn  
       2022-05-13 18:17:16 +08:00
    @luffy 总之维护一个发行版费时费力,真有想法也没必要重头造轮子,不但加大 Linux 社区碎片化,而且一般个人和组织也没财力维护,毕竟光包源服务器投入就很大,还有各种兼容性问题要解决。不如直接在 Debian Arch 社区的基础上加上自己想修改的东西,相当于建一个分支。
    geekvcn
        20
    geekvcn  
       2022-05-13 18:22:41 +08:00
    @luffy 国内的大厂所谓的自主开发操作系统都不重新造轮子
    azenk
        21
    azenk  
       2022-05-13 18:39:03 +08:00 via Android
    从 0 开始的话,buildroot ,yocoto 一把梭。
    youstu
        22
    youstu  
       2022-05-13 18:44:41 +08:00
    一般如果是基于发行版,比如 debian 这些进行定制,可以用 live build 的方案,如果是像嵌入式系统这种,完全定制的,一般可以用 buildroot/yocto 的方案
    PMR
        23
    PMR  
       2022-05-13 20:30:24 +08:00 via Android   ❤️ 1
    @gam2046 #11
    @luffy #12

    https://wiki.debian.org/DebianInstaller/Preseed

    这不叫制作发行版•
    最多算无人值守安装方式
    disk
        24
    disk  
       2022-05-14 01:24:28 +08:00 via iPhone
    @PMR 可以用它来做基于 debian 发行版,外面套个壳就行
    msg7086
        25
    msg7086  
       2022-05-14 03:30:19 +08:00 via Android
    发行版本质上就是包管理。
    Tyanboot
        26
    Tyanboot  
       2022-05-14 05:29:11 +08:00
    本质上还是包管理,你只要有了一个包管理器,剩下的就是编译和打包其他的组件了。

    包管理器可以自己写,或者直接用现成的,比如 msys2 就直接用了 pacman 。

    然后选一个 init ,用 openrc 或者 systemd 都行; bootloader 也选一个,各种什么 grub2 ,systemd-boot ,rEFInd 之类的,也可以不用 bootloader ,直接裸跑内核。

    内核什么的现在发行版的做法都是,管他用不用的上,各种新的老的驱动统统勾选编译,去掉一些确实没人用的驱动,基本上 x86_64-defconfig 我电脑三分钟编译完,arch 的默认配置编译一次一小时,你就知道带了多少驱动了,基本完全不用担心兼容性。

    内核的 initramfs 也有现成的方案,mkinitcpio, dracut, booster 之类的,选一个看顺眼的。

    最后就是准备一个安装器,自己写一个,功能无非就是联网,分区,照着上面选好的几个必要组件安装这些包,至于怎么装,照着 Filesystem Hierarchy Standard 把文件扔进去就行了,设置用户,设置 bootloader 之类的。

    等你这么一折腾,就发现最关键的就是包管理器怎么搞,安装器都是可有可无的,你看 arch 都没有这些花里胡哨的,直接调 pacman 给对应分区安装一堆包就完事了。按照上面的逻辑,arch 发行版干脆叫 pacman 发行版算了,毕竟安装过程全手动,整个过程不可替代的只有 pacman 包管理器。

    最后的最后 iso 就更简单了,就是一个 livecd 环境,主流的方案也就是 squashfs+cow ,随便一搜一大把方案,实在不行解压一个 arch livecd 的 initramfs 看一下 hooks 就什么都知道了。
    Chowe
        27
    Chowe  
       2022-05-14 08:51:37 +08:00 via iPhone
    可以关注各大发行版的自动构建平台,他们每天都会构建一个 iso 出来的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2867 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 09:11 · PVG 17:11 · LAX 01:11 · JFK 04:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.