諸般の事情でさくらのレンタルサーバ上で Node.js (npm) を使いたくなったので、調べたことやインストール手順を残しておく。
前提:
さくらのレンタルサーバはFreeBSDというOSが使われていて、FreeBSDではパッケージマネージャとしてpackages とports が使えるらしい。
[pinkumohikan ~]$ uname -sFreeBSD
https://docs.freebsd.org/ja/books/handbook/ports/
さくらのレンタルサーバはいわゆる "レンタルサーバ" なので、パッケージをグローバルインストールするのに必要なroot権限は (当然) 利用者には与えられていない。そのためパッケージマネージャを利用してNode.jsをインストールすることは出来ない。
macOSやLinux等のメジャーOS用のバイナリは公開されているが、FreeBSD用の公式Node.jsバイナリは配布されてなかった。
https://nodejs.org/ja/download/

Node.jsはOSSなのでソースコードが公開されている。
https://github.com/nodejs/node
コンパイルに必要なアレコレ (gccとか) はさくらのレンタルサーバへインストールされていたので、Node.jsのソースコードをダウンロードして自分でコンパイルすることでNode.js (npm) を使うことができそう。
今回は「(3) バイナリをコンパイルして使う」の方法でNode.jsを使えるようにしていく。
標準で使えるOpenSSLはバージョンが古くてNode.jsのビルドに使えない (※) ため、新しめなOpenSSLをダウンロード & コンパイルする。
[pinkumohikan ~/openssl]$ curl -sSf https://www.openssl.org/source/openssl-1.1.1o.tar.gz -O[pinkumohikan ~/openssl]$ tar zxf openssl-1.1.1o.tar.gz[pinkumohikan ~/openssl-1.1.1o]$ ./config --prefix=/home/pinkumohikan/openssl --openssldir=/home/pinkumohikan/local/openssl[pinkumohikan ~/openssl-1.1.1o]$ make[pinkumohikan ~/openssl-1.1.1o]$ make install
2022年5月時点の推奨LTSはNode.js 16系だが、Node.js 16からPython 3必須になる問題 (※) があって都合が悪いので今回はNode.js 14を使うことにする。
https://nodejs.org/ja/download/
[pinkumohikan ~]$ curl -sSf https://nodejs.org/dist/v14.9.0/node-v14.9.0.tar.gz -O[pinkumohikan ~]$ tar zxf node-v14.9.0.tar.gz[pinkumohikan ~/node-v14.9.0]$ ./configure --shared-openssl --shared-openssl-includes=/home/pinkumohikan/openssl/include/ --shared-openssl-libpath=/home/pinkumohikan/openssl/lib/Package openssl was not found in the pkg-config search path.Perhaps you should add the directory containing `openssl.pc'to the PKG_CONFIG_PATH environment variablePackage 'openssl', required by 'virtual:world', not foundNode.js configure: Found Python 2.7.18...INFO: configure completed successfully
[pinkumohikan ~/node-v14.9.0]$ export LD_LIBRARY_PATH=/home/pinkumohikan/openssl/lib[pinkumohikan ~/node-v14.9.0]$ nohup make install DESTDIR=/home/pinkumohikan/local PREFIX=
make install には数十分かかるのでコネクション切断に備えてnohupつけておくのがオススメ。
モノができたらあとはパスを通すだけ。
[pinkumohikan ~/node-v14.9.0]$ echo "export PATH=$PATH:~/local/binexport LD_LIBRARY_PATH=/home/pinkumohikan/openssl/lib" >> .bashrc
ログインし直すかsource .bashrc して
[pinkumohikan ~]$ node -vv14.9.0[pinkumohikan ~]$ npm -v6.14.8
完。
標準のOpenSSLを利用してNode.jsをコンパイルしようとすると下記のようなエラーが出る。
[pinkumohikan ~/node-v14.9.0]$ make...../src/node_crypto.h:72:46: error: use of undeclared identifier 'EVP_MD_CTX_free'; did you mean 'EVP_MD_CTX_create'?using EVPMDPointer = DeleteFnPtr<EVP_MD_CTX, EVP_MD_CTX_free>; ^~~~~~~~~~~~~~~ EVP_MD_CTX_create
[pinkumohikan ~]$ openssl versionOpenSSL 1.0.2o-freebsd 27 Mar 2018
GitHub Issueを軽く読んだ感じOpenSSLが古いせいらしい。
https://github.com/nodejs/node/issues/22025
さくらのレンタルサーバではPython 2系までしか使えないので、Python 3系が必須となるNode.js 16系は入れられない。
[pinkumohikan ~/node-v16.15.0]$ ./configureNode.js configure: Found Python 2.7.18...Please use python3.10 or python3.9 or python3.8 or python3.7 or python3.6.
Node.js 14系までならPython 2系でいける。
ただ、Python 3を自前コンパイルすればNode.js 16系もいけそうな気がするので誰か試してみて欲しい。
https://www.python.org/downloads/
node コマンド実行時に「libssl.so.1.1見つからんのやが」って怒られたときに参考になった引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。