Issue 1:
What / Why

npm: v5.8.0, v6.13.4

When I attempt to install a package from GitHub globally, I am getting a permission error: "could not create leading directories".

$ sudo -H npm install -g git+https://github.com/richRemer/pool.git
npm ERR! code 128
npm ERR! Command failed: /usr/bin/git clone -q https://github.com/richRemer/pool.git /root/.npm/_cacache/tmp/git-clone-e33b6b4f
npm ERR! fatal: could not create leading directories of '/root/.npm/_cacache/tmp/git-clone-e33b6b4f': Permission denied
npm ERR!

npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2019-12-29T20_06_58_093Z-debug.log

The relevant log bits:

12 silly fetchPackageMetaData error for git+https://github.com/richRemer/pool.git Command failed: /usr/bin/git clone -q https://github.com/richRemer/pool.git /root/.npm/_cacache/tmp/git-clone-e33b6b4f
12 silly fetchPackageMetaData fatal: could not create leading directories of '/root/.npm/_cacache/tmp/git-clone-e33b6b4f': Permission denied
13 verbose stack Error: Command failed: /usr/bin/git clone -q https://github.com/richRemer/pool.git /root/.npm/_cacache/tmp/git-clone-e33b6b4f
13 verbose stack fatal: could not create leading directories of '/root/.npm/_cacache/tmp/git-clone-e33b6b4f': Permission denied
13 verbose stack
13 verbose stack at ChildProcess.exithandler (child_process.js:294:12)
13 verbose stack at ChildProcess.emit (events.js:189:13)
13 verbose stack at maybeClose (internal/child_process.js:970:16)
13 verbose stack at Socket.stream.socket.on (internal/child_process.js:389:11)
13 verbose stack at Socket.emit (events.js:189:13)
13 verbose stack at Pipe._handle.close (net.js:600:12)
14 verbose cwd /home/rremer
15 verbose Linux 5.3.0-24-generic
16 verbose argv "/usr/bin/node" "/usr/bin/npm" "install" "-g" "git+https://github.com/richRemer/pool.git"
17 verbose node v10.15.2
18 verbose npm v5.8.0
19 error code 128
20 error Command failed: /usr/bin/git clone -q https://github.com/richRemer/pool.git /root/.npm/_cacache/tmp/git-clone-e33b6b4f
20 error fatal: could not create leading directories of '/root/.npm/_cacache/tmp/git-clone-e33b6b4f': Permission denied
21 verbose exit [ 1, true ]

When

happens when using "... install -g git+https://..."

happens with all repos, public or private, but ultimately I'm trying to solve this for private repos

happens whether I use "sudo -H" or if switch to root user and run directly

Where

n/a

How

Current Behavior

fails to install global packages from GitHub

Steps to Reproduce

run the following command

sudo -H npm install -g git+https://github.com/richRemer/pool.git

Expected Behavior

it should work the same as running:

git clone https://github.com/richRemer/pool.git
sudo -H npm install -g $(npm pack pool/)

Who

n/a

References

https://docs.npmjs.com/cli/install (git+https syntax)

https://stackoverflow.com/questions/11542846/nvm-node-js-recommended-install-for-all-users#comment-58129097 (using nvm is a non-starter)

Issue 2:
What / Why

This bug is related to #476 (comment) and #514

When

npm install packages from git in docker

Where

packages from public git repositories

How

Current Behavior

# npm i
npm ERR! code 128
npm ERR! Command failed: git clone --depth=1 -q -b v2.0.5 git://github.com/boblauer/MockDate.git /root/.npm/_cacache/tmp/git-clone-c9699b7f
npm ERR! fatal: could not create leading directories of '/root/.npm/_cacache/tmp/git-clone-c9699b7f': Permission denied
npm ERR!

npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2019-12-23T09_49_05_990Z-debug.log

Steps to Reproduce

Create simple package.json with git dependency

{
"name": "test-npm",
"dependencies": {
"mockdate": "git://github.com/boblauer/MockDate.git#v2.0.5"
}
}

run docker run --network=host -it -v $(pwd):/var/work/test -w /var/work/test node:12.14.0 /bin/bash

ls -l shows that files are owned by unknown user and unknown group (this is typical behaviour on build agents like teamcity, teamcity clones git repo and mounts it inside docker container)

# ls -l
-rw-r--r-- 1 20857 115755 114 Dec 23 09:46 package.json

run npm install

# Depends on environment you can get

npm ERR! code 128
npm ERR! Command failed: git clone --depth=1 -q -b v2.0.5 git://github.com/boblauer/MockDate.git /root/.npm/_cacache/tmp/git-clone-c9699b7f
npm ERR! fatal: could not create leading directories of '/root/.npm/_cacache/tmp/git-clone-c9699b7f': Permission denied
npm ERR!

# or

npm ERR! Error while executing:
npm ERR! /usr/bin/git ls-remote -h -t ssh://git@<private server>/admin-template.git
npm ERR!
npm ERR! No user exists for uid 1000
npm ERR! fatal: Could not read from remote repository.

run npm i -g npm@6.10 (downgrade to npm 6.10.X)

run npm install

# all works well!

updated 1 package and audited 1 package in 1.355s
found 0 vulnerabilities

Expected Behavior

npm install / npm ci works well like npm@6.10