I am completely besotted with the Intel Edison. I love it. I think it is the most exciting hardware Intel has developed since my trusty old Pentium 200 MMX.

The only downside lies in the software ecosystem; it is still pretty small. The operating system the Edison ships with is ‘Yocto’, a linux distribution targeted at embedded systems. It is great, but pre-built packages (ipk) of many of your favourite open source tools don’t exist yet.

This guide steps you through the process of creating a package that the opkg package manager can install on the Intel Edison. It assumes you have bootstrapped your Edison, logged in and are comfortable executing programs at the command prompt.

Step #1 - Install opkg utilities.

$ opkg install http://iotdk.intel.com/repos/1.1/iotdk/i586/tar_1.27.1-r0_i586.ipk
$ opkg install http://iotdk.intel.com/repos/1.1/iotdk/i586/findutils_4.4.2-r6_i586.ipk
$ opkg install opkg-utils

Step #2 - Download and compile the utility you want to turn into an ipk

The following will use monit as a concrete example, but similar steps will apply to most Linux applications.

$ wget https://mmonit.com/monit/dist/monit-5.16.tar.gz
$ tar -xvzf monit-5.16.tar.gz
$ cd monit-5.16
$ ./configure --without-pam
$ make

Step #3 - Create the ipk file structure

The folder structure for an ipk is pretty straight forward, if you wanted to just install a file to /etc/foo. Create a directory structure only containing that file.

ipk-build
└── etc
    └── foo

Now if you are building a utility from source, often make install will let you specify a destination directory.

$ mkdir ipk-build
$ make install DESTDIR=ipk-build

For monit, this generated the following:

ipk-build
└── usr
    └── local
        ├── bin
            └── monit
        └── share
            └── man
                └── man1
                    └── monit.1

For monit, I also copied the default monitrc configuration file into the package so that it would be installed into etc.

Step #4 - Created control file

The control file contains metadata that opkg uses to describe and install the package. It should be placed in a directory called ‘CONTROL’:

ipk-build
├── CONTROL
    └── control
├── etc
    └── monitrc
└── usr
    └── local
        ├── bin
            └── monit
        └── share
            └── man
                └── man1
                    └── monit.1

The control file I created for monit contained the following:

Package: monit
Version: 5.16
Architecture: x86
Maintainer: reprage
Section: admin
Priority: optional
Source: https://mmonit.com/monit/
Description: Manages and monitors Unix systems.

Step #5 - Build ipk

To bundle everything up into a single file that can be installed by opkg:

$ opkg-build ipk-build

For my monit example, this created the file: monit_5.16_x86.ipk this can then be installed with:

$ opkg install monit_5.16_x86.ipk

References