Yarn: Since 1.2.1: error Could not open cafile: EISDIR: illegal operation on a directory, read

Created on 12 Oct 2017  路  10Comments  路  Source: yarnpkg/yarn

What is the current behavior?

Using yarn with workspaces while building Theia I now get erros like:

@theia/cli: > yarn run clean && yarn run build
@theia/cli: npm info lifecycle @theia/[email protected]~prepare: @theia/[email protected]
@theia/cli: error Could not open cafile: EISDIR: illegal operation on a directory, read
@theia/cli: error Could not open cafile: EISDIR: illegal operation on a directory, read

If the current behavior is a bug, please provide the steps to reproduce.

You can reproduce with;

git clone https://github.com/theia-ide/theia \
&& cd theia \
&& yarn 

What is the expected behavior?

With yarn 1.0.2 I do not get this error.

Please mention your node.js, yarn and operating system version.
npm --version
5.3.0
OS: linux

Note you can also use this Dockerfile to reproduce:

FROM node:8
RUN useradd --create-home theia
WORKDIR /home/theia
RUN rm -rf /opt/yarn && rm -f /usr/local/bin/yarn && rm -f /usr/local/bin/yarnpkg
RUN apt-get update && apt-get install -y npm && npm install -g [email protected]
USER theia
RUN git clone --depth 1 https://github.com/theia-ide/theia && \
    cd theia && \
    yarn
EXPOSE 3000
WORKDIR /home/theia/theia/examples/browser
CMD yarn run start

You will see the error while doing a docker build -t theia .

cat-bug triaged

Most helpful comment

Is there a workaround available in the meantime? eg; a safe value for export npm_config_file=???

EDIT: unset npm_config_file worked for us.

All 10 comments

Closing as a duplicate #4336

Oops, my fault... I saw 2 bugs with ESIDIR errors filed less than an hour apart and assumed they were the same. I'll re-open. I started trying to reproduce your case above but I get different errors:

$ run prepare
lerna info version 2.2.0
@theia/ext-scripts: > @theia/[email protected] prepare /Users/jvalore/Projects/theia/dev-packages/ext-scripts
@theia/ext-scripts: > echo 'skip'
@theia/cli: > @theia/[email protected] prepare /Users/jvalore/Projects/theia/dev-packages/cli
@theia/cli: > yarn run clean && yarn run build
@theia/ext-scripts: skip
@theia/core: > @theia/[email protected] prepare /Users/jvalore/Projects/theia/packages/core
@theia/core: > yarn run clean && yarn run build
@theia/core: [lint]
@theia/core: [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/messaging/proxy-factory.ts[95, 15]: missing whitespace
@theia/core: [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[69, 15]: missing whitespace
@theia/core: [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[90, 15]: missing whitespace
@theia/core: [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[110, 15]: missing whitespace
@theia/core: [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[130, 15]: missing whitespace
@theia/core: [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[150, 15]: missing whitespace
@theia/core: [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[170, 15]: missing whitespace
@theia/core: [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[190, 15]: missing whitespace
@theia/core: [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[198, 15]: missing whitespace
@theia/core: [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[218, 15]: missing whitespace
@theia/core: [lint]
@theia/core: [lint] theiaext lint exited with code 2
@theia/core: [compile] theiaext compile exited with code 0
@theia/core: error Command failed with exit code 1.
@theia/core: npm ERR! code ELIFECYCLE
@theia/core: npm ERR! errno 1
@theia/core: npm ERR! @theia/[email protected] prepare: `yarn run clean && yarn run build`
@theia/core: npm ERR! Exit status 1
@theia/core: npm ERR!
@theia/core: npm ERR! Failed at the @theia/[email protected] prepare script.
@theia/core: npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
@theia/core: npm ERR! A complete log of this run can be found in:
@theia/core: npm ERR!     /Users/jvalore/.npm/_logs/2017-10-12T12_05_23_768Z-debug.log
lerna ERR! execute Error: Command failed: npm run prepare
lerna ERR! execute error Command failed with exit code 1.
lerna ERR! execute npm ERR! code ELIFECYCLE
lerna ERR! execute npm ERR! errno 1
lerna ERR! execute npm ERR! @theia/[email protected] prepare: `yarn run clean && yarn run build`
lerna ERR! execute npm ERR! Exit status 1
lerna ERR! execute npm ERR!
lerna ERR! execute npm ERR! Failed at the @theia/[email protected] prepare script.
lerna ERR! execute npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
lerna ERR! execute
lerna ERR! execute npm ERR! A complete log of this run can be found in:
lerna ERR! execute npm ERR!     /Users/jvalore/.npm/_logs/2017-10-12T12_05_23_768Z-debug.log
lerna ERR! execute
lerna ERR! execute
lerna ERR! execute > @theia/[email protected] prepare /Users/jvalore/Projects/theia/packages/core
lerna ERR! execute > yarn run clean && yarn run build
lerna ERR! execute
lerna ERR! execute [lint]
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/messaging/proxy-factory.ts[95, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[69, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[90, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[110, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[130, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[150, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[170, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[190, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[198, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[218, 15]: missing whitespace
lerna ERR! execute [lint]
lerna ERR! execute [lint] theiaext lint exited with code 2
lerna ERR! execute [compile] theiaext compile exited with code 0
lerna ERR! execute
lerna ERR! execute     at Promise.all.then.arr (/Users/jvalore/Projects/theia/node_modules/execa/index.js:236:11)
lerna ERR! execute     at <anonymous>
lerna ERR! execute     at process._tickCallback (internal/process/next_tick.js:188:7)
lerna ERR! execute  callback with error
lerna ERR! execute  { Error: Command failed: npm run prepare
lerna ERR! execute error Command failed with exit code 1.
lerna ERR! execute npm ERR! code ELIFECYCLE
lerna ERR! execute npm ERR! errno 1
lerna ERR! execute npm ERR! @theia/[email protected] prepare: `yarn run clean && yarn run build`
lerna ERR! execute npm ERR! Exit status 1
lerna ERR! execute npm ERR!
lerna ERR! execute npm ERR! Failed at the @theia/[email protected] prepare script.
lerna ERR! execute npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
lerna ERR! execute
lerna ERR! execute npm ERR! A complete log of this run can be found in:
lerna ERR! execute npm ERR!     /Users/jvalore/.npm/_logs/2017-10-12T12_05_23_768Z-debug.log
lerna ERR! execute
lerna ERR! execute
lerna ERR! execute > @theia/[email protected] prepare /Users/jvalore/Projects/theia/packages/core
lerna ERR! execute > yarn run clean && yarn run build
lerna ERR! execute
lerna ERR! execute [lint]
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/messaging/proxy-factory.ts[95, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[69, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[90, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[110, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[130, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[150, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[170, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[190, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[198, 15]: missing whitespace
lerna ERR! execute [lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[218, 15]: missing whitespace
lerna ERR! execute [lint]
lerna ERR! execute [lint] theiaext lint exited with code 2
lerna ERR! execute [compile] theiaext compile exited with code 0
lerna ERR! execute
lerna ERR! execute     at Promise.all.then.arr (/Users/jvalore/Projects/theia/node_modules/execa/index.js:236:11)
lerna ERR! execute     at <anonymous>
lerna ERR! execute     at process._tickCallback (internal/process/next_tick.js:188:7)
lerna ERR! execute   stack: 'Error: Command failed: npm run prepare\nerror Command failed with exit code 1.\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! @theia/[email protected] prepare: `yarn run clean && yarn run build`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the @theia/[email protected] prepare script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR!     /Users/jvalore/.npm/_logs/2017-10-12T12_05_23_768Z-debug.log\n\n\n> @theia/[email protected] prepare /Users/jvalore/Projects/theia/packages/core\n> yarn run clean && yarn run build\n\n[lint] \n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/messaging/proxy-factory.ts[95, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[69, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[90, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[110, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[130, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[150, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[170, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[190, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[198, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[218, 15]: missing whitespace\n[lint] \n[lint] theiaext lint exited with code 2\n[compile] theiaext compile exited with code 0\n\n    at Promise.all.then.arr (/Users/jvalore/Projects/theia/node_modules/execa/index.js:236:11)\n    at <anonymous>\n    at process._tickCallback (internal/process/next_tick.js:188:7)',
lerna ERR! execute   code: 1,
lerna ERR! execute   killed: false,
lerna ERR! execute   stdout: '\n> @theia/[email protected] prepare /Users/jvalore/Projects/theia/packages/core\n> yarn run clean && yarn run build\n\n[lint] \n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/messaging/proxy-factory.ts[95, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[69, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[90, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[110, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[130, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[150, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[170, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[190, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[198, 15]: missing whitespace\n[lint] ERROR: /Users/jvalore/Projects/theia/packages/core/src/common/logger.ts[218, 15]: missing whitespace\n[lint] \n[lint] theiaext lint exited with code 2\n[compile] theiaext compile exited with code 0\n',
lerna ERR! execute   stderr: 'error Command failed with exit code 1.\nnpm ERR! code ELIFECYCLE\nnpm ERR! errno 1\nnpm ERR! @theia/[email protected] prepare: `yarn run clean && yarn run build`\nnpm ERR! Exit status 1\nnpm ERR! \nnpm ERR! Failed at the @theia/[email protected] prepare script.\nnpm ERR! This is probably not a problem with npm. There is likely additional logging output above.\n\nnpm ERR! A complete log of this run can be found in:\nnpm ERR!     /Users/jvalore/.npm/_logs/2017-10-12T12_05_23_768Z-debug.log\n',
lerna ERR! execute   failed: true,
lerna ERR! execute   signal: null,
lerna ERR! execute   cmd: 'npm run prepare',
lerna ERR! execute   timedOut: false }
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.

I did a git clone then a yarn install and got the above.

This is because you're using yarn < 1.2.1 you need 1.2.1 otherwise you get into #4687 which is fixed in 1.2.1 only.

Actually I deleted my previous comment about the duplicate since I saw in the latter comments in the thread that the while the original issue was a configuration error with 1.0.1. The issue remained without this config error in 1.2.0.

So it still may be a duplicate, this issue however adds a repro-script so we could drop the need-repro from the tag.

Ah, good catch. I have multiple yarn builds running around in different directories and ran the primary Yarn command with 1.2.1, but 1.0.2 is in my path still, so the script commands ended up calling 1.0.2.

If I put 1.2.1 in my path, I see the errors:

lerna ERR! execute Error: Command failed: npm run prepare
lerna ERR! execute error Could not open cafile: EISDIR: illegal operation on a directory, read
lerna ERR! execute error Could not open cafile: EISDIR: illegal operation on a directory, read
lerna ERR! execute error Command failed with exit code 1.

I added a line to print the "cafile" that it is trying to load:

$ node_modules/.bin/run prepare

lerna info version 2.2.0
@theia/cli: > @theia/[email protected] prepare /Users/me/Projects/theia/dev-packages/cli
@theia/cli: > yarn run clean && yarn run build
@theia/ext-scripts: > @theia/[email protected] prepare /Users/me/Projects/theia/dev-packages/ext-scripts
@theia/ext-scripts: > echo 'skip'
@theia/ext-scripts: skip
@theia/cli: yarn run v1.2.1
@theia/cli: $ rimraf lib
@theia/cli: error Could not open cafile: /Users/me/Projects/theia/dev-packages/cli : EISDIR: illegal operation on a directory, read

Somehow through this chain of build scripts, Yarn is getting dev-packages/cli as the cafile (SSL certificate file). Clearly that is a directory and not a cert file (hence the EISDIR error).

Do you see something in the recent changes from 1.0.2 to 1.2.1 that would cause that ?

How is yarn usually getting a cafile ?

Seems to be caused by #4605

Specifically the line: https://github.com/yarnpkg/yarn/commit/3178e076d4314849a50e0bf4d7619f3cd2904356#diff-9d9a6cd82f41984872a66a3ab0d440c4R199

Previously an unset cafile would return empty string , now it returns the project home dir.
Later on:

if (opts.cafile != null && opts.cafile != '') {

but the setting is no longer empty string. It tries to load the home directory as a cert file and throws an EISDIR error.


Edit

Also noticing that if you run yarn install then the cafile option is undefined, however when run as a script cafile is empty string, due to an env variable (set by yarn run or npm run setting up the environment):

npm_config_cafile: ''

This being empty string instead of undefined exposes the flaw in the logic above that changes empty string to the full path.


Edit 2

The env var above is not set by Yarn, it is set by NPM. So, this is a result of a command invoking an npm run which sets a npm_config_cafile: '' then invokes a yarn command, and yarn then tries to resolve the path to the full non-relative path.

I'm seeing the same error on yarn run.

Thanks!

Is there a workaround available in the meantime? eg; a safe value for export npm_config_file=???

EDIT: unset npm_config_file worked for us.

Was this page helpful?
0 / 5 - 0 ratings