AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 759516
Accepted
GraemeV
GraemeV
Asked: 2023-10-21 22:05:46 +0800 CST2023-10-21 22:05:46 +0800 CST 2023-10-21 22:05:46 +0800 CST

消除 initrd 中 X11 库的包含

  • 772

我在 TS412 (QNAP) 上运行 Debian Bookworm;它将内核和 initrd 存储在闪存中。它总共有 16MB 闪存。因此,即使在调整 MD 分区之后,我能得到的最好的也是 12MB initrd 。我正在使用 xz 压缩。但即便如此,最初的 initrd 也有 12.5MB。我知道常见的解决方法是减少模块,但它们不是真正的问题。

2984    .../usr/lib/modules
6036    .../usr/share
18824   .../usr/lib/arm-linux-gnueabi

在arm-linux-gnueabi中查看它有像libX11这样的东西...这台机器甚至没有控制台(即使获得串行线也很困难)它当然不需要“X”。

因此,我完全删除了很多软件包(apt-get remove ...),实际上比我应该删除的要多。但结果是一个小得多的 initrd(大约 5MB IIRC),它启动和运行得很好。

问题是,如果我 ssh 到盒子上并运行 emacs(1) ,那么将 GUI 版本投影回我的普通桌面(有大量内存和大显示器等)会很好,但这需要安装TS412 上的 X 客户端库。

现在我不明白为什么仅仅因为我安装了带有 X 客户端库的软件包,就需要在 initrd 上保留一个副本,而在启动过程中不需要它们。有没有办法限制其他东西进入 initrd,而不仅仅是模块(这不是罪魁祸首)

我已经尝试过在文档中搜索限制 initrd 的指南。

debian
  • 2 2 个回答
  • 634 Views

2 个回答

  • Voted
  1. Best Answer
    A.B
    2023-10-21T23:40:14+08:002023-10-21T23:40:14+08:00

    可能有一个二进制文件旨在在引导期间显示图形信息,该二进制文件将在initramfs文件中提取它所依赖的库。

    大多数架构上都提供这样的二进制文件,其中包括armel作为Plymouth插件label.so提供的插件,以便在启动期间显示带有文本的图形显示。该插件依赖于各种X11库,用于渲染文本。当这个插件被添加到initramfs时,它所依赖的所有库也会被添加,以便它可以在启动阶段使用。这是通过包的依赖项来通告的:depends本身依赖于各种 X11 库包,包括提供库。plymouth-labelplymouth-labellibcairo2libx11-6 libX11.so.6

    添加的 initramfs 钩子label.so是/usr/share/initramfs-tools/hooks/plymouth:

    PLUGIN_PATH="$(plymouth --get-splash-plugin-path)"
    
    case "${THEME_NAME}" in
      text|details|tribar)
          PLUGINS="text.so details.so"
          ;;
      *)
          PLUGINS="text.so details.so label.so"
          ;;
    esac
    
    [...]
    
    for PLUGIN in ${PLUGINS}
    do
      if [ -f ${PLUGIN_PATH}/${PLUGIN} ]
      then
          copy_exec ${PLUGIN_PATH}/${PLUGIN}
      else
    [...]
    

    copy_exec是一个 shell 函数(由 提供initramfs-tools-core),除了复制二进制文件之外,它还会在需要时提取依赖项,依赖于ldd发现需要的内容。

    因此,只有在普利茅斯使用非文本设置时才会拉动它......以便显示文本。

    由于 QNAP 的主要用途不是视频,因此应避免安装plymouth,尤其是此插件,避免将 X11 库拉入initramfs文件中。

    我看不出造成这种行为的任何其他原因。可能有其他类似的包出于类似的原因导致此行为。

    • 13
  2. GraemeV
    2023-10-24T09:23:20+08:002023-10-24T09:23:20+08:00

    遵循@AB有用回复的逻辑。我敲出了一对快速而肮脏的脚本来帮助跟踪依赖树。(AB答案仍然是具体问题的答案)

    graeme@qnap412u:/tmp/myinitrd$ xzcat /boot/initrd.img-6.1.0-13-marvell  | cpio -i
    34382 blocks
    
    graeme@qnap412u:/tmp/myinitrd$ ~/bin/genxrefs.sh /tmp/myinitrd/  > /tmp/refs
    Doing /tmp/myinitrd/usr/lib/klibc-tUxlTFMpGlp_BpS5UnpMpyc8b3g.so
        not a dynamic executable
    Doing /tmp/myinitrd/usr/lib/arm-linux-gnueabi/ld-linux.so.3
    Doing /tmp/myinitrd/usr/lib/arm-linux-gnueabi/libkmod.so.2.4.0
    ..elided..
    
    graeme@qnap412u:/tmp/myinitrd$ ~/bin/whoneeds.awk  libudev /tmp/refs 
    libudev.so.1 is used by /tmp/myinitrd/usr/lib/arm-linux-gnueabi/libdevmapper.so.1.02.1
    
    graeme@qnap412u:/tmp/myinitrd$ ~/bin/whoneeds.awk devmapper  /tmp/refs 
    graeme@qnap412u:/tmp/myinitrd$ ~/bin/whoneeds.awk libatomic  /tmp/refs 
    libatomic.so.1 is used by /tmp/myinitrd/usr/lib/arm-linux-gnueabi/libkmod.so.2.4.0
    libatomic.so.1 is used by /tmp/myinitrd/usr/lib/arm-linux-gnueabi/libcrypto.so.3
    
    
    graeme@qnap412u:/tmp/myinitrd$ cat ~/bin/genxrefs.sh
    #! /bin/bash -ue
    
    # This will fail if any names uses spaces or commas (at a pinch, we could use TAB)
    
    INITDIR=$1
    
    objs=$(find ${INITDIR} -type f -name '*.so.*' -o -path '*.so')
    
    # This is going to mess up if anybody uses spaces in pathnames
    for obj in ${objs}
    do
        echo "Doing ${obj}" >&2
        ldd ${obj} | while read line
        do
        requires=${line%% =>*}
        requires=${requires%% *} # 1st word
        requires=$(basename ${requires})
        
        provided=${line#*=>}
    
        # Ugly , we use commas because, for example quoted strings are too hard in awk(1)
        
        echo "${obj},${requires},${provided}"
        done  
    done
    graeme@qnap412u:/tmp/myinitrd$ cat ~/bin/whoneeds.awk
    #! /usr/bin/awk -f
    BEGIN {
        # NB this version of awk does not appear to understand FPAT
        FS=","
    
        STRING=ARGV[1]
        ARGV[1]=""
    }
    
    { if ( index($2, STRING) > 0 )
        print $2 " is used by " $1 }
    
    • 0

相关问题

  • GRUB 配置以识别同一 Linux 发行版的不同桌面环境(安装)

  • astyle 不会更改源文件格式

  • 接收有关全新 Debian 的电子邮件

  • Debian Stretch:libgs_plugin_systemd-updates.so 中的 gnome-software 段错误

  • 如何在拼音输入法中输入ü?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve