AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 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

Elimine a inclusão de bibliotecas X11 no initrd

  • 772

Estou executando o Debian Bookworm em um TS412 (QNAP); ele armazena o kernel e o initrd em flash. Tem um total de 16 MB de flash. Portanto, mesmo depois de ajustar as partições MD, o melhor que consigo é um initrd de 12 MB. Estou usando compactação xz. Mas mesmo assim, o initrd inicial era de 12,5 MB. Eu sei que a solução comum é reduzir os módulos, mas eles não são o verdadeiro problema.

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

Procurando em arm-linux-gnueabi tinha coisas como libX11... Essa máquina nem tem console (até conseguir uma linha serial é difícil) certamente não precisa de "X".

Então eu removi muitos pacotes totalmente (apt-get remove ...), na verdade, um pouco mais do que deveria. Mas o resultado foi um initrd muito menor (cerca de 5 MB IIRC) que inicializa e funciona perfeitamente.

O problema é que, se eu fizer ssh na caixa e executar o emacs(1), seria bom projetar a versão da GUI de volta para minha área de trabalho normal (que tem muita memória e telas grandes, etc.), mas isso exigiria a instalação do Bibliotecas cliente X no TS412.

Agora não vejo por que só porque tenho o pacote com as bibliotecas do cliente X instaladas, uma cópia precisa ser mantida no initrd, elas não são necessárias durante a inicialização. Existe uma maneira de limitar a entrada de outras coisas no initrd, não apenas nos módulos (que não são os culpados)

Já tentei pesquisas em documentos em busca de guias para limitar o initrd.

debian
  • 2 2 respostas
  • 634 Views

2 respostas

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

    Pode haver um binário destinado a exibir informações gráficas durante a inicialização que extrairia bibliotecas das quais depende no arquivo initramfs .

    Um desses binários disponível na maioria das arquiteturas, inclusive, armelé o label.soplugin fornecido por plymouth-labelcomo plugin para Plymouth para ter uma exibição gráfica com texto durante a inicialização. Este plugin depende de várias bibliotecas X11 e é usado para renderizar texto . Quando este plugin é adicionado ao initramfs, todas as bibliotecas das quais ele depende também são adicionadas para que possa ser usado na fase de inicialização. Isso é anunciado pelas dependências do pacote: plymouth-labeldepende de libcairo2qual depende de vários pacotes da biblioteca X11, incluindo o fornecimento da biblioteca .libx11-6 libX11.so.6

    A adição do gancho initramfs label.soseria /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é uma função shell (fornecida por initramfs-tools-core) que extrairá as dependências sempre que necessário, além de copiar o binário, contando lddpara descobrir o que é necessário.

    então parece que seria puxado apenas quando uma configuração sem texto fosse usada em Plymouth... para exibir texto.

    Como o objetivo principal do QNAP não é o vídeo, deve-se evitar a instalação do plymouth e principalmente deste plugin, evitando que as bibliotecas X11 sejam extraídas do arquivo initramfs .

    Não consigo ver nenhuma outra causa para esse comportamento. Pode haver outro pacote semelhante causando esse comportamento por motivos semelhantes.

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

    Tendo seguido a lógica da resposta útil do @AB. Criei um par rápido e sujo de scripts para ajudar a acompanhar a árvore de dependências. (a resposta AB continua sendo a resposta para a pergunta específica)

    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

relate perguntas

  • Configuração do GRUB para reconhecer diferentes ambientes de desktop (instalações) da mesma distribuição Linux

  • astyle não altera a formatação do arquivo de origem

  • Recebendo e-mail em um novo Debian fresco

  • Debian Stretch: gnome-software segfault em libgs_plugin_systemd-updates.so

  • Como digitar ü no Pinyin IME?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve