I think that I know the reason. Openshift restricts which port we can use
on the cloud server (15000-35000). So if you try to bind a port which is
not allow you will ge this error.

[fabric-fuse.rhcloud.com bin]\> ./karaf
karaf: JAVA_HOME not set; results may vary
java.net.BindException: Permission denied
at java.net.PlainSocketImpl.socketBind(Native Method)
at java.net.AbstractPlainSocketImpl.bind(AbstractPlainSocketImpl.java:376)
at java.net.ServerSocket.bind(ServerSocket.java:376)
at java.net.ServerSocket.<init>(ServerSocket.java:237)
at org.apache.karaf.main.Main.setupShutdown(Main.java:1400)

I will make a test with a different port and using this variable :
karaf.shutdown.port

On Mon, Aug 27, 2012 at 11:03 AM, Charles Moulliard <[email protected]>wrote:

> After verification, it appears that karaf.base and karaf.home are defined
> correctly and both point to this location
> :/var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric
>
> like also karaf.data
> : 
> -Dkaraf.data=/var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/fabric/runtime/fabric/data
>
> The account has the permissions required to create the file in the data
> directory
>
> [fabric-fuse.rhcloud.com bin]\> ls -la
> /var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric/
> total 136
> drwxr-xr-x. 11 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:05 .
> drwxr-x---.  5 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:05 ..
> -rw-r--r--.  1 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  6148 Aug 24 13:05 .DS_Store
> drwxr-xr-x.  2 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 bin
> drwxr-xr-x.  6 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 data
>
> Log are well created like also tmp file and karaf.out
>
> [fabric-fuse.rhcloud.com bin]\> ls -la
> /var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric/data
> total 40
> drwxr-xr-x.   6 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 .
> drwxr-xr-x.  11 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:05 ..
> drwxr-xr-x. 110 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:05 cache
> drwxr-xr-x.   2 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 generated-bundles
> -rw-r--r--.   1 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6 14020 Aug 27 04:45 karaf.out
> drwxr-xr-x.   2 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 log
> drwxr-xr-x.   4 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 27 04:46 tmp
> [fabric-fuse.rhcloud.com bin]\> ls -la
> /var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/app-root/runtime/fabric/data/log/
> total 76
> drwxr-xr-x. 2 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 .
> drwxr-xr-x. 6 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6  4096 Aug 24 13:03 ..
> -rw-r--r--. 1 b8f9c391e35a4ab3b376e66929e7f2f6
> b8f9c391e35a4ab3b376e66929e7f2f6 63222 Aug 27 05:01 karaf.log
>
> Remarks :
>
> - Version used here is karaf 2.2.5 but code is the same compared to trunk
> of 2.2.3 -->
> https://github.com/apache/karaf/blob/karaf-2.2.5/main/src/main/java/org/apache/karaf/main/Main.java#L1333
> - I can create manually the port file but of course the port number added
> will be 0.
>
>
>
> On Mon, Aug 27, 2012 at 10:46 AM, Guillaume Nodet <[email protected]>wrote:
>
>> The port file is written with the following code:
>>
>>
>> https://github.com/apache/karaf/blob/karaf-2.3.x/main/src/main/java/org/apache/karaf/main/Main.java#L1401
>>
>> It uses the karaf.shutdown.port.file property which is defined in
>> etc/config.properties and defaults to ${karaf.data}/port
>> The code is quite simple, so not sure what could go wrong beyond the above
>> property not being correctly defined maybe.
>>
>> On Mon, Aug 27, 2012 at 10:25 AM, Charles Moulliard <[email protected]
>> >wrote:
>>
>> > FYI. In the data directory of the fabric/karaf instance running on
>> > openshift, the port file is not created
>> >
>> > [fabric-fuse.rhcloud.com ~]\> ls
>> >
>> >
>> /var/lib/stickshift/b8f9c391e35a4ab3b376e66929e7f2f6/fabric/runtime/fabric/data/
>> > cache/             generated-bundles/ karaf.out          log/
>> > tmp/
>> >
>> > On Mon, Aug 27, 2012 at 10:15 AM, Charles Moulliard <[email protected]
>> > >wrote:
>> >
>> > > In my case, the issue is related to the port file not created by Karaf
>> > > when the method setupShutdown is called (
>> > >
>> >
>> https://github.com/apache/karaf/blob/trunk/main/src/main/java/org/apache/karaf/main/InstanceHelper.java
>> > )
>> > > and not to the pidFile.
>> > >
>> > >
>> > > On Mon, Aug 27, 2012 at 9:45 AM, Guillaume Nodet <[email protected]>
>> > wrote:
>> > >
>> > >> The related code is in
>> > >>
>> > >>
>> > >>
>> >
>> https://github.com/apache/karaf/blob/trunk/instance/core/src/main/java/org/apache/karaf/jpm/impl/ProcessImpl.java
>> > >>
>> > >> Could you try maybe deleting the file just after having created it
>> using
>> > >> createTempFile ?
>> > >> The scripts that actually launch the process should create the file
>> > >> themselves, but maybe the file is locked by the JVM ...
>> > >>
>> > >> On Mon, Aug 27, 2012 at 8:54 AM, Charles Moulliard <[email protected]
>> >
>> > >> wrote:
>> > >>
>> > >> > Thx for the clarification
>> > >> >
>> > >> > Could it be possible that for some reasons (JDK =
>> > >> > 7, AccessRights/Permissions, ...), the process to create the port
>> file
>> > >> > fails on a machine but Karaf is well started ? I ask you this
>> question
>> > >> as I
>> > >> > get an error message (port file not found) when Karaf shutdown on
>> > >> openshift
>> > >> > cloud machine.
>> > >> >
>> > >> > On Fri, Aug 24, 2012 at 3:05 PM, Guillaume Nodet <[email protected]
>> >
>> > >> wrote:
>> > >> >
>> > >> > > Both are used in a two step shutdown iirc.
>> > >> > > When using bin/stop or when stopping a child instance, we first
>> ask
>> > >> for
>> > >> > the
>> > >> > > instance to shutdown cleanly, and if it does not work, the
>> process
>> > is
>> > >> > > killed using its pid.
>> > >> > >
>> > >> > > On Fri, Aug 24, 2012 at 1:41 PM, Charles Moulliard <
>> > [email protected]>
>> > >> > > wrote:
>> > >> > >
>> > >> > > > Hi,
>> > >> > > >
>> > >> > > > I'm really curious to discover that we have 2 files doing the
>> same
>> > >> job
>> > >> > (I
>> > >> > > > think so) a port file (created in data directory) and a pid
>> file
>> > >> (that
>> > >> > I
>> > >> > > > cannot find in data directory)
>> > >> > > >
>> > >> > > >         this.pidFile =
>> props.getProperty(KARAF_SHUTDOWN_PID_FILE);
>> > >> > > >         this.portFile =
>> > props.getProperty(KARAF_SHUTDOWN_PORT_FILE);
>> > >> > > >
>> > >> > > > 1) For PidFile --> org.apache.karaf.main.InstanceHelper
>> > >> > > >
>> > >> > > >     private static void writePid(String pidFile) {
>> > >> > > >         try {
>> > >> > > >             if (pidFile != null) {
>> > >> > > >             ....
>> > >> > > >                 if (matcher.matches()) {
>> > >> > > >                     int pid =
>> Integer.parseInt(matcher.group(1));
>> > >> > > >                     Writer w = new OutputStreamWriter(new
>> > >> > > > FileOutputStream(pidFile));
>> > >> > > >                     w.write(Integer.toString(pid));
>> > >> > > >                     w.close();
>> > >> > > >             ...
>> > >> > > >     }
>> > >> > > >
>> > >> > > > Most probably we never create it in this part of the code
>> > >> > > >
>> > >> > > > 2) Port File --> org.apache.karaf.main.InstanceHelper
>> > >> > > >
>> > >> > > >     static void setupShutdown(ConfigProperties config,
>> Framework
>> > >> > > framework)
>> > >> > > > {
>> > >> > > >         writePid(config.pidFile);
>> > >> > > >         try {
>> > >> > > >             int port = config.shutdownPort;
>> > >> > > >             String host = config.shutdownHost;
>> > >> > > >             String portFile = config.portFile;
>> > >> > > >             final String shutdown = config.shutdownCommand;
>> > >> > > >             if (port >= 0) {
>> > >> > > >                 ServerSocket shutdownSocket = new
>> > >> ServerSocket(port, 1,
>> > >> > > > InetAddress.getByName(host));
>> > >> > > >                 if (port == 0) {
>> > >> > > >                     port = shutdownSocket.getLocalPort();
>> > >> > > >                 }
>> > >> > > >                 if (portFile != null) {
>> > >> > > >                     Writer w = new OutputStreamWriter(new
>> > >> > > > FileOutputStream(portFile));
>> > >> > > >                     w.write(Integer.toString(port));
>> > >> > > >                     w.close();
>> > >> > > >                 }
>> > >> > > >                 Thread thread = new
>> ShutdownSocketThread(shutdown,
>> > >> > > > shutdownSocket, framework);
>> > >> > > >                 thread.setDaemon(true);
>> > >> > > >                 thread.start();
>> > >> > > >             }
>> > >> > > >         } catch (Exception e) {
>> > >> > > >             e.printStackTrace();
>> > >> > > >         }
>> > >> > > >     }
>> > >> > > >
>> > >> > > > Questions :
>> > >> > > > - Do we still need the pid file ? If no can we clean the code ?
>> > >> > > > - Could it be possible that for some reasons (JDK = 7,
>> > >> > > > AccessRights/Permissions), the process to create the port file
>> > fails
>> > >> > on a
>> > >> > > > machine ? I ask you this question as I get this messsage when I
>> > >> tried
>> > >> > to
>> > >> > > > shutdown karaf on acloud machine
>> > >> > > >
>> > >> > > > remote: Stopping application...
>> > >> > > > remote: Exception in thread "main"
>> > java.lang.NumberFormatException:
>> > >> > null
>> > >> > > > remote: at java.lang.Integer.parseInt(Integer.java:454)
>> > >> > > > remote: at java.lang.Integer.parseInt(Integer.java:527)
>> > >> > > > remote: at org.apache.karaf.main.Stop.main(Stop.java:66)
>> > >> > > > remote: Done
>> > >> > > >
>> > >> > > >
>> > >> > > > Regards,
>> > >> > > >
>> > >> > > > --
>> > >> > > > Charles Moulliard
>> > >> > > > Apache Committer / Sr. Pr. Consultant at FuseSource.com
>> > >> > > > Twitter : @cmoulliard
>> > >> > > > Blog : http://cmoulliard.blogspot.com
>> > >> > > >
>> > >> > >
>> > >> > >
>> > >> > >
>> > >> > > --
>> > >> > > ------------------------
>> > >> > > Guillaume Nodet
>> > >> > > ------------------------
>> > >> > > Blog: http://gnodet.blogspot.com/
>> > >> > > ------------------------
>> > >> > > FuseSource, Integration everywhere
>> > >> > > http://fusesource.com
>> > >> > >
>> > >> >
>> > >> >
>> > >> >
>> > >> > --
>> > >> > Charles Moulliard
>> > >> > Apache Committer / Sr. Pr. Consultant at FuseSource.com
>> > >> > Twitter : @cmoulliard
>> > >> > Blog : http://cmoulliard.blogspot.com
>> > >> >
>> > >>
>> > >>
>> > >>
>> > >> --
>> > >> ------------------------
>> > >> Guillaume Nodet
>> > >> ------------------------
>> > >> Blog: http://gnodet.blogspot.com/
>> > >> ------------------------
>> > >> FuseSource, Integration everywhere
>> > >> http://fusesource.com
>> > >>
>> > >
>> > >
>> > >
>> > > --
>> > > Charles Moulliard
>> > > Apache Committer / Sr. Pr. Consultant at FuseSource.com
>> > > Twitter : @cmoulliard
>> > > Blog : http://cmoulliard.blogspot.com
>> > >
>> > >
>> > >
>> >
>> >
>> > --
>> > Charles Moulliard
>> > Apache Committer / Sr. Pr. Consultant at FuseSource.com
>> > Twitter : @cmoulliard
>> > Blog : http://cmoulliard.blogspot.com
>> >
>>
>>
>>
>> --
>> ------------------------
>> Guillaume Nodet
>> ------------------------
>> Blog: http://gnodet.blogspot.com/
>> ------------------------
>> FuseSource, Integration everywhere
>> http://fusesource.com
>>
>
>
>
> --
> Charles Moulliard
> Apache Committer / Sr. Pr. Consultant at FuseSource.com
> Twitter : @cmoulliard
> Blog : http://cmoulliard.blogspot.com
>
>
>


-- 
Charles Moulliard
Apache Committer / Sr. Pr. Consultant at FuseSource.com
Twitter : @cmoulliard
Blog : http://cmoulliard.blogspot.com

Reply via email to