Hans-Peter Stoerr created SLING-10362:
-----------------------------------------
Summary: Sling Starter: trouble when installing packages with
fileinstall provider
Key: SLING-10362
URL: https://issues.apache.org/jira/browse/SLING-10362
Project: Sling
Issue Type: Improvement
Components: Starter
Affects Versions: Starter 12
Environment: Sling-Starter 12-SNAPSHOT (commit 0e6a8e41) with JDK 11
on MacOS
Reporter: Hans-Peter Stoerr
I'm trying to install some packages into a snapshot of the Starter 12 using the
Sling [fileinstaller
provider|https://sling.apache.org/documentation/bundles/file-installer-provider.html],
which works somewhat but not properly when the package has a setup hook.
It seems that the packages are internally transformed by the [Content Package
Installer
Factory|https://sling.apache.org/documentation/bundles/content-package-installer-factory.html],
but too early - the packages are unpacked before the repository was properly
set up. See the stacktrace below: the package was likely installed when the
user 'sling-package-install' wasn't properly set up in the repository yet.
As workaround I currently set the start level of the
org.apache.sling.installer.factory.packages to 21 - a bit later than all the
other bundles. That makes the problem disappear. This might be a possibility
for the Sling Starter 12, too, but I'm not sure whether it is the right option.
Possibly the fileinstaller provider needs more dependencies from some bundles
to make sure it's started late enough. Another way would be to give the Sling
fileinstaller provider some additional options like the
felix.fileinstall.active.level of [Felix File
Install|https://felix.apache.org/documentation/subprojects/apache-felix-file-install.html].
Or the [run mode
support|https://sling.apache.org/documentation/bundles/file-installer-provider.html#run-mode-support-1]
of the Sling file installer should be made to work somehow with packages, so
that the packages are only installed when the run mode specified in the path is
reached. That would be even better, since for packages you often have to
specify an order as well, and that would be another option than package
dependencies.
To reproduce the bug you can check out Sling Starter 12 and execute the
following commands:
cd target/
mkdir fileinstall
wget
[https://repo1.maven.org/maven2/com/composum/nodes/composum-nodes-sling-package/2.6.1/composum-nodes-sling-package-2.6.1.zip]
mv composum-nodes-sling-package-2.6.1.zip fileinstall/
java -jar dependency/org.apache.sling.feature.launcher.jar -f
org.apache.sling.starter-12-SNAPSHOT-oak_tar_far.far -D
felix.startlevel.bundle=30 -D sling.fileinstall.dir=fileinstall/
In the log you get the following stacktrace in the log:
07.05.2021 16:42:44.945 *INFO* [Apache Sling Repository Startup Thread #1|#1]
org.apache.sling.installer.provider.jcr.impl.RootFolderListener Watching /apps
to detect potential changes in subfoldersault.packaging.PackageException:
Package extraction requires admin session as it has a hook (userid
'sling-package-install' not allowed).
at
org.apache.jackrabbit.vault.packaging.impl.ZipVaultPackage.checkAllowanceToInstallPackage(ZipVaultPackage.java:226)
[org.apache.jackrabbit.vault:3.4.10]
at
org.apache.jackrabbit.vault.packaging.impl.ZipVaultPackage.prepareExtract(ZipVaultPackage.java:199)
[org.apache.jackrabbit.vault:3.4.10]
at
org.apache.jackrabbit.vault.packaging.impl.JcrPackageImpl.extract(JcrPackageImpl.java:389)
[org.apache.jackrabbit.vault:3.4.10]
at
org.apache.jackrabbit.vault.packaging.impl.JcrPackageImpl.extract(JcrPackageImpl.java:356)
[org.apache.jackrabbit.vault:3.4.10]
at
org.apache.jackrabbit.vault.packaging.impl.JcrPackageImpl.extract(JcrPackageImpl.java:342)
[org.apache.jackrabbit.vault:3.4.10]
at
org.apache.sling.installer.factory.packages.impl.PackageTransformer$InstallPackageTask.doExecute(PackageTransformer.java:337)
[org.apache.sling.installer.factory.packages:1.0.4]
at
org.apache.sling.installer.factory.packages.impl.PackageTransformer$AbstractPackageInstallTask.execute(PackageTransformer.java:269)
[org.apache.sling.installer.factory.packages:1.0.4]
at
org.apache.sling.installer.core.impl.OsgiInstallerImpl.doExecuteTasks(OsgiInstallerImpl.java:918)
[org.apache.sling.installer.core:3.11.4]
at
org.apache.sling.installer.core.impl.OsgiInstallerImpl.executeTasks(OsgiInstallerImpl.java:755)
[org.apache.sling.installer.core:3.11.4]
at
org.apache.sling.installer.core.impl.OsgiInstallerImpl.run(OsgiInstallerImpl.java:304)
[org.apache.sling.installer.core:3.11.4]
at java.base/java.lang.Thread.run(Thread.java:834)
In some cases I also got the following stacktrace, which seems to indicate that
a repository wasn't available or properly initialized:
java.lang.NullPointerException: null
at
org.apache.sling.jcr.oak.server.internal.OakSlingRepository$2.run(OakSlingRepository.java:99)
[org.apache.sling.jcr.oak.server:1.2.10]
at
org.apache.sling.jcr.oak.server.internal.OakSlingRepository$2.run(OakSlingRepository.java:96)
[org.apache.sling.jcr.oak.server:1.2.10]
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/javax.security.auth.Subject.doAsPrivileged(Subject.java:550)
at
org.apache.sling.jcr.oak.server.internal.OakSlingRepository.createServiceSession(OakSlingRepository.java:96)
[org.apache.sling.jcr.oak.server:1.2.10]
at
org.apache.sling.jcr.base.AbstractSlingRepository2.createServiceSession(AbstractSlingRepository2.java:166)
[org.apache.sling.jcr.base:3.1.6]
at
org.apache.sling.jcr.base.AbstractSlingRepository2.loginService(AbstractSlingRepository2.java:383)
[org.apache.sling.jcr.base:3.1.6]
at
org.apache.sling.installer.factory.packages.impl.PackageTransformer$AbstractPackageInstallTask.execute(PackageTransformer.java:263)
[org.apache.sling.installer. factory.packages:1.0.4]
at
org.apache.sling.installer.core.impl.OsgiInstallerImpl.doExecuteTasks(OsgiInstallerImpl.java:918)
[org.apache.sling.installer.core:3.11.4]
at
org.apache.sling.installer.core.impl.OsgiInstallerImpl.executeTasks(OsgiInstallerImpl.java:755)
[org.apache.sling.installer.core:3.11.4]
at
org.apache.sling.installer.core.impl.OsgiInstallerImpl.run(OsgiInstallerImpl.java:304)
[org.apache.sling.installer.core:3.11.4]
at java.base/java.lang.Thread.run(Thread.java:834)
--
This message was sent by Atlassian Jira
(v8.3.4#803005)