eleventy
eleventy copied to clipboard
Path handling error [edge case] permissions error while scanning files/directories when running --serve on a site generated into a folder in the parent folder where the parent folder has other files/folders in it
Eleventy’s server (--serve) fails to launch when --input is the current directory and --output is a directory in the parent directory. (Compilation – i.e., write() – and --watch succeed.)
Similar to #939, but, in this particular instance, the failure (see debug log) appears to be because scandir is trying to scan all the folders in the parent directory and it doesn’t have privileges to do so. I tried to reproduce it by creating files/folders in the parent directory owned by root but that didn’t trigger the error.
Not sure what it it is specifically about the files mentioned in the debug log that’s causing it to fail in this instance but here’s what a couple of them look like:
sudo ls -la /home/aral/sandbox/gnomit-test-build/var/run/cryptsetup
total 0
drwx------ 2 root root 40 Feb 11 11:42 .
drwxr-xr-x 39 root root 1100 Feb 15 11:46 ..
sudo ls -la /home/aral/sandbox/gnomit-test-build/var/run/gdm3
total 0
drwx--x--x 3 root gdm 60 Feb 11 11:42 .
drwxr-xr-x 39 root root 1100 Feb 15 11:46 ..
drwx------ 2 gdm gdm 40 Feb 11 11:42 greeter
Regardless, Eleventy shouldn’t be scanning the parent directory or subdirectories of the parent directory in any case. It should only be operating in ./ and ../eleventy-base-blog/.
To Reproduce
This reproduces it on my machine but you will not be able to without the troublesome files listed in the debug output. I tried zipping them up to include here but tar also failed on them.
-
Install Eleventy.
npm i -g @11ty/eleventy` -
Clone the base blog example.
git clone https://github.com/11ty/eleventy-base-blog.git -
Change to the base blog example’s directory and install its dependencies
cd eleventy-base-blog npm i -
Run Eleventy.
eleventy --input=. --output=../eleventy-base-blog-site
What should happen
Eleventy should compile the source in ./ and output it to /.eleventy-base-blog-site.
What actually happens
The following error is triggered (compiler output truncated; full debug output at end):
…
Writing ../eleventy-base-blog-site/tags/number-2/index.html from ./tags.njk.
Copied 2 items / Wrote 16 files in 0.26 seconds (16.3ms each, v0.10.0)
Watching…
[Browsersync] Access URLs:
-----------------------------------
Local: http://localhost:8080
External: http://192.168.2.134:8080
-----------------------------------
[Browsersync] Serving files from: ../eleventy-base-blog-site
Uncaught exception: (more in DEBUG output)
> ENOENT: no such file or directory, open '_site/404.html'
`Error` was thrown:
Error: ENOENT: no such file or directory, open '_site/404.html'
at Object.openSync (fs.js:440:3)
at Object.readFileSync (fs.js:342:35)
at Object.ready (/home/aral/sandbox/eleventy-base-blog/.eleventy.js:57:32)
at BrowserSync.callback (/home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/browser-sync.js:51:12)
at /home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/browser-sync.js:228:12
at /home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/utils.js:278:21
at executeTask (/home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/browser-sync.js:136:13)
at Object.initUserPlugins [as fn] (/home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/async.js:294:9)
at /home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/browser-sync.js:120:14
at iterate (/home/aral/.nvm/versions/node/v12.14.1/lib/node_modules/@11ty/eleventy/node_modules/browser-sync/dist/utils.js:269:9)
Environment:
- OS and Version: Pop!_OS 19.10 (based on Ubuntu 19.10)
- Eleventy Version: 0.10.0
Additional context
Full debug output (sans timings):
Eleventy:UserConfig Resetting EleventyConfig to initial values. +0ms
Eleventy:Config Setting up global TemplateConfig. +0ms
Eleventy:UserConfig Adding universal filter 'slug' +3ms
Eleventy:UserConfig Adding universal filter 'url' +0ms
Eleventy:TemplateConfig rootConfig { templateFormats: [ 'liquid', 'ejs', 'md', 'hbs', 'mustache', 'haml', 'pug', 'njk', 'html', 'jstl', '11ty.js' ], pathPrefix: '/', markdownTemplateEngine: 'liquid', htmlTemplateEngine: 'liquid', dataTemplateEngine: 'liquid', passthroughFileCopy: true, htmlOutputSuffix: '-o', jsDataFileSuffix: '.11tydata', keys: { package: 'pkg', layout: 'layout', permalink: 'permalink', permalinkRoot: 'permalinkBypassOutputDir', engineOverride: 'templateEngineOverride' }, dir: { input: '.', includes: '_includes', data: '_data', output: '_site' }, filters: {}, handlebarsHelpers: {}, nunjucksFilters: {} } +0ms
Eleventy:TemplateConfig Merging config with /home/aral/sandbox/.eleventy.js +1ms
Eleventy:TemplateConfig Eleventy local project config file not found, skipping. +0ms
Eleventy:TemplateConfig localConfig: { templateFormats: undefined, filters: {}, linters: {}, layoutAliases: {}, passthroughCopies: {}, liquidOptions: {}, liquidTags: {}, liquidFilters: { slug: [Function], url: [Function] }, liquidShortcodes: {}, liquidPairedShortcodes: {}, nunjucksFilters: { slug: [Function], url: [Function] }, nunjucksAsyncFilters: {}, nunjucksTags: {}, nunjucksAsyncShortcodes: {}, nunjucksShortcodes: {}, nunjucksAsyncPairedShortcodes: {}, nunjucksPairedShortcodes: {}, handlebarsHelpers: { slug: [Function], url: [Function] }, handlebarsShortcodes: {}, handlebarsPairedShortcodes: {}, javascriptFunctions: { slug: [Function], url: [Function] }, pugOptions: {}, ejsOptions: {}, markdownHighlighter: null, libraryOverrides: {}, dynamicPermalinks: true, useGitIgnore: true, dataDeepMerge: false, experiments: Set {}, watchJavaScriptDependencies: true, additionalWatchTargets: [], browserSyncConfig: {}, frontMatterParsingOptions: undefined, dataExtensions: Map {}, quietMode: false } +1ms
Eleventy:TemplateConfig overrides: {} +1ms
Eleventy:TemplateConfig Current configuration: { templateFormats: [ 'liquid', 'ejs', 'md', 'hbs', 'mustache', 'haml', 'pug', 'njk', 'html', 'jstl', '11ty.js' ], pathPrefix: '/', markdownTemplateEngine: 'liquid', htmlTemplateEngine: 'liquid', dataTemplateEngine: 'liquid', passthroughFileCopy: true, htmlOutputSuffix: '-o', jsDataFileSuffix: '.11tydata', keys: { package: 'pkg', layout: 'layout', permalink: 'permalink', permalinkRoot: 'permalinkBypassOutputDir', engineOverride: 'templateEngineOverride' }, dir: { input: '.', includes: '_includes', data: '_data', output: '_site' }, filters: {}, handlebarsHelpers: { slug: [Function], url: [Function] }, nunjucksFilters: { slug: [Function], url: [Function] }, linters: {}, layoutAliases: {}, passthroughCopies: {}, liquidOptions: {}, liquidTags: {}, liquidFilters: { slug: [Function], url: [Function] }, liquidShortcodes: {}, liquidPairedShortcodes: {}, nunjucksAsyncFilters: {}, nunjucksTags: {}, nunjucksAsyncShortcodes: {}, nunjucksShortcodes: {}, nunjucksAsyncPairedShortcodes: {}, nunjucksPairedShortcodes: {}, handlebarsShortcodes: {}, handlebarsPairedShortcodes: {}, javascriptFunctions: { slug: [Function], url: [Function] }, pugOptions: {}, ejsOptions: {}, markdownHighlighter: null, libraryOverrides: {}, dynamicPermalinks: true, useGitIgnore: true, dataDeepMerge: false, experiments: Set {}, watchJavaScriptDependencies: true, additionalWatchTargets: [], browserSyncConfig: {}, frontMatterParsingOptions: undefined, dataExtensions: Map {}, quietMode: false } +0ms
Eleventy:CommandCheck command: eleventy --input=. --output=../eleventy-base-blog-site --serve +0ms
Eleventy:TemplatePassthroughManager Resetting counts to 0 +0ms
Eleventy:EleventyFiles /home/aral/sandbox/.gitignore ignoring: !./node_modules/** +0ms
Eleventy:EleventyFiles /home/aral/sandbox/.gitignore ignoring: !/home/aral/sandbox/node_modules/** +0ms
Eleventy Directories:
Eleventy Input: .
Eleventy Data: _data
Eleventy Includes: _includes
Eleventy Layouts: undefined
Eleventy Output: ../eleventy-base-blog-site
Eleventy Template Formats: liquid,ejs,md,hbs,mustache,haml,pug,njk,html,jstl,11ty.js
Eleventy Verbose Output: false +0ms
Eleventy:TemplateData Could not find and/or require package.json for data preprocessing at '/home/aral/sandbox/package.json' +0ms
Eleventy:TemplateData Could not find and/or require package.json for data preprocessing at '/home/aral/sandbox/package.json' +0ms
Eleventy:EleventyFiles Searching for: [ './**/*.liquid', './**/*.ejs', './**/*.md', './**/*.hbs', './**/*.mustache', './**/*.haml', './**/*.pug', './**/*.njk', './**/*.html', './**/*.jstl', './**/*.11ty.js', '!./node_modules/**', '!/home/aral/sandbox/node_modules/**', '!../eleventy-base-blog-site/**', '!./_includes/**', '!./_data/**' ] +19ms
Eleventy:EleventyErrorHandler Problem writing Eleventy templates: +0ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/cryptsetup'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +1ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/cryptsetup' +0ms
Wrote 0 files in 0.91 seconds (v0.10.0)
Eleventy Finished writing templates. +907ms
Eleventy
Eleventy Getting frustrated? Have a suggestion/feature request/feedback?
Eleventy I want to hear it! Open an issue: https://github.com/11ty/eleventy/issues/new +0ms
Eleventy:TemplatePassthroughManager `passthroughFileCopy` config paths: {} +909ms
Eleventy:TemplatePassthroughManager `passthroughFileCopy` config normalized paths: [] +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +2ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/gdm3'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/gdm3' +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +0ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/lvm'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/lvm' +1ms
Eleventy:EleventyErrorHandler Uncaught exception: +0ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/openvpn-client'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/openvpn-client' +1ms
Eleventy:EleventyErrorHandler Uncaught exception: +0ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/openvpn-server'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/openvpn-server' +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +0ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/speech-dispatcher'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/speech-dispatcher' +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +1ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/sudo'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/sudo' +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +0ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/udisks2'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/udisks2' +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +1ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/wpa_supplicant'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/wpa_supplicant' +0ms
Eleventy:EleventyErrorHandler Unhandled rejection in promise ([object Promise]): +154ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/cryptsetup'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/cryptsetup' +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +0ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/gdm3'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/gdm3' +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +0ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/lvm'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/lvm' +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +0ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/openvpn-client'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/openvpn-client' +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +1ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/openvpn-server'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/openvpn-server' +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +0ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/speech-dispatcher'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/speech-dispatcher' +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +0ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/sudo'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/sudo' +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +0ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/udisks2'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/udisks2' +0ms
Eleventy:EleventyErrorHandler Uncaught exception: +0ms
Eleventy:EleventyErrorHandler EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/wpa_supplicant'
Eleventy:EleventyErrorHandler
Eleventy:EleventyErrorHandler `Error` was thrown: +0ms
Eleventy:EleventyErrorHandler (error stack): Error: EACCES: permission denied, scandir '/home/aral/sandbox/gnomit-test-build/var/run/wpa_supplicant' +0ms