staltz / easy-ssb-pub

An easy-to-host server that runs an SSB "Pub"
GNU Affero General Public License v3.0
209 stars 35 forks source link

easy-ssb-pub on FreeBSD 11.0 #13

Open ableyjoe opened 7 years ago

ableyjoe commented 7 years ago

I don't know enough about npm specifically or node in general to have been able to figure these (minor-looking) issues out, but I thought I'd leave these notes in case someone else wants to pick it up.

Starting from a bare, fresh FreeBSD 11.0 environment:

# uname -a
FreeBSD sbot.hopcount.ca 11.0-RELEASE-p8 FreeBSD 11.0-RELEASE-p8 #0: Wed Feb 22 06:12:04 UTC 2017     root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC  amd64
# pkg info
pkg-1.10.1                     Package manager
# 

Install the various prerequisite packages using pkg:

# pkg update
# pkg install curl libtool autoconf git node6 npm3 leveldb

Clone the easy-ssb-pub repo as an unprivileged user:

# su - jabley
$ git clone https://github.com/staltz/easy-ssb-pub.git

Use npm to install easy-ssb-pub -- output included this time, since this is where the fun starts. Long paste; skip to the end for weak commentry.

$ cd easy-ssb-pub/
$ ls
Dockerfile      package.json        stub-typings
LICENSE         pages           tests
README.md       screenshot.png      tsconfig.json
docker-compose.yaml src         tslint.json
$ npm install
npm WARN prefer global node-gyp@3.6.0 should be installed with -g
npm WARN prefer global node-ninja@1.0.2 should be installed with -g

> utp-native@1.5.0 install /home/jabley/easy-ssb-pub/node_modules/utp-native
> node-gyp-build

gmake: Entering directory '/home/jabley/easy-ssb-pub/node_modules/utp-native/build'
  CXX(target) Release/obj.target/libutp/deps/libutp/utp_internal.o
../deps/libutp/utp_internal.cpp:752:54: error: invalid suffix on literal; C++11
      requires a space between literal and identifier
      [-Wreserved-user-defined-literal]
        log(UTP_LOG_DEBUG, "send %s len:%u id:%u timestamp:"I64u" reply_...
                                                            ^

../deps/libutp/utp_internal.cpp:1783:76: error: invalid suffix on literal; C++11
      requires a space between literal and identifier
      [-Wreserved-user-defined-literal]
  ..."Got %s. seq_nr:%u ack_nr:%u state:%s timestamp:"I64u" reply_micro:%u"
                                                      ^

../deps/libutp/utp_internal.cpp:1969:34: warning: comparison of integers of
      different signs: 'int' and 'uint32' (aka 'unsigned int') [-Wsign-compare]
                if (conn->mtu_probe_seq && seq == conn->mtu_probe_seq) {
                                           ~~~ ^  ~~~~~~~~~~~~~~~~~~~
1 warning and 2 errors generated.
gmake: *** [deps/libutp.target.mk:101: Release/obj.target/libutp/deps/libutp/utp_internal.o] Error 1
gmake: Leaving directory '/home/jabley/easy-ssb-pub/node_modules/utp-native/build'
gyp ERR! build error 
gyp ERR! stack Error: `gmake` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack     at emitTwo (events.js:106:13)
gyp ERR! stack     at ChildProcess.emit (events.js:191:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
gyp ERR! System FreeBSD 11.0-RELEASE-p8
gyp ERR! command "/usr/local/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/jabley/easy-ssb-pub/node_modules/utp-native
gyp ERR! node -v v6.10.1
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok 

> leveldown@1.6.0 install /home/jabley/easy-ssb-pub/node_modules/leveldown
> prebuild-install || node-gyp rebuild

prebuild-install info begin Prebuild-install version 2.1.2
prebuild-install info looking for local prebuild @ prebuilds/leveldown-v1.6.0-node-v48-freebsd-x64.tar.gz
prebuild-install info looking for cached prebuild @ /home/jabley/.npm/_prebuilds/https-github.com-level-leveldown-releases-download-v1.6.0-leveldown-v1.6.0-node-v48-freebsd-x64.tar.gz
prebuild-install http request GET https://github.com/level/leveldown/releases/download/v1.6.0/leveldown-v1.6.0-node-v48-freebsd-x64.tar.gz
prebuild-install http 404 https://github.com/level/leveldown/releases/download/v1.6.0/leveldown-v1.6.0-node-v48-freebsd-x64.tar.gz
prebuild-install WARN install No prebuilt binaries found (target=6.10.1 runtime=node arch=x64 platform=freebsd)
gmake: Entering directory '/home/jabley/easy-ssb-pub/node_modules/leveldown/build'
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/db/builder.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/db/db_impl.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/db/db_iter.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/db/filename.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/db/dbformat.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/db/log_reader.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/db/log_writer.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/db/memtable.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/db/repair.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/db/table_cache.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/db/version_edit.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/db/version_set.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/db/write_batch.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/helpers/memenv/memenv.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/table/block.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/table/block_builder.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/table/filter_block.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/table/format.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/table/iterator.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/table/merger.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/table/table.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/table/table_builder.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/table/two_level_iterator.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/util/arena.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/util/bloom.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/util/cache.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/util/coding.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/util/comparator.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/util/crc32c.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/util/env.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/util/filter_policy.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/util/hash.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/util/logging.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/util/options.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/util/status.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/port/port_posix.o
  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.19/util/env_posix.o
  AR(target) Release/obj.target/deps/leveldb/leveldb.a
  COPY Release/leveldb.a
  CXX(target) Release/obj.target/snappy/deps/snappy/snappy-1.1.1/snappy-sinksource.o
  CXX(target) Release/obj.target/snappy/deps/snappy/snappy-1.1.1/snappy-stubs-internal.o
  CXX(target) Release/obj.target/snappy/deps/snappy/snappy-1.1.1/snappy.o
  AR(target) Release/obj.target/deps/snappy/snappy.a
  COPY Release/snappy.a
  CXX(target) Release/obj.target/leveldown/src/batch.o
  CXX(target) Release/obj.target/leveldown/src/batch_async.o
  CXX(target) Release/obj.target/leveldown/src/database.o
  CXX(target) Release/obj.target/leveldown/src/database_async.o
  CXX(target) Release/obj.target/leveldown/src/iterator.o
  CXX(target) Release/obj.target/leveldown/src/iterator_async.o
  CXX(target) Release/obj.target/leveldown/src/leveldown.o
  CXX(target) Release/obj.target/leveldown/src/leveldown_async.o
  SOLINK_MODULE(target) Release/obj.target/leveldown.node
  COPY Release/leveldown.node
gmake: Leaving directory '/home/jabley/easy-ssb-pub/node_modules/leveldown/build'

> sodium-prebuilt@1.0.22 install /home/jabley/easy-ssb-pub/node_modules/sodium-prebuilt
> prebuild --install --preinstall make

prebuild WARN install No prebuilt binaries found (target=v6.10.1 arch=x64 platform=freebsd)
make: "/home/jabley/easy-ssb-pub/node_modules/sodium-prebuilt/Makefile" line 14: Missing dependency operator
make: "/home/jabley/easy-ssb-pub/node_modules/sodium-prebuilt/Makefile" line 17: Need an operator
make: Fatal errors encountered -- cannot continue
make: stopped in /home/jabley/easy-ssb-pub/node_modules/sodium-prebuilt
prebuild ERR! build Error: make  failed with exit code 1
prebuild ERR! build     at Object.exports.spawnFailed (/home/jabley/easy-ssb-pub/node_modules/prebuild/error.js:31:10)
prebuild ERR! build     at ChildProcess.<anonymous> (/home/jabley/easy-ssb-pub/node_modules/prebuild/util.js:116:14)
prebuild ERR! build     at emitTwo (events.js:106:13)
prebuild ERR! build     at ChildProcess.emit (events.js:191:7)
prebuild ERR! build     at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
easy-ssb-pub@2.0.0 /home/jabley/easy-ssb-pub
+-- @types/debug@0.0.29 
+-- @types/express@4.0.35 
| +-- @types/express-serve-static-core@4.0.44 
| `-- @types/serve-static@1.7.31 
|   `-- @types/mime@0.0.29 
+-- @types/minimist@1.2.0 
+-- @types/mocha@2.2.40 
+-- @types/superagent@2.0.36 
| `-- @types/node@7.0.12 
+-- @types/supertest@2.0.0 
+-- body-parser@1.17.1 
| +-- bytes@2.4.0 
| +-- content-type@1.0.2 
| +-- debug@2.6.1 
| +-- depd@1.1.0 
| +-- http-errors@1.6.1 
| | `-- inherits@2.0.3 
| +-- iconv-lite@0.4.15 
| +-- on-finished@2.3.0 
| | `-- ee-first@1.1.1 
| +-- qs@6.4.0 
| +-- raw-body@2.2.0 
| | `-- unpipe@1.0.0 
| `-- type-is@1.6.15 
|   +-- media-typer@0.3.0 
|   `-- mime-types@2.1.15 
|     `-- mime-db@1.27.0 
+-- d@1.0.0  extraneous
+-- debug@2.6.3 
| `-- ms@0.7.2 
+-- discovery-swarm@4.3.2 
| +-- buffer-equals@1.0.4 
| +-- connections@1.4.2 
| +-- discovery-channel@5.4.2 
| | +-- bittorrent-dht@7.5.3 
| | | +-- bencode@0.11.0 
| | | +-- k-bucket@3.2.1 
| | | | `-- randombytes@2.0.3 
| | | +-- k-rpc@4.0.2 
| | | | `-- k-rpc-socket@1.6.2 
| | | +-- lru@3.1.0 
| | | `-- safe-buffer@5.0.1 
| | +-- dns-discovery@5.6.0 
| | | +-- dns-socket@1.6.1 
| | | | `-- dns-packet@1.1.1 
| | | +-- dns-txt@2.0.2 
| | | | `-- buffer-indexof@1.1.0 
| | | +-- lru@2.0.1 
| | | +-- multicast-dns@6.1.1 
| | | +-- network-address@1.1.2 
| | | `-- unordered-set@1.1.0 
| | +-- pretty-hash@1.0.1 
| | `-- thunky@0.1.0 
| +-- length-prefixed-message@3.0.3 
| | `-- varint@3.0.1 
| +-- pump@1.0.2 
| | +-- end-of-stream@1.4.0 
| | `-- once@1.4.0 
| |   `-- wrappy@1.0.2 
| `-- to-buffer@1.1.0 
+-- ejs@2.5.6 
+-- express@4.15.2 
| +-- accepts@1.3.3 
| | `-- negotiator@0.6.1 
| +-- array-flatten@1.1.1 
| +-- content-disposition@0.5.2 
| +-- cookie@0.3.1 
| +-- cookie-signature@1.0.6 
| +-- debug@2.6.1 
| +-- encodeurl@1.0.1 
| +-- escape-html@1.0.3 
| +-- etag@1.8.0 
| +-- finalhandler@1.0.1 
| +-- fresh@0.5.0 
| +-- merge-descriptors@1.0.1 
| +-- methods@1.1.2 
| +-- parseurl@1.3.1 
| +-- path-to-regexp@0.1.7 
| +-- proxy-addr@1.1.4 
| | +-- forwarded@0.1.0 
| | `-- ipaddr.js@1.3.0 
| +-- range-parser@1.2.0 
| +-- send@0.15.1 
| | +-- debug@2.6.1 
| | `-- destroy@1.0.4 
| +-- serve-static@1.12.1 
| +-- setprototypeof@1.0.3 
| +-- statuses@1.3.1 
| +-- utils-merge@1.0.0 
| `-- vary@1.1.1 
+-- html-looks-like@1.0.2 
| +-- @types/jsdom@2.0.30 
| | `-- @types/jquery@2.0.41 
| +-- diff-dom@2.1.0 
| +-- domwalk@1.1.0 
| +-- jsdom@9.12.0 
| | +-- abab@1.0.3 
| | +-- acorn@4.0.11 
| | +-- acorn-globals@3.1.0 
| | +-- array-equal@1.0.0 
| | +-- content-type-parser@1.0.1 
| | +-- cssom@0.3.2 
| | +-- cssstyle@0.2.37 
| | +-- escodegen@1.8.1 
| | | +-- esprima@2.7.3 
| | | +-- estraverse@1.9.3 
| | | +-- optionator@0.8.2 
| | | | +-- deep-is@0.1.3 
| | | | +-- fast-levenshtein@2.0.6 
| | | | +-- levn@0.3.0 
| | | | +-- prelude-ls@1.1.2 
| | | | +-- type-check@0.3.2 
| | | | `-- wordwrap@1.0.0 
| | | `-- source-map@0.2.0 
| | |   `-- amdefine@1.0.1 
| | +-- html-encoding-sniffer@1.0.1 
| | +-- nwmatcher@1.3.9 
| | +-- parse5@1.5.1 
| | +-- request@2.81.0 
| | | +-- aws-sign2@0.6.0 
| | | +-- aws4@1.6.0 
| | | +-- caseless@0.12.0 
| | | +-- forever-agent@0.6.1 
| | | +-- har-validator@4.2.1 
| | | | +-- ajv@4.11.6 
| | | | | +-- co@4.6.0 
| | | | | `-- json-stable-stringify@1.0.1 
| | | | |   `-- jsonify@0.0.0 
| | | | `-- har-schema@1.0.5 
| | | +-- hawk@3.1.3 
| | | | +-- boom@2.10.1 
| | | | +-- cryptiles@2.0.5 
| | | | +-- hoek@2.16.3 
| | | | `-- sntp@1.0.9 
| | | +-- http-signature@1.1.1 
| | | | +-- assert-plus@0.2.0 
| | | | +-- jsprim@1.4.0 
| | | | | +-- assert-plus@1.0.0 
| | | | | +-- extsprintf@1.0.2 
| | | | | +-- json-schema@0.2.3 
| | | | | `-- verror@1.3.6 
| | | | `-- sshpk@1.13.0 
| | | |   +-- asn1@0.2.3 
| | | |   +-- assert-plus@1.0.0 
| | | |   +-- bcrypt-pbkdf@1.0.1 
| | | |   +-- dashdash@1.14.1 
| | | |   | `-- assert-plus@1.0.0 
| | | |   +-- ecc-jsbn@0.1.1 
| | | |   +-- getpass@0.1.6 
| | | |   | `-- assert-plus@1.0.0 
| | | |   +-- jodid25519@1.0.2 
| | | |   `-- jsbn@0.1.1 
| | | +-- is-typedarray@1.0.0 
| | | +-- isstream@0.1.2 
| | | +-- json-stringify-safe@5.0.1 
| | | +-- oauth-sign@0.8.2 
| | | +-- performance-now@0.2.0 
| | | +-- stringstream@0.0.5 
| | | +-- tunnel-agent@0.6.0 
| | | `-- uuid@3.0.1 
| | +-- sax@1.2.2 
| | +-- symbol-tree@3.2.2 
| | +-- tough-cookie@2.3.2 
| | | `-- punycode@1.4.1 
| | +-- webidl-conversions@4.0.1 
| | +-- whatwg-encoding@1.0.1 
| | | `-- iconv-lite@0.4.13 
| | +-- whatwg-url@4.7.0 
| | | +-- tr46@0.0.3 
| | | `-- webidl-conversions@3.0.1 
| | `-- xml-name-validator@2.0.1 
| `-- lodash.sortby@4.7.0 
+-- minimist@1.2.0 
+-- mocha@3.2.0 
| +-- browser-stdout@1.3.0 
| +-- commander@2.9.0 
| | `-- graceful-readlink@1.0.1 
| +-- debug@2.2.0 
| | `-- ms@0.7.1 
| +-- diff@1.4.0 
| +-- escape-string-regexp@1.0.5 
| +-- glob@7.0.5 
| | +-- fs.realpath@1.0.0 
| | +-- inflight@1.0.6 
| | +-- minimatch@3.0.3 
| | | `-- brace-expansion@1.1.7 
| | |   +-- balanced-match@0.4.2 
| | |   `-- concat-map@0.0.1 
| | `-- path-is-absolute@1.0.1 
| +-- growl@1.9.2 
| +-- json3@3.3.2 
| +-- lodash.create@3.1.1 
| | +-- lodash._baseassign@3.2.0 
| | | +-- lodash._basecopy@3.0.1 
| | | `-- lodash.keys@3.1.2 
| | |   +-- lodash._getnative@3.9.1 
| | |   +-- lodash.isarguments@3.1.0 
| | |   `-- lodash.isarray@3.0.4 
| | +-- lodash._basecreate@3.0.3 
| | `-- lodash._isiterateecall@3.0.9 
| +-- mkdirp@0.5.1 
| | `-- minimist@0.0.8 
| `-- supports-color@3.1.2 
|   `-- has-flag@1.0.0 
+-- path@0.12.7 
| +-- process@0.11.9 
| `-- util@0.10.3 
|   `-- inherits@2.0.1 
+-- qr-image@3.2.0 
+-- scuttlebot@9.6.1 
| +-- atomic-file@0.0.1 
| +-- bash-color@0.0.4 
| +-- broadcast-stream@0.0.0 
| +-- cont@1.0.3 
| | +-- continuable@1.2.0 
| | +-- continuable-para@1.2.0 
| | | +-- continuable-hash@0.1.4 
| | | | `-- continuable@1.1.8 
| | | `-- continuable-list@0.1.6 
| | |   `-- continuable@1.1.8 
| | `-- continuable-series@1.2.0 
| +-- cross-spawn@5.1.0 
| | +-- lru-cache@4.0.2 
| | | +-- pseudomap@1.0.2 
| | | `-- yallist@2.1.2 
| | +-- shebang-command@1.2.0 
| | | `-- shebang-regex@1.0.0 
| | `-- which@1.2.14 
| |   `-- isexe@2.0.0 
| +-- deep-equal@1.0.1 
| +-- explain-error@1.0.3 
| +-- graphmitter@1.7.0 
| +-- has-network@0.0.1 
| +-- ip@0.3.3 
| +-- level-memview@0.0.0 
| | +-- level-live-stream@1.4.12 
| | | `-- pull-stream-to-stream@1.2.6 
| | +-- pull-level@1.2.0 
| | | +-- pull-pushable@1.1.4 
| | | | `-- pull-stream@2.18.3 
| | | `-- stream-to-pull-stream@1.3.1 
| | |   `-- pull-core@1.0.0 
| | `-- pull-stream@2.26.1 
| |   `-- pull-core@1.1.0 
| +-- mdmanifest@1.0.8 
| | +-- remark@3.2.3 
| | | +-- camelcase@2.1.1 
| | | +-- ccount@1.0.1 
| | | +-- chokidar@1.6.1 
| | | | +-- anymatch@1.3.0 
| | | | | `-- micromatch@2.3.11 
| | | | |   +-- arr-diff@2.0.0 
| | | | |   | `-- arr-flatten@1.0.2 
| | | | |   +-- array-unique@0.2.1 
| | | | |   +-- braces@1.8.5 
| | | | |   | +-- expand-range@1.8.2 
| | | | |   | | `-- fill-range@2.2.3 
| | | | |   | |   +-- is-number@2.1.0 
| | | | |   | |   +-- isobject@2.1.0 
| | | | |   | |   `-- randomatic@1.1.6 
| | | | |   | +-- preserve@0.2.0 
| | | | |   | `-- repeat-element@1.1.2 
| | | | |   +-- expand-brackets@0.1.5 
| | | | |   | `-- is-posix-bracket@0.1.1 
| | | | |   +-- extglob@0.3.2 
| | | | |   +-- filename-regex@2.0.0 
| | | | |   +-- kind-of@3.1.0 
| | | | |   | `-- is-buffer@1.1.5 
| | | | |   +-- normalize-path@2.1.1 
| | | | |   | `-- remove-trailing-separator@1.0.1 
| | | | |   +-- object.omit@2.0.1 
| | | | |   | +-- for-own@0.1.5 
| | | | |   | | `-- for-in@1.0.2 
| | | | |   | `-- is-extendable@0.1.1 
| | | | |   +-- parse-glob@3.0.4 
| | | | |   | +-- glob-base@0.3.0 
| | | | |   | `-- is-dotfile@1.0.2 
| | | | |   `-- regex-cache@0.4.3 
| | | | |     +-- is-equal-shallow@0.1.3 
| | | | |     `-- is-primitive@2.0.0 
| | | | +-- async-each@1.0.1 
| | | | +-- glob-parent@2.0.0 
| | | | +-- is-binary-path@1.0.1 
| | | | | `-- binary-extensions@1.8.0 
| | | | +-- is-glob@2.0.1 
| | | | | `-- is-extglob@1.0.0 
| | | | `-- readdirp@2.1.0 
| | | |   `-- set-immediate-shim@1.0.1 
| | | +-- collapse-white-space@1.0.2 
| | | +-- concat-stream@1.6.0 
| | | | `-- typedarray@0.0.6 
| | | +-- elegant-spinner@1.0.1 
| | | +-- extend.js@0.0.2 
| | | +-- glob@6.0.4 
| | | +-- globby@4.1.0 
| | | | +-- array-union@1.0.2 
| | | | | `-- array-uniq@1.0.3 
| | | | +-- pify@2.3.0 
| | | | `-- pinkie-promise@2.0.1 
| | | +-- he@0.5.0 
| | | +-- log-update@1.0.2 
| | | | +-- ansi-escapes@1.4.0 
| | | | `-- cli-cursor@1.0.2 
| | | |   `-- restore-cursor@1.0.1 
| | | |     +-- exit-hook@1.1.1 
| | | |     `-- onetime@1.1.0 
| | | +-- longest-streak@1.0.0 
| | | +-- markdown-table@0.4.0 
| | | +-- npm-prefix@1.2.0 
| | | | +-- shellsubstitute@1.2.0 
| | | | `-- untildify@2.1.0 
| | | +-- parse-entities@1.1.0 
| | | | +-- character-entities@1.2.0 
| | | | +-- character-entities-legacy@1.1.0 
| | | | +-- character-reference-invalid@1.1.0 
| | | | +-- has@1.0.1 
| | | | | `-- function-bind@1.1.0 
| | | | +-- is-alphanumerical@1.0.0 
| | | | | `-- is-alphabetical@1.0.0 
| | | | +-- is-decimal@1.0.0 
| | | | `-- is-hexadecimal@1.0.0 
| | | +-- repeat-string@1.6.1 
| | | +-- stringify-entities@1.3.0 
| | | | `-- character-entities-html4@1.1.0 
| | | +-- to-vfile@1.0.0 
| | | +-- trim@0.0.1 
| | | +-- trim-trailing-lines@1.1.0 
| | | +-- unified@2.1.4 
| | | | +-- attach-ware@1.1.1 
| | | | +-- bail@1.0.1 
| | | | `-- unherit@1.1.0 
| | | +-- user-home@2.0.0 
| | | +-- vfile@1.4.0 
| | | +-- vfile-find-down@1.0.0 
| | | +-- vfile-find-up@1.0.0 
| | | +-- vfile-reporter@1.5.0 
| | | | +-- log-symbols@1.0.2 
| | | | +-- plur@2.1.2 
| | | | | `-- irregular-plurals@1.2.0 
| | | | +-- string-width@1.0.2 
| | | | | +-- code-point-at@1.1.0 
| | | | | `-- is-fullwidth-code-point@1.0.0 
| | | | |   `-- number-is-nan@1.0.1 
| | | | +-- text-table@0.2.0 
| | | | `-- vfile-sort@1.0.0 
| | | `-- ware@1.3.0 
| | |   `-- wrap-fn@0.1.5 
| | |     `-- co@3.1.0 
| | +-- remark-html@2.0.2 
| | | +-- detab@1.0.2 
| | | +-- normalize-uri@1.1.0 
| | | +-- object-assign@4.1.1 
| | | +-- trim-lines@1.1.0 
| | | `-- unist-util-visit@1.1.1 
| | `-- word-wrap@1.2.1 
| +-- multiblob@1.10.4 
| | +-- blake2s@1.0.1 
| | +-- pull-defer@0.2.2 
| | +-- pull-file@0.5.0 
| | +-- pull-glob@1.0.6 
| | | `-- pull-fs@1.1.6 
| | |   +-- pull-file@0.5.0 
| | |   `-- pull-traverse@1.0.3 
| | +-- pull-live@1.0.1 
| | +-- pull-notify@0.0.2 
| | +-- pull-write-file@0.2.4 
| | +-- rc@0.5.5 
| | | +-- deep-extend@0.2.11 
| | | +-- ini@1.3.4 
| | | +-- minimist@0.0.10 
| | | `-- strip-json-comments@0.1.3 
| | `-- rimraf@2.2.8 
| +-- multicb@1.2.1 
| +-- muxrpc@6.3.3 
| | +-- packet-stream@2.0.1 
| | +-- packet-stream-codec@1.1.1 
| | | +-- pull-reader@1.2.9 
| | | `-- pull-through@1.0.18 
| | |   `-- looper@3.0.0 
| | `-- pull-goodbye@0.0.1 
| +-- muxrpc-validation@2.0.1 
| | `-- pull-stream@2.28.4 
| |   `-- pull-core@1.1.0 
| +-- muxrpcli@1.1.0 
| | `-- pull-stream@2.28.4 
| +-- mv@2.1.1 
| | +-- ncp@2.0.0 
| | `-- rimraf@2.4.5 
| +-- non-private-ip@1.1.0 
| | `-- ip@0.3.3 
| +-- observ-debounce@1.1.1 
| | `-- observ@0.2.0 
| +-- on-change-network@0.0.2 
| +-- on-wakeup@1.0.1 
| +-- osenv@0.1.4 
| | +-- os-homedir@1.0.2 
| | `-- os-tmpdir@1.0.2 
| +-- pull-abortable@4.1.1 
| +-- pull-cat@1.1.11 
| +-- pull-file@1.0.0 
| | `-- pull-utf8-decoder@1.0.2 
| +-- pull-inactivity@2.1.2 
| | `-- pull-abortable@4.0.0 
| +-- pull-level@2.0.3 
| | +-- level-post@1.0.5 
| | | `-- ltgt@2.1.3 
| | `-- pull-window@2.1.4 
| |   `-- looper@2.0.0 
| +-- pull-many@1.0.8 
| +-- pull-next@1.0.0 
| +-- pull-notify@0.1.1 
| +-- pull-paramap@1.2.2 
| | `-- looper@4.0.0 
| +-- pull-ping@2.0.2 
| +-- pull-pushable@2.0.1 
| +-- pull-stream@3.5.0 
| +-- pull-stream-to-stream@1.3.4 
| +-- pull-stringify@1.2.2 
| +-- rimraf@2.6.1 
| | `-- glob@7.1.1 
| +-- secret-stack@3.2.2 
| | +-- hoox@0.0.1 
| | +-- map-merge@1.1.0 
| | +-- multiserver@1.9.1 
| | | +-- pull-ws@3.2.8 
| | | | +-- relative-url@1.0.2 
| | | | `-- ws@1.1.4 
| | | |   +-- options@0.0.6 
| | | |   `-- ultron@1.0.2 
| | | +-- secret-handshake@1.1.5 
| | | | +-- pull-box-stream@1.0.12 
| | | | | +-- increment-buffer@1.0.1 
| | | | | `-- split-buffer@1.0.0 
| | | | `-- pull-handshake@1.1.4 
| | | |   `-- pull-pair@1.1.0 
| | | +-- separator-escape@0.0.0 
| | | `-- socks@1.1.9 
| | |   `-- smart-buffer@1.1.15 
| | `-- non-private-ip@1.4.2 
| |   `-- ip@0.3.3 
| +-- secure-scuttlebutt@15.5.2 
| | +-- bytewise@1.1.0 
| | | +-- bytewise-core@1.2.3 
| | | | `-- typewise-core@1.2.0 
| | | `-- typewise@1.0.3 
| | +-- deep-equal@0.2.2 
| | +-- level@1.6.0 
| | | +-- level-packager@1.2.1 
| | | | `-- levelup@1.3.5 
| | | |   +-- deferred-leveldown@1.2.1 
| | | |   | `-- abstract-leveldown@2.4.1 
| | | |   +-- level-codec@6.1.0 
| | | |   +-- level-errors@1.0.4 
| | | |   +-- level-iterator-stream@1.3.1 
| | | |   | `-- readable-stream@1.1.14 
| | | |   |   +-- isarray@0.0.1 
| | | |   |   `-- string_decoder@0.10.31 
| | | |   `-- prr@1.0.1 
| | | `-- leveldown@1.6.0 
| | |   +-- abstract-leveldown@2.6.1 
| | |   +-- bindings@1.2.1 
| | |   +-- fast-future@1.0.2 
| | |   +-- nan@2.5.1 
| | |   `-- prebuild-install@2.1.2 
| | |     +-- expand-template@1.0.3 
| | |     +-- github-from-package@0.0.0 
| | |     +-- node-abi@2.0.0 
| | |     +-- noop-logger@0.1.1 
| | |     +-- npmlog@4.0.2 
| | |     | +-- are-we-there-yet@1.1.2 
| | |     | | `-- delegates@1.0.0 
| | |     | +-- console-control-strings@1.1.0 
| | |     | +-- gauge@2.7.3 
| | |     | | +-- aproba@1.1.1 
| | |     | | +-- has-unicode@2.0.1 
| | |     | | +-- signal-exit@3.0.2 
| | |     | | `-- wide-align@1.1.0 
| | |     | `-- set-blocking@2.0.0 
| | |     +-- simple-get@1.4.3 
| | |     | `-- unzip-response@1.0.2 
| | |     +-- tar-fs@1.15.2 
| | |     | +-- chownr@1.0.1 
| | |     | `-- tar-stream@1.5.2 
| | |     |   `-- bl@1.2.0 
| | |     `-- tunnel-agent@0.4.3 
| | +-- level-peek@2.0.2 
| | +-- level-sublevel@6.6.1 
| | | `-- levelup@0.19.1 
| | |   +-- bl@0.8.2 
| | |   | `-- readable-stream@1.0.34 
| | |   |   +-- isarray@0.0.1 
| | |   |   `-- string_decoder@0.10.31 
| | |   +-- deferred-leveldown@0.2.0 
| | |   | `-- abstract-leveldown@0.12.4 
| | |   |   `-- xtend@3.0.0 
| | |   +-- errno@0.1.4 
| | |   +-- prr@0.0.0 
| | |   +-- readable-stream@1.0.34 
| | |   | +-- isarray@0.0.1 
| | |   | `-- string_decoder@0.10.31 
| | |   `-- xtend@3.0.0 
| | +-- ltgt@2.0.0 
| | +-- monotonic-timestamp@0.0.9 
| | +-- pull-write@1.1.2 
| | | `-- looper@4.0.0 
| | +-- ssb-feed@2.3.0 
| | `-- typewiselite@1.0.0 
| +-- ssb-blobs@1.0.1 
| | `-- pull-level@1.5.2 
| +-- ssb-client@4.4.0 
| | `-- ssb-keys@6.1.2 
| |   +-- deep-equal@0.2.2 
| |   `-- hmac@1.0.1 
| +-- ssb-config@2.2.0 
| | +-- deep-extend@0.4.1 
| | +-- non-private-ip@1.4.2 
| | | `-- ip@0.3.3 
| | `-- rc@1.2.1 
| +-- ssb-msgs@5.2.0 
| +-- ssb-ref@2.6.2 
| | +-- ip@1.1.5 
| | `-- is-valid-domain@0.0.2 
| +-- ssb-ws@1.0.2 
| | +-- emoji-server@1.0.0 
| | | `-- emoji-named-characters@1.0.2 
| | +-- multiblob-http@0.2.0 
| | +-- ssb-sort@0.0.0 
| | +-- stack@0.1.0 
| | `-- web-bootloader@0.1.2 
| |   +-- arraybuffer-base64@1.0.0 
| |   +-- binary-xhr@0.0.2 
| |   | `-- inherits@1.0.0 
| |   +-- hyperfile@1.1.1 
| |   | `-- hyperscript@1.4.7 
| |   |   +-- browser-split@0.0.0 
| |   |   +-- class-list@0.1.1 
| |   |   | `-- indexof@0.0.1 
| |   |   `-- html-element@1.3.0 
| |   `-- hyperprogress@0.1.1 
| +-- statistics@3.3.0 
| +-- stream-to-pull-stream@1.7.2 
| | `-- looper@3.0.0 
| `-- zerr@1.0.4 
+-- ssb-keys@7.0.8 
| +-- chloride@2.2.4 
| | +-- is-electron@2.0.0 
| | +-- sodium-browserify@1.2.1 
| | | +-- libsodium-wrappers@0.2.12 
| | | | `-- libsodium@0.2.12 
| | | +-- sha.js@2.4.5 
| | | `-- tweetnacl@0.14.5 
| | `-- sodium-browserify-tweetnacl@0.2.3 
| |   +-- chloride-test@1.2.2 
| |   | `-- json-buffer@2.0.11 
| |   +-- ed2curve@0.1.4 
| |   +-- sha.js@2.4.8 
| |   `-- tweetnacl-auth@0.3.1 
| `-- private-box@0.2.1 
+-- superagent@3.5.2 
| +-- component-emitter@1.2.1 
| +-- cookiejar@2.1.1 
| +-- extend@3.0.0 
| +-- form-data@2.1.4 
| | +-- asynckit@0.4.0 
| | `-- combined-stream@1.0.5 
| |   `-- delayed-stream@1.0.0 
| +-- formidable@1.1.1 
| +-- mime@1.3.4 
| `-- readable-stream@2.2.9 
|   +-- buffer-shims@1.0.0 
|   +-- core-util-is@1.0.2 
|   +-- isarray@1.0.0 
|   +-- process-nextick-args@1.0.7 
|   +-- string_decoder@1.0.0 
|   `-- util-deprecate@1.0.2 
+-- supertest@3.0.0 
+-- ts-node@2.1.2 
| +-- arrify@1.0.1 
| +-- chalk@1.1.3 
| | +-- ansi-styles@2.2.1 
| | +-- has-ansi@2.0.0 
| | | `-- ansi-regex@2.1.1 
| | +-- strip-ansi@3.0.1 
| | `-- supports-color@2.0.0 
| +-- diff@3.2.0 
| +-- make-error@1.2.3 
| +-- pinkie@2.0.4 
| +-- source-map-support@0.4.14 
| | `-- source-map@0.5.6 
| +-- tsconfig@6.0.0 
| | +-- strip-bom@3.0.0 
| | `-- strip-json-comments@2.0.1 
| +-- v8flags@2.0.12 
| | `-- user-home@1.1.1 
| +-- xtend@4.0.1 
| `-- yn@1.2.0 
+-- tslint@4.5.1 
| +-- babel-code-frame@6.22.0 
| | +-- esutils@2.0.2 
| | `-- js-tokens@3.0.1 
| +-- colors@1.1.2 
| +-- diff@3.2.0 
| +-- findup-sync@0.3.0 
| | `-- glob@5.0.15 
| +-- glob@7.1.1 
| +-- optimist@0.6.1 
| | +-- minimist@0.0.10 
| | `-- wordwrap@0.0.3 
| +-- resolve@1.3.2 
| | `-- path-parse@1.0.5 
| +-- tsutils@1.6.0 
| `-- update-notifier@2.1.0 
|   +-- boxen@1.0.0 
|   | +-- ansi-align@1.1.0 
|   | +-- camelcase@4.1.0 
|   | +-- cli-boxes@1.0.0 
|   | +-- string-width@2.0.0 
|   | | `-- is-fullwidth-code-point@2.0.0 
|   | +-- term-size@0.1.1 
|   | | `-- execa@0.4.0 
|   | |   +-- cross-spawn-async@2.2.5 
|   | |   +-- is-stream@1.1.0 
|   | |   +-- npm-run-path@1.0.0 
|   | |   +-- path-key@1.0.0 
|   | |   `-- strip-eof@1.0.0 
|   | `-- widest-line@1.0.0 
|   +-- configstore@3.0.0 
|   | +-- dot-prop@4.1.1 
|   | | `-- is-obj@1.0.1 
|   | +-- graceful-fs@4.1.11 
|   | +-- unique-string@1.0.0 
|   | | `-- crypto-random-string@1.0.0 
|   | `-- write-file-atomic@1.3.1 
|   |   +-- imurmurhash@0.1.4 
|   |   `-- slide@1.1.6 
|   +-- is-npm@1.0.0 
|   +-- latest-version@3.1.0 
|   | `-- package-json@4.0.0 
|   |   +-- got@6.7.1 
|   |   | +-- create-error-class@3.0.2 
|   |   | | `-- capture-stack-trace@1.0.0 
|   |   | +-- duplexer3@0.1.4 
|   |   | +-- get-stream@3.0.0 
|   |   | +-- is-redirect@1.0.0 
|   |   | +-- is-retry-allowed@1.1.0 
|   |   | +-- lowercase-keys@1.0.0 
|   |   | +-- timed-out@4.0.1 
|   |   | +-- unzip-response@2.0.1 
|   |   | `-- url-parse-lax@1.0.0 
|   |   |   `-- prepend-http@1.0.4 
|   |   +-- registry-auth-token@3.1.2 
|   |   `-- registry-url@3.1.0 
|   +-- lazy-req@2.0.0 
|   +-- semver-diff@2.1.0 
|   | `-- semver@5.1.1 
|   `-- xdg-basedir@3.0.0 
`-- typescript@2.2.2 

npm WARN optional SKIPPING OPTIONAL DEPENDENCY: fsevents@^1.0.0 (node_modules/chokidar/node_modules/fsevents):
npm WARN notsup SKIPPING OPTIONAL DEPENDENCY: Unsupported platform for fsevents@1.1.1: wanted {"os":"darwin","arch":"any"} (current: {"os":"freebsd","arch":"x64"})
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: utp-native@1.5.0 (node_modules/utp-native):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: utp-native@1.5.0 install: `node-gyp-build`
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 1
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: sodium-prebuilt@1.0.22 (node_modules/sodium-prebuilt):
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: sodium-prebuilt@1.0.22 install: `prebuild --install --preinstall make`
npm WARN optional SKIPPING OPTIONAL DEPENDENCY: Exit status 2
$ 

The problem building utp-native seems to be that FreeBSD's native (clang) C++ compiler is less tolerant of syntax violations than G++ is. A couple of spaces inserted into lines 54 and 76 of .../deps/libutp/utp_internal.cpp to separate the string literals and the I64u identifier in each case would fix it, but I haven't taken the time to figure out where the working directory is and how I can apply an edit in place without it being overwritten at the next build.

The two errors reported by make(1) in easy-ssb-pub/node_modules/sodium-prebuilt/Makefile are less than ideally trivial to identify since npm apparently removes .../mode_modules/sodium-prebuilt following the failure so I can't look in it. There's a FreeBSD package libsodium-1.0.12 I could install, but it's not obvious how to tell npm that it's there (it doesn't seem to care).