Algo estranho está acontecendo com um roteiro aparentemente inofensivo que tenho. Preciso copiar uma série de arquivos para alguns locais do sistema e tenho o seguinte script para fazer isso.
#!/bin/bash
# Get all the files from the file
LINES=$(cat Release-Nodejs/dependencies.txt)
# Copy each file to its location as indicated in the file
for LINE in ${LINES}
do
LIBRARY=$(basename ${LINE})
LIBRARY=Release-Nodejs/${LIBRARY}
LIB_PATH=$(dirname ${LINE})
echo -e "Copying \e[38;5;10m${LIBRARY}\e[0m to \e[38;5;11m${LIB_PATH}\e[0m"
cp ${LIBRARY} ${LIB_PATH}
done
O script está obtendo os arquivos e locais do dependencies.txt
arquivo cujo conteúdo é:
/usr/lib/x86_64-linux-gnu/libnode.so.72
/lib/x86_64-linux-gnu/libgcc_s.so.1
/lib/x86_64-linux-gnu/libpthread.so.0
/lib/x86_64-linux-gnu/libc.so.6
/lib/x86_64-linux-gnu/libz.so.1
/usr/lib/x86_64-linux-gnu/libbrotlidec.so.1
/usr/lib/x86_64-linux-gnu/libbrotlienc.so.1
/usr/lib/x86_64-linux-gnu/libcares.so.2
/usr/lib/x86_64-linux-gnu/libnghttp2.so.14
/usr/lib/x86_64-linux-gnu/libcrypto.so.1.1
/usr/lib/x86_64-linux-gnu/libssl.so.1.1
/usr/lib/x86_64-linux-gnu/libicui18n.so.67
/usr/lib/x86_64-linux-gnu/libicuuc.so.67
/lib/x86_64-linux-gnu/libdl.so.2
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
/lib/x86_64-linux-gnu/libm.so.6
/usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1
/usr/lib/x86_64-linux-gnu/libicudata.so.67
Se eu comentar a cp ${LIBRARY} ${LIB_PATH}
linha, recebo:
Então eu sei que estou obtendo os nomes dos arquivos e caminhos corretamente. É quando eu descomento a cp ${LIBRARY} ${LIB_PATH}
linha e executo o script sudo
que o script destrói meu sistema(a propósito, isso é inofensivo porque estou testando em uma VM). Ao fazer isso, a tela fica preta e tenho que forçar o fechamento da janela da VM. Então, quando tento executar a VM novamente, recebo isto:
E eu tenho que reinstalar completamente o UBUNTU.
Eu me pergunto por que isso está acontecendo, já que posso executar manualmente na cp
linha de comando para cada arquivo e nada de ruim acontece, os arquivos apenas são copiados para seus destinos.
EDITAR:
Como apontado em um dos comentários e noProblema XY, o problema que estou tentando resolver é que estou criando um módulo nodejs nativo em minha máquina que tem node v12.18.1
e deve ser usado em uma máquina com node v 10.19.0
e não consigo atualizar a versão do nó na máquina de destino ou instalar outro pacotes que incluem as dependências.
Quando executo ldd mymodule.node
recebo:
linux-vdso.so.1 (0x00007ffe878c6000)
libnode.so.72 => /usr/lib/x86_64-linux-gnu/libnode.so.72 (0x00007f9bd34fb000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f9bd34e0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9bd34be000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9bd32d4000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9bd5b1e000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9bd32b7000)
libbrotlidec.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007f9bd32a9000)
libbrotlienc.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlienc.so.1 (0x00007f9bd3215000)
libcares.so.2 => /usr/lib/x86_64-linux-gnu/libcares.so.2 (0x00007f9bd31fe000)
libnghttp2.so.14 => /usr/lib/x86_64-linux-gnu/libnghttp2.so.14 (0x00007f9bd31d2000)
libcrypto.so.1.1 => /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1 (0x00007f9bd2ef5000)
libssl.so.1.1 => /usr/lib/x86_64-linux-gnu/libssl.so.1.1 (0x00007f9bd2e61000)
libicui18n.so.67 => /usr/lib/x86_64-linux-gnu/libicui18n.so.67 (0x00007f9bd2b4f000)
libicuuc.so.67 => /usr/lib/x86_64-linux-gnu/libicuuc.so.67 (0x00007f9bd2961000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9bd295b000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f9bd277a000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9bd262b000)
libbrotlicommon.so.1 => /usr/lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007f9bd2608000)
libicudata.so.67 => /usr/lib/x86_64-linux-gnu/libicudata.so.67 (0x00007f9bd0aed000)
E é por isso que estou tentando fazer o que estou tentando fazer nesta questão. Portanto, a verdadeira questão aqui é;Como posso incluir essas dependências junto com o .node
módulo para poder implantá-lo sem precisar atualizar nada no destino?
Eu preferiria vincular tudo isso ao módulo e ter apenas um arquivo .node que inclua tudo e não dependa de bibliotecas do sistema, mas não acho que isso seja possível, ou é?
Responder1
Você pode tentar novamente, exceto criar o diretório "mkdir -p /usr/local/lib/nodejs" e definir seu LIBPATH como "export LIBPATH=/usr/local/lib/nodejs/". No entanto, eu recomendo fortemente que você leia como instalar o nodejs no Linux antes de puxar o gatilho. Consulte "https://github.com/nodejs/help/wiki/Installation#how-to-install-nodejs-via-binary-archive-on-linux", por exemplo - que faz a instalação em "/usr/local /lib/nodejs". O único trabalho pesado que você precisa fazer depois de criar o diretório é baixar o binário e extraí-lo para o diretório "/usr/local/lib/nodejs"