Migration from Docker to Openhabian

Hey there,

I am currently using openhab3 in a non productive environment on the Docker image.
I want to migrate all settings, things, etc. into a new openhab3 installation running as a VM on Proxmox.

New installation is openhabian.
I did a Backup on the Docker image and reverted it into the new openhab installation.
All things, items, rules, etc. are there.

I do have still a few problems:

2021-08-24 21:08:40.649 [WARN ] [org.apache.felix.fileinstall        ] - /openhab/addons does not exist, please create it.
2021-08-24 21:08:40.662 [ERROR] [org.apache.felix.fileinstall        ] - Cannot create folder /openhab/userdata/tmp/bundles. Is the folder write-protected?
2021-08-24 21:08:40.663 [ERROR] [org.apache.felix.configadmin        ] - [org.osgi.service.cm.ManagedServiceFactory, id=44, bundle=17/mvn:org.apache.felix/org.apache.felix.fileinstall/3.6.8]: Unexpected problem updating configuration org.apache.felix.fileinstall.20eb0f0d-6e12-4743-8b96-651c4f8c9f56
java.lang.RuntimeException: Cannot create folder: /openhab/userdata/tmp/bundles
	at org.apache.felix.fileinstall.internal.DirectoryWatcher.prepareDir(DirectoryWatcher.java:647) ~[?:?]
	at org.apache.felix.fileinstall.internal.DirectoryWatcher.prepareTempDir(DirectoryWatcher.java:627) ~[?:?]
	at org.apache.felix.fileinstall.internal.DirectoryWatcher.<init>(DirectoryWatcher.java:179) ~[?:?]
	at org.apache.felix.fileinstall.internal.FileInstall.updated(FileInstall.java:250) ~[?:?]
	at org.apache.felix.fileinstall.internal.FileInstall$ConfigAdminSupport$Tracker.updated(FileInstall.java:380) ~[?:?]
	at org.apache.felix.cm.impl.helper.ManagedServiceFactoryTracker.updated(ManagedServiceFactoryTracker.java:159) ~[bundleFile:?]
	at org.apache.felix.cm.impl.helper.ManagedServiceFactoryTracker.provideConfiguration(ManagedServiceFactoryTracker.java:93) [bundleFile:?]
	at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.provide(ConfigurationManager.java:1264) [bundleFile:?]
	at org.apache.felix.cm.impl.ConfigurationManager$ManagedServiceFactoryUpdate.run(ConfigurationManager.java:1208) [bundleFile:?]
	at org.apache.felix.cm.impl.UpdateThread.run0(UpdateThread.java:122) [bundleFile:?]
	at org.apache.felix.cm.impl.UpdateThread.run(UpdateThread.java:84) [bundleFile:?]
	at java.lang.Thread.run(Unknown Source) [?:?]

Those are just warnings but anyway, werent there at the initial install :slight_smile:

2021-08-24 21:08:46.391 [WARN ] [.transport.servlet.ServletController] - Can't find the request for http://192.168.2.12:8080/rest/events/states's Observer 
2021-08-24 21:08:52.323 [WARN ] [ty.util.ssl.SslContextFactory.config] - Trusting all certificates configured for Client@f9aebe[provider=null,keyStore=null,trustStore=null]
2021-08-24 21:08:52.323 [WARN ] [ty.util.ssl.SslContextFactory.config] - No Client EndPointIdentificationAlgorithm configured for Client@f9aebe[provider=null,keyStore=null,trustStore=null]

I think there are because the folders are different in Docker than in openhabian.
Do you have a good solution to get around this issue?

Thanks a lot.

~Zico

What do you mean by that ? Did you use openhab-cli to backup AND to restore ?

If that does not work you can try to create links for all Docker directories to point to the new openHABian equivalents before you restore. See env variables in /etc/default/openhab.

Yes I used the Docker openhab-cli to Backup the files then copied it over to the new VM and then via openhabian-config restored the backup file.

I do not find the “Addons” directory in the file?!

image

Did you check that

Permissions seems to look normal.

I just deleted everything inside tmp folder but no luck.

No screenshots please.

/usr/share/openhab/addons

But that’s no config source so why ?

Where does this addons folder come from?

Openhabian seems to be missing it. Where is it configured then?

It isn’t configured anywhere.
It needs not be created by openHABian but AFAIK is created by openhab package install, so if it’s missing on your system you likely didn’t install yours properly.
And again, what for do you think you need this ?

Well …

before the restore of the Docker backup there was no such an error and now after the restore there is an error with the Addon ons device, same with the /tmp/bundels.

So likely the restore is overwritting something. I dont need this but I dont want the error.

And if you say it is installing via openhab package, then were in the filesystem is the folder located?
Install was done like this :wink:

sudo bash
# install git - you can skip this if it's already installed
apt-get update
apt-get install git

# download, link and create config file
git clone -b openHAB3 https://github.com/openhab/openhabian.git /opt/openhabian
ln -s /opt/openhabian/openhabian-setup.sh /usr/local/bin/openhabian-config
cp /opt/openhabian/build-image/openhabian.conf /etc/openhabian.conf
openhabian-config unattended

I usually am not one of those who quote themselves but here goes:

That’s openHABian installation, not the openhab package install I talked about.
On which OS ?

Folder exists. Isn’t the openhabian install, also installing the openhab package automatically?

Debian 11.

Seems like I now figured it out:

openhabian@openhabian:/var/lib/openhab/config/org/apache/felix/fileinstall$ cat
20eb0f0d-6e12-4743-8b96-651c4f8c9f56.config  8cb2fb6c-f325-4724-a3af-30493c096541.config

openhabian@openhabian:/var/lib/openhab/config/org/apache/felix/fileinstall$ cat 20eb0f0d-6e12-4743-8b96-651c4f8c9f56.config
:org.apache.felix.configadmin.revision:=L"1"
felix.fileinstall.active.level="90"
**felix.fileinstall.dir**="/openhab/addons"
**felix.fileinstall.filename**="file:/openhab/userdata/etc/org.apache.felix.fileinstall-deploy.cfg"
felix.fileinstall.log.level="3"
felix.fileinstall.poll="10000"
felix.fileinstall.start.level="80"
felix.fileinstall.subdir.mode="skip"
**felix.fileinstall.tmpdir**="/openhab/userdata/tmp/bundles"
service.bundleLocation="?"
service.factoryPid="org.apache.felix.fileinstall"
service.pid="org.apache.felix.fileinstall.20eb0f0d-6e12-4743-8b96-651c4f8c9f56"

**Seems to be the original file:**

openhabian@openhabian:/var/lib/openhab/config/org/apache/felix/fileinstall$ cat 8cb2fb6c-f325-4724-a3af-30493c096541.config
:org.apache.felix.configadmin.revision:=L"1"
felix.fileinstall.active.level="90"
felix.fileinstall.dir="/usr/share/openhab/addons"
felix.fileinstall.filename="file:/var/lib/openhab/etc/org.apache.felix.fileinstall-deploy.cfg"
felix.fileinstall.log.level="3"
felix.fileinstall.poll="10000"
felix.fileinstall.start.level="80"
felix.fileinstall.subdir.mode="skip"
felix.fileinstall.tmpdir="/var/lib/openhab/tmp/bundles"
service.bundleLocation="?"
service.factoryPid="org.apache.felix.fileinstall"
service.pid="org.apache.felix.fileinstall.8cb2fb6c-f325-4724-a3af-30493c096541"
openhabian@openhabian:/var/lib/openhab/config/org/apache/felix/fileinstall$

openhabian@openhabian:/var/lib/openhab/config/org/apache/felix/eventadmin/impl$ cat EventAdmin.config
:org.apache.felix.configadmin.revision:=L"1"
**felix.fileinstall.filename**="file:/openhab/userdata/etc/org.apache.felix.eventadmin.impl.EventAdmin.cfg"
org.apache.felix.eventadmin.AddSubject="true"
org.apache.felix.eventadmin.AddTimestamp="true"
org.apache.felix.eventadmin.AsyncToSyncThreadRatio="1"
org.apache.felix.eventadmin.ThreadPoolSize="3"
org.apache.felix.eventadmin.Timeout="0"
service.bundleLocation="?"
service.pid="org.apache.felix.eventadmin.impl.EventAdmin"

There I got my /openhab/addons and /openhab/userdata paths.
I changed those paths to the original ones.

Now I do only have another problem:

2021-08-25 14:42:50.334 [ERROR] [nternal.DiscoveryServiceRegistryImpl] - Cannot notify the DiscoveryListener 'org.openhab.core.config.discovery.internal.PersistentInbox' on Thing discovered event!
java.lang.IllegalArgumentException: Invalid type '{org.openhab.binding.wifiled.internal.handler.AbstractWiFiLEDDriver.Protocol}' of configuration value!
	at org.openhab.core.config.core.ConfigUtil.normalizeType(ConfigUtil.java:190) ~[bundleFile:?]
	at org.openhab.core.config.discovery.internal.PersistentInbox.synchronizeConfiguration(PersistentInbox.java:289) ~[bundleFile:?]
	at org.openhab.core.config.discovery.internal.PersistentInbox.add(PersistentInbox.java:258) ~[bundleFile:?]
	at org.openhab.core.config.discovery.internal.PersistentInbox.thingDiscovered(PersistentInbox.java:375) ~[bundleFile:?]
	at org.openhab.core.config.discovery.internal.DiscoveryServiceRegistryImpl$1.run(DiscoveryServiceRegistryImpl.java:260) ~[bundleFile:?]
	at org.openhab.core.config.discovery.internal.DiscoveryServiceRegistryImpl$1.run(DiscoveryServiceRegistryImpl.java:1) ~[bundleFile:?]
	at java.security.AccessController.doPrivileged(Native Method) ~[?:?]
	at org.openhab.core.config.discovery.internal.DiscoveryServiceRegistryImpl.thingDiscovered(DiscoveryServiceRegistryImpl.java:257) [bundleFile:?]
	at org.openhab.core.config.discovery.AbstractDiscoveryService.addDiscoveryListener(AbstractDiscoveryService.java:157) [bundleFile:?]
	at org.openhab.core.config.discovery.internal.DiscoveryServiceRegistryImpl.addDiscoveryServiceActivated(DiscoveryServiceRegistryImpl.java:424) [bundleFile:?]
	at org.openhab.core.config.discovery.internal.DiscoveryServiceRegistryImpl.addDiscoveryService(DiscoveryServiceRegistryImpl.java:419) [bundleFile:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?]
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
	at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[?:?]
	at java.lang.reflect.Method.invoke(Unknown Source) ~[?:?]
	at org.apache.felix.scr.impl.inject.methods.BaseMethod.invokeMethod(BaseMethod.java:244) [bundleFile:?]
	at org.apache.felix.scr.impl.inject.methods.BaseMethod.access$500(BaseMethod.java:41) [bundleFile:?]
	at org.apache.felix.scr.impl.inject.methods.BaseMethod$Resolved.invoke(BaseMethod.java:685) [bundleFile:?]
	at org.apache.felix.scr.impl.inject.methods.BaseMethod.invoke(BaseMethod.java:529) [bundleFile:?]
	at org.apache.felix.scr.impl.inject.methods.BindMethod.invoke(BindMethod.java:42) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.DependencyManager.doInvokeBindMethod(DependencyManager.java:2083) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.DependencyManager.invokeBindMethod(DependencyManager.java:2058) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.SingleComponentManager.invokeBindMethod(SingleComponentManager.java:443) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:333) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.DependencyManager$MultipleDynamicCustomizer.addedService(DependencyManager.java:301) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1200) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.customizerAdded(ServiceTracker.java:1121) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.trackAdding(ServiceTracker.java:928) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$AbstractTracked.track(ServiceTracker.java:864) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:1152) [bundleFile:?]
	at org.apache.felix.scr.impl.BundleComponentActivator$ListenerInfo.serviceChanged(BundleComponentActivator.java:114) [bundleFile:?]
	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:120) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:957) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:936) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:873) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:141) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:261) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:496) [org.eclipse.osgi-3.16.200.jar:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:929) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager$3.register(AbstractComponentManager.java:915) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.RegistrationManager.changeRegistration(RegistrationManager.java:133) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.registerService(AbstractComponentManager.java:984) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.activateInternal(AbstractComponentManager.java:752) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enableInternal(AbstractComponentManager.java:674) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.AbstractComponentManager.enable(AbstractComponentManager.java:437) [bundleFile:?]
	at org.apache.felix.scr.impl.manager.ConfigurableComponentHolder.enableComponents(ConfigurableComponentHolder.java:667) [bundleFile:?]
	at org.apache.felix.scr.impl.BundleComponentActivator.initialEnable(BundleComponentActivator.java:305) [bundleFile:?]
	at org.apache.felix.scr.impl.Activator.loadComponents(Activator.java:554) [bundleFile:?]
	at org.apache.felix.scr.impl.Activator.access$200(Activator.java:70) [bundleFile:?]
	at org.apache.felix.scr.impl.Activator$ScrExtension.start(Activator.java:421) [bundleFile:?]
	at org.apache.felix.scr.impl.AbstractExtender.createExtension(AbstractExtender.java:196) [bundleFile:?]
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:169) [bundleFile:?]
	at org.apache.felix.scr.impl.AbstractExtender.modifiedBundle(AbstractExtender.java:49) [bundleFile:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:488) [osgi.core-7.0.0.jar:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.customizerModified(BundleTracker.java:420) [osgi.core-7.0.0.jar:?]
	at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:232) [osgi.core-7.0.0.jar:?]
	at org.osgi.util.tracker.BundleTracker$Tracked.bundleChanged(BundleTracker.java:450) [osgi.core-7.0.0.jar:?]
	at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:945) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:151) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEventPrivileged(EquinoxEventPublisher.java:232) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:138) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxEventPublisher.publishBundleEvent(EquinoxEventPublisher.java:130) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor.publishModuleEvent(EquinoxContainerAdaptor.java:217) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.container.Module.publishEvent(Module.java:499) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.container.Module.start(Module.java:486) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1845) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1838) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1781) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1743) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1665) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234) [org.eclipse.osgi-3.16.200.jar:?]
	at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345) [org.eclipse.osgi-3.16.200.jar:?]

Yes but it just installs the package which in turn is OS dependent so not guaranteed it creates the folder.

EDIT:
Debian 11 / bullseye is brand new. It’s not supported yet by openHABian.
Why do people install brand new stuff on day one then wonder when it does not work?
To run software that first and foremost needs to be stable because your home depends on it ?

Check /var/lib/openhab/jsondb for files to have a name with Discovery and if the string from the error message is in there. Those (but only those!) you can delete safely.
I don’t think any developer ever thought of your migration use case so it’s unknown how many more issues are lurking there.
If problems keep appearing at some point in time you would need to consider to purge/reinstall the openhab packages from scratch and manually import the config.

1 Like