一見無害に見える私のスクリプトに奇妙なことが起こっています。一連のファイルを自分のシステム上の特定の場所にコピーする必要があり、これを行うための次のスクリプトがあります。
#!/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
スクリプトは私のシステムを中断します。(ところで、仮想マシンでテスト中なので無害です。)。これにより、画面が黒くなり、仮想マシンウィンドウを強制的に閉じる必要があります。その後、仮想マシンを再実行しようとすると、次のメッセージが表示されます。
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をインストールする方法をお読みください。たとえば、「https://github.com/nodejs/help/wiki/Installation#how-to-install-nodejs-via-binary-archive-on-linux」を参照してください。 "/usr/local"で行われます。 /lib/nodejs". ディレクトリが作成されたら、必要な唯一の作業は、バイナリをダウンロードして"/usr/local/lib/nodejs"ディレクトリに抽出することです。