내가 가지고 있는 겉보기에 공격적이지 않은 스크립트에 이상한 일이 일어나고 있습니다. 일련의 파일을 시스템의 일부 위치에 복사해야 하며 이를 수행하기 위한 다음 스크립트가 있습니다.
#!/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
스크립트는 내용이 다음과 같은 파일에서 파일과 위치를 가져옵니다 dependencies.txt
.
/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
해당 줄을 주석 처리하면 다음과 같은 결과를 cp ${LIBRARY} ${LIB_PATH}
얻습니다.
그래서 나는 파일 이름과 경로를 올바르게 얻고 있다는 것을 알고 있습니다. 해당 줄의 주석 처리를 제거 cp ${LIBRARY} ${LIB_PATH}
하고 스크립트를 실행하면 sudo
스크립트가 내 시스템을 파괴합니다.(그런데 VM에서 테스트하고 있기 때문에 이것은 무해합니다). 이렇게 하면 화면이 검게 변하고 VM 창을 강제로 닫아야 합니다. 그런 다음 VM을 다시 실행하려고 하면 다음과 같은 결과가 나타납니다.
그리고 UBUNTU를 완전히 다시 설치해야 합니다.
cp
각 파일에 대해 명령줄에서 수동으로 실행할 수 있고 아무 문제도 발생하지 않고 파일이 대상에 복사되기 때문에 이런 일이 발생하는 이유가 궁금합니다 .
편집하다:
댓글 중 하나와XY 문제내가 해결하려고 하는 문제는 내 컴퓨터에 기본 nodejs 모듈을 만들고 있는데, node v12.18.1
이 모듈은 컴퓨터에서 사용해야 하며 node v 10.19.0
대상 컴퓨터에서 노드 버전을 업데이트하거나 다른 컴퓨터를 설치할 수 없다는 것입니다. 종속성을 포함하는 패키지.
실행하면 ldd mymodule.node
다음을 얻습니다.
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)
이것이 바로 제가 이 질문에서 하려는 일을 하려는 이유입니다. 여기서 진짜 질문은 다음과 같습니다..node
대상에서 아무것도 업데이트하지 않고도 모듈을 배포할 수 있도록 모듈 과 함께 이러한 종속성을 포함하려면 어떻게 해야 합니까 ?
나는 이 모든 것을 모듈에 연결하고 모든 것을 포함하고 시스템 라이브러리에 의존하지 않는 단 하나의 .node 파일만 갖는 것을 선호하지만 그것이 가능하다고 생각하지 않습니다. 그렇지 않습니까?
답변1
"mkdir -p /usr/local/lib/nodejs" 디렉토리를 생성하고 LIBPATH를 "export LIBPATH=/usr/local/lib/nodejs/"로 설정하는 것을 제외하고 다시 시도할 수 있습니다. 그러나 트리거를 당기기 전에 Linux에 nodejs를 설치하는 방법을 읽어보는 것이 좋습니다. 예를 들어 "/usr/local에 설치를 수행하는"https://github.com/nodejs/help/wiki/Installation#how-to-install-nodejs-via-binary-archive-on-linux"를 참조하십시오. /lib/nodejs". 디렉토리를 생성한 후 해야 할 유일한 작업은 바이너리를 다운로드하여 "/usr/local/lib/nodejs" 디렉토리에 추출하는 것입니다.