Talk:Parsoid

Jump to: navigation, search

About this board

Parsoid Install Error: Depends: nodejs (>= 4.0.0) [Node.js v8.9.3 all ready installed]

8
Summary last edited by Arlolra 21:16, 23 December 2017 25 days ago

Use dpkg --ignore-depends=nodejs

Faddahwolf (talkcontribs)

Hello,

I am getting an error when I try and install Parsoid for the Extension:VisualEdiotor on MediaWiki in a "Debian GNU/Linux 8 \n \l" Docker container.

I know this issue has been reported elsewhere, like on this Talk:Parasoid page, but my situation is slightly different.

My set-up -

Computer - Mac Pro, 3.5 GHz 6-Core Intel Xeon E5, 16 GB 1866 MHz DDR RAM, Mac OS High Sierra 10.13.2 (17C88).

Docker - v17.09.1-ce-mac42

Docker images used - MediaWiki: https://hub.docker.com/_/mediawiki/ & MariaDB: https://hub.docker.com/_/mariadb/

After spinning up the Docker container for MariaDB, i linked it to the MediaWiki container doing —

$ docker run -it --name docker-mediawiki-node --link mediawiki-mariadb:mysql -p 9000:80 -d mediawiki

...That all works fine and I'm able to go in and complete the MediaWiki installation and connection to the MariaDB, I get the downloaded, completed  LocalSettings.php, which I copy up to the correct directory on my Docker container, that all runs fine and my Docker Test MediaWiki for a client works fine.

I then started following the instructions for the installation of the Extension:VisualEditor here. That all went fine as far as downloading the Extension, adding it to the right place in my Docker container, and editing the   LocalSettings.php which went fine. The problem started the Parsoid install, linked to from that Extension:Visual Editor page.

I got to the step where I did in my MediaWiki Docker container command line —

$ apt-get install parsoid
   Reading package lists... Done
   Building dependency tree       
   Reading state information... Done
   Some packages could not be installed. This may mean that you have
   requested an impossible situation or if you are using the unstable
   distribution that some required packages have not yet been created
   or been moved out of Incoming.
   The following information may help to resolve the situation:
   
   The following packages have unmet dependencies:
    parsoid : Depends: nodejs (>= 4.0.0) but it is not going to be installed
   E: Unable to correct problems, you have held broken packages.

Now as I've said above, I'm aware of others who have run into this error and their solutions are to install Node.js using apt-get.

The things is: I already had installed Node.js using the binaries from from the Node.JS site. I installed it successfully using these instructions here, prior to installing Extension:VisualEditor and attempting to install Parsoid.

I prefer this method because: a) I already know how to quickly install Node.js on Linux systems quickly; b) the apt-get install of Node.js installs it as $ nodejs, which as a long time Node.js coder, I simply hate. Yes, I all ready know you can fake out the system to have it "appear" as $ node from the command line, but I prefer to have it the way Node.js intended it from the get-go.

My Node.js is seen fine and works in the Docker container Debian Linux system just fine —

$ node -v
  v8.9.3
  $ npm version
  { npm: '5.6.0',
    ares: '1.10.1-DEV',
    cldr: '31.0.1',
    http_parser: '2.7.0',
    icu: '59.1',
    modules: '57',
    nghttp2: '1.25.0',
    node: '8.9.3',
    openssl: '1.0.2n',
    tz: '2017b',
    unicode: '9.0',
    uv: '1.15.0',
    v8: '6.1.534.48',
    zlib: '1.2.11' }

...as you can see. I'm running Node.js v8.9.3, the current long term supported version, which is a far greater version of then the Depends: nodejs (>= 4.0.0) that the apt-get installer for Parsoid says it requires. So I'm wondering then, why can't my Parsoid install via apt-get and why doesn't it see that Node.js is all ready installed?

Any help here with this issue would be greatly appreciated. Thank you in advance to anyone who responds with hep.

best,

— faddah portland, oregon, u.s.a.

Arlolra (talkcontribs)

The issue is with your package manager (apt), not Parsoid per se. Maybe try,

apt-get install --nodeps parsoid

Faddahwolf (talkcontribs)

Thank you, Arlolra, for responding and giving it a go. However, that didn't do it.

I tried both of these, and here was the result —

$ apt-get install --nodeps gcc
 E: Command line option --nodeps is not understood

and...

$ apt-get install --nodejs gcc
 E: Command line option --nodejs is not understood

So neither one of those worked. is there another version of this with install i'm supposed to use? Please advise. And thank you again for the help.

best,

— faddah

porltand, oregon, u.s.a.

Arlolra (talkcontribs)

Alrighty, try,

apt-get download parsoid dpkg -i --ignore-depends=nodejs parsoid.deb

Faddahwolf (talkcontribs)

Hi Arlolra,

I do appreciate your continued attempts at assistance.

I am afraid, how ever, there is no `-i` option switch for `apt-get`. When I attempt to run that at the command line, I get in Debian 8 bash —

$ apt-get download parsoid dpkg -i --ignore-depends=nodejs parsoid.deb                       
 E: Command line option 'i' [from -i] is not known.

Here is the `man` page print out of `apt-get download --help` —

$ apt-get download --help
    apt 1.0.9.8.4 for amd64 compiled on Dec 11 2016 09:48:19
    Usage: apt-get [options] command
           apt-get [options] install|remove pkg1 [pkg2 ...]
           apt-get [options] source pkg1 [pkg2 ...]
    
    apt-get is a simple command line interface for downloading and
    installing packages. The most frequently used commands are update
    and install.
    
    Commands:
       update - Retrieve new lists of packages
       upgrade - Perform an upgrade
       install - Install new packages (pkg is libc6 not libc6.deb)
       remove - Remove packages
       autoremove - Remove automatically all unused packages
       purge - Remove packages and config files
       source - Download source archives
       build-dep - Configure build-dependencies for source packages
       dist-upgrade - Distribution upgrade, see apt-get(8)
       dselect-upgrade - Follow dselect selections
       clean - Erase downloaded archive files
       autoclean - Erase old downloaded archive files
       check - Verify that there are no broken dependencies
       changelog - Download and display the changelog for the given package
       download - Download the binary package into the current directory
    
    Options:
      -h  This help text.
      -q  Loggable output - no progress indicator
      -qq No output except for errors
      -d  Download only - do NOT install or unpack archives
      -s  No-act. Perform ordering simulation
      -y  Assume Yes to all queries and do not prompt
      -f  Attempt to correct a system with broken dependencies in place
      -m  Attempt to continue if archives are unlocatable
      -u  Show a list of upgraded packages as well
      -b  Build the source package after fetching it
      -V  Show verbose version numbers
      -c=? Read this configuration file
      -o=? Set an arbitrary configuration option, eg -o dir::cache=/tmp
    See the apt-get(8), sources.list(5) and apt.conf(5) manual
    pages for more information and options.
                           This APT has Super Cow Powers.

...so which option switch were you trying to use? Thank you again for helping out.

best,

— faddah portland, oregon, u.s.a.

Arlolra (talkcontribs)

Sorry, that was a formatting error. It should have been two separate commands.

apt-get download parsoid

dpkg -i --ignore-depends=nodejs parsoid.deb

Faddahwolf (talkcontribs)

Hi again, Arloira,

That did it! Thank you for sticking with me and giving me help all the way through this.

Actually, I found as I was installing each package, that they all had dependencies that needed installing prior to installing the others. With each, because of these reoccurring dependency errors, I had to do the —

$ apt-get install init-system-helpers

...and then —

$ dpkg -i --ignore-depends=nodejs init-system-helpers_1.22_all.deb

...to get the installs to work. The dependency packages needed to be installed this way in this particular order —

  1. init-system-helpers
  2. cron
  3. libpopt0
  4. logroatate
  5. parsoid

But in any case, it's all installed now and I can go on with the rest of Node.JS and the Extension:VideoEditor install. Thank you for the patient hand-holding of me through all this. Now I know what it takes.

A couple things — it would seem to me that this parsoid deb package has two main problems —

  1. It has four packages whose dependencies must be installed first to the package, so it would be much better if these dependencies were checked on install, and, if any are not there, then are installed, in this particular order —
    1. init-system-helpers
    2. cron
    3. libpopt0
    4. logroatate
  2. The nodejs dependency issues is happening because this package is only looking for the Node.js when it is installed via the Debian/Ubuntu apt-get *.deb package process, which, because of a conflict with another Debian Linux app all ready called "node," installs it as `nodejs` on linux systems, which is non-standard, and frankly, annoying to JavaScript/Node.js programmers. The dependency check should look to see if it was installed using `apt-get` or also the standard ways from the nodejs.org site — by a linux binary package or compiled from source. It should be checking for either install, whether it produces a binary that is `nodejs` or `node`. this can be done with a simple `if` statement with an OR, as such —
if [ "$which nodejs" || "$which node" ]; then
   # code to install parsoid
   ...
   ...
 fi

...or something like that.

I know from your profile that you work on the Parsoid part of the WikiMedia project. Is there some place here I can go to file bug report/feature requests on these issues with Parsoid/MediaWiki project? Please let me know and I'll be glad to put this info there and hopefully get this package updated soon so it doesn't generate support questions like this too much.

Please let me know on the above issues for this `apt-get` package for Parsoid. And thank you very much again for all the help.

best,

— faddah

  portland, oregon, u.s.a.
Arlolra (talkcontribs)

We generally use https://phabricator.wikimedia.org/ for issue tracking. There's a Parsoid tag when creating tasks. Glad it's working for you.

2A02:A03F:48B8:BA00:FCD4:94B6:A36D:4719 (talkcontribs)

We have Kerberos enabled for apache which provides for every page the user. However as parsoid was not providing these credentials when connecting to http://localhost/wiki/api.php , the create/edit would fail.

We thought solving it by excluding the specific url http://localhost/wiki/api.php from authentication. However we now have the strange problem that when browsing to a page, the user is clearly logged in in the upper right corner, however when he clicks on edit, the visual editor complains about the user being 'anonymous' and consequently in the history only the ip address is logged instead of the username.

I have no clear understanding how parsoid provides the username to the api.php endpoint. What could be the issue here?

Arlolra (talkcontribs)

It sounds like what's happening is that by excluding the MediaWiki API from authentication, VE isn't sending credentials when saving.

You should probably revert that change and instead always allow read permissions from localhost, as in https://www.mediawiki.org/wiki/User:Andru~mediawikiwiki/Allow_Parsoid_Server

Also see, https://www.mediawiki.org/wiki/Extension:VisualEditor#Forwarding_Cookies_to_Parsoid

Mishter Jingles (talkcontribs)

Thanks for your answer.

I tried both links.

If I enable authentication in apache for http://localhost/wiki/api.php, then parsoid always gives :

"401 Unauthorized This server could not verify that you\nare authorized to access the document\nrequested.  Either you supplied the wrong\ncredentials (e.g., bad password), or your\nbrowser doesn't understand how to supply\nthe credentials required"

If I disable authentication in apache, parsoid "works" but the user is still 'anonymous'

Arlolra (talkcontribs)

After enabling authentication, you'd need to forward cookies. Did you try that?

Reply to "Parsoid with AuthRemoteuser"
69.10.19.250 (talkcontribs)

Is it possible to have a truly dynamic config?

I'd like to be able to set up something like where dynamicdomain can be an arbitrary string:

parsoidConfig.setMwApi({ uri: 'http://yoursite.com/'+dynamicdomain+'/api.php', domain: dynamicdomain });

The use case is that I'd like for Parsoid to begin working on a new wiki/domain when one is added without manually updating the config, restarting/reloading, etc.

Arlolra (talkcontribs)

You can use localsettings.js for non-static configs,

See https://github.com/wikimedia/parsoid/blob/master/localsettings.example.js

However, support for updating the config w/o restarting isn't yet supported.

See https://phabricator.wikimedia.org/T100841 for that.

69.10.19.250 (talkcontribs)

I'm already using localsettings.js... but I may just hack the code to bypass the config lookup and always return a URL in the form of 'http://yoursite.com/'+requestdomain+'/api.php'

Any pointers on where to start with that?

Arlolra (talkcontribs)

getParserEnv and switchToConfig are probably good places to look.

Reply to "Dynamic Config"

Which Repository for Parosid Install on Ubuntu 16.04.3 LTS

3
Summary by Arlolra
RacletteChaes (talkcontribs)

Ubuntu 16.04.03 LTS

Codename: xenial

I would like to install parsoid but wonder if there is a repository with binaries that will work on this version of Ubuntu.

I'm completely unfamiliar with Ubuntu and Debian.

Some pointers will help. Thanks.

Arlolra (talkcontribs)

The setup instructions here should work, https://www.mediawiki.org/wiki/Parsoid/Setup#Ubuntu_/_Debian

RacletteChaes (talkcontribs)

Thanks... I'll try that.

How to install Parsoid on CentOS 6.3 without internet connection

2
Summary by Arlolra

Try the deploy repo (mediawiki-services-parsoid-deploy)

147.6.1.21 (talkcontribs)

Because of company firewall. it is impossible to start npm install(for dependency setting up), How can I install Parsoid on CentOS 6.3 without internet connection.

SSastry (WMF) (talkcontribs)

If you check out code from the https://github.com/wikimedia/mediawiki-services-parsoid-deploy/ repository, it comes with npm modules bundled with it and the parsoid code is in the src/ submodule. So, you can then set up your centos config to work with that or you can repackage the contents of it however you desire for your setup. Right now, we don't have any binary dependencies in there.

Summary by Cscott

A complaint relating to JavaScript run on the browser; inapplicable to Parsoid, which runs under node.js.

185.13.106.194 (talkcontribs)

The choice of license for the Parser is really really really bad.

Using the GPL for JavaScript ensures the Script CANNOT legally be legally run by InternetExplorer/Edge, and Chrome/Chromium or Firefox.

Running this script, even in an BSD/LGPL v8/WebKit is still illegal, since LGPL + GPL must be licensed under GPL.

Since JavaScript is run & JIT-compiled in the browser, this constitutes "linking", which makes it illegal.

Since there is no (working) browser under the GPL (to my knowledge), you even cannot legally use this software at wikipedia.

Please change the license to LGPL, at least.

Also, making the license GPL ensures it cannot be used by any project that does not go under the GPL - such as Apache/MIT/BSD license.

Cscott (talkcontribs)

I'm not going to comment on the rest of the legal theory here, since we can disqualify it from the start: Parsoid is run under node.js, not a browser.

[FASTER] How do I connect Parsoid to hosting service?

8
Summary by Arlolra

User disappeared

John Harry Lau (talkcontribs)

I want to use visual editor on my mediawiki on my hosting service whitch has MediaWiki installed. I need to install Parsoid to avoid errors. Can you guys help?

Arlolra (talkcontribs)

Have you tried Parsoid/Setup?

John Harry Lau (talkcontribs)

Yep.

Reception123 (talkcontribs)

@John Harry Lau Did you get any errors when following the guide mentioned above?

John Harry Lau (talkcontribs)

nope. just warnings

Arlolra (talkcontribs)

Can you paste examples of the warnings you're seeing?

John Harry Lau (talkcontribs)

I didn't. Just warning about upgrades and instead issues...

Reception123 (talkcontribs)

Then what is the problem?

how to autostart parsoid on raspberry pi?

2
Summary by Arlolra

Use the deploy repo init scripts

121.181.151.166 (talkcontribs)

i really don't know about this....

Arlolra (talkcontribs)

How did you install Parsoid?

If you used the debian package it comes with init and upstart scripts.

https://github.com/wikimedia/mediawiki-services-parsoid-deploy/blob/master/debian/parsoid.init

https://github.com/wikimedia/mediawiki-services-parsoid-deploy/blob/master/debian/upstart/parsoid.conf

Error in the npm test for the parsoid folder?

4
Summary by Arlolra

Follow CentOS step-by-step

Pdwangchao (talkcontribs)

I installed the parsoid and run the "npm install", everything is OK. But when I use the npm test ,Error occoured. Anyone knows the reason or give some advise?

the log file is below:

0 info it worked if it ends with ok

1 verbose cli [ '/usr/local/bin/node', '/usr/local/bin/npm', 'run', 'nsp' ]

2 info using npm@5.4.0

3 info using node@v6.11.2

4 verbose run-script [ 'prensp', 'nsp', 'postnsp' ]

5 info lifecycle parsoid@0.7.1~prensp: parsoid@0.7.1

6 info lifecycle parsoid@0.7.1~nsp: parsoid@0.7.1

7 verbose lifecycle parsoid@0.7.1~nsp: unsafe-perm in lifecycle true

8 verbose lifecycle parsoid@0.7.1~nsp: PATH: /usr/local/lib/node_modules/npm/bin/node-gyp-bin:/data/wwwroot/default/mediawiki/services/parsoid/node_modules/.bin:/usr/local/lib/node_modules/npm/bin/node-gyp-bin:/data/wwwroot/default/mediawiki/services/parsoid/node_modules/.bin:/usr/local/php/bin:/usr/local/apache/bin:/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

9 verbose lifecycle parsoid@0.7.1~nsp: CWD: /data/wwwroot/default/mediawiki/services/parsoid

10 silly lifecycle parsoid@0.7.1~nsp: Args: [ '-c', 'nsp check' ]

11 silly lifecycle parsoid@0.7.1~nsp: Returned: code: 1  signal: null

12 info lifecycle parsoid@0.7.1~nsp: Failed to exec nsp script

13 verbose stack Error: parsoid@0.7.1 nsp: `nsp check`

13 verbose stack Exit status 1

13 verbose stack     at EventEmitter.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:280:16)

13 verbose stack     at emitTwo (events.js:106:13)

13 verbose stack     at EventEmitter.emit (events.js:191:7)

13 verbose stack     at ChildProcess.<anonymous> (/usr/local/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)

13 verbose stack     at emitTwo (events.js:106:13)

13 verbose stack     at ChildProcess.emit (events.js:191:7)

13 verbose stack     at maybeClose (internal/child_process.js:891:16)

13 verbose stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:226:5)

14 verbose pkgid parsoid@0.7.1

15 verbose cwd /data/wwwroot/default/mediawiki/services/parsoid

16 verbose Linux 3.10.0-514.26.2.el7.x86_64

17 verbose argv "/usr/local/bin/node" "/usr/local/bin/npm" "run" "nsp"

18 verbose node v6.11.2

19 verbose npm  v5.4.0

20 error code ELIFECYCLE

21 error errno 1

22 error parsoid@0.7.1 nsp: `nsp check`

22 error Exit status 1

23 error Failed at the parsoid@0.7.1 nsp script.

23 error This is probably not a problem with npm. There is likely additional logging output above.

24 verbose exit [ 1, true ]

Arlolra (talkcontribs)

Are there any warnings of missing packages when you run npm ls?

nsp check makes a request to nodesecurity.io, is that being rejected by a firewall or something>

Pdwangchao (talkcontribs)

Hi Arlolra

Thanks for your reply!

Yes, it exists.

when I use "npm ls", the output is below. I google for it but have no idea. when I run the "nsp check", nothing happened. Then I ran it again and the output is "bash: nsp: command not found..."

By the way, I install the parsoid by git clone method, and install the nodejs by yum method(v6.11.1) and then the make method(v6.11.2).

npm ls:

parsoid@0.7.1 /data/wwwroot/default/mediawiki/services/parsoid

├── alea@0.0.9

├── async@0.9.2

├─┬ babybird@0.0.1

│ ├── asap@2.0.5

│ └── is-arguments@1.0.2

├─┬ body-parser@1.17.1

│ ├── bytes@2.4.0

│ ├── content-type@1.0.2

│ ├─┬ debug@2.6.1

│ │ └── ms@0.7.2

│ ├── depd@1.1.0

│ ├─┬ http-errors@1.6.1

│ │ ├── depd@1.1.0 deduped

│ │ ├── inherits@2.0.3

│ │ ├── setprototypeof@1.0.3 deduped

│ │ └── statuses@1.3.1 deduped

│ ├── iconv-lite@0.4.15

│ ├─┬ on-finished@2.3.0

│ │ └── ee-first@1.1.1

│ ├── qs@6.4.0

│ ├─┬ raw-body@2.2.0

│ │ ├── bytes@2.4.0 deduped

│ │ ├── iconv-lite@0.4.15 deduped

│ │ └── unpipe@1.0.0 deduped

│ └─┬ type-is@1.6.15

│   ├── media-typer@0.3.0

│   └── mime-types@2.1.15 deduped

├─┬ chai@3.5.0

│ ├── assertion-error@1.0.2

│ ├─┬ deep-eql@0.1.3

│ │ └── type-detect@0.1.1

│ └── type-detect@1.0.0

├── colors@1.1.2

├─┬ compression@1.6.2

│ ├─┬ accepts@1.3.3

│ │ ├── mime-types@2.1.15 deduped

│ │ └── negotiator@0.6.1 deduped (git+https://github.com/arlolra/negotiator.git#0418ab4e9a665772b7e233564a4525c9d9a8ec3a)

│ ├── bytes@2.3.0

│ ├─┬ compressible@2.0.10

│ │ └── mime-db@1.27.0

│ ├─┬ debug@2.2.0

│ │ └── ms@0.7.1

│ ├── on-headers@1.0.1

│ └── vary@1.1.1

├─┬ connect-busboy@0.0.2

│ └─┬ busboy@0.2.14

│   ├─┬ dicer@0.2.5

│   │ ├── readable-stream@1.1.14 deduped

│   │ └── streamsearch@0.1.2

│   └─┬ readable-stream@1.1.14

│     ├── core-util-is@1.0.2

│     ├── inherits@2.0.3 deduped

│     ├── isarray@0.0.1

│     └── string_decoder@0.10.31

├── content-type@1.0.1 (git+https://github.com/wikimedia/content-type.git#47b2632d0a2ee79a7d67268e2f6621becd95d05b)

├── core-js@2.4.1

├─┬ coveralls@2.13.0

│ ├─┬ js-yaml@3.6.1

│ │ ├── argparse@1.0.9 deduped

│ │ └── esprima@2.7.3

│ ├── lcov-parse@0.0.10

│ ├── log-driver@1.2.5

│ ├── minimist@1.2.0

│ └─┬ request@2.79.0

│   ├── aws-sign2@0.6.0 deduped

│   ├── aws4@1.6.0 deduped

│   ├── caseless@0.11.0

│   ├── combined-stream@1.0.5 deduped

│   ├── extend@3.0.0 deduped

│   ├── forever-agent@0.6.1 deduped

│   ├── form-data@2.1.2 deduped

│   ├─┬ har-validator@2.0.6

│   │ ├── chalk@1.1.3 deduped

│   │ ├─┬ commander@2.9.0

│   │ │ └── graceful-readlink@1.0.1

│   │ ├── is-my-json-valid@2.16.0 deduped

│   │ └─┬ pinkie-promise@2.0.1

│   │   └── pinkie@2.0.4

│   ├── hawk@3.1.3 deduped

│   ├── http-signature@1.1.1 deduped

│   ├── is-typedarray@1.0.0 deduped

│   ├── isstream@0.1.2 deduped

│   ├── json-stringify-safe@5.0.1 deduped

│   ├── mime-types@2.1.15 deduped

│   ├── oauth-sign@0.8.2 deduped

│   ├── qs@6.3.2

│   ├── stringstream@0.0.5 deduped

│   ├── tough-cookie@2.3.2 deduped

│   ├── tunnel-agent@0.4.3

│   └── uuid@3.0.1

├── diff@1.4.0

├── domino@1.0.28

├── entities@1.1.1

├─┬ eslint@3.19.0

│ ├─┬ babel-code-frame@6.22.0

│ │ ├── chalk@1.1.3 deduped

│ │ ├── esutils@2.0.2 deduped

│ │ └── js-tokens@3.0.1

│ ├─┬ chalk@1.1.3

│ │ ├── ansi-styles@2.2.1

│ │ ├── escape-string-regexp@1.0.5

│ │ ├─┬ has-ansi@2.0.0

│ │ │ └── ansi-regex@2.1.1 deduped

│ │ ├─┬ strip-ansi@3.0.1

│ │ │ └── ansi-regex@2.1.1 deduped

│ │ └── supports-color@2.0.0

│ ├─┬ concat-stream@1.6.0

│ │ ├── inherits@2.0.3 deduped

│ │ ├─┬ readable-stream@2.2.9

│ │ │ ├── buffer-shims@1.0.0

│ │ │ ├── core-util-is@1.0.2 deduped

│ │ │ ├── inherits@2.0.3 deduped

│ │ │ ├── isarray@1.0.0

│ │ │ ├── process-nextick-args@1.0.7

│ │ │ ├─┬ string_decoder@1.0.0

│ │ │ │ └── buffer-shims@1.0.0 deduped

│ │ │ └── util-deprecate@1.0.2

│ │ └── typedarray@0.0.6

│ ├── debug@2.6.1 deduped

│ ├─┬ doctrine@2.0.0

│ │ ├── esutils@2.0.2 deduped

│ │ └── isarray@1.0.0

│ ├─┬ escope@3.6.0

│ │ ├─┬ es6-map@0.1.5

│ │ │ ├─┬ d@1.0.0

│ │ │ │ └── es5-ext@0.10.15 deduped

│ │ │ ├─┬ es5-ext@0.10.15

│ │ │ │ ├── es6-iterator@2.0.1 deduped

│ │ │ │ └── es6-symbol@3.1.1 deduped

│ │ │ ├─┬ es6-iterator@2.0.1

│ │ │ │ ├── d@1.0.0 deduped

│ │ │ │ ├── es5-ext@0.10.15 deduped

│ │ │ │ └── es6-symbol@3.1.1 deduped

│ │ │ ├─┬ es6-set@0.1.5

│ │ │ │ ├── d@1.0.0 deduped

│ │ │ │ ├── es5-ext@0.10.15 deduped

│ │ │ │ ├── es6-iterator@2.0.1 deduped

│ │ │ │ ├── es6-symbol@3.1.1 deduped

│ │ │ │ └── event-emitter@0.3.5 deduped

│ │ │ ├─┬ es6-symbol@3.1.1

│ │ │ │ ├── d@1.0.0 deduped

│ │ │ │ └── es5-ext@0.10.15 deduped

│ │ │ └─┬ event-emitter@0.3.5

│ │ │   ├── d@1.0.0 deduped

│ │ │   └── es5-ext@0.10.15 deduped

│ │ ├─┬ es6-weak-map@2.0.2

│ │ │ ├── d@1.0.0 deduped

│ │ │ ├── es5-ext@0.10.15 deduped

│ │ │ ├── es6-iterator@2.0.1 deduped

│ │ │ └── es6-symbol@3.1.1 deduped

│ │ ├─┬ esrecurse@4.1.0

│ │ │ ├── estraverse@4.1.1

│ │ │ └── object-assign@4.1.1 deduped

│ │ └── estraverse@4.2.0

│ ├─┬ espree@3.4.2

│ │ ├── acorn@5.0.3

│ │ └─┬ acorn-jsx@3.0.1

│ │   └── acorn@3.3.0

│ ├─┬ esquery@1.0.0

│ │ └── estraverse@4.2.0

│ ├── estraverse@4.2.0

│ ├── esutils@2.0.2

│ ├─┬ file-entry-cache@2.0.0

│ │ ├─┬ flat-cache@1.2.2

│ │ │ ├── circular-json@0.3.1

│ │ │ ├─┬ del@2.2.2

│ │ │ │ ├─┬ globby@5.0.0

│ │ │ │ │ ├─┬ array-union@1.0.2

│ │ │ │ │ │ └── array-uniq@1.0.3

│ │ │ │ │ ├── arrify@1.0.1

│ │ │ │ │ ├─┬ glob@7.1.1

│ │ │ │ │ │ ├── fs.realpath@1.0.0 deduped

│ │ │ │ │ │ ├── inflight@1.0.6 deduped

│ │ │ │ │ │ ├── inherits@2.0.3 deduped

│ │ │ │ │ │ ├── minimatch@3.0.3 deduped

│ │ │ │ │ │ ├── once@1.4.0 deduped

│ │ │ │ │ │ └── path-is-absolute@1.0.1 deduped

│ │ │ │ │ ├── object-assign@4.1.1 deduped

│ │ │ │ │ ├── pify@2.3.0 deduped

│ │ │ │ │ └── pinkie-promise@2.0.1 deduped

│ │ │ │ ├── is-path-cwd@1.0.0

│ │ │ │ ├─┬ is-path-in-cwd@1.0.0

│ │ │ │ │ └─┬ is-path-inside@1.0.0

│ │ │ │ │   └── path-is-inside@1.0.2 deduped

│ │ │ │ ├── object-assign@4.1.1 deduped

│ │ │ │ ├── pify@2.3.0

│ │ │ │ ├── pinkie-promise@2.0.1 deduped

│ │ │ │ └─┬ rimraf@2.6.1

│ │ │ │   └─┬ glob@7.1.1

│ │ │ │     ├── fs.realpath@1.0.0 deduped

│ │ │ │     ├── inflight@1.0.6 deduped

│ │ │ │     ├── inherits@2.0.3 deduped

│ │ │ │     ├── minimatch@3.0.3 deduped

│ │ │ │     ├── once@1.4.0 deduped

│ │ │ │     └── path-is-absolute@1.0.1 deduped

│ │ │ ├── graceful-fs@4.1.11 deduped

│ │ │ └─┬ write@0.2.1

│ │ │   └── mkdirp@0.5.1 deduped

│ │ └── object-assign@4.1.1

│ ├─┬ glob@7.1.1

│ │ ├── fs.realpath@1.0.0

│ │ ├─┬ inflight@1.0.6

│ │ │ ├── once@1.4.0 deduped

│ │ │ └── wrappy@1.0.2 deduped

│ │ ├── inherits@2.0.3 deduped

│ │ ├─┬ minimatch@3.0.3

│ │ │ └─┬ brace-expansion@1.1.6

│ │ │   ├── balanced-match@0.4.2

│ │ │   └── concat-map@0.0.1

│ │ ├── once@1.4.0 deduped

│ │ └── path-is-absolute@1.0.1

│ ├── globals@9.17.0

│ ├── ignore@3.2.7

│ ├── imurmurhash@0.1.4

│ ├─┬ inquirer@0.12.0

│ │ ├── ansi-escapes@1.4.0

│ │ ├── ansi-regex@2.1.1

│ │ ├── chalk@1.1.3 deduped

│ │ ├─┬ cli-cursor@1.0.2

│ │ │ └─┬ restore-cursor@1.0.1

│ │ │   ├── exit-hook@1.1.1

│ │ │   └── onetime@1.1.0

│ │ ├── cli-width@2.1.0

│ │ ├─┬ figures@1.7.0

│ │ │ ├── escape-string-regexp@1.0.5 deduped

│ │ │ └── object-assign@4.1.1 deduped

│ │ ├── lodash@4.17.4

│ │ ├─┬ readline2@1.0.1

│ │ │ ├── code-point-at@1.1.0 deduped

│ │ │ ├── is-fullwidth-code-point@1.0.0 deduped

│ │ │ └── mute-stream@0.0.5

│ │ ├─┬ run-async@0.1.0

│ │ │ └── once@1.4.0 deduped

│ │ ├── rx-lite@3.1.2

│ │ ├── string-width@1.0.2 deduped

│ │ ├── strip-ansi@3.0.1 deduped

│ │ └── through@2.3.8

│ ├─┬ is-my-json-valid@2.16.0

│ │ ├── generate-function@2.0.0

│ │ ├─┬ generate-object-property@1.2.0

│ │ │ └── is-property@1.0.2

│ │ ├── jsonpointer@4.0.1

│ │ └── xtend@4.0.1

│ ├─┬ is-resolvable@1.0.0

│ │ └── tryit@1.0.3

│ ├── js-yaml@3.8.3 deduped

│ ├─┬ json-stable-stringify@1.0.1

│ │ └── jsonify@0.0.0

│ ├─┬ levn@0.3.0

│ │ ├── prelude-ls@1.1.2

│ │ └─┬ type-check@0.3.2

│ │   └── prelude-ls@1.1.2 deduped

│ ├── lodash@4.17.4

│ ├─┬ mkdirp@0.5.1

│ │ └── minimist@0.0.8

│ ├── natural-compare@1.4.0

│ ├─┬ optionator@0.8.2

│ │ ├── deep-is@0.1.3

│ │ ├── fast-levenshtein@2.0.6

│ │ ├── levn@0.3.0 deduped

│ │ ├── prelude-ls@1.1.2 deduped

│ │ ├── type-check@0.3.2 deduped

│ │ └── wordwrap@1.0.0

│ ├── path-is-inside@1.0.2

│ ├── pluralize@1.2.1

│ ├── progress@1.1.8

│ ├─┬ require-uncached@1.0.3

│ │ ├─┬ caller-path@0.1.0

│ │ │ └── callsites@0.2.0

│ │ └── resolve-from@1.0.1

│ ├─┬ shelljs@0.7.7

│ │ ├── glob@7.1.1 deduped

│ │ ├── interpret@1.0.3

│ │ └─┬ rechoir@0.6.2

│ │   └── resolve@1.1.7 deduped

│ ├── strip-bom@3.0.0

│ ├── strip-json-comments@2.0.1

│ ├─┬ table@3.8.3

│ │ ├─┬ ajv@4.11.5

│ │ │ ├── co@4.6.0

│ │ │ └── json-stable-stringify@1.0.1 deduped

│ │ ├── ajv-keywords@1.5.1

│ │ ├── chalk@1.1.3 deduped

│ │ ├── lodash@4.17.4

│ │ ├── slice-ansi@0.0.4

│ │ └─┬ string-width@2.0.0

│ │   ├── is-fullwidth-code-point@2.0.0

│ │   └── strip-ansi@3.0.1 deduped

│ ├── text-table@0.2.0

│ └─┬ user-home@2.0.0

│   └── os-homedir@1.0.2

├── eslint-config-node-services@2.1.1

├─┬ eslint-plugin-jsdoc@3.0.2

│ ├─┬ comment-parser@0.4.0

│ │ └─┬ readable-stream@2.2.9

│ │   ├── buffer-shims@1.0.0 deduped

│ │   ├── core-util-is@1.0.2 deduped

│ │   ├── inherits@2.0.3 deduped

│ │   ├── isarray@1.0.0

│ │   ├── process-nextick-args@1.0.7 deduped

│ │   ├─┬ string_decoder@1.0.0

│ │   │ └── buffer-shims@1.0.0 deduped

│ │   └── util-deprecate@1.0.2 deduped

│ └── lodash@4.17.4

├─┬ eslint-plugin-json@1.2.0

│ └─┬ jshint@2.9.4

│   ├─┬ cli@1.0.1

│   │ ├── exit@0.1.2 deduped

│   │ └─┬ glob@7.1.1

│   │   ├── fs.realpath@1.0.0 deduped

│   │   ├── inflight@1.0.6 deduped

│   │   ├── inherits@2.0.3 deduped

│   │   ├── minimatch@3.0.3 deduped

│   │   ├── once@1.4.0 deduped

│   │   └── path-is-absolute@1.0.1 deduped

│   ├─┬ console-browserify@1.1.0

│   │ └── date-now@0.1.4

│   ├── exit@0.1.2

│   ├─┬ htmlparser2@3.8.3

│   │ ├── domelementtype@1.3.0

│   │ ├─┬ domhandler@2.3.0

│   │ │ └── domelementtype@1.3.0 deduped

│   │ ├─┬ domutils@1.5.1

│   │ │ ├─┬ dom-serializer@0.1.0

│   │ │ │ ├── domelementtype@1.1.3

│   │ │ │ └── entities@1.1.1 deduped

│   │ │ └── domelementtype@1.3.0 deduped

│   │ ├── entities@1.0.0

│   │ └── readable-stream@1.1.14 deduped

│   ├── lodash@3.7.0

│   ├── minimatch@3.0.3 deduped

│   ├── shelljs@0.3.0

│   └── strip-json-comments@1.0.4

├─┬ express@4.15.2

│ ├── accepts@1.3.3 deduped

│ ├── array-flatten@1.1.1

│ ├── content-disposition@0.5.2

│ ├── content-type@1.0.2

│ ├── cookie@0.3.1

│ ├── cookie-signature@1.0.6

│ ├── debug@2.6.1 deduped

│ ├── depd@1.1.0 deduped

│ ├── encodeurl@1.0.1

│ ├── escape-html@1.0.3

│ ├── etag@1.8.0

│ ├── finalhandler@1.0.1 deduped

│ ├── fresh@0.5.0

│ ├── merge-descriptors@1.0.1

│ ├── methods@1.1.2

│ ├── on-finished@2.3.0 deduped

│ ├── parseurl@1.3.1

│ ├── path-to-regexp@0.1.7

│ ├─┬ proxy-addr@1.1.4

│ │ ├── forwarded@0.1.0

│ │ └── ipaddr.js@1.3.0

│ ├── qs@6.4.0 deduped

│ ├── range-parser@1.2.0

│ ├─┬ send@0.15.1

│ │ ├── debug@2.6.1 deduped

│ │ ├── depd@1.1.0 deduped

│ │ ├── destroy@1.0.4

│ │ ├── encodeurl@1.0.1 deduped

│ │ ├── escape-html@1.0.3 deduped

│ │ ├── etag@1.8.0 deduped

│ │ ├── fresh@0.5.0 deduped

│ │ ├── http-errors@1.6.1 deduped

│ │ ├── mime@1.3.4

│ │ ├── ms@0.7.2 deduped

│ │ ├── on-finished@2.3.0 deduped

│ │ ├── range-parser@1.2.0 deduped

│ │ └── statuses@1.3.1 deduped

│ ├─┬ serve-static@1.12.1

│ │ ├── encodeurl@1.0.1 deduped

│ │ ├── escape-html@1.0.3 deduped

│ │ ├── parseurl@1.3.1 deduped

│ │ └── send@0.15.1 deduped

│ ├── setprototypeof@1.0.3

│ ├── statuses@1.3.1

│ ├── type-is@1.6.15 deduped

│ ├── utils-merge@1.0.0

│ └── vary@1.1.1 deduped

├─┬ express-handlebars@3.0.0

│ ├─┬ glob@6.0.4

│ │ ├── inflight@1.0.6 deduped

│ │ ├── inherits@2.0.3 deduped

│ │ ├── minimatch@3.0.3 deduped

│ │ ├── once@1.4.0 deduped

│ │ └── path-is-absolute@1.0.1 deduped

│ ├── graceful-fs@4.1.11

│ ├─┬ handlebars@4.0.6

│ │ ├── async@1.5.2

│ │ ├─┬ optimist@0.6.1

│ │ │ ├── minimist@0.0.10

│ │ │ └── wordwrap@0.0.3

│ │ ├─┬ source-map@0.4.4

│ │ │ └── amdefine@1.0.1

│ │ └── UNMET OPTIONAL DEPENDENCY uglify-js@^2.6

│ ├─┬ object.assign@4.0.4

│ │ ├─┬ define-properties@1.1.2

│ │ │ ├── foreach@2.0.5

│ │ │ └── object-keys@1.0.11 deduped

│ │ ├── function-bind@1.1.0

│ │ └── object-keys@1.0.11

│ └─┬ promise@7.1.1

│   └── asap@2.0.5 deduped

├─┬ finalhandler@1.0.1

│ ├─┬ debug@2.6.3

│ │ └── ms@0.7.2 deduped

│ ├── encodeurl@1.0.1 deduped

│ ├── escape-html@1.0.3 deduped

│ ├── on-finished@2.3.0 deduped

│ ├── parseurl@1.3.1 deduped

│ ├── statuses@1.3.1 deduped

│ └── unpipe@1.0.0

├─┬ istanbul@0.4.5

│ ├── abbrev@1.0.9

│ ├── async@1.5.2

│ ├─┬ escodegen@1.8.1

│ │ ├── esprima@2.7.3

│ │ ├── estraverse@1.9.3

│ │ ├── esutils@2.0.2 deduped

│ │ ├── optionator@0.8.2 deduped

│ │ └── source-map@0.4.4 deduped

│ ├── esprima@2.7.3

│ ├─┬ glob@5.0.15

│ │ ├── inflight@1.0.6 deduped

│ │ ├── inherits@2.0.3 deduped

│ │ ├── minimatch@3.0.3 deduped

│ │ ├── once@1.4.0 deduped

│ │ └── path-is-absolute@1.0.1 deduped

│ ├── handlebars@4.0.6 deduped

│ ├── js-yaml@3.8.3 deduped

│ ├── mkdirp@0.5.1 deduped

│ ├─┬ nopt@3.0.6

│ │ └── abbrev@1.0.9 deduped

│ ├─┬ once@1.4.0

│ │ └── wrappy@1.0.2

│ ├── resolve@1.1.7

│ ├─┬ supports-color@3.2.3

│ │ └── has-flag@1.0.0

│ ├─┬ which@1.2.14

│ │ └── isexe@2.0.0

│ └── wordwrap@1.0.0

├─┬ js-yaml@3.8.3

│ ├─┬ argparse@1.0.9

│ │ └── sprintf-js@1.0.3

│ └── esprima@3.1.3

├── mediawiki-title@0.6.3

├─┬ mocha@2.5.3

│ ├── commander@2.3.0

│ ├─┬ debug@2.2.0

│ │ └── ms@0.7.1

│ ├── diff@1.4.0 deduped

│ ├── escape-string-regexp@1.0.2

│ ├─┬ glob@3.2.11

│ │ ├── inherits@2.0.3 deduped

│ │ └─┬ minimatch@0.3.0

│ │   ├── lru-cache@2.7.3

│ │   └── sigmund@1.0.1

│ ├── growl@1.9.2

│ ├─┬ jade@0.26.3

│ │ ├── commander@0.6.1

│ │ └── mkdirp@0.3.0

│ ├── mkdirp@0.5.1 deduped

│ ├── supports-color@1.2.0

│ └── to-iso-string@0.0.2

├── negotiator@0.6.1 (git+https://github.com/arlolra/negotiator.git#0418ab4e9a665772b7e233564a4525c9d9a8ec3a)

├─┬ nock@8.2.1

│ ├── chai@3.5.0 deduped

│ ├── debug@2.6.1 deduped

│ ├── deep-equal@1.0.1

│ ├── json-stringify-safe@5.0.1

│ ├── lodash@4.9.0

│ ├── mkdirp@0.5.1 deduped

│ ├── propagate@0.4.0

│ └── qs@6.4.0 deduped

├── node-uuid@1.4.8

├─┬ nsp@2.6.3

│ ├─┬ chalk@1.1.3

│ │ ├── ansi-styles@2.2.1

│ │ ├── escape-string-regexp@1.0.5

│ │ ├─┬ has-ansi@2.0.0

│ │ │ └── ansi-regex@2.0.0

│ │ ├─┬ strip-ansi@3.0.1

│ │ │ └── ansi-regex@2.0.0

│ │ └── supports-color@2.0.0

│ ├─┬ cli-table@0.3.1

│ │ └── colors@1.0.3

│ ├── cvss@1.0.1

│ ├─┬ https-proxy-agent@1.0.0

│ │ ├─┬ agent-base@2.0.1

│ │ │ ├── extend@3.0.0 deduped

│ │ │ └── semver@5.0.3

│ │ ├─┬ debug@2.2.0

│ │ │ └── ms@0.7.1

│ │ └── extend@3.0.0

│ ├─┬ joi@6.10.1

│ │ ├── hoek@2.16.3

│ │ ├── isemail@1.2.0

│ │ ├── moment@2.12.0

│ │ └─┬ topo@1.1.0

│ │   └── hoek@2.16.3 deduped

│ ├── nodesecurity-npm-utils@5.0.0

│ ├── path-is-absolute@1.0.0

│ ├─┬ rc@1.1.6

│ │ ├── deep-extend@0.4.1

│ │ ├── ini@1.3.4

│ │ ├── minimist@1.2.0

│ │ └── strip-json-comments@1.0.4

│ ├── semver@5.1.0

│ ├─┬ subcommand@2.0.3

│ │ ├── cliclopts@1.1.1

│ │ ├─┬ debug@2.2.0

│ │ │ └── ms@0.7.1

│ │ ├── minimist@1.2.0

│ │ └── xtend@4.0.1

│ └─┬ wreck@6.3.0

│   ├─┬ boom@2.10.1

│   │ └── hoek@2.16.3 deduped

│   └── hoek@2.16.3

├── pegjs@0.8.0 (git+https://github.com/tstarling/pegjs.git#36d584bd7bbc564c86c058c5dfe8053b1fe1d584)

├─┬ prfun@2.1.4

│ └── core-js@2.4.1 deduped

├─┬ request@2.81.0

│ ├── aws-sign2@0.6.0

│ ├── aws4@1.6.0

│ ├── caseless@0.12.0

│ ├─┬ combined-stream@1.0.5

│ │ └── delayed-stream@1.0.0

│ ├── extend@3.0.0

│ ├── forever-agent@0.6.1

│ ├─┬ form-data@2.1.2

│ │ ├── asynckit@0.4.0

│ │ ├── combined-stream@1.0.5 deduped

│ │ └── mime-types@2.1.15 deduped

│ ├─┬ har-validator@4.2.1

│ │ ├── ajv@4.11.5 deduped

│ │ └── har-schema@1.0.5

│ ├─┬ hawk@3.1.3

│ │ ├─┬ boom@2.10.1

│ │ │ └── hoek@2.16.3 deduped

│ │ ├─┬ cryptiles@2.0.5

│ │ │ └── boom@2.10.1 deduped

│ │ ├── hoek@2.16.3

│ │ └─┬ sntp@1.0.9

│ │   └── hoek@2.16.3 deduped

│ ├─┬ 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

│ │ │   └── extsprintf@1.0.2 deduped

│ │ └─┬ sshpk@1.11.0

│ │   ├── asn1@0.2.3

│ │   ├── assert-plus@1.0.0

│ │   ├── UNMET OPTIONAL DEPENDENCY bcrypt-pbkdf@^1.0.0

│ │   ├─┬ dashdash@1.14.1

│ │   │ └── assert-plus@1.0.0

│ │   ├── UNMET OPTIONAL DEPENDENCY ecc-jsbn@~0.1.1

│ │   ├─┬ getpass@0.1.6

│ │   │ └── assert-plus@1.0.0

│ │   ├── UNMET OPTIONAL DEPENDENCY jodid25519@^1.0.0

│ │   ├── UNMET OPTIONAL DEPENDENCY jsbn@~0.1.0

│ │   └── UNMET OPTIONAL DEPENDENCY tweetnacl@~0.14.0

│ ├── is-typedarray@1.0.0

│ ├── isstream@0.1.2

│ ├── json-stringify-safe@5.0.1 deduped

│ ├─┬ mime-types@2.1.15

│ │ └── mime-db@1.27.0 deduped

│ ├── oauth-sign@0.8.2

│ ├── performance-now@0.2.0

│ ├── qs@6.4.0 deduped

│ ├── safe-buffer@5.0.1

│ ├── stringstream@0.0.5

│ ├─┬ tough-cookie@2.3.2

│ │ └── punycode@1.4.1

│ ├─┬ tunnel-agent@0.6.0

│ │ └── safe-buffer@5.0.1 deduped

│ └── uuid@3.0.1

├── semver@5.3.0

├─┬ serve-favicon@2.4.2

│ ├── etag@1.8.0 deduped

│ ├── fresh@0.5.0 deduped

│ ├── ms@1.0.0

│ └── parseurl@1.3.1 deduped

├─┬ service-runner@2.2.5

│ ├── bluebird@3.5.0

│ ├─┬ bunyan@1.8.10

│ │ ├── UNMET OPTIONAL DEPENDENCY dtrace-provider@~0.8

│ │ ├── UNMET OPTIONAL DEPENDENCY moment@^2.10.6

│ │ ├── UNMET OPTIONAL DEPENDENCY mv@~2

│ │ └── UNMET OPTIONAL DEPENDENCY safe-json-stringify@~1

│ ├── bunyan-syslog-udp@0.1.0

│ ├─┬ dnscache@1.0.1

│ │ ├── asap@2.0.5 deduped

│ │ └─┬ lodash.clone@4.3.2

│ │   └── lodash._baseclone@4.5.7

│ ├── extend@3.0.0 deduped

│ ├─┬ gelf-stream@1.1.1

│ │ └── gelfling@0.3.1

│ ├── hot-shots@4.4.0

│ ├── js-yaml@3.8.3 deduped

│ ├─┬ limitation@0.2.0

│ │ ├── bluebird@3.5.0 deduped

│ │ ├─┬ kad@1.3.6 (git+https://github.com/gwicke/kad.git#936c91652d757ea6f9dd30e44698afb0daaa1d17)

│ │ │ ├── async@0.9.2 deduped

│ │ │ ├── clarinet@0.11.0

│ │ │ ├── colors@1.1.2 deduped

│ │ │ ├── hat@0.0.3

│ │ │ ├─┬ kad-fs@0.0.4

│ │ │ │ └─┬ readable-stream@2.2.6

│ │ │ │   ├── buffer-shims@1.0.0 deduped

│ │ │ │   ├── core-util-is@1.0.2 deduped

│ │ │ │   ├── inherits@2.0.3 deduped

│ │ │ │   ├── isarray@1.0.0

│ │ │ │   ├── process-nextick-args@1.0.7 deduped

│ │ │ │   ├── string_decoder@0.10.31 deduped

│ │ │ │   └── util-deprecate@1.0.2 deduped

│ │ │ ├─┬ kad-localstorage@0.0.7

│ │ │ │ └── dom-storage@2.0.2

│ │ │ ├─┬ kad-memstore@0.0.1

│ │ │ │ └─┬ readable-stream@2.2.6

│ │ │ │   ├── buffer-shims@1.0.0 deduped

│ │ │ │   ├── core-util-is@1.0.2 deduped

│ │ │ │   ├── inherits@2.0.3 deduped

│ │ │ │   ├── isarray@1.0.0

│ │ │ │   ├── process-nextick-args@1.0.7 deduped

│ │ │ │   ├── string_decoder@0.10.31 deduped

│ │ │ │   └── util-deprecate@1.0.2 deduped

│ │ │ ├── lodash@3.10.1

│ │ │ ├── merge@1.2.0

│ │ │ ├── ms@0.7.2 deduped

│ │ │ └─┬ msgpack5@3.4.1

│ │ │   ├─┬ bl@1.2.0

│ │ │   │ └─┬ readable-stream@2.2.6

│ │ │   │   ├── buffer-shims@1.0.0 deduped

│ │ │   │   ├── core-util-is@1.0.2 deduped

│ │ │   │   ├── inherits@2.0.3 deduped

│ │ │   │   ├── isarray@1.0.0

│ │ │   │   ├── process-nextick-args@1.0.7 deduped

│ │ │   │   ├── string_decoder@0.10.31 deduped

│ │ │   │   └── util-deprecate@1.0.2 deduped

│ │ │   ├── inherits@2.0.3 deduped

│ │ │   └─┬ readable-stream@2.2.6

│ │ │     ├── buffer-shims@1.0.0 deduped

│ │ │     ├── core-util-is@1.0.2 deduped

│ │ │     ├── inherits@2.0.3 deduped

│ │ │     ├── isarray@1.0.0

│ │ │     ├── process-nextick-args@1.0.7 deduped

│ │ │     ├── string_decoder@0.10.31 deduped

│ │ │     └── util-deprecate@1.0.2 deduped

│ │ └─┬ readable-stream@2.2.6

│ │   ├── buffer-shims@1.0.0 deduped

│ │   ├── core-util-is@1.0.2 deduped

│ │   ├── inherits@2.0.3 deduped

│ │   ├── isarray@1.0.0

│ │   ├── process-nextick-args@1.0.7 deduped

│ │   ├── string_decoder@0.10.31 deduped

│ │   └── util-deprecate@1.0.2 deduped

│ ├── semver@5.3.0 deduped

│ └── yargs@6.6.0 deduped

├── simplediff@0.1.1

├─┬ supertest@1.2.0

│ ├── methods@1.1.2 deduped

│ └─┬ superagent@1.8.5

│   ├── component-emitter@1.2.1

│   ├── cookiejar@2.0.6

│   ├── debug@2.6.1 deduped

│   ├── extend@3.0.0 deduped

│   ├─┬ form-data@1.0.0-rc3

│   │ ├── async@1.5.2

│   │ ├── combined-stream@1.0.5 deduped

│   │ └── mime-types@2.1.15 deduped

│   ├── formidable@1.0.17

│   ├── methods@1.1.2 deduped

│   ├── mime@1.3.4 deduped

│   ├── qs@2.3.3

│   ├─┬ readable-stream@1.0.27-1

│   │ ├── core-util-is@1.0.2 deduped

│   │ ├── inherits@2.0.3 deduped

│   │ ├── isarray@0.0.1 deduped

│   │ └── string_decoder@0.10.31 deduped

│   └── reduce-component@1.0.1

└─┬ yargs@6.6.0

  ├── camelcase@3.0.0

  ├─┬ cliui@3.2.0

  │ ├── string-width@1.0.2 deduped

  │ ├── strip-ansi@3.0.1 deduped

  │ └─┬ wrap-ansi@2.1.0

  │   ├── string-width@1.0.2 deduped

  │   └── strip-ansi@3.0.1 deduped

  ├── decamelize@1.2.0

  ├── get-caller-file@1.0.2

  ├─┬ os-locale@1.4.0

  │ └─┬ lcid@1.0.0

  │   └── invert-kv@1.0.0

  ├─┬ read-pkg-up@1.0.1

  │ ├─┬ find-up@1.1.2

  │ │ ├─┬ path-exists@2.1.0

  │ │ │ └── pinkie-promise@2.0.1 deduped

  │ │ └── pinkie-promise@2.0.1 deduped

  │ └─┬ read-pkg@1.1.0

  │   ├─┬ load-json-file@1.1.0

  │   │ ├── graceful-fs@4.1.11 deduped

  │   │ ├─┬ parse-json@2.2.0

  │   │ │ └─┬ error-ex@1.3.1

  │   │ │   └── is-arrayish@0.2.1

  │   │ ├── pify@2.3.0 deduped

  │   │ ├── pinkie-promise@2.0.1 deduped

  │   │ └─┬ strip-bom@2.0.0

  │   │   └── is-utf8@0.2.1

  │   ├─┬ normalize-package-data@2.3.6

  │   │ ├── hosted-git-info@2.4.1

  │   │ ├─┬ is-builtin-module@1.0.0

  │   │ │ └── builtin-modules@1.1.1

  │   │ ├── semver@5.3.0 deduped

  │   │ └─┬ validate-npm-package-license@3.0.1

  │   │   ├─┬ spdx-correct@1.0.2

  │   │   │ └── spdx-license-ids@1.2.2

  │   │   └── spdx-expression-parse@1.0.4

  │   └─┬ path-type@1.1.0

  │     ├── graceful-fs@4.1.11 deduped

  │     ├── pify@2.3.0 deduped

  │     └── pinkie-promise@2.0.1 deduped

  ├── require-directory@2.1.1

  ├── require-main-filename@1.0.1

  ├── set-blocking@2.0.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

  │ └── strip-ansi@3.0.1 deduped

  ├── which-module@1.0.0

  ├── y18n@3.2.1

  └─┬ yargs-parser@4.2.1

    └── camelcase@3.0.0 deduped

Pdwangchao (talkcontribs)

Hi Arlolra

 

Er... It is solved by this method:

https://www.centos.org/forums/viewtopic.php?f=47&t=53223&p=225372#p225372

I just run the code step by step and everything is OK. So I think the position of parsoid make the difference. Amazing. people meeting the same question just do step by step.....

Also thanks to you, Arlolra

 

How to install Parsoid on Raspbian (RPi2)?

4
Summary last edited by Bsplu 22:15, 26 October 2017 2 months ago
  1. update node to v4.x or higher.
  2. use Parsoid/Developer setup
  3. if u get http 200, u could try install php5-curl and restart all services
14.169.215.88 (talkcontribs)

Hello,

I'm setting up a mediawiki on my Raspberry Pi 2, it's run the Raspbian which are based on Debian jessie. I'm stuck at the Add Wikimedia repository step, it returns this error:

Traceback (most recent call last):
  File "/usr/bin/apt-add-repository", line 167, in <module>
    sp = SoftwareProperties(options=options)
  File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 105, in __init__
    self.reload_sourceslist()
  File "/usr/lib/python3/dist-packages/softwareproperties/SoftwareProperties.py", line 595, in reload_sourceslist
    self.distro.get_sources(self.sourceslist)
  File "/usr/lib/python3/dist-packages/aptsources/distro.py", line 89, in get_sources
    (self.id, self.codename))
aptsources.distro.NoDistroTemplateException: Error: could not find a distribution template for Raspbian/jessie

I tried changing the lsb_release to Debian and successfully add the repository but it returns this error on sudo apt-get update:

W: Failed to fetch https://releases.wikimedia.org/debian/dists/jessie-mediawiki/InRelease Unable to find expected entry 'main/binary-armhf/Packages' in Release file (Wrong sources.list entry or malformed file)

I guess my only option now is too manually install Parsoid, but I'm not sure how can I config it so that it looks like I installed it via repository. Can you help me with detail config like which directory should I install parsoid?

Thanks

71.64.195.175 (talkcontribs)

it cant be done since it it doesnt have binary for arm

SSastry (WMF) (talkcontribs)

I assume you are trying to install Parsoid for running VisualEditor? It doesn't matter where you install Parsoid. But, Parsoid/Developer Setup might help you there. It tells you have to start Parsoid on the commandline as well as how to set up the config files (on Ubuntu/Debian) for starting the parsoid service automatically.

Bsplu (talkcontribs)

Parsoid could not be installed directly in Raspbian. By SSastry (WMF)suggestion, we could run it with develop version.

Here is Parsoid/Developer setup.

However, the new problem for Raspbian is Develop version need node v4.x or higher. For my raspberry, v0.10.29 is the latest version(Amazing /(ㄒoㄒ)/~~).

So the first thing is to update nodejs.

Follow the steps from Beginner’s Guide to Installing Node.js on a Raspberry Pi.

It should be noticed not every raspberry works.

The second thing is install npm.

sudo apt-get install npm

After doing these, Parsoid/Developer setup will work for Raspbian.

Although Parsoid works, restbase cannot work on my raspberry. Error is " Cannot read property 'constructor' of undefined"