OpenWRT 18.06 & Nodejs installing onoff node module [ solved ]



  • After upgrading to the latest OpenWRT per this blog post OpenWRT 18 available for omega2 & omega2+ I had some issues getting past working nodejs apps to work.

    The root cause was the old onoff-node located at /usr/bin/onoff-node is no longer available via opkg install onoff-node. It is now possible to use the standard onoff module via npm.

    However, to get there is a combination of several steps so I am going to explain the steps I went through to get it to work.

    In short, make and gcc need to be installed so that npm can compile the onoff module. To be able to do that it's necessary to point opkg to the OpenWRT LEDE repos so they can be installed via opkg.

    To compile onoff the omega will run out of ram so it's necessary to enable a swap file.

    The Omega2S+ that I was working on didn't have enough room for python, nodejs and npm so I used an external SD card.

    1. upgrade to the latest OS. OpenWRT 18 available for omega2 & omega2+
    oupgrade --latest
    

    After this finishes and you log back in you should see something like this.

    Ω-ware: 0.3.2 b218
    
    1. boot from the SD card. Booting from external storage
    opkg update
    opkg install kmod-usb-storage-extras e2fsprogs kmod-fs-ext4 block-mount
    
    umount /tmp/mounts/SD-P1
    echo -e "y" | (mkfs.ext4 /dev/mmcblk0p1)
    
    mkdir /mnt/mmcblk0p1
    mount /dev/mmcblk0p1 /mnt/mmcblk0p1
    block detect > /etc/config/fstab
    uci set fstab.@mount[0].target=/overlay
    uci set fstab.@mount[0].enabled=1
    uci commit
    mount /dev/mmcblk0p1 /mnt/ ; tar -C /overlay -cvf - . | tar -C /mnt/ -xf - ; umount /mnt/
    

    now reboot, and log back in. You should see a large overlay in your df -h output, something like this for an 8G SD carrd.

    df -h
    overlayfs:/overlay        7.2G    480.8M      6.4G   7% /
    
    1. Create a swap file and activate it. Extending Omegas Available Memory
    opkg update;
    opkg install swap-utils
    

    Make a swap file, I made min in my root directory since I now have additional space by mounting the SD card.

    dd if=/dev/zero of=/root/swap.page bs=1M count=256
    

    Turn on the swap file

    swapon /tmp/mounts/USB-A1/swap.page
    

    I didn't permanently mount mine I only need the swap file for this instance. To check the swap file sue the free command.

    free
                 total       used       free     shared    buffers     cached
    Mem:        124920      71360      53560          8       6888      40624
    -/+ buffers/cache:      23848     101072
    Swap:       262140       2560     259580
    

    You should see the Swap: line

    1. Install python, nodejs, npm.
    opkg install python nodejs node-npm
    
    1. install node-gyp https://docs.onion.io/omega2-docs/node-red-article.html#
    node --max_old_space_size=512 $(which npm) install -g node-gyp
    
    1. Switch back to LEDE packages so that make and gcc can be installed. https://docs.onion.io/omega2-docs/using-opkg.html#using-opkg-switch-to-lede-repos

    This is what my /etc/opkg/distfeeds.conf ended up looking like.

    src/gz openwrt_core http://downloads.openwrt.org/releases/18.06-SNAPSHOT/targets/ramips/mt76x8/packages
    src/gz openwrt_base http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/base
    src/gz openwrt_luci http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/luci
    src/gz openwrt_onion http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/onion
    src/gz openwrt_packages http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/packages
    src/gz openwrt_routing http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/routing
    src/gz openwrt_telephony http://downloads.openwrt.org/releases/18.06-SNAPSHOT/packages/mipsel_24kc/telephony
    src/gz omega2_core http://repo.onioniot.com/omega2/packages/core
    src/gz omega2_base http://repo.onioniot.com/omega2/packages/base
    src/gz omega2_packages http://repo.onioniot.com/omega2/packages/packages
    src/gz omega2_routing http://repo.onioniot.com/omega2/packages/routing
    src/gz omega2_onion http://repo.onioniot.com/omega2/packages/onion
    

    basically I just uncommitted everything.

    1. Install make and gcc https://docs.onion.io/omega2-docs/node-red-article.html#
    opkg update
    opkg install make gcc
    ar -rc /usr/lib/libpthread.a
    

    Go get a cup of coffee, this will take a few minutes.

    1. Finally ready to install npm onoff This will take a few minutes.
    node --max_old_space_size=512 $(which npm) install onoff
    

    That's it. You should see onoff in your node_modules directory now.

    I verified that it works with a quick test .js to toggle a GPIO.



  • Oh one thing I forgot to mention, after I got all this working I was able to tar the node_modules directory up and move it to an Omega2S+ with no SD card.

    After updating it to OpenWRT18, the nodejs install is small enough no external boot is necessary and there is no need for NPM on the production boards since they will never install a package. So that is nice to be able to eliminate the SD card.



Looks like your connection to Community was lost, please wait while we try to reconnect.