Install OpenHAB2 on emonSD / emonPi

/usr/lib/systemd/system/openhab2.service

[Unit]
Description=openHAB 2 - empowering the smart home
Documentation=http://docs.openhab.org
Documentation=https://community.openhab.org
Wants=network-online.target
After=network-online.target

[Service]
EnvironmentFile=/etc/default/openhab2
User=openhab
Group=openhab
WorkingDirectory=/usr/share/openhab2
PermissionsStartOnly=true
ExecStartPre=/usr/share/openhab2/start_pre.sh
ExecStart=/usr/share/openhab2/start.sh server
ExecStop=/usr/share/openhab2/runtime/bin/stop
# Shutdown delay in seconds, before process is tried to be killed with KILL (if configured)
TimeoutStopSec=120
Restart=on-failure

[Install]
WantedBy=multi-user.target

start_pre.sh

#!/bin/sh
test -d /var/lib/openhab2/cache || mkdir /var/lib/openhab2/cache
mountpoint -q /var/lib/openhab2/cache || mount -t tmpfs tmpfs /var/lib/openhab2/cache
test -d /var/lib/openhab2/tmp || mkdir /var/lib/openhab2/tmp
mountpoint -q /var/lib/openhab2/tmp || mount -t tmpfs tmpfs /var/lib/openhab2/tmp
test -d /var/lib/openhab2/log || mkdir /var/lib/openhab2/log
mountpoint -q /var/lib/openhab2/log || mount -t tmpfs tmpfs /var/lib/openhab2/log

Any idea why the start_pre.sh script isn’t “green” ??

It needs to be executable:
chmod +x start_pre.sh

The new log file:

The file system is in Read Only (RO) mode. If you need to make changes,
use the command 'rpi-rw' to put the file system in Read Write (RW) mode.
Use 'rpi-ro' to return to RO mode. The /home/pi/data directory is always in RW m                                                                                                   ode.

pi@emonpi(ro):~$ service openhab2 status
● openhab2.service - openHAB 2 - empowering the smart home
   Loaded: loaded (/usr/lib/systemd/system/openhab2.service; enabled)
   Active: deactivating (stop) (Result: exit-code) since Mon 2017-02-27 21:55:37                                                                                                    UTC; 1s ago
     Docs: http://docs.openhab.org
           https://community.openhab.org
  Process: 5152 ExecStart=/usr/share/openhab2/start.sh server (code=exited, stat                                                                                                   us=255)
  Process: 5146 ExecStartPre=/usr/share/openhab2/start_pre.sh (code=exited, stat                                                                                                   us=0/SUCCESS)
 Main PID: 5152 (code=exited, status=255);         : 5313 (karaf)
   CGroup: /system.slice/openhab2.service
           └─control
             ├─5313 /bin/bash /usr/share/openhab2/runtime/bin/karaf stop
             ├─5455 /bin/bash /usr/share/openhab2/runtime/bin/karaf stop
             ├─5456 /usr/lib/jvm/java-8-oracle/jre/bin/java -version
             ├─5457 grep -E "([0-9].[0-9]\..*[0-9]).*"
             ├─5458 awk {print substr($3,2,length($3)-2)}
             ├─5459 awk {print substr($1, 3, 3)}
             └─5460 sed -e s;\.;;g
pi@emonpi(ro):~$ service openhab2 status
● openhab2.service - openHAB 2 - empowering the smart home
   Loaded: loaded (/usr/lib/systemd/system/openhab2.service; enabled)
   Active: active (running) since Mon 2017-02-27 21:55:43 UTC; 1s ago
     Docs: http://docs.openhab.org
           https://community.openhab.org
  Process: 5657 ExecStop=/usr/share/openhab2/runtime/bin/stop (code=exited, status=3)
  Process: 5825 ExecStartPre=/usr/share/openhab2/start_pre.sh (code=exited, status=0/SUCCESS)
 Main PID: 5831 (karaf)
   CGroup: /system.slice/openhab2.service
           ├─5831 /bin/bash /usr/share/openhab2/runtime/bin/karaf server
           └─5981 /usr/bin/java -Dopenhab.home=/usr/share/openhab2 -Dopenhab.conf=/etc/openhab2 -Dopenhab.runtime=/usr/share/openhab2/runtime -Dopenhab.userdata=/var/lib/openha...
pi@emonpi(ro):~$ service openhab2 status
● openhab2.service - openHAB 2 - empowering the smart home
   Loaded: loaded (/usr/lib/systemd/system/openhab2.service; enabled)
   Active: activating (auto-restart) (Result: exit-code) since Mon 2017-02-27 21:55:54 UTC; 89ms ago
     Docs: http://docs.openhab.org
           https://community.openhab.org
  Process: 6672 ExecStop=/usr/share/openhab2/runtime/bin/stop (code=exited, status=3)
  Process: 6511 ExecStart=/usr/share/openhab2/start.sh server (code=exited, status=255)
  Process: 6505 ExecStartPre=/usr/share/openhab2/start_pre.sh (code=exited, status=0/SUCCESS)
 Main PID: 6511 (code=exited, status=255)
pi@emonpi(ro):~$ service openhab2 status
● openhab2.service - openHAB 2 - empowering the smart home
   Loaded: loaded (/usr/lib/systemd/system/openhab2.service; enabled)
   Active: active (running) since Mon 2017-02-27 21:55:58 UTC; 540ms ago
     Docs: http://docs.openhab.org
           https://community.openhab.org
  Process: 7016 ExecStop=/usr/share/openhab2/runtime/bin/stop (code=exited, status=3)
  Process: 7184 ExecStartPre=/usr/share/openhab2/start_pre.sh (code=exited, status=0/SUCCESS)
 Main PID: 7190 (karaf)
   CGroup: /system.slice/openhab2.service
           ├─7190 /bin/bash /usr/share/openhab2/runtime/bin/karaf server
           ├─7300 /usr/bin/java -version
           └─7301 grep ^IBM
pi@emonpi(ro):~$ service openhab2 status
● openhab2.service - openHAB 2 - empowering the smart home
   Loaded: loaded (/usr/lib/systemd/system/openhab2.service; enabled)
   Active: activating (auto-restart) (Result: exit-code) since Mon 2017-02-27 21:56:01 UTC; 80ms ago
     Docs: http://docs.openhab.org
           https://community.openhab.org
  Process: 7360 ExecStop=/usr/share/openhab2/runtime/bin/stop (code=exited, status=3)
  Process: 7190 ExecStart=/usr/share/openhab2/start.sh server (code=exited, status=255)
  Process: 7184 ExecStartPre=/usr/share/openhab2/start_pre.sh (code=exited, status=0/SUCCESS)
 Main PID: 7190 (code=exited, status=255)
pi@emonpi(ro):~$ service openhab2 status
● openhab2.service - openHAB 2 - empowering the smart home
   Loaded: loaded (/usr/lib/systemd/system/openhab2.service; enabled)
   Active: active (running) since Mon 2017-02-27 21:56:01 UTC; 737ms ago
     Docs: http://docs.openhab.org
           https://community.openhab.org
  Process: 7360 ExecStop=/usr/share/openhab2/runtime/bin/stop (code=exited, status=3)
  Process: 7548 ExecStartPre=/usr/share/openhab2/start_pre.sh (code=exited, status=0/SUCCESS)
 Main PID: 7554 (karaf)
   CGroup: /system.slice/openhab2.service
           ├─7554 /bin/bash /usr/share/openhab2/runtime/bin/karaf server
           ├─7663 /usr/bin/java -version
           └─7664 grep ^IBM
pi@emonpi(ro):~$ service openhab2 status
● openhab2.service - openHAB 2 - empowering the smart home
   Loaded: loaded (/usr/lib/systemd/system/openhab2.service; enabled)
   Active: active (running) since Mon 2017-02-27 21:56:01 UTC; 1s ago
     Docs: http://docs.openhab.org
           https://community.openhab.org
  Process: 7360 ExecStop=/usr/share/openhab2/runtime/bin/stop (code=exited, status=3)
  Process: 7548 ExecStartPre=/usr/share/openhab2/start_pre.sh (code=exited, status=0/SUCCESS)
 Main PID: 7554 (karaf)
   CGroup: /system.slice/openhab2.service
           ├─7554 /bin/bash /usr/share/openhab2/runtime/bin/karaf server
           └─7712 /usr/bin/java -Dopenhab.home=/usr/share/openhab2 -Dopenhab.conf=/etc/openhab2 -Dopenhab.runtime=/usr/share/openhab2/runtime -Dopenhab.userdata=/var/lib/openha...
pi@emonpi(ro):~$ service openhab2 status
● openhab2.service - openHAB 2 - empowering the smart home
   Loaded: loaded (/usr/lib/systemd/system/openhab2.service; enabled)
   Active: deactivating (stop) (Result: exit-code) since Mon 2017-02-27 21:56:03 UTC; 464ms ago
     Docs: http://docs.openhab.org
           https://community.openhab.org
  Process: 7554 ExecStart=/usr/share/openhab2/start.sh server (code=exited, status=255)
  Process: 7548 ExecStartPre=/usr/share/openhab2/start_pre.sh (code=exited, status=0/SUCCESS)
 Main PID: 7554 (code=exited, status=255);         : 7732 (karaf)
   CGroup: /system.slice/openhab2.service
           └─control
             ├─7732 /bin/bash /usr/share/openhab2/runtime/bin/karaf stop
             ├─7831 /bin/bash /usr/share/openhab2/runtime/bin/karaf stop
             ├─7832 /usr/lib/jvm/java-8-oracle/jre/bin/java -version
             ├─7833 grep -E "([0-9].[0-9]\..*[0-9]).*"
             ├─7834 awk {print substr($3,2,length($3)-2)}
             ├─7835 awk {print substr($1, 3, 3)}
             └─7836 sed -e s;\.;;g
pi@emonpi(ro):~$ service openhab2 status
● openhab2.service - openHAB 2 - empowering the smart home
   Loaded: loaded (/usr/lib/systemd/system/openhab2.service; enabled)
   Active: deactivating (stop) (Result: exit-code) since Mon 2017-02-27 21:56:03 UTC; 1s ago
     Docs: http://docs.openhab.org
           https://community.openhab.org
  Process: 7554 ExecStart=/usr/share/openhab2/start.sh server (code=exited, status=255)
  Process: 7548 ExecStartPre=/usr/share/openhab2/start_pre.sh (code=exited, status=0/SUCCESS)
 Main PID: 7554 (code=exited, status=255);         : 7732 (karaf)
   CGroup: /system.slice/openhab2.service
           └─control
             ├─7732 /bin/bash /usr/share/openhab2/runtime/bin/karaf stop
             └─7896 /usr/lib/jvm/java-8-oracle/jre/bin/java -Dopenhab.home=/usr/share/openhab2 -Dopenhab.conf=/etc/openhab2 -Dopenhab.runtime=/usr/share/openhab2/runtime -Dopen...
pi@emonpi(ro):~$ service openhab2 status
● openhab2.service - openHAB 2 - empowering the smart home
   Loaded: loaded (/usr/lib/systemd/system/openhab2.service; enabled)
   Active: active (running) since Mon 2017-02-27 21:56:05 UTC; 32ms ago
     Docs: http://docs.openhab.org
           https://community.openhab.org
  Process: 7732 ExecStop=/usr/share/openhab2/runtime/bin/stop (code=exited, status=3)
  Process: 7915 ExecStartPre=/usr/share/openhab2/start_pre.sh (code=exited, status=0/SUCCESS)
 Main PID: 7922 (karaf)
   CGroup: /system.slice/openhab2.service
           ├─7922 /bin/bash /usr/share/openhab2/runtime/bin/karaf server
           ├─7925 /bin/bash /usr/share/openhab2/runtime/bin/karaf server
           ├─7930 /bin/bash /usr/share/openhab2/runtime/bin/karaf server
           ├─7931 ls -l karaf
           └─7932 awk -F->  {print $2}
pi@emonpi(ro):~$ service openhab2 status
● openhab2.service - openHAB 2 - empowering the smart home
   Loaded: loaded (/usr/lib/systemd/system/openhab2.service; enabled)
   Active: active (running) since Mon 2017-02-27 21:56:05 UTC; 524ms ago
     Docs: http://docs.openhab.org
           https://community.openhab.org
  Process: 7732 ExecStop=/usr/share/openhab2/runtime/bin/stop (code=exited, status=3)
  Process: 7915 ExecStartPre=/usr/share/openhab2/start_pre.sh (code=exited, status=0/SUCCESS)
 Main PID: 7922 (karaf)
   CGroup: /system.slice/openhab2.service
           ├─7922 /bin/bash /usr/share/openhab2/runtime/bin/karaf server
           ├─8039 /usr/bin/java -version
           └─8040 grep ^IBM
pi@emonpi(ro):~$ service openhab2 status
● openhab2.service - openHAB 2 - empowering the smart home
   Loaded: loaded (/usr/lib/systemd/system/openhab2.service; enabled)
   Active: active (running) since Mon 2017-02-27 21:56:05 UTC; 995ms ago
     Docs: http://docs.openhab.org
           https://community.openhab.org
  Process: 7732 ExecStop=/usr/share/openhab2/runtime/bin/stop (code=exited, status=3)
  Process: 7915 ExecStartPre=/usr/share/openhab2/start_pre.sh (code=exited, status=0/SUCCESS)
 Main PID: 7922 (karaf)
   CGroup: /system.slice/openhab2.service
           ├─7922 /bin/bash /usr/share/openhab2/runtime/bin/karaf server
           ├─8073 /bin/bash /usr/share/openhab2/runtime/bin/karaf server
           ├─8074 /usr/bin/java -version
           ├─8075 grep -E "([0-9].[0-9]\..*[0-9]).*"
           ├─8076 awk {print substr($3,2,length($3)-2)}
           ├─8077 awk {print substr($1, 3, 3)}
           └─8078 sed -e s;\.;;g

Good, progress. Now check your logfile for openhab2 at /var/log/openhab2/openhab.log. There’s probably an error there that’s causing openhab to shutdown. Also run journalctl -xn that might give a clue

Lol there is no log file :scream::

pi@emonpi(rw):~$ journalctl -xn
No journal files were found.
pi@emonpi(rw):~$ cd /var/log
pi@emonpi(rw):log$ ls
apache2   daemon.log   emonpilcd  mosquitto       openhab             ufw.log
auth.log  debug        kern.log   mqtt_input.log  redis               wtmp
boot.log  emoncms.log  logrotate  mysql           service-runner.log
btmp      emonhub      messages   mysql.log       syslog
pi@emonpi(rw):log$

Anything at /var/lib/openhab2/log?

Empty too… Maybe I did something wrong? You applied these steps on the emonSD image?

I have done, yes. Though I find that openhab2 can be a little temperamental if it’s not got everything where it likes it… How did you install openhab2 and which version?

If you installed via the apt repository can you try (I assume you don’t have any openhab configuration you need to keep?):

apt-get --purge remove openhab2
rm -rf /etc/openhab2
rm -rf /var/lib/openhab2

Make sure openhab is not running:

ps -ef | grep "karaf"
ps -ef | grep "openhab"

should return no results

Then try reinstalling openhab2 and configure as above.
Start openhab:

systemctl start openhab2

Hopefully that’ll work…

I removed openhab-runtime from the image and then I installed OH2 according to: openHAB 2 on Linux - openHAB 2 - Empowering the Smart Home

wget -qO - 'https://bintray.com/user/downloadSubjectPublicKey?username=openhab' | sudo apt-key add -
echo 'deb http://dl.bintray.com/openhab/apt-repo2 stable main' | sudo tee /etc/apt/sources.list.d/openhab2.list

sudo apt-get update
sudo apt-get install openhab2
sudo apt-get install openhab2-addons

sudo systemctl start openhab2.service
sudo systemctl status openhab2.service
  
sudo systemctl daemon-reload
sudo systemctl enable openhab2.service

I’ll try your instructions right away.

Hmmm looks like I didn’t remove openHAB 1 like it should. The old service still exists… When stopping the service it looks like it keeps trying to re-activate.

pi@emonpi(rw):/$ sudo service openhab start
Job for openhab.service failed. See 'systemctl status openhab.service' and 'journalctl -xn' for                                   details.
pi@emonpi(rw):/$ sudo service openhab stop
pi@emonpi(rw):/$ sudo service openhab status
● openhab.service - Starts and stops the openHAB Home Automation Bus
   Loaded: loaded (/usr/lib/systemd/system/openhab.service; disabled)
   Active: failed (Result: exit-code) since Mon 2017-02-27 22:41:42 UTC; 11s ago
     Docs: http://www.openhab.org
  Process: 1169 ExecStartPre=/usr/share/openhab/bin/setpermissions.sh (code=exited, status=217/                                  USER)

Feb 27 22:41:42 emonpi systemd[1]: openhab.service: control process exited, code=exited s...217
Feb 27 22:41:42 emonpi systemd[1]: Failed to start Starts and stops the openHAB Home Auto...us.
Feb 27 22:41:42 emonpi systemd[1]: Unit openhab.service entered failed state.
Feb 27 22:41:51 emonpi systemd[1]: Stopped Starts and stops the openHAB Home Automation Bus.
Hint: Some lines were ellipsized, use -l to show in full.
pi@emonpi(rw):/$ sudo service openhab2 status
● openhab2.service
   Loaded: not-found (Reason: No such file or directory)
   Active: failed (Result: exit-code) since Mon 2017-02-27 22:35:36 UTC; 6min ago
 Main PID: 31662 (code=exited, status=255)

Feb 27 22:35:32 emonpi start.sh[31662]: Launching the openHAB runtime...
Feb 27 22:35:34 emonpi start.sh[31662]: /var/log/openhab2/openhab.log (No such file or directory)
Feb 27 22:35:34 emonpi systemd[1]: openhab2.service: main process exited, code=exited, status=255/n/a
Feb 27 22:35:34 emonpi stop[31828]: stop: Ignoring predefined value for KARAF_HOME
Feb 27 22:35:35 emonpi systemd[1]: Stopping openHAB 2 - empowering the smart home...
Feb 27 22:35:36 emonpi stop[31828]: /var/lib/openhab2/tmp/port shutdown port file doesn't exist. The container is not running.
Feb 27 22:35:36 emonpi systemd[1]: openhab2.service: control process exited, code=exited status=3
Feb 27 22:35:36 emonpi systemd[1]: Stopped openHAB 2 - empowering the smart home.
Feb 27 22:35:36 emonpi systemd[1]: Unit openhab2.service entered failed state.
Feb 27 22:36:36 emonpi systemd[1]: Stopped openhab2.service.

How did you clean the emonSD image from openHAB 1?

Shouldn’t actually need to uninstall it but it will need to be stopped I think.

Those logs are complaining that openhab2 can’t write to it’s log file. Can you try:

mkdir -p /var/log/openhab2 && chown openhab:openhab /var/log/openhab2

Since /var/log is mounted as tmpfs on the emonSD the logs are non-persistent and the dirs must be created on each boot.

We do this in /etc/rc.local which is symlinked to ~/emonpi/rc.local_jessieminimal

Thanks for your help @mattwire, I’m watching this thread closely. I’m keen to get OH2 running on emonSD and to release and upgrade. I started documenting my process here:

I need to revisit, to remember how far I got. Sorry, I’ve been busy today.

Using rc.local isn’t a good idea, not only is rc.local dependent on zero errors from all it’s entries to complete, it also doesn’t run untill after all the services are started, so then you have to restart any that have failed to start prior to the rc.local running, it undermines the whole purpose of the start up processes, dependencies and order etc.

Either the init.d script should create the folders as emonhub does or if using systemctl adding something like

PermissionsStartOnly=true
ExecStartPre=-/bin/mkdir -P /var/log/openhab2
ExecStartPre=/bin/chown -R openhab:openhab /var/log/openhab2/

before the ExecStart line in the service unit, or as in this case you already have an “ExecStartPre=/usr/share/openhab2/start_pre.sh” line in there you could simply add the log file creation to that additional file, although IMO I would possibly consider moving the contents of that script directly into the service unit to avoid the need for a separate script (and whether it’s executable) and to maximize on the systemctl error logging.

although IMO I would possibly consider moving the contents of that script directly into the service unit to avoid the need for a separate script (and whether it’s executable) and to maximize on the systemctl error logging.

@pb66 I like that idea, so you’d just add multiple ExecStartPre= lines to the systemctl script? What was the purpose of the “-” in the ExecStartPre=-/bin/mkdir… line in your example?

Yes, That was my thinking.

The minus means ignore any errors, in this instance, if the folder already exists.

Haven’t got it running (yet :slight_smile:)… Have you had any success Glyn?

Latest effort. You don’t need to configure any other scripts. Just modify the service file:
/usr/lib/systemd/system/openhab2.service:

[Unit]
Description=openHAB 2 - empowering the smart home
Documentation=http://docs.openhab.org
Documentation=https://community.openhab.org
Wants=network-online.target
After=network-online.target

[Service]
EnvironmentFile=/etc/default/openhab2
User=openhab
Group=openhab
WorkingDirectory=/usr/share/openhab2
PermissionsStartOnly=true
ExecStartPre=/bin/mkdir -p /var/log/openhab2
ExecStartPre=/bin/chown -R openhab:openhab /var/log/openhab2/
ExecStartPre=/bin/sh -c '/usr/bin/test -d /var/lib/openhab2/cache || /bin/mkdir /var/lib/openhab2/cache'
ExecStartPre=/bin/sh -c '/bin/mountpoint -q /var/lib/openhab2/cache || /bin/mount -t tmpfs tmpfs /var/lib/openhab2/cache'
ExecStartPre=/bin/sh -c '/usr/bin/test -d /var/lib/openhab2/tmp || /bin/mkdir /var/lib/openhab2/tmp'
ExecStartPre=/bin/sh -c '/bin/mountpoint -q /var/lib/openhab2/tmp || /bin/mount -t tmpfs tmpfs /var/lib/openhab2/tmp'
ExecStart=/usr/share/openhab2/start.sh server
ExecStop=/usr/share/openhab2/runtime/bin/stop
# Shutdown delay in seconds, before process is tried to be killed with KILL (if configured)
TimeoutStopSec=120
Restart=on-failure

[Install]
WantedBy=multi-user.target

Then do a:

systemctl daemon-reload
systemctl start openhab2

Once you have got it working, it would be a good idea to modify the logging config so you don’t run out of memory:
Edit /etc/openhab/etc/org.ops4j.pax.logging.cfg and change the maxFileSize and maxBackupIndex to match the entries below:

# File appender - openhab.log
log4j.appender.out=org.apache.log4j.RollingFileAppender
log4j.appender.out.layout=org.apache.log4j.PatternLayout
log4j.appender.out.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%-5.5p] [%-36.36c] - %m%n
log4j.appender.out.file=${openhab.logdir}/openhab.log
log4j.appender.out.append=true
log4j.appender.out.maxFileSize=5MB
log4j.appender.out.maxBackupIndex=1

# File appender - events.log
log4j.appender.event=org.apache.log4j.RollingFileAppender
log4j.appender.event.layout=org.apache.log4j.PatternLayout
log4j.appender.event.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} [%-26.26c{1}] - %m%n
log4j.appender.event.file=${openhab.logdir}/events.log
log4j.appender.event.append=true
log4j.appender.event.maxFileSize=5MB
log4j.appender.event.maxBackupIndex=1

Ok, I took a clean image, did sudo apt-get update & upgrade. All is working fine now.

Do I remove the openhab-runtime (1.8.xxx) before installing the 2.0 version according to: Raspberry Pi - openHAB 2 - Empowering the Smart Home and here: openHAB 2 on Linux - openHAB 2 - Empowering the Smart Home
Or should I should remove / disable the existing openhab service from emonSD?