You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@karaf.apache.org by "emetsger@gmail.com" <em...@gmail.com> on 2016/09/26 20:37:04 UTC

Scripting installation of features - Command not found: feature:repo-add (was Re: feature:repo-add -i broken in 4.0.4?)

Hi,

I've upgraded to Karaf 4.0.6, and I'm attempting to script the installation
of all features in a features repository, without having to enumerate each
feature.  

With the return of the '-i' argument to feature:repo-add, I've added the
following line to 'etc/shell.init.script':
feature:repo-add -i mvn:edu.amherst.acdc/acrepo-karaf/LATEST/xml/features

After adding that line, I start the Karaf console and receive the following
error:
"Error in initialization script: Command not found: feature:repo-add"

The command works when I copy and paste it into the Karaf console, but does
not work when appended to to 'etc/shell.init.script'.  Do I mis-understand
the purpose or syntax of 'etc/shell.init.script', or is this a bug in Karaf?

Thanks again,
Elliot




--
View this message in context: http://karaf.922171.n3.nabble.com/feature-repo-add-i-broken-in-4-0-4-tp4046143p4048173.html
Sent from the Karaf - User mailing list archive at Nabble.com.

Re: Scripting installation of features - Command not found: feature:repo-add (was Re: feature:repo-add -i broken in 4.0.4?)

Posted by Benson Margulies <be...@basistech.com>.
Have you considered just making a karaf assembly?

On Oct 8, 2016 11:22 AM, "emetsger@gmail.com" <em...@gmail.com> wrote:

> Hi Guillaume,
>
> After digging a bit more, the apparent disparity between the client and the
> interactive console seems to be related to timing:
>
> bin/start && \
> bin/client -r 10 -d 5  "feature:repo-add -i
> mvn:edu.amherst.acdc/acrepo-karaf/LATEST/xml/features" && \
> sleep 20 && \
> bin/stop
>
> Adding a `sleep` before stopping the console allows the bundles to be
> started!  I assumed that `feature:repo-add -i` was blocking until
> everything
> was installed, but I was mistaken?  Or maybe calling bin/stop so quickly
> aborts the preservation of the bundle state?
>
> In any case, adding the sleep is allowing everything to come up nicely.
>
> Thanks,
> Elliot
>
>
>
> --
> View this message in context: http://karaf.922171.n3.nabble.
> com/feature-repo-add-i-broken-in-4-0-4-tp4046143p4048280.html
> Sent from the Karaf - User mailing list archive at Nabble.com.
>

Re: Scripting installation of features - Command not found: feature:repo-add (was Re: feature:repo-add -i broken in 4.0.4?)

Posted by "emetsger@gmail.com" <em...@gmail.com>.
Hi Guillaume,

After digging a bit more, the apparent disparity between the client and the
interactive console seems to be related to timing:

bin/start && \
bin/client -r 10 -d 5  "feature:repo-add -i
mvn:edu.amherst.acdc/acrepo-karaf/LATEST/xml/features" && \
sleep 20 && \
bin/stop

Adding a `sleep` before stopping the console allows the bundles to be
started!  I assumed that `feature:repo-add -i` was blocking until everything
was installed, but I was mistaken?  Or maybe calling bin/stop so quickly
aborts the preservation of the bundle state?

In any case, adding the sleep is allowing everything to come up nicely.

Thanks,
Elliot



--
View this message in context: http://karaf.922171.n3.nabble.com/feature-repo-add-i-broken-in-4-0-4-tp4046143p4048280.html
Sent from the Karaf - User mailing list archive at Nabble.com.

Re: Scripting installation of features - Command not found: feature:repo-add (was Re: feature:repo-add -i broken in 4.0.4?)

Posted by "emetsger@gmail.com" <em...@gmail.com>.
Hi Guillaume,


Thanks for the reply!  I'll look forward to 4.0.8.  However, I have found
some additional behavior regarding `feature:repo-add -i` documented below,
showing that the command behaves differently when executed from the Karaf
client (bin/client) vs the interactive console.


Guillaume Nodet-2 wrote
> The commands may not be available yet when the script is started.
> I think this should be fixed in 4.0.8.

I attempted a work around: 
1) Start Karaf
2) Use the client to connect and install the features

For example:

bin/start && \
bin/client -r 10 -d 5  "feature:repo-add -i
mvn:edu.amherst.acdc/acrepo-karaf/LATEST/xml/features" && \
bin/stop

However, there does not seem to be parity between `feature:repo-add -i` when
executed from the Karaf client, vs execution from the interactive Karaf
console.

When `feature:repo-add -i` is executed by the client in a non-interactive
fashion (per my example above), features will be in the 'STARTED' state, but
their bundles will be in the 'INSTALLED' state (https://goo.gl/7mnYxG).

When `feature:repo-add -i` is executed from the interactive Karaf console,
features will be in the 'STARTED' state, AND the bundles will be in the
'ACTIVE' state (https://goo.gl/S87ThA).

I wanted to bring this to your attention in case it can be addressed for
4.0.8.

Best,
Elliot






--
View this message in context: http://karaf.922171.n3.nabble.com/feature-repo-add-i-broken-in-4-0-4-tp4046143p4048279.html
Sent from the Karaf - User mailing list archive at Nabble.com.

Re: Scripting installation of features - Command not found: feature:repo-add (was Re: feature:repo-add -i broken in 4.0.4?)

Posted by Guillaume Nodet <gn...@apache.org>.
The commands may not be available yet when the script is started.
I think this should be fixed in 4.0.8.

In the main time, you can try with the following script:

loadclass = {
  (($.context bundle 0) loadClass $1)
}
dosleep = {
  longClass = (((loadclass java.lang.Long) getField "TYPE") get null)
  threadClass = (loadclass java.lang.Thread)
  sleepMethod = ($threadClass getMethod "sleep" $longClass)
  $sleepMethod invoke null $1
}
not = { if $1 { false  } { true  } }
wait-for-command = {
  while  { not { $.commands contains $1 } } {
    dosleep 50
  }
}
// this first sleep is needed in order to ensure that the if and while
command are available
dosleep 500
wait-for-command "feature:repo-add"
feature:repo-add -i mvn:edu.amherst.acdc/acrepo-karaf/LATEST/xml/features


Cheers,
Guillaume

2016-09-26 22:37 GMT+02:00 emetsger@gmail.com <em...@gmail.com>:

> Hi,
>
> I've upgraded to Karaf 4.0.6, and I'm attempting to script the installation
> of all features in a features repository, without having to enumerate each
> feature.
>
> With the return of the '-i' argument to feature:repo-add, I've added the
> following line to 'etc/shell.init.script':
> feature:repo-add -i mvn:edu.amherst.acdc/acrepo-karaf/LATEST/xml/features
>
> After adding that line, I start the Karaf console and receive the following
> error:
> "Error in initialization script: Command not found: feature:repo-add"
>
> The command works when I copy and paste it into the Karaf console, but does
> not work when appended to to 'etc/shell.init.script'.  Do I mis-understand
> the purpose or syntax of 'etc/shell.init.script', or is this a bug in
> Karaf?
>
> Thanks again,
> Elliot
>
>
>
>
> --
> View this message in context: http://karaf.922171.n3.nabble.
> com/feature-repo-add-i-broken-in-4-0-4-tp4046143p4048173.html
> Sent from the Karaf - User mailing list archive at Nabble.com.
>



-- 
------------------------
Guillaume Nodet
------------------------
Red Hat, Open Source Integration

Email: gnodet@redhat.com
Web: http://fusesource.com
Blog: http://gnodet.blogspot.com/