GithubHelp home page GithubHelp logo

fivdi / epoll Goto Github PK

View Code? Open in Web Editor NEW
82.0 3.0 13.0 142 KB

A low-level Node.js binding for the Linux epoll API

License: MIT License

Python 1.83% JavaScript 43.13% Shell 5.67% C++ 42.79% C 6.59%
gpio interrupt beaglebone beaglebone-black raspberry-pi javascript nodejs iot

epoll's Introduction

Build Status npm Version Downloads Per Month

epoll

A low-level Node.js binding for the Linux epoll API for monitoring multiple file descriptors to see if I/O is possible on any of them.

This module was initially written to detect EPOLLPRI events indicating that urgent data is available for reading. EPOLLPRI events are triggered by interrupt generating GPIO pins. The epoll module is used by onoff to detect such interrupts.

epoll supports Node.js versions 10, 12, 14, 16, 18 and 20.

Installation

Note that although it should be possible to install epoll on non-Linux systems the functionality offered by epoll is only available on Linux systems.

npm install epoll

API

  • Epoll(callback) - Constructor. The callback is called when epoll events occur and it gets three arguments (err, fd, events).
  • add(fd, events) - Register file descriptor fd for the event types specified by events.
  • remove(fd) - Deregister file descriptor fd.
  • modify(fd, events) - Change the event types associated with file descriptor fd to those specified by events.
  • close() - Deregisters all file descriptors and free resources.

Event Types

  • Epoll.EPOLLIN
  • Epoll.EPOLLOUT
  • Epoll.EPOLLRDHUP
  • Epoll.EPOLLPRI
  • Epoll.EPOLLERR
  • Epoll.EPOLLHUP
  • Epoll.EPOLLET
  • Epoll.EPOLLONESHOT

Event types can be combined with | when calling add or modify. For example, Epoll.EPOLLPRI | Epoll.EPOLLONESHOT could be passed to add to detect a single GPIO interrupt.

Example - Watching Buttons

The following example shows how epoll can be used to detect interrupts from a momentary push-button connected to GPIO4 (pin P1-7) on the Raspberry Pi. The source code is available in the example directory and can easily be modified for using a different GPIO on the Pi or a different platform such as the BeagleBone.

The first step is to export GPIO4 as an interrupt generating input using the export bash script from the examples directory.

./export

export:

#!/bin/sh
echo 4 > /sys/class/gpio/export
sleep 1
echo in > /sys/class/gpio/gpio4/direction
echo both > /sys/class/gpio/gpio4/edge

Then run watch-button to be notified every time the button is pressed and released. If there is no hardware debounce circuit for the push-button, contact bounce issues are very likely to be visible on the console output. watch-button terminates automatically after 30 seconds.

node watch-button

watch-button:

const Epoll = require('epoll').Epoll;
const fs = require('fs');

const valuefd = fs.openSync('/sys/class/gpio/gpio4/value', 'r');
const buffer = Buffer.alloc(1);

// Create a new Epoll. The callback is the interrupt handler.
const poller = new Epoll((err, fd, events) => {
  // Read GPIO value file. Reading also clears the interrupt.
  fs.readSync(fd, buffer, 0, 1, 0);
  console.log(buffer.toString() === '1' ? 'pressed' : 'released');
});

// Read the GPIO value file before watching to
// prevent an initial unauthentic interrupt.
fs.readSync(valuefd, buffer, 0, 1, 0);

// Start watching for interrupts.
poller.add(valuefd, Epoll.EPOLLPRI);

// Stop watching after 30 seconds.
setTimeout(_ => {
  poller.remove(valuefd).close();
}, 30000);

When watch-button has terminated, GPIO4 can be unexported using the unexport bash script.

./unexport

unexport:

#!/bin/sh
echo 4 > /sys/class/gpio/unexport

Example - Interrupts Per Second

The following example shows how epoll can be used to determine the number of hardware interrupts that can be handled per second on the Raspberry Pi. The source code is available in the example directory and can easily be modified to use different GPIOs on the Raspberry Pi or a different platform such as the BeagleBone.

In this example, GPIO7 is wired to one end of a 1kΩ current limiting resistor and GPIO8 is wired to the other end of the resistor. GPIO7 is an input and GPIO8 is an output.

The first step is to export GPIOs #7 and #8 using the export bash script from the examples directory.

./export

export:

#!/bin/sh
echo 7 > /sys/class/gpio/export
echo 8 > /sys/class/gpio/export
sleep 1
echo in > /sys/class/gpio/gpio7/direction
echo both > /sys/class/gpio/gpio7/edge
echo out > /sys/class/gpio/gpio8/direction

Then run interrupts-per-second. interrupts-per-second toggles the state of the output every time it detects an interrupt on the input. Each toggle will trigger the next interrupt. After five seconds, interrupts-per-second prints the number of interrupts it detected per second.

node interrupts-per-second

interrupts-per-second:

const Epoll = require('../../').Epoll;
const fs = require('fs');

const value = Buffer.alloc(1); // The three Buffers here are global
const zero = Buffer.from('0'); // to improve performance.
const one = Buffer.from('1');

const inputfd = fs.openSync('/sys/class/gpio/gpio7/value', 'r+');
const outputfd = fs.openSync('/sys/class/gpio/gpio8/value', 'r+');

let count = 0;

// Create a new Epoll. The callback is the interrupt handler.
const poller = new Epoll((err, fd, events) => {
  count += 1;

  // Read GPIO value file. Reading also clears the interrupt.
  fs.readSync(inputfd, value, 0, 1, 0);

  // Toggle GPIO value. This will eventually result
  // in the next interrupt being triggered.
  const nextValue = value[0] === zero[0] ? one : zero;
  fs.writeSync(outputfd, nextValue, 0, nextValue.length, 0);
});

let time = process.hrtime(); // Get start time.

// Start watching for interrupts. This will trigger the first interrupt
// as the value file already has data waiting for a read.
poller.add(inputfd, Epoll.EPOLLPRI);

// Print interrupt rate to console after 5 seconds.
setTimeout(_ => {
  time = process.hrtime(time); // Get run time.
  const rate = Math.floor(count / (time[0] + time[1] / 1E9));
  console.log(rate + ' interrupts per second');

  // Stop watching.
  poller.remove(inputfd).close();
}, 5000);

When interrupts-per-second has terminated, GPIOs #7 and #8 can be unexported using the unexport bash script.

./unexport

unexport:

#!/bin/sh
echo 7 > /sys/class/gpio/unexport
echo 8 > /sys/class/gpio/unexport

Here are some results from the "Interrupts Per Second" example.

Raspberry Pi 4 Model B, Raspberry Pi OS (March 4th 2021, Debian 10.8):

node epoll kernel interrupts / sec
v16.0.0 v4.0.1 5.10.17-v7l+ 20112

epoll's People

Contributors

fivdi avatar iammatthew2 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

epoll's Issues

Inaccurate interrupt detection after sometime of being idle

Hi, I'm trying to interface a multi coin acceptor with Espressobin. This coin acceptor emits pulses for every coin inserted. For example 1 peso coin (I'm in philippines) pulses 0 for 20ms and then pulses 1 for 100ms (using 'both' edge). It turns the GPIO input to 0 for 20ms and turns to 1 for 100ms. It does this one time for 1 peso coin and 5 times for 5 peso coin.

So if you print the value of 'both' edge every time an interrupt occurs, this is the output:

1 peso coin:

0
1 (after 20ms)

5 peso coin:

0
1 (after 20ms)
0 (after 100ms)
1 (after 20ms)
0 (after 100ms)
1 (after 20ms)
0 (after 100ms)
1 (after 20ms)

The problem is that sometimes, some of the interrupts are not detected by the epoll library when I'm no longer interacting with the coin acceptor after sometime. What happens is, for example inserting a 5 peso coin to the multi coin acceptor results to:

1 (after 20ms) - it skipped the first `falling edge` and/or
1 or 0 (after 120ms) - it skipped the falling/rising edge detection
0 (after 100ms)
1 (aftter 20ms)
0 (after 100ms)
1 (after 20ms)
0 (after 100ms)
1 (after 20ms)

I think the interrupt detection job is somewhat put to background or something that's why it can't properly detect the pulses when there is no activity for some time. In the next consecutive insertion of coins, it properly detects the coins again.

I can confirm that the problem is not the circuit or the coin acceptor because this doesn't happen when I use the same schematics on raspberry pi's GPIO and a python script.

I'd just like to know if you have any idea on top of your head what might be the cause of this issue.

epoll.node bindings file unable to locate

following error coming. I think its issue with the epoll module. I'm using it to write on lcd using lcd module on BBB. Any help will be appreciated.

debugger listening on port 15454

/usr/local/lib/node_modules/lcd/node_modules/onoff/node_modules/epoll/node_modules/bindings/bindings.js:91
throw err
^
Error: Could not locate the bindings file. Tried:
→ /usr/local/lib/node_modules/lcd/node_modules/onoff/node_modules/epoll/build/epoll.node
→ /usr/local/lib/node_modules/lcd/node_modules/onoff/node_modules/epoll/build/Debug/epoll.node
→ /usr/local/lib/node_modules/lcd/node_modules/onoff/node_modules/epoll/build/Release/epoll.node
→ /usr/local/lib/node_modules/lcd/node_modules/onoff/node_modules/epoll/out/Debug/epoll.node
→ /usr/local/lib/node_modules/lcd/node_modules/onoff/node_modules/epoll/Debug/epoll.node
→ /usr/local/lib/node_modules/lcd/node_modules/onoff/node_modules/epoll/out/Release/epoll.node
→ /usr/local/lib/node_modules/lcd/node_modules/onoff/node_modules/epoll/Release/epoll.node
→ /usr/local/lib/node_modules/lcd/node_modules/onoff/node_modules/epoll/build/default/epoll.node
→ /usr/local/lib/node_modules/lcd/node_modules/onoff/node_modules/epoll/compiled/0.10.29/linux/arm/epoll.node
at bindings (/usr/local/lib/node_modules/lcd/node_modules/onoff/node_modules/epoll/node_modules/bindings/bindings.js:88:9)
at Object. (/usr/local/lib/node_modules/lcd/node_modules/onoff/node_modules/epoll/epoll.js:1:99)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object. (/usr/local/lib/node_modules/lcd/node_modules/onoff/onoff.js:4:11)
at Module._compile (module.js:456:26)

Add node-gyp to package dependencies

Can we add node-gyp to the package dependencies? Currently it's expected to be installed, but not listed as one of the things this package needs. This means Yarn PNP can't install a project that depends on this, and the user has to already have node-gyp in the path.

nan no longer works due to ABI interface changes in node and electron

see nodejs/nan#922 (comment)

using electron-rebuild with electron v20
export DEBUG=electron-rebuild

epoll rebuilds fine with just node v16.16.0

but cannot rebuild under electron


> [email protected] postinstall
> ../../node_modules/.bin/electron-rebuild -e ../../node_modules/electron

⠋ Searching dependency tree  electron-rebuild rebuilding with args: [Arguments] {
  '0': {
    buildPath: '/home/sam/MagicMirror/modules/MMM-PIR-Sensor',
    electronVersion: '20.1.1',
    arch: 'x64',
    extraModules: [],
    onlyModules: null,
    force: undefined,
    headerURL: undefined,
    types: [ 'prod', 'optional' ],
    mode: undefined,
    debug: undefined,
    prebuildTagPrefix: 'v',
    forceABI: undefined,
    useElectronClang: false,
    disablePreGypCopy: false,
    projectRootPath: '/home/sam/MagicMirror/modules/MMM-PIR-Sensor'
  }
} +0ms
  electron-rebuild rebuilding with args: /home/sam/MagicMirror/modules/MMM-PIR-Sensor 20.1.1 x64 Set(0) {} false https://www.electronjs.org/headers [ 'prod', 'optional' ] false +8ms
  electron-rebuild exploring /home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/onoff +0ms
  electron-rebuild exploring /home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll +3ms
  electron-rebuild exploring /home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/lodash.debounce +1ms
  electron-rebuild exploring /home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/bindings +6ms
  electron-rebuild exploring /home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/nan +0ms
  electron-rebuild exploring /home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/file-uri-to-path +2ms
  electron-rebuild identified prod deps: Set(0) {
  onoff: true,
  epoll: true,
  'lodash.debounce': true,
  bindings: true,
  nan: true,
  'file-uri-to-path': true
} +1ms
  electron-rebuild scanning: /home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules +4ms
  electron-rebuild rebuilding epoll with args [
  'node',
  'node-gyp',
  'rebuild',
  '--runtime=electron',
  '--target=20.1.1',
  '--arch=x64',
  '--dist-url=https://www.electronjs.org/headers',
  '--build-from-source',
  '--verbose'
] +0ms
gyp verb command rebuild []
gyp verb command clean []
gyp verb clean removing "build" directory
⠙ Building module: epoll, Completed: 0gyp verb command configure []
gyp verb download using dist-url https://www.electronjs.org/headers
gyp verb find Python Python is not set from command line or npm configuration
gyp verb find Python Python is not set from environment variable PYTHON
gyp verb find Python checking if "python3" can be used
gyp verb find Python - executing "python3" to get executable path
⠹ Building module: epoll, Completed: 0gyp verb find Python - executable path is "/usr/bin/python3"
gyp verb find Python - executing "/usr/bin/python3" to get version
⠸ Building module: epoll, Completed: 0gyp verb find Python - version is "3.6.9"
gyp info find Python using Python version 3.6.9 found at "/usr/bin/python3"
gyp verb get node dir compiling against --target node version: 20.1.1
gyp verb command install [ '20.1.1' ]
gyp verb download using dist-url https://www.electronjs.org/headers
gyp verb install input version string "20.1.1"
gyp verb install installing version: 20.1.1
gyp verb install --ensure was passed, so won't reinstall if already installed
⠼ Building module: epoll, Completed: 0gyp verb install version is already installed, need to check "installVersion"
gyp verb got "installVersion" 9
gyp verb needs "installVersion" 9
gyp verb install version is good
gyp verb get node dir target node version installed: 20.1.1
gyp verb build dir attempting to create "build" dir: /home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build
gyp verb build dir "build" dir needed to be created? Yes
gyp verb python symlink creating symlink to "/usr/bin/python3" at "/home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build/node_gyp_bins/python3"
gyp verb build/config.gypi creating config file
gyp verb build/config.gypi writing out config file: /home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build/config.gypi
gyp verb config.gypi checking for gypi file: /home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/config.gypi
gyp verb common.gypi checking for gypi file: /home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/common.gypi
gyp verb gyp gyp format was not specified; forcing "make"
gyp info spawn /usr/bin/python3
gyp info spawn args [
gyp info spawn args   '/home/sam/MagicMirror/node_modules/node-gyp/gyp/gyp_main.py',
gyp info spawn args   'binding.gyp',
gyp info spawn args   '-f',
gyp info spawn args   'make',
gyp info spawn args   '-I',
gyp info spawn args   '/home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build/config.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/sam/MagicMirror/node_modules/node-gyp/addon.gypi',
gyp info spawn args   '-I',
gyp info spawn args   '/home/sam/.electron-gyp/20.1.1/include/node/common.gypi',
gyp info spawn args   '-Dlibrary=shared_library',
gyp info spawn args   '-Dvisibility=default',
gyp info spawn args   '-Dnode_root_dir=/home/sam/.electron-gyp/20.1.1',
gyp info spawn args   '-Dnode_gyp_dir=/home/sam/MagicMirror/node_modules/node-gyp',
gyp info spawn args   '-Dnode_lib_file=/home/sam/.electron-gyp/20.1.1/<(target_arch)/node.lib',
gyp info spawn args   '-Dmodule_root_dir=/home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll',
gyp info spawn args   '-Dnode_engine=v8',
gyp info spawn args   '--depth=.',
gyp info spawn args   '--no-parallel',
gyp info spawn args   '--generator-output',
gyp info spawn args   'build',
gyp info spawn args   '-Goutput_dir=.'
gyp info spawn args ]
⠇ Building module: epoll, Completed: 0gyp verb command build []
⠏ Building module: epoll, Completed: 0gyp verb build type Release
gyp verb architecture x64
gyp verb node dev dir /home/sam/.electron-gyp/20.1.1
gyp verb `which` succeeded for `make` /usr/bin/make
gyp verb bin symlinks adding symlinks (such as Python), at "/home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build/node_gyp_bins", to PATH
gyp info spawn make
gyp info spawn args [ 'V=1', 'BUILDTYPE=Release', '-C', 'build' ]
make: Entering directory '/home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build'
  g++ -o Release/obj.target/epoll/src/epoll.o ../src/epoll.cc '-DNODE_GYP_MODULE_NAME=epoll' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_GLIBCXX_USE_CXX11_ABI=1' '-DELECTRON_ENSURE_CONFIG_GYPI' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-DUSING_ELECTRON_CONFIG_GYPI' '-DV8_COMPRESS_POINTERS' '-DV8_COMPRESS_POINTERS_IN_SHARED_CAGE' '-DV8_ENABLE_SANDBOX' '-DV8_SANDBOXED_POINTERS' '-DV8_31BIT_SMIS_ON_64BIT_ARCH' '-DV8_REVERSE_JSARGS' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DOPENSSL_NO_ASM' '-DBUILDING_NODE_EXTENSION' -I/home/sam/.electron-gyp/20.1.1/include/node -I/home/sam/.electron-gyp/20.1.1/src -I/home/sam/.electron-gyp/20.1.1/deps/openssl/config -I/home/sam/.electron-gyp/20.1.1/deps/openssl/openssl/include -I/home/sam/.electron-gyp/20.1.1/deps/uv/include -I/home/sam/.electron-gyp/20.1.1/deps/zlib -I/home/sam/.electron-gyp/20.1.1/deps/v8/include -I../../nan  -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -m64 -Wno-deprecated-declarations -Wno-cast-function-type -O3 -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++14 -MMD -MF ./Release/.deps/Release/obj.target/epoll/src/epoll.o.d.raw  -std=c++17 -c
⠼ Building module: epoll, Completed: 0In file included from ../../nan/nan.h:180:0,
                 from ../src/epoll.cc:15:
../../nan/nan_callbacks.h:55:23: error: ‘AccessorSignature’ is not a member of ‘v8’
 typedef v8::Local<v8::AccessorSignature> Sig;
                       ^~~~~~~~~~~~~~~~~
../../nan/nan_callbacks.h:55:23: note: suggested alternative: ‘Signature’
 typedef v8::Local<v8::AccessorSignature> Sig;
                       ^~~~~~~~~~~~~~~~~
                       Signature
../../nan/nan_callbacks.h:55:40: error: template argument 1 is invalid
 typedef v8::Local<v8::AccessorSignature> Sig;
                                        ^
⠦ Building module: epoll, Completed: 0In file included from ../src/epoll.cc:15:0:
../../nan/nan.h: In function ‘void Nan::SetAccessor(v8::Local<v8::ObjectTemplate>, v8::Local<v8::String>, Nan::GetterCallback, Nan::SetterCallback, v8::Local<v8::Value>, v8::AccessControl, v8::PropertyAttribute, Nan::imp::Sig)’:
../../nan/nan.h:2556:3: error: no matching function for call to ‘v8::ObjectTemplate::SetAccessor(v8::Local<v8::String>&, void (*&)(v8::Local<v8::Name>, const v8::PropertyCallbackInfo<v8::Value>&), void (*&)(v8::Local<v8::Name>, v8::Local<v8::Value>, const v8::PropertyCallbackInfo<void>&), v8::Local<v8::Object>&, v8::AccessControl&, v8::PropertyAttribute&, Nan::imp::Sig&)’
   );
   ^
In file included from /home/sam/.electron-gyp/20.1.1/include/node/v8-function.h:15:0,
                 from /home/sam/.electron-gyp/20.1.1/include/node/v8.h:33,
                 from ../src/epoll.cc:11:
/home/sam/.electron-gyp/20.1.1/include/node/v8-template.h:807:8: note: candidate: void v8::ObjectTemplate::SetAccessor(v8::Local<v8::String>, v8::AccessorGetterCallback, v8::AccessorSetterCallback, v8::Local<v8::Value>, v8::AccessControl, v8::PropertyAttribute, v8::SideEffectType, v8::SideEffectType)
   void SetAccessor(
        ^~~~~~~~~~~
/home/sam/.electron-gyp/20.1.1/include/node/v8-template.h:807:8: note:   no known conversion for argument 7 from ‘Nan::imp::Sig {aka int}’ to ‘v8::SideEffectType’
/home/sam/.electron-gyp/20.1.1/include/node/v8-template.h:814:8: note: candidate: void v8::ObjectTemplate::SetAccessor(v8::Local<v8::Name>, v8::AccessorNameGetterCallback, v8::AccessorNameSetterCallback, v8::Local<v8::Value>, v8::AccessControl, v8::PropertyAttribute, v8::SideEffectType, v8::SideEffectType)
   void SetAccessor(
        ^~~~~~~~~~~
/home/sam/.electron-gyp/20.1.1/include/node/v8-template.h:814:8: note:   no known conversion for argument 7 from ‘Nan::imp::Sig {aka int}’ to ‘v8::SideEffectType’
⠼ Building module: epoll, Completed: 0At global scope:
cc1plus: warning: unrecognized command line option ‘-Wno-cast-function-type’
epoll.target.mk:135: recipe for target 'Release/obj.target/epoll/src/epoll.o' failed
make: *** [Release/obj.target/epoll/src/epoll.o] Error 1
make: Leaving directory '/home/sam/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build'
✖ Rebuild Failed

Add prebuilt binaries?

It would be nice if the epoll library had some prebuilt binaries shipping with it, either using the low-level node-pre-gyp or the higher-level prebuild and prebuild-install libraries. If epoll came pre-built for the Raspberry Pi architecture, users wouldn't have to install Python, make, or g++ to install the package anymore, which would make it a lot faster for new users to use.

node-gyp rebuild error on Rpi3

I'm trying to install epoll on my Raspberrypi3, here's my distro info:

PRETTY_NAME="Debian GNU/Linux 10 (buster)"
NAME="Debian GNU/Linux"
VERSION_ID="10"
VERSION="10 (buster)"
VERSION_CODENAME=buster
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Error is as follows:

> [email protected] install /app/node_modules/pi-pins/node_modules/epoll
> node-gyp rebuild

make: Entering directory '/app/node_modules/pi-pins/node_modules/epoll/build'
  CXX(target) Release/obj.target/epoll/src/epoll.o
In file included from ../../nan/nan.h:192,
                 from ../src/epoll.cc:15:
../../nan/nan_maybe_43_inl.h: In function ‘Nan::Maybe<bool> Nan::ForceSet(v8::Local<v8::Object>, v8::Local<v8::Value>, v8::Local<v8::Value>, v8::PropertyAttribute)’:
../../nan/nan_maybe_43_inl.h:112:15: error: ‘class v8::Object’ has no member named ‘ForceSet’
   return obj->ForceSet(isolate->GetCurrentContext(), key, value, attribs);
               ^~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In function ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’:
../../nan/nan.h:835:60: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, func, argc, argv);
                                                            ^
In file included from ../src/epoll.cc:12:
/root/.node-gyp/10.16.0/include/node/node.h:177:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/node.h:91:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h:835:60: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, func, argc, argv);
                                                            ^
In file included from ../src/epoll.cc:12:
/root/.node-gyp/10.16.0/include/node/node.h:177:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/node.h:91:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In function ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)’:
../../nan/nan.h:850:62: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, symbol, argc, argv);
                                                              ^
In file included from ../src/epoll.cc:12:
/root/.node-gyp/10.16.0/include/node/node.h:170:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/node.h:91:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h:850:62: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, symbol, argc, argv);
                                                              ^
In file included from ../src/epoll.cc:12:
/root/.node-gyp/10.16.0/include/node/node.h:170:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/node.h:91:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In function ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)’:
../../nan/nan.h:865:62: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, method, argc, argv);
                                                              ^
In file included from ../src/epoll.cc:12:
/root/.node-gyp/10.16.0/include/node/node.h:163:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/node.h:91:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h:865:62: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, method, argc, argv);
                                                              ^
In file included from ../src/epoll.cc:12:
/root/.node-gyp/10.16.0/include/node/node.h:163:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/node.h:91:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In member function ‘v8::Local<v8::Value> Nan::Callback::Call_(v8::Isolate*, v8::Local<v8::Object>, int, v8::Local<v8::Value>*) const’:
../../nan/nan.h:1479:5: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
     ));
     ^
In file included from ../src/epoll.cc:12:
/root/.node-gyp/10.16.0/include/node/node.h:177:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/node.h:91:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h:1479:5: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
     ));
     ^
In file included from ../src/epoll.cc:12:
/root/.node-gyp/10.16.0/include/node/node.h:177:50: note: declared here
                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
                                                  ^~~~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/node.h:91:42: note: in definition of macro ‘NODE_DEPRECATED’
     __attribute__((deprecated(message))) declarator
                                          ^~~~~~~~~~
In file included from ../src/epoll.cc:15:
../../nan/nan.h: In function ‘void Nan::AsyncQueueWorker(Nan::AsyncWorker*)’:
../../nan/nan.h:1732:62: warning: cast between incompatible function types from ‘void (*)(uv_work_t*)’ {aka ‘void (*)(uv_work_s*)’} to ‘uv_after_work_cb’ {aka ‘void (*)(uv_work_s*, int)’} [-Wcast-function-type]
     , reinterpret_cast<uv_after_work_cb>(AsyncExecuteComplete)
                                                              ^
../src/epoll.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE Epoll::Add(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/epoll.cc:210:44: warning: ‘int32_t v8::Value::Int32Value() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
   int err = epoll->Add(info[0]->Int32Value(), info[1]->Int32Value());
                                            ^
In file included from /root/.node-gyp/10.16.0/include/node/v8.h:26,
                 from ../src/epoll.cc:11:
/root/.node-gyp/10.16.0/include/node/v8.h:2478:46: note: declared here
   V8_DEPRECATED("Use maybe version", int32_t Int32Value() const);
                                              ^~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/v8config.h:324:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
../src/epoll.cc:210:67: warning: ‘int32_t v8::Value::Int32Value() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
   int err = epoll->Add(info[0]->Int32Value(), info[1]->Int32Value());
                                                                   ^
In file included from /root/.node-gyp/10.16.0/include/node/v8.h:26,
                 from ../src/epoll.cc:11:
/root/.node-gyp/10.16.0/include/node/v8.h:2478:46: note: declared here
   V8_DEPRECATED("Use maybe version", int32_t Int32Value() const);
                                              ^~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/v8config.h:324:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
../src/epoll.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE Epoll::Modify(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/epoll.cc:230:47: warning: ‘int32_t v8::Value::Int32Value() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
   int err = epoll->Modify(info[0]->Int32Value(), info[1]->Int32Value());
                                               ^
In file included from /root/.node-gyp/10.16.0/include/node/v8.h:26,
                 from ../src/epoll.cc:11:
/root/.node-gyp/10.16.0/include/node/v8.h:2478:46: note: declared here
   V8_DEPRECATED("Use maybe version", int32_t Int32Value() const);
                                              ^~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/v8config.h:324:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
../src/epoll.cc:230:70: warning: ‘int32_t v8::Value::Int32Value() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
   int err = epoll->Modify(info[0]->Int32Value(), info[1]->Int32Value());
                                                                      ^
In file included from /root/.node-gyp/10.16.0/include/node/v8.h:26,
                 from ../src/epoll.cc:11:
/root/.node-gyp/10.16.0/include/node/v8.h:2478:46: note: declared here
   V8_DEPRECATED("Use maybe version", int32_t Int32Value() const);
                                              ^~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/v8config.h:324:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
../src/epoll.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE Epoll::Remove(Nan::NAN_METHOD_ARGS_TYPE)’:
../src/epoll.cc:247:47: warning: ‘int32_t v8::Value::Int32Value() const’ is deprecated: Use maybe version [-Wdeprecated-declarations]
   int err = epoll->Remove(info[0]->Int32Value());
                                               ^
In file included from /root/.node-gyp/10.16.0/include/node/v8.h:26,
                 from ../src/epoll.cc:11:
/root/.node-gyp/10.16.0/include/node/v8.h:2478:46: note: declared here
   V8_DEPRECATED("Use maybe version", int32_t Int32Value() const);
                                              ^~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/v8config.h:324:3: note: in definition of macro ‘V8_DEPRECATED’
   declarator __attribute__((deprecated(message)))
   ^~~~~~~~~~
In file included from ../src/epoll.cc:12:
../src/epoll.cc: At global scope:
/root/.node-gyp/10.16.0/include/node/node.h:573:43: warning: cast between incompatible function types from ‘void (*)(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE)’ {aka ‘void (*)(v8::Local<v8::Object>)’} to ‘node::addon_register_func’ {aka ‘void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)’} [-Wcast-function-type]
       (node::addon_register_func) (regfunc),                          \
                                           ^
/root/.node-gyp/10.16.0/include/node/node.h:607:3: note: in expansion of macro ‘NODE_MODULE_X’
   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)
   ^~~~~~~~~~~~~
../src/epoll.cc:381:1: note: in expansion of macro ‘NODE_MODULE’
 NODE_MODULE(epoll, Epoll::Init)
 ^~~~~~~~~~~
In file included from ../src/epoll.cc:11:
/root/.node-gyp/10.16.0/include/node/v8.h: In instantiation of ‘void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = node::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)]’:
/root/.node-gyp/10.16.0/include/node/node_object_wrap.h:84:78:   required from here
/root/.node-gyp/10.16.0/include/node/v8.h:9502:16: warning: cast between incompatible function types from ‘v8::WeakCallbackInfo<node::ObjectWrap>::Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<node::ObjectWrap>&)’} to ‘Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<void>&)’} [-Wcast-function-type]
                reinterpret_cast<Callback>(callback), type);
                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/root/.node-gyp/10.16.0/include/node/v8.h: In instantiation of ‘void v8::PersistentBase<T>::SetWeak(P*, typename v8::WeakCallbackInfo<P>::Callback, v8::WeakCallbackType) [with P = Nan::ObjectWrap; T = v8::Object; typename v8::WeakCallbackInfo<P>::Callback = void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)]’:
../../nan/nan_object_wrap.h:66:61:   required from here
/root/.node-gyp/10.16.0/include/node/v8.h:9502:16: warning: cast between incompatible function types from ‘v8::WeakCallbackInfo<Nan::ObjectWrap>::Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)’} to ‘Callback’ {aka ‘void (*)(const v8::WeakCallbackInfo<void>&)’} [-Wcast-function-type]
make: *** [epoll.target.mk:101: Release/obj.target/epoll/src/epoll.o] Error 1
make: Leaving directory '/app/node_modules/pi-pins/node_modules/epoll/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! stack     at ChildProcess.emit (events.js:198:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:248:12)
gyp ERR! System Linux 4.14.98
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 /app/node_modules/pi-pins/node_modules/epoll
gyp ERR! node -v v10.16.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 
npm WARN [email protected] No repository field.

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2019-08-16T00_48_04_399Z-debug.log

Error: Module version mismatch. Expected 50, got 48.module (Electron)

I've want to use rpi-gpio within electron and got the following error, I figured out that it's an issue of epoll. Would be very thankful for any help!

bindings.js:83 Uncaught Error: Module version mismatch. Expected 50, got 48.module.(anonymous function) @ ELECTRON_ASAR.js:168Module._extensions..node @ module.js:583module.(anonymous function) @ ELECTRON_ASAR.js:168Module.load @ module.js:473tryModuleLoad @ module.js:432Module._load @ module.js:424Module.require @ module.js:483require @ internal/module.js:20bindings @ bindings.js:76(anonymous function) @ epoll.js:1Module._compile @ module.js:556require.extensions.(anonymous function) @ require-hook.js:17Module.load @ module.js:473tryModuleLoad @ module.js:432Module._load @ module.js:424Module.require @ module.js:483require @ internal/module.js:20(anonymous function) @ rpi-gpio.js:6Module._compile @ module.js:556require.extensions.(anonymous function) @ require-hook.js:17Module.load @ module.js:473tryModuleLoad @ module.js:432Module._load @ module.js:424Module.require @ module.js:483require @ internal/module.js:20(anonymous function) @ index.html:inline_0.js:26

Removing fd from epoll does not work

Hi,

I got a 3300Hz pulse attached to a RPI2 GPIO pin. And if I test the interrupts with this script

// echo 17 > /sys/class/gpio/export
// echo in > /sys/class/gpio/gpio17/direction
// echo rising > /sys/class/gpio/gpio17/edge

var Epoll = require('epoll').Epoll,
  fs = require('fs'),
  inputfd = fs.openSync('/sys/class/gpio/gpio17/value', 'r+'),
  value = new Buffer(1),  // The three Buffers here are global
  count = 0,
  time;

// Create a new Epoll. The callback is the interrupt handler.
var poller = new Epoll(function (err, fd, events) {
  count++;
  // Read GPIO value file. Reading also clears the interrupt.
  fs.readSync(inputfd, value, 0, 1, 0);
});

time = process.hrtime(); // Get start time.

// Start watching for interrupts. This will trigger the first interrupt
// as the value file already has data waiting for a read.
poller.add(inputfd, Epoll.EPOLLPRI);

// Print interrupt rate to console after 5 seconds.
setTimeout(function () {
  var rate;

  time = process.hrtime(time); // Get run time.
  rate = Math.floor(count / (time[0] + time[1] / 1E9));
  console.log(rate + ' interrupts per second');

  // Stop watching.
  poller.remove(inputfd).close();
}, 5000);

the kworker process still is at ~8% cpu usage after the script has finished. If I disconnect the source from the pin the cpu usage goes down to 0%, so I think the deregistration of the fd does not work properly.

// Edit:
Linux raspberrypi 4.1.17-v7+ #838 SMP Tue Feb 9 13:15:09 GMT 2016 armv7l GNU/Linux

Timeout waiting for hardware interrupt

I was able to listen to GPIO input, but after several seconds, I get the ff error:

[  687.896153] mmc0: Timeout waiting for hardware interrupt.
[  687.901399] mmc0: sdhci: ============ SDHCI REGISTER DUMP ===========
[  687.908151] mmc0: sdhci: Sys addr:  0x00000000 | Version:  0x00000002
[  687.914725] mmc0: sdhci: Blk size:  0x00007200 | Blk cnt:  0x00000000
[  687.921296] mmc0: sdhci: Argument:  0x018488b8 | Trn mode: 0x00000023
[  687.928229] mmc0: sdhci: Present:   0x01f00000 | Host ctl: 0x00000013
[  687.935071] mmc0: sdhci: Power:     0x0000000f | Blk gap:  0x00000000
[  687.941383] mmc0: sdhci: Wake-up:   0x00000000 | Clock:    0x00000807
[  687.948313] mmc0: sdhci: Timeout:   0x0000000e | Int stat: 0x00000003
[  687.954977] mmc0: sdhci: Int enab:  0x02ff004b | Sig enab: 0x02ff004b
[  687.961730] mmc0: sdhci: AC12 err:  0x00000000 | Slot int: 0x00000001
[  687.968310] mmc0: sdhci: Caps:      0x25e80099 | Caps_1:   0x0000af77
[  687.974794] mmc0: sdhci: Cmd:       0x0000193a | Max curr: 0x00000000
[  687.981727] mmc0: sdhci: Resp[0]:   0x00000900 | Resp[1]:  0x00000000
[  687.988217] mmc0: sdhci: Resp[2]:   0x00000000 | Resp[3]:  0x00000000
[  687.994791] mmc0: sdhci: Host ctl2: 0x00000000
[  687.999565] mmc0: sdhci: ADMA Err:  0x00000000 | ADMA Ptr: 0x3b07e208
[  688.005959] mmc0: sdhci: ============================================

Here is my code snippet:

      function onChange(val) {

        if (has_detected) {
          time_now += interval
          diff = time_now - last_detect_time

          console.log('diff: ', diff)

          if (diff > interval * 3) {
            //console.log('payment: ', current_total)
            payment.received(current_total);
            current_total = 0
            diff = 0
            time_now = 0
            last_detect_time = 0
            has_detected = false
          }
        }

        if (prev === 1 && val === 0) {
          has_detected = true
          last_detect_time = time_now
          current_total += 1
        }

        prev = val

      }

      let valuefd = fs.openSync(gpio_val, 'r')
      let buffer = new Buffer(1)
      let poller = new Epoll((err, fd, events) => {
        // Read GPIO value file. Reading also clears the interrupt.
        fs.readSync(fd, buffer, 0, 1, 0)
        let v = buffer.toString() === '1' ? 1 : 0
        onChange(v)
      })

      // Read the GPIO value file before watching to
      // prevent an initial unauthentic interrupt.
      fs.readSync(valuefd, buffer, 0, 1, 0);

      // Start watching for interrupts.
      poller.add(valuefd, Epoll.EPOLLPRI);

Installing dummy module for Windows

Hi --

I know this project makes no sense in running on Windows, but I do all of my development on a Windows machine before doing testing on my Raspberry Pi. As such, in my code I've abstracted away the actual calls to rpi-gpio (which uses epoll) such that I never actually invoke any code which hits epoll.

However, Node still complains that the module did not self-register even though the methods will not be called.

A quick work-around I had was to modify epoll.cc and epoll.h slightly to provide an implementation for Windows platform which does nothing. Only registers the module and provides no implementation for the API. I assume I could just no-op all of the methods so it won't blow up when trying to call them, will test this out.

My question is, would such a contribution be useful for this project? Or should I keep this in my own fork (and subsequent forked npm package)?

Thanks for the useful project!

epoll 64bit support for Raspberry Pi 4B error epoll.node: wrong ELF class: ELFCLASS64

After giving up on fighting with getting my program running on my Banana Pi M64 I learned that Raspberry Pi had released a V4 with better performance specs, cheaper price than the BPi and more readily available via Amazon Prime. It's been much smoother sailing until I ran into this error.

Does epoll not support 64 bit system architecture? Is there a work-around I can try?

Error: /node_modules/epoll/build/Release/epoll.node: wrong ELF class: ELFCLASS64
    at Object.Module._extensions..node (internal/modules/cjs/loader.js:1003:18)
    at Module.load (internal/modules/cjs/loader.js:812:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Module.require (internal/modules/cjs/loader.js:849:19)
    at require (internal/modules/cjs/helpers.js:74:18)
    at bindings (node_modules/bindings/bindings.js:112:48)
    at node_modules/epoll/epoll.js:7:31
    at Object.<anonymous> (node_modules/epoll/epoll.js:15:3)
    at Module._compile (internal/modules/cjs/loader.js:956:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)

libuv compatibility

Recent versions of libuv functions return -errno on error, older versions don't. For example, here's how uv_sem_init is implemented in libuv v0.11.1 and v0.11.14 respectively:

int uv_sem_init(uv_sem_t* sem, unsigned int value) {
  return sem_init(sem, 0, value);
}
int uv_sem_init(uv_sem_t* sem, unsigned int value) {
  if (sem_init(sem, 0, value))
    return -errno;
  return 0;
}

Take this into account.

Build failing on RPI 2

Having a issue install a package (rpi-gpio) that uses epoll. As far as I can tell it is epolls' build that is failing.. Any pointers?

pi@raspberrypi:~/server $ npm install

> [email protected] install /home/pi/server/node_modules/epoll
> node-gyp rebuild

gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
make: Entering directory '/home/pi/server/node_modules/epoll/build'
  CXX(target) Release/obj.target/epoll/src/epoll.o
In file included from ../../nan/nan.h:192:0,
                 from ../src/epoll.cc:15:
../../nan/nan_maybe_43_inl.h: In function ‘Nan::Maybe<bool> Nan::ForceSet(v8::Local<v8::Object>, v8::Local<v8::Value>, v8::Local<v8::Value>, v8::PropertyAttribute)’:
../../nan/nan_maybe_43_inl.h:112:15: error: ‘class v8::Object’ has no member named ‘ForceSet’
   return obj->ForceSet(isolate->GetCurrentContext(), key, value, attribs);
               ^
In file included from ../src/epoll.cc:15:0:
../../nan/nan.h: In function ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’:
../../nan/nan.h:835:60: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated (declared at /home/pi/.node-gyp/10.4.1/include/node/node.h:171): Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, func, argc, argv);
                                                            ^
../../nan/nan.h: In function ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)’:
../../nan/nan.h:850:62: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)’ is deprecated (declared at /home/pi/.node-gyp/10.4.1/include/node/node.h:164): Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, symbol, argc, argv);
                                                              ^
../../nan/nan.h: In function ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)’:
../../nan/nan.h:865:62: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)’ is deprecated (declared at /home/pi/.node-gyp/10.4.1/include/node/node.h:157): Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
         v8::Isolate::GetCurrent(), target, method, argc, argv);
                                                              ^
../../nan/nan.h: In member function ‘v8::Local<v8::Value> Nan::Callback::Call_(v8::Isolate*, v8::Local<v8::Object>, int, v8::Local<v8::Value>*) const’:
../../nan/nan.h:1479:5: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated (declared at /home/pi/.node-gyp/10.4.1/include/node/node.h:171): Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
     ));
     ^
epoll.target.mk:95: recipe for target 'Release/obj.target/epoll/src/epoll.o' failed
make: *** [Release/obj.target/epoll/src/epoll.o] Error 1
make: Leaving directory '/home/pi/server/node_modules/epoll/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/home/pi/.nvm/versions/node/v10.4.1/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:258:23)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:237:12)
gyp ERR! System Linux 4.4.13-v7+
gyp ERR! command "/home/pi/.nvm/versions/node/v10.4.1/bin/node" "/home/pi/.nvm/versions/node/v10.4.1/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pi/server/node_modules/epoll
gyp ERR! node -v v10.4.1
gyp ERR! node-gyp -v v3.6.2
gyp ERR! not ok 
npm WARN [email protected] No description
npm WARN [email protected] No repository field.

npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /home/pi/.npm/_logs/2018-06-13T01_53_41_156Z-debug.log
pi@raspberrypi:~/server $ 

Epoll.EPOLLET.toString(16) returns -80000000

Currently Epoll.EPOLLET is -0x80000000 but it should be 0x80000000. This results in the calls to args[1]->IsUint32() in the Add and Modify methods rejecting Epoll.EPOLLET as an invalid argument.

Failed at the [email protected] install script 'node-gyp rebuild'.

I get error message while installing epoll.

Here is error mesage:

npm ERR! [email protected] install: node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! This is most likely a problem with the epoll package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs epoll
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!
npm ERR! npm owner ls epoll

Segmentation fault

In some scenarios there can be segmentation faults. This is probably because Ref/Unref is not being used for Epoll instances.

Error: The module epoll.node was compiled against a different Node.js version using NODE_MODULE_VERSION 93

Hi, I'm getting incompatibility errors when using onoff (which has dependency on this project's latest version). Would you be able to recompile against the newest Node LTS version which is 16.13.0 at the moment?

Full error:

Error: The module /local/path/epoll.node was compiled against a different Node.js version using NODE_MODULE_VERSION 93. This version of Node.js requires NODE_MODULE_VERSION 85.

rebuilding with npm rebuild epoll --update-binary does not help

Thanks in advance!

Refactor interrupts per second example

The Linux 3.13 kernel dropped support for detecting changes on GPIO output pins per hardware interrupt.

The interrupts per second example currently relies on this feature and needs to be refactored to use an alternative technique.

epoll interrupt handling any more robust now?

A couple years ago I tried using epoll via this package for interrupt handling and I had a heck of time with none or excessive tripping. I tried all manner of debouncing to no avail. I gave up and started using pigpio which was way more stable and many times did not require any debouncing (for interrupt by physical switch). That code has now been battle tested for two years (I have 64 physical switches connected on 4 mcp23017 chips throwing interrupts via 8 pins on gpio bus).

That's all good but of course pigio library requires pi hardware and the pigioc library. That leaves out all my new groovy sbcs :-(.

Now two years later do you feel using your epoll package (via onoff) for interrupts is any more robust and stable on par with pigio? Were there interrupt issues that you specifically addressed in the last two years?

If so maybe I'll give onoff another shot.
I suppose I'll have to try implementing this anyway as I (and many others) are moving from pi hardware and thus the pigio library.


Do you know of any non epoll ways to monitor linux interrupts on say a rockchip64? I guess this is all a can of worms every sbc having different hardware architecture even if they share the same processor. Seems like a manufacturer should supply a devicetree module for their gpio bus interrupt with some standard software interface API.

can't install epoll on Raspi1 B

I'm trying to install [epoll] on my pi(RPi 1 model B 700Mz 256MB).
My node version is:v0.12.0

I'm running this command:

sudo npm install --unsafe-perm epoll

and getting back this error:

> [email protected] install /home/pi/node_modules/epoll
> node-gyp rebuild

child_process: customFds option is deprecated, use stdio instead.
gyp: /root/.node-gyp/0.12.0/common.gypi not found (cwd: /home/pi/node_modules/epoll) while reading includes of binding.gyp while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:343:16)
gyp ERR! stack     at ChildProcess.emit (events.js:110:17)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (child_process.js:1067:12)
gyp ERR! System Linux 3.12.26-rpi-aufs
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pi/node_modules/epoll
gyp ERR! node -v v0.12.0
gyp ERR! node-gyp -v v1.0.2
gyp ERR! not ok
npm ERR! Linux 3.12.26-rpi-aufs
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "--unsafe-perm" "epoll"
npm ERR! node v0.12.0
npm ERR! npm  v2.5.1
npm ERR! code ELIFECYCLE

npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! This is most likely a problem with the epoll package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls epoll
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/pi/npm-debug.log

Any idea why?
Note: All this works fine in my RPi2 model B.

Cannot install rpi-gpio using Docker using: HypriotOS (Host), Raspbian (Virtual OS), node v4.2.1, npm v3.9.5

gyp WARN install got an error, rolling back install
gyp ERR! configure error
gyp ERR! stack Error: connect ENETUNREACH 2400:cb00:2048:1::6814:172e:443 - Local (:::0)
gyp ERR! stack at Object.exports._errnoException (util.js:874:11)
gyp ERR! stack at exports._exceptionWithHostPort (util.js:897:20)
gyp ERR! stack at connect (net.js:841:14)
gyp ERR! stack at net.js:984:7
gyp ERR! stack at GetAddrInfoReqWrap.asyncCallback as callback
gyp ERR! stack at GetAddrInfoReqWrap.onlookup as oncomplete
gyp ERR! System Linux 4.4.10-hypriotos-v7+
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 /src/node_modules/epoll
gyp ERR! node -v v4.2.1
gyp ERR! node-gyp -v v3.3.1
gyp ERR! not ok

(...)

npm ERR! Linux 4.4.10-hypriotos-v7+
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install"
npm ERR! node v4.2.1
npm ERR! npm v3.9.5
npm ERR! code ELIFECYCLE

npm ERR! [email protected] install: node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the epoll package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs epoll
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls epoll
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR! /src/npm-debug.log

Can't install epoll module on raspian

Installing the epoll module on my Raspberry Pi 3 fails with the following error:

> [email protected] install /home/pi/bsc-ampel/node_modules/epoll
> node-gyp rebuild

Traceback (most recent call last):
  File "/usr/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py", line 13, in <module>
    import gyp
  File "/usr/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/__init__.py", line 8, in <module>
    import gyp.input
  File "/usr/lib/node_modules/npm/node_modules/node-gyp/gyp/pylib/gyp/input.py", line 5, in <module>
    from compiler.ast import Const
  File "/usr/lib/python2.7/compiler/__init__.py", line 29, in <module>
    from compiler.transformer import parse, parseFile
  File "/usr/lib/python2.7/compiler/transformer.py", line 28, in <module>
    from compiler.ast import *
ValueError: bad marshal data (unknown type code)
gyp ERR! configure error 
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onCpExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:345:16)
gyp ERR! stack     at ChildProcess.emit (events.js:182:13)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:238:12)
gyp ERR! System Linux 4.14.52-v7+
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/pi/bsc-ampel/node_modules/epoll
gyp ERR! node -v v10.8.0
gyp ERR! node-gyp -v v3.8.0
gyp ERR! not ok 

To give some context, I use it in the following project: https://github.com/gingters/bsc-ampel
I did a fresh npm install and that fails with the aforementioned problem.
I then have to rebuild that for electron, to use that in the app, but already the first installation and compilation for node fails.

That worked two or three weeks ago (with an older version, I think 2.0.3), and now I don't know how to solve that. Please advise.

error: static assertion failed: Pointer compression can be enabled only for 64-bit architectures

Building with [email protected] fails with:
error: static assertion failed: Pointer compression can be enabled only for 64-bit architectures

Any suggestions on how to fix this?

Below is the full log.

⠋ Building module: epoll, Completed: 0In file included from /home/pi/.electron-gyp/16.0.5/include/node/v8-local-handle.h:12,
                 from /home/pi/.electron-gyp/16.0.5/include/node/v8-array-buffer.h:12,
                 from /home/pi/.electron-gyp/16.0.5/include/node/v8.h:25,
                 from ../src/epoll.cc:11:
/home/pi/.electron-gyp/16.0.5/include/node/v8-internal.h:113:27: error: static assertion failed: Pointer compression can be enabled only for 64-bit architectures
     kApiSystemPointerSize == kApiInt64Size,
     ~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~
/home/pi/.electron-gyp/16.0.5/include/node/v8-internal.h:471:71: warning: left shift count >= width of type [-Wshift-count-overflow]
   static constexpr size_t kPtrComprCageReservationSize = size_t{1} << 32;
                                                                       ^~
/home/pi/.electron-gyp/16.0.5/include/node/v8-internal.h:471:68: error: right operand of shift expression ‘(1 << 32)’ is >= than the precision of the left operand [-fpermissive]
   static constexpr size_t kPtrComprCageReservationSize = size_t{1} << 32;
                                                          ~~~~~~~~~~^~~~~
/home/pi/.electron-gyp/16.0.5/include/node/v8-internal.h:472:69: warning: left shift count >= width of type [-Wshift-count-overflow]
   static constexpr size_t kPtrComprCageBaseAlignment = size_t{1} << 32;
                                                                     ^~
/home/pi/.electron-gyp/16.0.5/include/node/v8-internal.h:472:66: error: right operand of shift expression ‘(1 << 32)’ is >= than the precision of the left operand [-fpermissive]
   static constexpr size_t kPtrComprCageBaseAlignment = size_t{1} << 32;
                                                        ~~~~~~~~~~^~~~~
⠧ Building module: epoll, Completed: 0make: *** [epoll.target.mk:125: Release/obj.target/epoll/src/epoll.o] Error 1
make: Leaving directory '/home/pi/MagicMirror/modules/MMM-PIR-Sensor/node_modules/epoll/build'
✖ Rebuild Failed

Failure to install epoll

I'm trying to install onoff on a Raspberry Pi 3 and it's failing due to an epoll error, apparently. The OS is DietPi, which is based on Debian 11 bullseye. It's a freshly-installed system, the Node version is v16.14.2 and npm is v8.7.0.

Issue #44 seems similar, but this doesn't seem to be a Python issue. In the debug logs below you can see it finds Python 3.9.2. Any idea what's wrong here? Thanks a lot in advance!

$ npm install onoff --verbose
npm verb cli /usr/bin/node /usr/bin/npm
npm info using [email protected]
npm info using [email protected]
npm timing npm:load:whichnode Completed in 1ms
npm timing config:load:defaults Completed in 10ms
npm timing config:load:file:/usr/lib/node_modules/npm/npmrc Completed in 7ms
npm timing config:load:builtin Completed in 9ms
npm timing config:load:cli Completed in 14ms
npm timing config:load:env Completed in 2ms
npm timing config:load:file:/home/dietpi/MagicMirror/modules/MMM-ScreenControl/.npmrc Completed in 1ms
npm timing config:load:project Completed in 21ms
npm timing config:load:file:/home/dietpi/.npmrc Completed in 0ms
npm timing config:load:user Completed in 3ms
npm timing config:load:file:/usr/etc/npmrc Completed in 1ms
npm timing config:load:global Completed in 1ms
npm timing config:load:validate Completed in 1ms
npm timing config:load:credentials Completed in 4ms
npm timing config:load:setEnvs Completed in 5ms
npm timing config:load Completed in 77ms
npm timing npm:load:configload Completed in 78ms
npm timing npm:load:mkdirpcache Completed in 10ms
npm timing npm:load:mkdirplogs Completed in 2ms
npm verb title npm install
npm verb argv "install" "--loglevel" "verbose"
npm timing npm:load:setTitle Completed in 8ms
npm timing config:load:flatten Completed in 19ms
npm timing npm:load:display Completed in 68ms
npm verb logfile logs-max:10 dir:/home/dietpi/.npm/_logs
npm verb logfile /home/dietpi/.npm/_logs/2022-04-24T14_27_50_634Z-debug-0.log
npm timing npm:load:logFile Completed in 40ms
npm timing npm:load:timers Completed in 1ms
npm timing npm:load:configScope Completed in 1ms
npm timing npm:load Completed in 223ms
npm timing arborist:ctor Completed in 5ms
npm timing arborist:ctor Completed in 1ms
npm timing idealTree:init Completed in 91ms
npm timing idealTree:userRequests Completed in 1ms
npm http fetch GET 200 https://registry.npmjs.org/cron 1724ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/onoff 824ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/moment-timezone 168ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/epoll 879ms (cache revalidated)
npm timing idealTree:#root Completed in 3688ms
npm http fetch GET 200 https://registry.npmjs.org/moment 158ms (cache revalidated)
npm timing idealTree:node_modules/cron Completed in 213ms
npm timing idealTree:node_modules/moment-timezone Completed in 33ms
npm timing idealTree:node_modules/moment Completed in 1ms
npm http fetch GET 200 https://registry.npmjs.org/nan 311ms (cache revalidated)
npm http fetch GET 200 https://registry.npmjs.org/bindings 407ms (cache revalidated)
npm timing idealTree:node_modules/onoff Completed in 465ms
npm timing idealTree:node_modules/epoll Completed in 148ms
npm timing idealTree:node_modules/bindings Completed in 1ms
npm timing idealTree:node_modules/nan Completed in 1ms
npm timing idealTree:buildDeps Completed in 4595ms
npm timing idealTree:fixDepFlags Completed in 30ms
npm timing idealTree Completed in 4755ms
npm timing reify:loadTrees Completed in 4765ms
npm timing reify:diffTrees Completed in 32ms
npm timing reify:retireShallow Completed in 22ms
npm timing reify:createSparse Completed in 63ms
npm timing reify:loadBundles Completed in 0ms
npm http fetch POST 200 https://registry.npmjs.org/-/npm/v1/security/advisories/bulk 1102ms
npm timing auditReport:getReport Completed in 1142ms
npm timing auditReport:init Completed in 0ms
npm timing reify:audit Completed in 1157ms
npm timing reifyNode:node_modules/bindings Completed in 1209ms
npm timing reifyNode:node_modules/epoll Completed in 1655ms
npm timing reifyNode:node_modules/cron Completed in 1663ms
npm timing reifyNode:node_modules/onoff Completed in 1703ms
npm timing reifyNode:node_modules/nan Completed in 1849ms
npm timing reifyNode:node_modules/moment-timezone Completed in 1909ms
npm timing reifyNode:node_modules/moment Completed in 3209ms
npm timing reify:unpack Completed in 3220ms
npm timing reify:unretire Completed in 1ms
npm timing build:queue Completed in 9ms
npm info run [email protected] install node_modules/epoll node-gyp rebuild
npm info run [email protected] install { code: 1, signal: null }
npm timing reify:rollback:createSparse Completed in 551ms
npm timing reify:rollback:retireShallow Completed in 0ms
npm timing command:install Completed in 19013ms
npm verb stack Error: command failed
npm verb stack     at ChildProcess.<anonymous> (/usr/lib/node_modules/npm/node_modules/@npmcli/promise-spawn/lib/index.js:63:27)
npm verb stack     at ChildProcess.emit (node:events:526:28)
npm verb stack     at maybeClose (node:internal/child_process:1092:16)
npm verb stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:302:5)
npm verb pkgid [email protected]
npm verb cwd /home/dietpi/MagicMirror/modules/MMM-ScreenControl
npm verb Linux 5.15.32-v7+
npm verb node v16.14.2
npm verb npm  v8.7.0
npm ERR! code 1
npm ERR! path /home/dietpi/MagicMirror/modules/MMM-ScreenControl/node_modules/epoll
npm ERR! command failed
npm ERR! command sh -c node-gyp rebuild
npm ERR! make: Entering directory '/home/dietpi/MagicMirror/modules/MMM-ScreenControl/node_modules/epoll/build'
npm ERR!   g++ -o Release/obj.target/epoll/src/epoll.o ../src/epoll.cc '-DNODE_GYP_MODULE_NAME=epoll' '-DUSING_UV_SHARED=1' '-DUSING_V8_SHARED=1' '-DV8_DEPRECATION_WARNINGS=1' '-DV8_DEPRECATION_WARNINGS' '-DV8_IMMINENT_DEPRECATION_WARNINGS' '-D_GLIBCXX_USE_CXX11_ABI=1' '-D_LARGEFILE_SOURCE' '-D_FILE_OFFSET_BITS=64' '-D__STDC_FORMAT_MACROS' '-DOPENSSL_NO_PINSHARED' '-DOPENSSL_THREADS' '-DBUILDING_NODE_EXTENSION' -I/home/dietpi/.cache/node-gyp/16.14.2/include/node -I/home/dietpi/.cache/node-gyp/16.14.2/src -I/home/dietpi/.cache/node-gyp/16.14.2/deps/openssl/config -I/home/dietpi/.cache/node-gyp/16.14.2/deps/openssl/openssl/include -I/home/dietpi/.cache/node-gyp/16.14.2/deps/uv/include -I/home/dietpi/.cache/node-gyp/16.14.2/deps/zlib -I/home/dietpi/.cache/node-gyp/16.14.2/deps/v8/include -I../../nan  -fPIC -pthread -Wall -Wextra -Wno-unused-parameter -Wno-unused-local-typedefs -O3 -fno-omit-frame-pointer -fno-rtti -fno-exceptions -std=gnu++14 -MMD -MF ./Release/.deps/Release/obj.target/epoll/src/epoll.o.d.raw   -c
npm ERR! make: Leaving directory '/home/dietpi/MagicMirror/modules/MMM-ScreenControl/node_modules/epoll/build'
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp verb cli [
npm ERR! gyp verb cli   '/usr/bin/node',
npm ERR! gyp verb cli   '/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js',
npm ERR! gyp verb cli   'rebuild'
npm ERR! gyp verb cli ]
npm ERR! gyp info using [email protected]
npm ERR! gyp info using [email protected] | linux | arm
npm ERR! gyp verb command rebuild []
npm ERR! gyp verb command clean []
npm ERR! gyp verb clean removing "build" directory
npm ERR! gyp verb command configure []
npm ERR! gyp verb find Python Python is not set from command line or npm configuration
npm ERR! gyp verb find Python Python is not set from environment variable PYTHON
npm ERR! gyp verb find Python checking if "python3" can be used
npm ERR! gyp verb find Python - executing "python3" to get executable path
npm ERR! gyp verb find Python - executable path is "/usr/bin/python3"
npm ERR! gyp verb find Python - executing "/usr/bin/python3" to get version
npm ERR! gyp verb find Python - version is "3.9.2"
npm ERR! gyp info find Python using Python version 3.9.2 found at "/usr/bin/python3"
npm ERR! gyp verb get node dir no --target version specified, falling back to host node version: 16.14.2
npm ERR! gyp verb command install [ '16.14.2' ]
npm ERR! gyp verb install input version string "16.14.2"
npm ERR! gyp verb install installing version: 16.14.2
npm ERR! gyp verb install --ensure was passed, so won't reinstall if already installed
npm ERR! gyp verb install version is already installed, need to check "installVersion"
npm ERR! gyp verb got "installVersion" 9
npm ERR! gyp verb needs "installVersion" 9
npm ERR! gyp verb install version is good
npm ERR! gyp verb get node dir target node version installed: 16.14.2
npm ERR! gyp verb build dir attempting to create "build" dir: /home/dietpi/MagicMirror/modules/MMM-ScreenControl/node_modules/epoll/build
npm ERR! gyp verb build dir "build" dir needed to be created? Yes
npm ERR! gyp verb build/config.gypi creating config file
npm ERR! gyp verb build/config.gypi writing out config file: /home/dietpi/MagicMirror/modules/MMM-ScreenControl/node_modules/epoll/build/config.gypi
npm ERR! gyp verb config.gypi checking for gypi file: /home/dietpi/MagicMirror/modules/MMM-ScreenControl/node_modules/epoll/config.gypi
npm ERR! gyp verb common.gypi checking for gypi file: /home/dietpi/MagicMirror/modules/MMM-ScreenControl/node_modules/epoll/common.gypi
npm ERR! gyp verb gyp gyp format was not specified; forcing "make"
npm ERR! gyp info spawn /usr/bin/python3
npm ERR! gyp info spawn args [
npm ERR! gyp info spawn args   '/usr/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py',
npm ERR! gyp info spawn args   'binding.gyp',
npm ERR! gyp info spawn args   '-f',
npm ERR! gyp info spawn args   'make',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/home/dietpi/MagicMirror/modules/MMM-ScreenControl/node_modules/epoll/build/config.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/usr/lib/node_modules/npm/node_modules/node-gyp/addon.gypi',
npm ERR! gyp info spawn args   '-I',
npm ERR! gyp info spawn args   '/home/dietpi/.cache/node-gyp/16.14.2/include/node/common.gypi',
npm ERR! gyp info spawn args   '-Dlibrary=shared_library',
npm ERR! gyp info spawn args   '-Dvisibility=default',
npm ERR! gyp info spawn args   '-Dnode_root_dir=/home/dietpi/.cache/node-gyp/16.14.2',
npm ERR! gyp info spawn args   '-Dnode_gyp_dir=/usr/lib/node_modules/npm/node_modules/node-gyp',
npm ERR! gyp info spawn args   '-Dnode_lib_file=/home/dietpi/.cache/node-gyp/16.14.2/<(target_arch)/node.lib',
npm ERR! gyp info spawn args   '-Dmodule_root_dir=/home/dietpi/MagicMirror/modules/MMM-ScreenControl/node_modules/epoll',
npm ERR! gyp info spawn args   '-Dnode_engine=v8',
npm ERR! gyp info spawn args   '--depth=.',
npm ERR! gyp info spawn args   '--no-parallel',
npm ERR! gyp info spawn args   '--generator-output',
npm ERR! gyp info spawn args   'build',
npm ERR! gyp info spawn args   '-Goutput_dir=.'
npm ERR! gyp info spawn args ]
npm ERR! gyp verb command build []
npm ERR! gyp verb build type Release
npm ERR! gyp verb architecture arm
npm ERR! gyp verb node dev dir /home/dietpi/.cache/node-gyp/16.14.2
npm ERR! gyp verb `which` succeeded for `make` /usr/bin/make
npm ERR! gyp info spawn make
npm ERR! gyp info spawn args [ 'V=1', 'BUILDTYPE=Release', '-C', 'build' ]
npm ERR! In file included from ../../nan/nan_converters.h:67,
npm ERR!                  from ../../nan/nan.h:202,
npm ERR!                  from ../src/epoll.cc:15:
npm ERR! ../../nan/nan_converters_43_inl.h: In static member function ‘static Nan::imp::ToFactoryBase<v8::Boolean>::return_t Nan::imp::ToFactory<v8::Boolean>::convert(v8::Local<v8::Value>)’:
npm ERR! ../../nan/nan_converters_43_inl.h:18:67: error: cannot convert ‘v8::Local<v8::Context>’ to ‘v8::Isolate*’
npm ERR!    18 |       val->To ## TYPE(v8::Isolate::GetCurrent()->GetCurrentContext())          \
npm ERR!       |                       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~
npm ERR!       |                                                                   |
npm ERR!       |                                                                   v8::Local<v8::Context>
npm ERR! ../../nan/nan_converters_43_inl.h:22:1: note: in expansion of macro ‘X’
npm ERR!    22 | X(Boolean)
npm ERR!       | ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3086:37: note:   initializing argument 1 of ‘v8::Local<v8::Boolean> v8::Value::ToBoolean(v8::Isolate*) const’
npm ERR!  3086 |   Local<Boolean> ToBoolean(Isolate* isolate) const;
npm ERR!       |                            ~~~~~~~~~^~~~~~~
npm ERR! In file included from ../../nan/nan_converters.h:67,
npm ERR!                  from ../../nan/nan.h:202,
npm ERR!                  from ../src/epoll.cc:15:
npm ERR! ../../nan/nan_converters_43_inl.h: In static member function ‘static Nan::imp::ValueFactoryBase<bool>::return_t Nan::imp::ToFactory<bool>::convert(v8::Local<v8::Value>)’:
npm ERR! ../../nan/nan_converters_43_inl.h:37:55: error: cannot convert ‘v8::Local<v8::Context>’ to ‘v8::Isolate*’
npm ERR!    37 |   return val->NAME ## Value(isolate->GetCurrentContext());                     \
npm ERR!       |                             ~~~~~~~~~~~~~~~~~~~~~~~~~~^~
npm ERR!       |                                                       |
npm ERR!       |                                                       v8::Local<v8::Context>
npm ERR! ../../nan/nan_converters_43_inl.h:40:1: note: in expansion of macro ‘X’
npm ERR!    40 | X(bool, Boolean)
npm ERR!       | ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3096:30: note:   initializing argument 1 of ‘bool v8::Value::BooleanValue(v8::Isolate*) const’
npm ERR!  3096 |   bool BooleanValue(Isolate* isolate) const;
npm ERR!       |                     ~~~~~~~~~^~~~~~~
npm ERR! In file included from ../../nan/nan_new.h:189,
npm ERR!                  from ../../nan/nan.h:203,
npm ERR!                  from ../src/epoll.cc:15:
npm ERR! ../../nan/nan_implementation_12_inl.h: In static member function ‘static Nan::imp::FactoryBase<v8::Function>::return_t Nan::imp::Factory<v8::Function>::New(Nan::FunctionCallback, v8::Local<v8::Value>)’:
npm ERR! ../../nan/nan_implementation_12_inl.h:103:42: error: cannot convert ‘v8::Isolate*’ to ‘v8::Local<v8::Context>’
npm ERR!   103 |   return scope.Escape(v8::Function::New( isolate
npm ERR!       |                                          ^~~~~~~
npm ERR!       |                                          |
npm ERR!       |                                          v8::Isolate*
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:4754:22: note:   initializing argument 1 of ‘static v8::MaybeLocal<v8::Function> v8::Function::New(v8::Local<v8::Context>, v8::FunctionCallback, v8::Local<v8::Value>, int, v8::ConstructorBehavior, v8::SideEffectType)’
npm ERR!  4754 |       Local<Context> context, FunctionCallback callback,
npm ERR!       |       ~~~~~~~~~~~~~~~^~~~~~~
npm ERR! In file included from ../../nan/nan_new.h:189,
npm ERR!                  from ../../nan/nan.h:203,
npm ERR!                  from ../src/epoll.cc:15:
npm ERR! ../../nan/nan_implementation_12_inl.h: In static member function ‘static Nan::imp::FactoryBase<v8::StringObject>::return_t Nan::imp::Factory<v8::StringObject>::New(v8::Local<v8::String>)’:
npm ERR! ../../nan/nan_implementation_12_inl.h:337:37: error: no matching function for call to ‘v8::StringObject::New(v8::Local<v8::String>&)’
npm ERR!   337 |   return v8::StringObject::New(value).As<v8::StringObject>();
npm ERR!       |                                     ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:6196:23: note: candidate: ‘static v8::Local<v8::Value> v8::StringObject::New(v8::Isolate*, v8::Local<v8::String>)’
npm ERR!  6196 |   static Local<Value> New(Isolate* isolate, Local<String> value);
npm ERR!       |                       ^~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:6196:23: note:   candidate expects 2 arguments, 1 provided
npm ERR! In file included from ../../nan/nan_new.h:189,
npm ERR!                  from ../../nan/nan.h:203,
npm ERR!                  from ../src/epoll.cc:15:
npm ERR! ../../nan/nan_implementation_12_inl.h:337:58: error: expected primary-expression before ‘>’ token
npm ERR!   337 |   return v8::StringObject::New(value).As<v8::StringObject>();
npm ERR!       |                                                          ^
npm ERR! ../../nan/nan_implementation_12_inl.h:337:60: error: expected primary-expression before ‘)’ token
npm ERR!   337 |   return v8::StringObject::New(value).As<v8::StringObject>();
npm ERR!       |                                                            ^
npm ERR! In file included from ../src/epoll.cc:15:
npm ERR! ../../nan/nan.h: In function ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’:
npm ERR! ../../nan/nan.h:840:60: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
npm ERR!   840 |         v8::Isolate::GetCurrent(), target, func, argc, argv);
npm ERR!       |                                                            ^
npm ERR! In file included from ../src/epoll.cc:12:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/node.h:184:50: note: declared here
npm ERR!   184 |                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
npm ERR!       |                                                  ^~~~~~~~~~~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/node.h:101:42: note: in definition of macro ‘NODE_DEPRECATED’
npm ERR!   101 |     __attribute__((deprecated(message))) declarator
npm ERR!       |                                          ^~~~~~~~~~
npm ERR! In file included from ../src/epoll.cc:15:
npm ERR! ../../nan/nan.h: In function ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)’:
npm ERR! ../../nan/nan.h:855:62: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::String>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
npm ERR!   855 |         v8::Isolate::GetCurrent(), target, symbol, argc, argv);
npm ERR!       |                                                              ^
npm ERR! In file included from ../src/epoll.cc:12:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/node.h:177:50: note: declared here
npm ERR!   177 |                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
npm ERR!       |                                                  ^~~~~~~~~~~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/node.h:101:42: note: in definition of macro ‘NODE_DEPRECATED’
npm ERR!   101 |     __attribute__((deprecated(message))) declarator
npm ERR!       |                                          ^~~~~~~~~~
npm ERR! In file included from ../src/epoll.cc:15:
npm ERR! ../../nan/nan.h: In function ‘v8::Local<v8::Value> Nan::MakeCallback(v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)’:
npm ERR! ../../nan/nan.h:870:62: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, const char*, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
npm ERR!   870 |         v8::Isolate::GetCurrent(), target, method, argc, argv);
npm ERR!       |                                                              ^
npm ERR! In file included from ../src/epoll.cc:12:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/node.h:170:50: note: declared here
npm ERR!   170 |                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
npm ERR!       |                                                  ^~~~~~~~~~~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/node.h:101:42: note: in definition of macro ‘NODE_DEPRECATED’
npm ERR!   101 |     __attribute__((deprecated(message))) declarator
npm ERR!       |                                          ^~~~~~~~~~
npm ERR! In file included from ../src/epoll.cc:15:
npm ERR! ../../nan/nan.h: In constructor ‘Nan::Utf8String::Utf8String(v8::Local<v8::Value>)’:
npm ERR! ../../nan/nan.h:916:53: error: no matching function for call to ‘v8::Value::ToString()’
npm ERR!   916 |       v8::Local<v8::String> string = from->ToString();
npm ERR!       |                                                     ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3048:44: note: candidate: ‘v8::MaybeLocal<v8::String> v8::Value::ToString(v8::Local<v8::Context>) const’
npm ERR!  3048 |   V8_WARN_UNUSED_RESULT MaybeLocal<String> ToString(
npm ERR!       |                                            ^~~~~~~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3048:44: note:   candidate expects 1 argument, 0 provided
npm ERR! In file included from ../src/epoll.cc:15:
npm ERR! ../../nan/nan.h:926:37: error: cannot convert ‘char*’ to ‘v8::Isolate*’
npm ERR!   926 |         length_ = string->WriteUtf8(str_, static_cast<int>(len), 0, flags);
npm ERR!       |                                     ^~~~
npm ERR!       |                                     |
npm ERR!       |                                     char*
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3277:26: note:   initializing argument 1 of ‘int v8::String::WriteUtf8(v8::Isolate*, char*, int, int*, int) const’
npm ERR!  3277 |   int WriteUtf8(Isolate* isolate, char* buffer, int length = -1,
npm ERR!       |                 ~~~~~~~~~^~~~~~~
npm ERR! In file included from ../src/epoll.cc:15:
npm ERR! ../../nan/nan.h: In member function ‘v8::Local<v8::Value> Nan::Callback::Call_(v8::Isolate*, v8::Local<v8::Object>, int, v8::Local<v8::Value>*) const’:
npm ERR! ../../nan/nan.h:1484:5: warning: ‘v8::Local<v8::Value> node::MakeCallback(v8::Isolate*, v8::Local<v8::Object>, v8::Local<v8::Function>, int, v8::Local<v8::Value>*)’ is deprecated: Use MakeCallback(..., async_context) [-Wdeprecated-declarations]
npm ERR!  1484 |     ));
npm ERR!       |     ^
npm ERR! In file included from ../src/epoll.cc:12:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/node.h:184:50: note: declared here
npm ERR!   184 |                 NODE_EXTERN v8::Local<v8::Value> MakeCallback(
npm ERR!       |                                                  ^~~~~~~~~~~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/node.h:101:42: note: in definition of macro ‘NODE_DEPRECATED’
npm ERR!   101 |     __attribute__((deprecated(message))) declarator
npm ERR!       |                                          ^~~~~~~~~~
npm ERR! In file included from ../src/epoll.cc:15:
npm ERR! ../../nan/nan.h: In member function ‘void Nan::AsyncWorker::SaveToPersistent(const char*, const v8::Local<v8::Value>&)’:
npm ERR! ../../nan/nan.h:1538:64: error: no matching function for call to ‘v8::Object::Set(v8::Local<v8::String>, const v8::Local<v8::Value>&)’
npm ERR!  1538 |     New(persistentHandle)->Set(New(key).ToLocalChecked(), value);
npm ERR!       |                                                                ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3961:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)’
npm ERR!  3961 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
npm ERR!       |                                     ^~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3961:37: note:   candidate expects 3 arguments, 2 provided
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3964:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)’
npm ERR!  3964 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
npm ERR!       |                                     ^~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3964:37: note:   candidate expects 3 arguments, 2 provided
npm ERR! In file included from ../src/epoll.cc:15:
npm ERR! ../../nan/nan.h: In member function ‘void Nan::AsyncWorker::SaveToPersistent(const v8::Local<v8::String>&, const v8::Local<v8::Value>&)’:
npm ERR! ../../nan/nan.h:1544:42: error: no matching function for call to ‘v8::Object::Set(const v8::Local<v8::String>&, const v8::Local<v8::Value>&)’
npm ERR!  1544 |     New(persistentHandle)->Set(key, value);
npm ERR!       |                                          ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3961:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)’
npm ERR!  3961 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
npm ERR!       |                                     ^~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3961:37: note:   candidate expects 3 arguments, 2 provided
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3964:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)’
npm ERR!  3964 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
npm ERR!       |                                     ^~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3964:37: note:   candidate expects 3 arguments, 2 provided
npm ERR! In file included from ../src/epoll.cc:15:
npm ERR! ../../nan/nan.h: In member function ‘void Nan::AsyncWorker::SaveToPersistent(uint32_t, const v8::Local<v8::Value>&)’:
npm ERR! ../../nan/nan.h:1550:44: error: no matching function for call to ‘v8::Object::Set(uint32_t&, const v8::Local<v8::Value>&)’
npm ERR!  1550 |     New(persistentHandle)->Set(index, value);
npm ERR!       |                                            ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3961:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, v8::Local<v8::Value>, v8::Local<v8::Value>)’
npm ERR!  3961 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context,
npm ERR!       |                                     ^~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3961:37: note:   candidate expects 3 arguments, 2 provided
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3964:37: note: candidate: ‘v8::Maybe<bool> v8::Object::Set(v8::Local<v8::Context>, uint32_t, v8::Local<v8::Value>)’
npm ERR!  3964 |   V8_WARN_UNUSED_RESULT Maybe<bool> Set(Local<Context> context, uint32_t index,
npm ERR!       |                                     ^~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3964:37: note:   candidate expects 3 arguments, 2 provided
npm ERR! In file included from ../src/epoll.cc:15:
npm ERR! ../../nan/nan.h: In member function ‘v8::Local<v8::Value> Nan::AsyncWorker::GetFromPersistent(const char*) const’:
npm ERR! ../../nan/nan.h:1556:61: error: no matching function for call to ‘v8::Object::Get(v8::Local<v8::String>)’
npm ERR!  1556 |         New(persistentHandle)->Get(New(key).ToLocalChecked()));
npm ERR!       |                                                             ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:4007:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
npm ERR!  4007 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
npm ERR!       |                                           ^~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:4007:43: note:   candidate expects 2 arguments, 1 provided
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:4010:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
npm ERR!  4010 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
npm ERR!       |                                           ^~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:4010:43: note:   candidate expects 2 arguments, 1 provided
npm ERR! In file included from ../src/epoll.cc:15:
npm ERR! ../../nan/nan.h: In member function ‘v8::Local<v8::Value> Nan::AsyncWorker::GetFromPersistent(const v8::Local<v8::String>&) const’:
npm ERR! ../../nan/nan.h:1562:55: error: no matching function for call to ‘v8::Object::Get(const v8::Local<v8::String>&)’
npm ERR!  1562 |     return scope.Escape(New(persistentHandle)->Get(key));
npm ERR!       |                                                       ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:4007:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
npm ERR!  4007 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
npm ERR!       |                                           ^~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:4007:43: note:   candidate expects 2 arguments, 1 provided
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:4010:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
npm ERR!  4010 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
npm ERR!       |                                           ^~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:4010:43: note:   candidate expects 2 arguments, 1 provided
npm ERR! In file included from ../src/epoll.cc:15:
npm ERR! ../../nan/nan.h: In member function ‘v8::Local<v8::Value> Nan::AsyncWorker::GetFromPersistent(uint32_t) const’:
npm ERR! ../../nan/nan.h:1567:57: error: no matching function for call to ‘v8::Object::Get(uint32_t&)’
npm ERR!  1567 |     return scope.Escape(New(persistentHandle)->Get(index));
npm ERR!       |                                                         ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:4007:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, v8::Local<v8::Value>)’
npm ERR!  4007 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
npm ERR!       |                                           ^~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:4007:43: note:   candidate expects 2 arguments, 1 provided
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:4010:43: note: candidate: ‘v8::MaybeLocal<v8::Value> v8::Object::Get(v8::Local<v8::Context>, uint32_t)’
npm ERR!  4010 |   V8_WARN_UNUSED_RESULT MaybeLocal<Value> Get(Local<Context> context,
npm ERR!       |                                           ^~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:4010:43: note:   candidate expects 2 arguments, 1 provided
npm ERR! In file included from ../src/epoll.cc:15:
npm ERR! ../../nan/nan.h: In function ‘void Nan::AsyncQueueWorker(Nan::AsyncWorker*)’:
npm ERR! ../../nan/nan.h:1875:7: warning: cast between incompatible function types from ‘void (*)(uv_work_t*)’ {aka ‘void (*)(uv_work_s*)’} to ‘uv_after_work_cb’ {aka ‘void (*)(uv_work_s*, int)’} [-Wcast-function-type]
npm ERR!  1875 |     , reinterpret_cast<uv_after_work_cb>(AsyncExecuteComplete)
npm ERR!       |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
npm ERR! In file included from /usr/include/c++/10/cassert:44,
npm ERR!                  from /home/dietpi/.cache/node-gyp/16.14.2/include/node/node_object_wrap.h:26,
npm ERR!                  from ../src/epoll.cc:13:
npm ERR! ../../nan/nan_object_wrap.h: In destructor ‘virtual Nan::ObjectWrap::~ObjectWrap()’:
npm ERR! ../../nan/nan_object_wrap.h:24:25: error: ‘class Nan::Persistent<v8::Object>’ has no member named ‘IsNearDeath’
npm ERR!    24 |     assert(persistent().IsNearDeath());
npm ERR!       |                         ^~~~~~~~~~~
npm ERR! In file included from ../../nan/nan.h:2365,
npm ERR!                  from ../src/epoll.cc:15:
npm ERR! ../../nan/nan_object_wrap.h: In member function ‘void Nan::ObjectWrap::MakeWeak()’:
npm ERR! ../../nan/nan_object_wrap.h:67:18: error: ‘class Nan::Persistent<v8::Object>’ has no member named ‘MarkIndependent’
npm ERR!    67 |     persistent().MarkIndependent();
npm ERR!       |                  ^~~~~~~~~~~~~~~
npm ERR! In file included from /usr/include/c++/10/cassert:44,
npm ERR!                  from /home/dietpi/.cache/node-gyp/16.14.2/include/node/node_object_wrap.h:26,
npm ERR!                  from ../src/epoll.cc:13:
npm ERR! ../../nan/nan_object_wrap.h: In static member function ‘static void Nan::ObjectWrap::WeakCallback(const v8::WeakCallbackInfo<Nan::ObjectWrap>&)’:
npm ERR! ../../nan/nan_object_wrap.h:124:26: error: ‘class Nan::Persistent<v8::Object>’ has no member named ‘IsNearDeath’
npm ERR!   124 |     assert(wrap->handle_.IsNearDeath());
npm ERR!       |                          ^~~~~~~~~~~
npm ERR! ../src/epoll.cc: In static member function ‘static void Epoll::Init(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE)’:
npm ERR! ../src/epoll.cc:175:39: error: no matching function for call to ‘v8::FunctionTemplate::GetFunction()’
npm ERR!   175 |   constructor.Reset(ctor->GetFunction());
npm ERR!       |                                       ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:6802:46: note: candidate: ‘v8::MaybeLocal<v8::Function> v8::FunctionTemplate::GetFunction(v8::Local<v8::Context>)’
npm ERR!  6802 |   V8_WARN_UNUSED_RESULT MaybeLocal<Function> GetFunction(
npm ERR!       |                                              ^~~~~~~~~~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:6802:46: note:   candidate expects 1 argument, 0 provided
npm ERR! ../src/epoll.cc:177:23: error: no matching function for call to ‘v8::FunctionTemplate::GetFunction()’
npm ERR!   177 |     ctor->GetFunction());
npm ERR!       |                       ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:6802:46: note: candidate: ‘v8::MaybeLocal<v8::Function> v8::FunctionTemplate::GetFunction(v8::Local<v8::Context>)’
npm ERR!  6802 |   V8_WARN_UNUSED_RESULT MaybeLocal<Function> GetFunction(
npm ERR!       |                                              ^~~~~~~~~~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:6802:46: note:   candidate expects 1 argument, 0 provided
npm ERR! ../src/epoll.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE Epoll::Add(Nan::NAN_METHOD_ARGS_TYPE)’:
npm ERR! ../src/epoll.cc:210:44: error: no matching function for call to ‘v8::Value::Int32Value()’
npm ERR!   210 |   int err = epoll->Add(info[0]->Int32Value(), info[1]->Int32Value());
npm ERR!       |                                            ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3107:40: note: candidate: ‘v8::Maybe<int> v8::Value::Int32Value(v8::Local<v8::Context>) const’
npm ERR!  3107 |   V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
npm ERR!       |                                        ^~~~~~~~~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3107:40: note:   candidate expects 1 argument, 0 provided
npm ERR! ../src/epoll.cc:210:67: error: no matching function for call to ‘v8::Value::Int32Value()’
npm ERR!   210 |   int err = epoll->Add(info[0]->Int32Value(), info[1]->Int32Value());
npm ERR!       |                                                                   ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3107:40: note: candidate: ‘v8::Maybe<int> v8::Value::Int32Value(v8::Local<v8::Context>) const’
npm ERR!  3107 |   V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
npm ERR!       |                                        ^~~~~~~~~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3107:40: note:   candidate expects 1 argument, 0 provided
npm ERR! ../src/epoll.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE Epoll::Modify(Nan::NAN_METHOD_ARGS_TYPE)’:
npm ERR! ../src/epoll.cc:230:47: error: no matching function for call to ‘v8::Value::Int32Value()’
npm ERR!   230 |   int err = epoll->Modify(info[0]->Int32Value(), info[1]->Int32Value());
npm ERR!       |                                               ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3107:40: note: candidate: ‘v8::Maybe<int> v8::Value::Int32Value(v8::Local<v8::Context>) const’
npm ERR!  3107 |   V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
npm ERR!       |                                        ^~~~~~~~~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3107:40: note:   candidate expects 1 argument, 0 provided
npm ERR! ../src/epoll.cc:230:70: error: no matching function for call to ‘v8::Value::Int32Value()’
npm ERR!   230 |   int err = epoll->Modify(info[0]->Int32Value(), info[1]->Int32Value());
npm ERR!       |                                                                      ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3107:40: note: candidate: ‘v8::Maybe<int> v8::Value::Int32Value(v8::Local<v8::Context>) const’
npm ERR!  3107 |   V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
npm ERR!       |                                        ^~~~~~~~~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3107:40: note:   candidate expects 1 argument, 0 provided
npm ERR! ../src/epoll.cc: In static member function ‘static Nan::NAN_METHOD_RETURN_TYPE Epoll::Remove(Nan::NAN_METHOD_ARGS_TYPE)’:
npm ERR! ../src/epoll.cc:247:47: error: no matching function for call to ‘v8::Value::Int32Value()’
npm ERR!   247 |   int err = epoll->Remove(info[0]->Int32Value());
npm ERR!       |                                               ^
npm ERR! In file included from ../src/epoll.cc:11:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3107:40: note: candidate: ‘v8::Maybe<int> v8::Value::Int32Value(v8::Local<v8::Context>) const’
npm ERR!  3107 |   V8_WARN_UNUSED_RESULT Maybe<int32_t> Int32Value(Local<Context> context) const;
npm ERR!       |                                        ^~~~~~~~~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/v8.h:3107:40: note:   candidate expects 1 argument, 0 provided
npm ERR! In file included from ../src/epoll.cc:12:
npm ERR! ../src/epoll.cc: At global scope:
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/node.h:842:7: warning: cast between incompatible function types from ‘void (*)(Nan::ADDON_REGISTER_FUNCTION_ARGS_TYPE)’ {aka ‘void (*)(v8::Local<v8::Object>)’} to ‘node::addon_register_func’ {aka ‘void (*)(v8::Local<v8::Object>, v8::Local<v8::Value>, void*)’} [-Wcast-function-type]
npm ERR!   842 |       (node::addon_register_func) (regfunc),                          \
npm ERR!       |       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
npm ERR! /home/dietpi/.cache/node-gyp/16.14.2/include/node/node.h:876:3: note: in expansion of macro ‘NODE_MODULE_X’
npm ERR!   876 |   NODE_MODULE_X(modname, regfunc, NULL, 0)  // NOLINT (readability/null_usage)
npm ERR!       |   ^~~~~~~~~~~~~
npm ERR! ../src/epoll.cc:381:1: note: in expansion of macro ‘NODE_MODULE’
npm ERR!   381 | NODE_MODULE(epoll, Epoll::Init)
npm ERR!       | ^~~~~~~~~~~
npm ERR! make: *** [epoll.target.mk:113: Release/obj.target/epoll/src/epoll.o] Error 1
npm ERR! gyp ERR! build error 
npm ERR! gyp ERR! stack Error: `make` failed with exit code: 2
npm ERR! gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:194:23)
npm ERR! gyp ERR! stack     at ChildProcess.emit (node:events:526:28)
npm ERR! gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:291:12)
npm ERR! gyp ERR! System Linux 5.15.32-v7+
npm ERR! gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
npm ERR! gyp ERR! cwd /home/dietpi/MagicMirror/modules/MMM-ScreenControl/node_modules/epoll
npm ERR! gyp ERR! node -v v16.14.2
npm ERR! gyp ERR! node-gyp -v v9.0.0
npm ERR! gyp ERR! not ok
npm verb exit 1
npm timing npm Completed in 19893ms
npm verb unfinished npm timer reify 1650810471387
npm verb unfinished npm timer reify:build 1650810479675
npm verb unfinished npm timer build 1650810479678
npm verb unfinished npm timer build:deps 1650810479679
npm verb unfinished npm timer build:run:install 1650810479691
npm verb unfinished npm timer build:run:install:node_modules/epoll 1650810479693
npm verb code 1

Does not compile on RasPi2

Hi,

unfortunately epoll does not compile on my Pi2 running raspbian. The solution from #14 does not work for me. >Could someone give me a hint?
Here is the shortened output:

falk@raspberrypi ~/arvid $ sudo npm install --unsafe-perm epoll
/

[email protected] install /home/falk/arvid/node_modules/epoll
node-gyp rebuild

make: Entering directory '/home/falk/arvid/node_modules/epoll/build'
CXX(target) Release/obj.target/epoll/src/epoll.o
In file included from ../src/epoll.cc:11:0:
/root/.node-gyp/4.1.0/include/node/v8.h:336:1: error: expected unqualified-id before ‘using’
/root/.node-gyp/4.1.0/include/node/v8.h:469:1: error: expected unqualified-id before ‘using’
/root/.node-gyp/4.1.0/include/node/v8.h:852:1: error: expected unqualified-id before ‘using’
In file included from ../node_modules/nan/nan.h:182:0,
from ../src/epoll.cc:15:
../node_modules/nan/nan_maybe_43_inl.h:13:1: error: expected unqualified-id before ‘using’
../node_modules/nan/nan_maybe_43_inl.h:16:1: error: expected unqualified-id before ‘using’
../node_modules/nan/nan_maybe_43_inl.h:19:12: error: ‘Maybe’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:24:12: error: ‘Maybe’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:31:1: error: ‘MaybeLocal’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:36:1: error: ‘MaybeLocal’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:41:1: error: ‘Maybe’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:46:1: error: ‘MaybeLocal’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:51:1: error: ‘MaybeLocal’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:60:1: error: ‘MaybeLocal’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:65:12: error: ‘MaybeLocal’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:70:12: error: ‘Maybe’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:77:12: error: ‘Maybe’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:84:12: error: ‘Maybe’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:92:12: error: ‘MaybeLocal’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:99:1: error: ‘MaybeLocal’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:109:12: error: ‘Maybe’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:115:12: error: ‘Maybe’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:119:12: error: ‘Maybe’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:126:1: error: ‘Maybe’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:131:1: error: ‘MaybeLocal’ does not name a type
../node_modules/nan/nan_maybe_43_inl.h:136:1: error: ‘MaybeLocal’ does not name a type
...
At global scope:
cc1plus: warning: unrecognized command line option "-Wno-unused-local-typedefs" [enabled by default]
epoll.target.mk:90: recipe for target 'Release/obj.target/epoll/src/epoll.o' failed
make: *** [Release/obj.target/epoll/src/epoll.o] Error 1
make: Leaving directory '/home/falk/arvid/node_modules/epoll/build'
gyp ERR! build error
gyp ERR! stack Error: make failed with exit code: 2
gyp ERR! stack at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:270:23)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 4.1.6-v7+
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/falk/arvid/node_modules/epoll
gyp ERR! node -v v4.1.0
gyp ERR! node-gyp -v v3.0.3
gyp ERR! not ok
npm ERR! Linux 4.1.6-v7+
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "install" "--unsafe-perm" "epoll"
npm ERR! node v4.1.0
npm ERR! npm v2.14.3
npm ERR! code ELIFECYCLE

npm ERR! [email protected] install: node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! This is most likely a problem with the epoll package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get their info via:
npm ERR! npm owner ls epoll
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR! /home/falk/arvid/npm-debug.log
falk@raspberrypi ~/arvid $

nan 1.0.0 alignment

A number of things need to be adjusted when nan 1.0.0 is released.


NanAssignPersistent has two parameters rather than three, the first is no longer required, so

NanAssignPersistent(v8::FunctionTemplate, constructor, ctor);

becomes

NanAssignPersistent(constructor, ctor);

There's now a NanNew function template and template specializations for creating new v8 objects. See also NanUndefined, NanNull, NanTrue, and NanFalse. They hide the isolate dependencies. For example

v8::FunctionTemplate::New(Epoll::New)

becomes

NanNew<v8::FunctionTemplate>(Epoll::New)

NanNewLocal has been removed and NanNew should be used as a replacement, so if NanNull is also used

NanNewLocal<v8::Value>(v8::Null())

becomes

NanNew(NanNull())

Are any other alignments required?

Epoll module does not install on latest debian image for BeagleBone

Hi I downloaded latest Debian 8.2 image for BeagleBone Black and installed it. After that, I tried npm install -g epoll. It gives following error.


> [email protected] install /usr/local/lib/node_modules/epoll
> node-gyp rebuild

gyp ERR! configure error 
gyp ERR! stack Error: EACCES, mkdir '/usr/local/lib/node_modules/epoll/build'
gyp ERR! System Linux 4.1.12-ti-r29
gyp ERR! command "nodejs" "/usr/bin/node-gyp" "rebuild"
gyp ERR! cwd /usr/local/lib/node_modules/epoll
gyp ERR! node -v v0.10.38
gyp ERR! node-gyp -v v0.12.2
gyp ERR! not ok 
npm WARN This failure might be due to the use of legacy binary "node"
npm WARN For further explanations, please read
/usr/share/doc/nodejs/README.Debian

npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script.
npm ERR! This is most likely a problem with the epoll package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls epoll
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 4.1.12-ti-r29
npm ERR! command "/usr/bin/nodejs" "/usr/bin/npm" "install" "-g" "epoll"
npm ERR! cwd /root
npm ERR! node -v v0.10.38
npm ERR! npm -v 1.4.21
npm ERR! code ELIFECYCLE
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /root/npm-debug.log
npm ERR! not ok code 0

EINTR handling

If epoll_wait returns -1 and errno is EINTR don't handle it as an error.

Module did not self-register

Trying to use the onoff library inside my project but I always get a "Module did not self-register" error from the epoll module (bindings.js line 83).

Using latest nodejs version (tried with several other older versions back to 0.10.x). Trying inside VisualStudio, Win8.1 64bit.
Same error happens also if I try to require only the 'epoll' module.

Any idea what's causing this?

Thanks
TG

Documentation Request: Can't install on Non-Linux systems

Once I found the information that you can't install this module on non-Linux systems (#12 (comment)) it totally made sense—but I spent about 45 minutes trying to figure out what was going on before I was able to find that thread. The errors one gets suggest problems with node-gyp or bindings, which are both red herrings.

Would it be possible to add something to the README just calling this out, to save future people a little heartache and time?

npm install onoff on raspberry PI 512 MB DE

root@raspberrypi:~# npm install onoff

[email protected] install /root/node_modules/epoll
node-gyp rebuild

make: ingresso nella directory "/root/node_modules/epoll/build"
CXX(target) Release/obj.target/epoll/src/epoll.o
make: g++: comando non trovato
epoll.target.mk:96: set di istruzioni per l'obiettivo "Release/obj.target/epoll/src/epoll.o" non riuscito
make: *** [Release/obj.target/epoll/src/epoll.o] Errore 127
make: uscita dalla directory "/root/node_modules/epoll/build"
gyp ERR! build error
gyp ERR! stack Error: make 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 Linux 4.1.19+
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 /root/node_modules/epoll
gyp ERR! node -v v6.11.1
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok
npm WARN enoent ENOENT: no such file or directory, open '/root/package.json'
npm WARN root No description
npm WARN root No repository field.
npm WARN root No README data
npm WARN root No license field.
npm ERR! Linux 4.1.19+
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "install" "onoff"
npm ERR! node v6.11.1
npm ERR! npm v3.10.10
npm ERR! code ELIFECYCLE

npm ERR! [email protected] install: node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the epoll package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs epoll
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls epoll
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR! /root/npm-debug.log
root@raspberrypi:~# npm bugs epoll
npm ERR! Linux 4.1.19+
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "bugs" "epoll"
npm ERR! node v6.11.1
npm ERR! npm v3.10.10
npm ERR! code 3

npm ERR! Command failed: xdg-open https://github.com/fivdi/epoll/issues
npm ERR! /usr/bin/xdg-open: 1: eval: www-browser: not found
npm ERR! /usr/bin/xdg-open: 1: eval: links2: not found
npm ERR! /usr/bin/xdg-open: 1: eval: elinks: not found
npm ERR! /usr/bin/xdg-open: 1: eval: links: not found
npm ERR! /usr/bin/xdg-open: 1: eval: lynx: not found
npm ERR! /usr/bin/xdg-open: 1: eval: w3m: not found
npm ERR! xdg-open: no method available for opening 'https://github.com/fivdi/epoll/issues'
npm ERR!
npm ERR!
npm ERR! If you need help, you may report this error at:
npm ERR! https://github.com/npm/npm/issues

npm ERR! Please include the following file with any support request:
npm ERR! /root/npm-debug.log
root@raspberrypi:~# nano /root/npm-debug.log
GNU nano 2.2.6 File: /root/npm-debug.log

node-gyp installation fails on raspbian

Hi,

I am having struggle with epoll installation on raspberry pi 2 (model B).

Versions:

  • Raspbian GNU/Linux 11 (bullseye)
  • NodeJs 16.13.0
  • NPM 8.1.0
  • Python 3.9.2

Log from npm install

npm ERR! path /home/pi/Projects/rizeni/node_modules/epoll
npm ERR! command failed
npm ERR! command sh -c node-gyp rebuild
npm ERR! gyp info it worked if it ends with ok
npm ERR! gyp info using [email protected]
npm ERR! gyp info using [email protected] | linux | arm
npm ERR! gyp ERR! configure error
npm ERR! gyp ERR! stack Error: Command failed: /usr/bin/python -c import sys; print "%s.%s.%s" % sys.version_info[:3];
npm ERR! gyp ERR! stack   File "<string>", line 1
npm ERR! gyp ERR! stack     import sys; print "%s.%s.%s" % sys.version_info[:3];
npm ERR! gyp ERR! stack                       ^
npm ERR! gyp ERR! stack SyntaxError: invalid syntax
npm ERR! gyp ERR! stack
npm ERR! gyp ERR! stack     at ChildProcess.exithandler (node:child_process:397:12)
npm ERR! gyp ERR! stack     at ChildProcess.emit (node:events:390:28)
npm ERR! gyp ERR! stack     at maybeClose (node:internal/child_process:1064:16)
npm ERR! gyp ERR! stack     at Process.ChildProcess._handle.onexit (node:internal/child_process:301:5)
npm ERR! gyp ERR! System Linux 5.10.63-v7+
npm ERR! gyp ERR! command "/usr/bin/node" "/home/pi/Projects/rizeni/node_modules/.bin/node-gyp" "rebuild"
npm ERR! gyp ERR! cwd /home/pi/Projects/rizeni/node_modules/epoll
npm ERR! gyp ERR! node -v v16.13.0
npm ERR! gyp ERR! node-gyp -v v3.8.0
npm ERR! gyp ERR! not ok

I can see from the log that it has an issue with getting python version (it's syntax). When I try to do the same command directly in python shell, the error is the same.

Any hints how to get around this? Do I need to downgrade Python? (I have the latest one at this moment)

Thanks,
Martin

Ubuntu 18.04 Server fails to install @node-gyp rebuild

I'm running a clean install of Ubuntu 18.04 Server on a raspberry PI with Node v10.16.0 and NPM v6.9.0. As the ubuntu user, I am trying to install onoff, and only onoff, with one npm install command. Attached is the full output from npm install onoff

0 info it worked if it ends with ok
1 verbose cli [ '/usr/bin/node', '/usr/bin/npm', 'install', 'onoff' ]
2 info using [email protected]
3 info using [email protected]
4 verbose npm-session 16df9898dbc21df5
5 silly install loadCurrentTree
6 silly install readLocalPackageData
7 http fetch GET 200 https://registry.npmjs.org/onoff 103ms (from cache)
8 silly pacote tag manifest for onoff@latest fetched in 155ms
9 timing stage:loadCurrentTree Completed in 1108ms
10 silly install loadIdealTree
11 silly install cloneCurrentTreeToIdealTree
12 timing stage:loadIdealTree:cloneCurrentTree Completed in 9ms
13 silly install loadShrinkwrap
14 timing stage:loadIdealTree:loadShrinkwrap Completed in 513ms
15 silly install loadAllDepsIntoIdealTree
16 silly resolveWithNewModule [email protected] checking installable status
17 http fetch GET 200 https://registry.npmjs.org/epoll 176ms (from cache)
18 silly pacote range manifest for epoll@^2.0.9 fetched in 197ms
19 silly resolveWithNewModule [email protected] checking installable status
20 http fetch GET 304 https://registry.npmjs.org/lodash.debounce 421ms (from cache)
21 silly pacote range manifest for lodash.debounce@^4.0.8 fetched in 431ms
22 silly resolveWithNewModule [email protected] checking installable status
23 http fetch GET 200 https://registry.npmjs.org/bindings 54ms (from cache)
24 silly pacote range manifest for bindings@^1.5.0 fetched in 63ms
25 silly resolveWithNewModule [email protected] checking installable status
26 http fetch GET 304 https://registry.npmjs.org/nan 123ms (from cache)
27 silly pacote range manifest for nan@^2.13.0 fetched in 135ms
28 silly resolveWithNewModule [email protected] checking installable status
29 http fetch GET 304 https://registry.npmjs.org/file-uri-to-path 84ms (from cache)
30 silly pacote version manifest for [email protected] fetched in 91ms
31 silly resolveWithNewModule [email protected] checking installable status
32 timing stage:loadIdealTree:loadAllDepsIntoIdealTree Completed in 1353ms
33 timing stage:loadIdealTree Completed in 2041ms
34 silly currentTree [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├─┬ [email protected]
34 silly currentTree │ └── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree ├── [email protected]
34 silly currentTree └── [email protected]
35 silly idealTree [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├─┬ [email protected]
35 silly idealTree │ └── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree ├── [email protected]
35 silly idealTree └── [email protected]
36 silly install generateActionsToTake
37 timing stage:generateActionsToTake Completed in 57ms
38 silly diffTrees action count 5
39 silly diffTrees add [email protected]
40 silly diffTrees add [email protected]
41 silly diffTrees add [email protected]
42 silly diffTrees add [email protected]
43 silly diffTrees add [email protected]
44 silly decomposeActions action count 40
45 silly decomposeActions fetch [email protected]
46 silly decomposeActions extract [email protected]
47 silly decomposeActions preinstall [email protected]
48 silly decomposeActions build [email protected]
49 silly decomposeActions install [email protected]
50 silly decomposeActions postinstall [email protected]
51 silly decomposeActions finalize [email protected]
52 silly decomposeActions refresh-package-json [email protected]
53 silly decomposeActions fetch [email protected]
54 silly decomposeActions extract [email protected]
55 silly decomposeActions preinstall [email protected]
56 silly decomposeActions build [email protected]
57 silly decomposeActions install [email protected]
58 silly decomposeActions postinstall [email protected]
59 silly decomposeActions finalize [email protected]
60 silly decomposeActions refresh-package-json [email protected]
61 silly decomposeActions fetch [email protected]
62 silly decomposeActions extract [email protected]
63 silly decomposeActions preinstall [email protected]
64 silly decomposeActions build [email protected]
65 silly decomposeActions install [email protected]
66 silly decomposeActions postinstall [email protected]
67 silly decomposeActions finalize [email protected]
68 silly decomposeActions refresh-package-json [email protected]
69 silly decomposeActions fetch [email protected]
70 silly decomposeActions extract [email protected]
71 silly decomposeActions preinstall [email protected]
72 silly decomposeActions build [email protected]
73 silly decomposeActions install [email protected]
74 silly decomposeActions postinstall [email protected]
75 silly decomposeActions finalize [email protected]
76 silly decomposeActions refresh-package-json [email protected]
77 silly decomposeActions fetch [email protected]
78 silly decomposeActions extract [email protected]
79 silly decomposeActions preinstall [email protected]
80 silly decomposeActions build [email protected]
81 silly decomposeActions install [email protected]
82 silly decomposeActions postinstall [email protected]
83 silly decomposeActions finalize [email protected]
84 silly decomposeActions refresh-package-json [email protected]
85 silly install executeActions
86 silly doSerial global-install 40
87 verbose correctMkdir /home/ubuntu/.npm/_locks correctMkdir not in flight; initializing
88 verbose lock using /home/ubuntu/.npm/_locks/staging-8d7e60444644fc94.lock for /home/ubuntu/pilets/node_modules/.staging
89 silly doParallel extract 5
90 silly extract [email protected]
91 silly extract [email protected]
92 silly extract [email protected]
93 silly extract [email protected]
94 silly extract [email protected]
95 silly tarball trying [email protected] by hash: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
96 silly tarball trying bindings@^1.5.0 by hash: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
97 silly tarball trying nan@^2.13.0 by hash: sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
98 silly tarball trying epoll@^2.0.9 by hash: sha512-9q60N1vPy2NXIH3i9S2FPRapc40IeTGgFQ47eCbiKw/ghEZszTVB/k3z3Rul7O/fj8o3/eKqd+BS5toS902XMQ==
99 silly tarball trying onoff@latest by hash: sha512-e54ii0MhFqu3f0gJYOiWD4Mgj89GywJGjUDrV+v3NNKrc8SufLoYldsvL+SFLxORYtNor2M4U4HAsl82OIEctQ==
100 silly extract bindings@^1.5.0 extracted to /home/ubuntu/pilets/node_modules/.staging/bindings-b08fb4de (256ms)
101 silly extract [email protected] extracted to /home/ubuntu/pilets/node_modules/.staging/file-uri-to-path-3ad539ef (283ms)
102 silly extract epoll@^2.0.9 extracted to /home/ubuntu/pilets/node_modules/.staging/epoll-364b44b9 (353ms)
103 silly extract onoff@latest extracted to /home/ubuntu/pilets/node_modules/.staging/onoff-9027811e (380ms)
104 silly extract nan@^2.13.0 extracted to /home/ubuntu/pilets/node_modules/.staging/nan-56be477c (400ms)
105 timing action:extract Completed in 421ms
106 silly doReverseSerial unbuild 40
107 silly doSerial remove 40
108 silly doSerial move 40
109 silly doSerial finalize 40
110 silly finalize /home/ubuntu/pilets/node_modules/file-uri-to-path
111 silly finalize /home/ubuntu/pilets/node_modules/bindings
112 silly finalize /home/ubuntu/pilets/node_modules/nan
113 silly finalize /home/ubuntu/pilets/node_modules/epoll
114 silly finalize /home/ubuntu/pilets/node_modules/onoff
115 timing action:finalize Completed in 38ms
116 silly doParallel refresh-package-json 5
117 silly refresh-package-json /home/ubuntu/pilets/node_modules/file-uri-to-path
118 silly refresh-package-json /home/ubuntu/pilets/node_modules/bindings
119 silly refresh-package-json /home/ubuntu/pilets/node_modules/nan
120 silly refresh-package-json /home/ubuntu/pilets/node_modules/epoll
121 silly refresh-package-json /home/ubuntu/pilets/node_modules/onoff
122 timing audit submit Completed in 584ms
123 http fetch POST 200 https://registry.npmjs.org/-/npm/v1/security/audits/quick 585ms
124 timing audit body Completed in 4ms
125 timing action:refresh-package-json Completed in 97ms
126 silly doParallel preinstall 5
127 silly preinstall [email protected]
128 info lifecycle [email protected]preinstall: [email protected]
129 silly preinstall [email protected]
130 info lifecycle [email protected]
preinstall: [email protected]
131 silly preinstall [email protected]
132 info lifecycle [email protected]preinstall: [email protected]
133 silly preinstall [email protected]
134 info lifecycle [email protected]
preinstall: [email protected]
135 silly preinstall [email protected]
136 info lifecycle [email protected]preinstall: [email protected]
137 timing action:preinstall Completed in 12ms
138 silly doSerial build 40
139 silly build [email protected]
140 info linkStuff [email protected]
141 silly linkStuff [email protected] has /home/ubuntu/pilets/node_modules as its parent node_modules
142 silly build [email protected]
143 info linkStuff [email protected]
144 silly linkStuff [email protected] has /home/ubuntu/pilets/node_modules as its parent node_modules
145 silly build [email protected]
146 info linkStuff [email protected]
147 silly linkStuff [email protected] has /home/ubuntu/pilets/node_modules as its parent node_modules
148 silly build [email protected]
149 info linkStuff [email protected]
150 silly linkStuff [email protected] has /home/ubuntu/pilets/node_modules as its parent node_modules
151 silly build [email protected]
152 info linkStuff [email protected]
153 silly linkStuff [email protected] has /home/ubuntu/pilets/node_modules as its parent node_modules
154 timing action:build Completed in 9ms
155 silly doSerial global-link 40
156 silly doParallel update-linked 0
157 silly doSerial install 40
158 silly install [email protected]
159 info lifecycle [email protected]
install: [email protected]
160 silly install [email protected]
161 info lifecycle [email protected]install: [email protected]
162 silly install [email protected]
163 info lifecycle [email protected]
install: [email protected]
164 silly install [email protected]
165 info lifecycle [email protected]install: [email protected]
166 verbose lifecycle [email protected]
install: unsafe-perm in lifecycle true
167 verbose lifecycle [email protected]install: PATH: /usr/lib/node_modules/npm/node_modules/npm-lifecycle/node-gyp-bin:/home/ubuntu/pilets/node_modules/epoll/node_modules/.bin:/home/ubuntu/pilets/node_modules/.bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
168 verbose lifecycle [email protected]
install: CWD: /home/ubuntu/pilets/node_modules/epoll
169 silly lifecycle [email protected]install: Args: [ '-c', 'node-gyp rebuild' ]
170 silly lifecycle [email protected]
install: Returned: code: 1 signal: null
171 info lifecycle [email protected]~install: Failed to exec install script
172 timing action:install Completed in 2630ms
173 verbose unlock done using /home/ubuntu/.npm/_locks/staging-8d7e60444644fc94.lock for /home/ubuntu/pilets/node_modules/.staging
174 timing stage:rollbackFailedOptional Completed in 124ms
175 timing stage:runTopLevelLifecycles Completed in 6770ms
176 silly saveTree [email protected]
176 silly saveTree ├─┬ [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├─┬ [email protected]
176 silly saveTree │ │ └── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├─┬ [email protected]
176 silly saveTree │ │ ├── [email protected]
176 silly saveTree │ │ ├── [email protected]
176 silly saveTree │ │ ├── [email protected]
176 silly saveTree │ │ └── [email protected]
176 silly saveTree │ ├─┬ [email protected]
176 silly saveTree │ │ └── [email protected]
176 silly saveTree │ ├─┬ [email protected]
176 silly saveTree │ │ └── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├─┬ [email protected]
176 silly saveTree │ │ └── [email protected]
176 silly saveTree │ └─┬ [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ └─┬ [email protected]
176 silly saveTree │ └── [email protected]
176 silly saveTree ├─┬ [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ └── [email protected]
176 silly saveTree ├─┬ [email protected]
176 silly saveTree │ ├─┬ [email protected]
176 silly saveTree │ │ └── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├─┬ [email protected]
176 silly saveTree │ │ └── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├─┬ [email protected]
176 silly saveTree │ │ └── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├─┬ [email protected]
176 silly saveTree │ │ ├── [email protected]
176 silly saveTree │ │ └── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ ├─┬ [email protected]
176 silly saveTree │ │ ├── [email protected]
176 silly saveTree │ │ ├── [email protected]
176 silly saveTree │ │ └── [email protected]
176 silly saveTree │ ├── [email protected]
176 silly saveTree │ └── [email protected]
176 silly saveTree └─┬ [email protected]
176 silly saveTree ├─┬ [email protected]
176 silly saveTree │ ├─┬ [email protected]
176 silly saveTree │ │ └── [email protected]
176 silly saveTree │ └── [email protected]
176 silly saveTree └── [email protected]
177 warn [email protected] No description
178 warn [email protected] No repository field.
179 verbose stack Error: [email protected] install: node-gyp rebuild
179 verbose stack Exit status 1
179 verbose stack at EventEmitter. (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/index.js:301:16)
179 verbose stack at EventEmitter.emit (events.js:198:13)
179 verbose stack at ChildProcess. (/usr/lib/node_modules/npm/node_modules/npm-lifecycle/lib/spawn.js:55:14)
179 verbose stack at ChildProcess.emit (events.js:198:13)
179 verbose stack at maybeClose (internal/child_process.js:982:16)
179 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:259:5)
180 verbose pkgid [email protected]
181 verbose cwd /home/ubuntu/pilets
182 verbose Linux 4.15.0-1040-raspi2
183 verbose argv "/usr/bin/node" "/usr/bin/npm" "install" "onoff"
184 verbose node v10.16.0
185 verbose npm v6.9.0
186 error code ELIFECYCLE
187 error errno 1
188 error [email protected] install: node-gyp rebuild
188 error Exit status 1
189 error Failed at the [email protected] install script.
189 error This is probably not a problem with npm. There is likely additional logging output above.
190 verbose exit [ 1, true ]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.