没人谈谈如何制作 Linux 发行版嘛 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
luffy
V2EX    Linux

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

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

    不太清楚制作流程。

    我猜可能需要

    • 写启动脚本
    • 开发包管理 或者 集成现有包管理
    • 做一些桌面定制,甚至自己开发桌面
    • 如果是基于现成的发行版做的,需要考虑要把哪些包删除,哪些包可以引入
    • 烧录 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  
    PRO
       202-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  
    PRO
       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     Solana     6096 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 06:17 PVG 14:17 LAX 23:17 JFK 02:17
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86