HTML/CSS/JavaScriptの練習 local Webサーバ Node.js Inst2

https://seesaawiki.jp/lifewithslackzaurus/d/HTML/CSS/JavaScript%a4%ce%ce%fd%bd%ac%20local%20Web%a5%b5%a1%bc%a5%d0%20Node%2ejs の続き。
SoftwareDesignの記事を参考に、Node.jsの動作環境をmakeしてみる。

ライブラリはできればバラで使いたいので、nodejs-4ではなくnodeをmakeする。
と思ったが、SDの記事と同じnodejs-6.4.0をmakeすることにした。

node-v6.4.0:
(https://slackbuilds.org/slackbuilds/14.1/development/nodejs/nodejs.SlackBuild を参考に、)
(https://nodejs.org/dist/v6.4.0/node-6.4.0.tar.gz をDLしておく)
$ tar xzf /mnt/card/slackware-14.1/source/d/nodejs/node-v6.4.0.tar.gz
$ cd node-v6.4.0
\ Fix man page path.
$ sed -i ‘s|share/||’ tools/install.py
$ sed -i ‘/var manRoot/ s/’share’,//’ deps/npm/lib/{,un}build.js (var_manRootの行の’share’,
\ を外したいのだろうが、うまくいってないので手動で実行した)
\ Fix libdir for 64-bit.
($ sed -i “s|lib/|lib${LIBDIRSUFFIX}/|g” tools/install.py 実行しなかった)
($ sed -i “s/’lib’/’lib${LIBDIRSUFFIX}’/” lib/module.js 実行しなかった)
($ sed -i “s|\”lib\”|\”lib${LIBDIRSUFFIX}\”|” deps/npm/lib/npm.js 実行しなかった)
$ CFLAGS=”-O2 -march=armv5te” CXXFLAGS=”-O2 -march=armv5te” \
\ ./configure –prefix=/usr (–disable-static 実行しなかった) \
\ –with-arm-float-abi=soft –shared-zlib –shared-openssl (!=v1.0.2、後から判明)
\
\creating ./icu_config.gypi
\* Using ICU in deps/icu-small
\creating ./icu_config.gypi
\{ ‘target_defaults’: { ‘cflags’: [],
\ ‘default_configuration’: ‘Release’,
\ ‘defines’: [],
\ ‘include_dirs’: [],
\ ‘libraries’: [‘-lz’, ‘-lssl’, ‘-lcrypto’]},
\ ‘variables’: { ‘arm_float_abi’: ‘soft’,
\ ‘arm_fpu’: ‘vfp’,
\ ‘arm_thumb’: 0,
\ ‘arm_version’: ‘default’,
\ ‘asan’: 0,
\ ‘debug_devtools’: ‘node’,
\ ‘host_arch’: ‘arm’,
\ ‘icu_data_file’: ‘icudt57l.dat’,
\ ‘icu_data_in’: ‘../../deps/icu-small/source/data/in/icudt57l.dat’,
\ ‘icu_endianness’: ‘l’,
\ ‘icu_gyp_path’: ‘tools/icu/icu-generic.gyp’,
\ ‘icu_locales’: ‘en,root’,
\ ‘icu_path’: ‘deps/icu-small’,
\ ‘icu_small’: ‘true’,
\ ‘icu_ver_major’: ’57’,
\ ‘node_byteorder’: ‘little’,
\ ‘node_enable_d8’: ‘false’,
\ ‘node_enable_v8_vtunejit’: ‘false’,
\ ‘node_install_npm’: ‘true’,
\ ‘node_module_version’: 48,
\ ‘node_no_browser_globals’: ‘false’,
\ ‘node_prefix’: ‘/usr’,
\ ‘node_release_urlbase’: ”,
\ ‘node_shared’: ‘false’,
\ ‘node_shared_cares’: ‘false’,
\ ‘node_shared_http_parser’: ‘false’,
\ ‘node_shared_libuv’: ‘false’,
\ ‘node_shared_openssl’: ‘true’,
\ ‘node_shared_zlib’: ‘true’,
\ ‘node_tag’: ”,
\ ‘node_use_bundled_v8’: ‘true’,
\ ‘node_use_dtrace’: ‘false’,
\ ‘node_use_etw’: ‘false’,
\ ‘node_use_lttng’: ‘false’,
\ ‘node_use_openssl’: ‘true’,
\ ‘node_use_perfctr’: ‘false’,
\ ‘node_use_v8_platform’: ‘true’,
\ ‘openssl_fips’: ”,
\ ‘openssl_no_asm’: 0,
\ ‘shlib_suffix’: ‘so.48’,
\ ‘target_arch’: ‘arm’,
\ ‘uv_parent_path’: ‘/deps/uv/’,
\ ‘uv_use_dtrace’: ‘false’,
\ ‘v8_enable_gdbjit’: 0,
\ ‘v8_enable_i18n_support’: 1,
\ ‘v8_inspector’: ‘true’,
\ ‘v8_no_strict_aliasing’: 1,
\ ‘v8_optimized_debug’: 0,
\ ‘v8_random_seed’: 0,
\ ‘v8_use_snapshot’: ‘true’,
\ ‘want_separate_host_toolset’: 0}}
\creating ./config.gypi
\creating ./config.mk
\
$ make CFLAGS=”-O2 -march=armv5te” CXXFLAGS=”-O2 -march=armv5te”
なんと92時間経過。しかもエラー。
LD_LIBRARY_PATH=/mnt2/myproj/armedslack/node-v6.4.0/out/Release/lib.host:/mnt2/myproj/armedslack/node-v6.4.0/out/Release/lib.target:$LD_LIBRARY_PATH; export LD_LIBRARY_PATH; cd ../deps/v8/tools/gyp; mkdir -p /mnt2/myproj/armedslack/node-v6.4.0/out/Release/obj.target/v8_snapshot/geni; “/mnt2/myproj/armedslack/node-v6.4.0/out/Release/mksnapshot” –log-snapshot-positions –logfile “/mnt2/myproj/armedslack/node-v6.4.0/out/Release/obj.target/v8_snapshot/geni/snapshot.log” –startup_src “/mnt2/myproj/armedslack/node-v6.4.0/out/Release/obj.target/v8_snapshot/geni/snapshot.cc” “”
/bin/sh: line 1: 26403 Segmentation fault “/mnt2/myproj/armedslack/node-v6.4.0/out/Release/mksnapshot” –log-snapshot-positions –logfile “/mnt2/myproj/armedslack/node-v6.4.0/out/Release/obj.target/v8_snapshot/geni/snapshot.log” –startup_src “/mnt2/myproj/armedslack/node-v6.4.0/out/Release/obj.target/v8_snapshot/geni/snapshot.cc” “”
make[1]: *** [/mnt2/myproj/armedslack/node-v6.4.0/out/Release/obj.target/v8_snapshot/geni/snapshot.cc] Error 139
make[1]: Leaving directory `/mnt2/myproj/armedslack/node-v6.4.0/out’
make: *** [node] Error 2
v8 snapshot Segmentation fault、でググった:
https://github.com/nodejs/node-v0.x-archive/issues/3538
92時間なんて待ってられない。cleanなしで再configureした:
$ CFLAGS=”-O2 -march=armv5te” CXXFLAGS=”-O2 -march=armv5te” \
\ ./configure –prefix=/usr (–disable-static 実行しなかった) \
\ –with-arm-float-abi=soft –shared-zlib –shared-openssl (!=v1.0.2、後から判明)
\ –without-snapshot
(configの出力は省略した)
$ make CFLAGS=”-O2 -march=armv5te” CXXFLAGS=”-O2 -march=armv5te”
9時間経過。またエラー。
../src/node_crypto.cc: In instantiation of ‘int node::crypto::SSLWrap<Base>::SetCACerts(node::crypto::SecureContext*) [with Base = node::crypto::Connection]’:
../src/node_crypto.cc:2448:16: required from ‘void node::crypto::SSLWrap<Base>::SetSNIContext(node::crypto::SecureContext*) [with Base = node::crypto::Connection]’
../src/node_crypto.cc:2781:31: required from here
../src/node_crypto.cc:2454:78: error: ‘SSL_set1_verify_cert_store’ was not declared in this scope
\ int err = SSL_set1_verify_cert_store(ssl_, SSL_CTX_get_cert_store(sc->ctx_));
make[1]: *** [/mnt2/myproj/armedslack/node-v6.4.0/out/Release/obj.target/node/src/node_crypto.o] Error 1
make[1]: Leaving directory `/mnt2/myproj/armedslack/node-v6.4.0/out’
make: *** [node] Error 2
\–shared-openssl を外した:
$ CFLAGS=”-O2 -march=armv5te” CXXFLAGS=”-O2 -march=armv5te” \
\ ./configure –prefix=/usr (–disable-static 実行しなかった) \
\ –with-arm-float-abi=soft –shared-zlib –without-snapshot
(configの出力は省略した)
$ make CFLAGS=”-O2 -march=armv5te” CXXFLAGS=”-O2 -march=armv5te”
3.5時間経過。make終了。
$ mkdir ~/package-nodejs
$ make install DESTDIR=~/package-nodejs CFLAGS=”-O2 -march=armv5te” CXXFLAGS=”-O2 -march=armv5te” (エラーがなければ以降sudoで実行)
$ rm -rf ~/package-nodejs
$ sudo mkdir ~/package-nodejs
$ sudo chown -R root:root ../node-v6.4.0
$ sudo make install DESTDIR=~/package-nodejs CFLAGS=”-O2 -march=armv5te” CXXFLAGS=”-O2 -march=armv5te”
$ cd ~/package-nodejs
$ find usr -print0 | xargs -0 file | grep -e “executable” -e “shared object” | grep ARM
$ sudo strip –strip-unneeded usr/bin/node (stripしても18MB弱もある)
$ ls -l usr/bin/
\-rwxr-xr-x 1 root root 17790956 Aug 25 00:00 node
\lrwxrwxrwx 1 root root 38 Aug 25 00:00 npm -> ../lib/node_modules/npm/bin/npm-cli.js
$ sudo gzip -9 usr/man/man?/*.?
\ Add bash completion file for npm.
$ sudo install -D -m 644 https://slackbuilds.org/slackbuilds/14.1/development/nodejs/npm.sh usr/share/bash-completion/completions/npm
$ sudo find usr -name “.git*” -exec rm -f \{\} \;
\ Set NODE_PATH to look for globally installed modules.
$ sudo mkdir -p etc/profile.d
$ sudo sh -c ‘cat > etc/profile.d/node.csh << EOF
#!/bin/csh
setenv NODE_PATH /usr/lib/node_modules
EOF’
$ sudo sh -c ‘cat > etc/profile.d/node.sh << EOF
#!/bin/sh
export NODE_PATH=/usr/lib/node_modules
EOF’
$ sudo chmod 0755 etc/profile.d/*
$ sudo mkdir -p usr/doc/nodejs-6.4.0
$ sudo cp -a ~/node-v6.4.0/{AUTHORS,CHANGELOG.md,COLLABORATOR_GUIDE.md,CONTRIBUTING.md,
GOVERNANCE.md,LICENSE,README.md,ROADMAP.md,WORKING_GROUPS.md} usr/doc/nodejs-6.4.0
$ sudo cp -a https://slackbuilds.org/slackbuilds/14.1/development/nodejs/nodejs.SlackBuild usr/doc/nodejs-6.4.0.SlackBuild
$ sudo mkdir -p install
$ sudo cp -a https://slackbuilds.org/slackbuilds/14.1/development/nodejs/slack-desc install/
$ sudo makepkg ../nodejs-6.4.0-arm-1.tgz
WARNING: zero length file usr/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/generator/_\_init_\_.py
(usr/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/_\_init_\_.pyは0ではない)
$ sudo installpkg ../nodejs-6.4.0-arm-1.tgz

起動確認:
$ sudo installpkg /mnt/card/slackware-14.1/slackware/n/curl-7.31.0-arm-1.tgz
$ sudo busybox ifconfig lo 127.0.0.1 netmask 255.0.0.0
$ node app.js
Segmentation fault

node-v4.2.4:
メモ省略。同じような感じでダメだった。configはsoft,vfpを設定した。

node-v6.4.0:(PC/AT機)
Slack-14.1$ CFLAGS=”-O2 -march=i686 -mtune=i686″ CXXFLAGS=”-O2 -march=i686 -mtune=i686″ \
\ ./configure –prefix=/usr (–disable-static 実行しなかった) \
\ –shared-zlib –without-snapshot

node-v6.17.1:(PC/AT機)
Slack-14.1$ CFLAGS=”-O2 -march=i686 -mtune=i686″ CXXFLAGS=”-O2 -march=i686 -mtune=i686″ \
\ ./configure –prefix=/usr (–disable-static 実行しなかった) \
\ –shared-zlib –without-snapshot

node-v12.22.1:(PC/AT機)
(https://slackbuilds.org/slackbuilds/14.2/development/nodejs/nodejs.SlackBuild を参考に、)
sed -i “s|math.h|cmath|” src/node_crypto.cc
Slack-14.1$ CFLAGS=”-O2 -march=i686 -mtune=i686″ CXXFLAGS=”-O2 -march=i686 -mtune=i686″ \
\ ./configure –prefix=/usr (–disable-static 実行しなかった) \
\ –shared-zlib –without-snapshot
WARNING: C++ compiler (CXX=g++, 4.8.2) too old, need g++ 6.3.0 or clang++ 8.0.0
WARNING: warnings were emitted in the configure phase
INFO: configure completed successfully
Slack-14.1$ make CFLAGS=”-O2 -march=i686 -mtune=i686″ CXXFLAGS=”-O2 -march=i686 -mtune=i686″
g++ -o ~/myproj/slackware/14.1/node-v12.22.1/out/Release/obj.target/icuucx/deps/icu-small/source/common/uarrsort.o ../deps/icu-small/source/common/uarrsort.cpp ‘-DV8_DEPRECATION_WARNINGS’ ‘-DV8_IMMINENT_DEPRECATION_WARNINGS’ ‘-D__STDC_FORMAT_MACROS’ ‘-DOPENSSL_NO_PINSHARED’ ‘-DOPENSSL_THREADS’ ‘-DU_COMMON_IMPLEMENTATION=1’ ‘-DU_ATTRIBUTE_DEPRECATED=’ ‘-D_CRT_SECURE_NO_DEPRECATE=’ ‘-DU_STATIC_IMPLEMENTATION=1’ ‘-DUCONFIG_NO_SERVICE=1’ ‘-DU_ENABLE_DYLOAD=0’ ‘-DU_HAVE_STD_STRING=1’ ‘-DUCONFIG_NO_BREAK_ITERATION=0’ -I../deps/icu-small/source/common -pthread -Wall -Wextra -Wno-unused-parameter -m32 -Wno-deprecated-declarations -Wno-strict-aliasing -O3 -fno-omit-frame-pointer -fno-exceptions -std=gnu++1y -frtti -MMD -MF ~/myproj/slackware/14.1/node-v12.22.1/out/Release/.deps/~/myproj/slackware/14.1/node-v12.22.1/out/Release/obj.target/icuucx/deps/icu-small/source/common/uarrsort.o.d.raw -O2 -march=i686 -mtune=i686 -c
../deps/icu-small/source/common/uarrsort.cpp: In function ‘constexpr int32_t sizeInMaxAlignTs(int32_t)’:
../deps/icu-small/source/common/uarrsort.cpp:40:34: error: ‘max_align_t’ is not a member of ‘std’
\ return (sizeInBytes + sizeof(std::max_align_t) – 1) / sizeof(std::max_align_t);
\—
make[1]: *** [~/myproj/slackware/14.1/node-v12.22.1/out/Release/obj.target/icuucx/deps/icu-small/source/common/uarrsort.o] Error 1
rm 799bb967f9c043d46fdb7fe027bf8695670d24fb.intermediate
make[1]: Leaving directory `~/myproj/slackware/14.1/node-v12.22.1/out’
make: *** [node] Error 2
(やっぱ、Slack-14.2でやるか)
https://seesaawiki.jp/lifewithslackarmzaurus_15_0/d/HTML/CSS/JavaScript%a4%ce%ce%fd%bd%ac%20local%20Web%a5%b5%a1%bc%a5%d0%20Node%2ejs

node-v10.24.1:(PC/AT機)
このパターンもやってみたが、ダメだった。ログはそのうちメモる。

参考書籍:
Software Design 2016年10月号 Webサーバはなぜ動くのか? HTTP,CGI,サーブレット,Node.js,Railsを一挙解説
https://gihyo.jp/magazine/SD/archive/2016/201610

参考URL:
https://slackbuilds.org/repository/13.1/network/node/ node-0.2.6
Node is a toolkit for writing extremely high performance non-blocking event
driven network servers in JavaScript. Node is built on V8 JavaScript engine.
https://slackbuilds.org/repository/13.37/network/node/ node-0.6.17
https://slackbuilds.org/repository/14.0/network/node/ node-0.10.15
https://slackbuilds.org/repository/14.1/network/node/ node-0.12.7
Keywords: js,ssjs,server side,server-side,javascript,async,node
https://jxck.hatenablog.com/entry/20111112/1321079097 (javascript ssjsでググった)
クライアントとサーバの両方で使える JS コードの書き方
https://programmer-life.work/programming-terms/csjs-ssjs (javascript ssjsでググった)
CSJSとは?SSJSとは?エンジニアの話

https://slackbuilds.org/repository/14.1/development/nodejs/ nodejs-4.2.4
WARNING: nodejs will conflict with node.
Keywords: nodejs,iojs,javascript
https://slackbuilds.org/repository/14.1/development/npm2tgz/ npm2tgz-1.3.2.1
https://www.publickey1.jp/blog/15/nodejsiojsnodejs_40v8_45ecmascript_6.html
Node.jsとio.jsが統合された「Node.js 4.0」2015.09
https://nodejs.org/dist/v6.4.0/ nodejs-6.4.0
https://slackbuilds.org/repository/14.2/development/nodejs/ nodejs-12.22.1

 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です