Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 21 Apr 2014 18:29:57 -0400
From:      Jung-uk Kim <jkim@FreeBSD.org>
To:        Bryan Drewery <bdrewery@FreeBSD.org>,  Konstantin Belousov <kostikbel@gmail.com>
Cc:        ports@freebsd.org, John Baldwin <jhb@freebsd.org>, ehaupt@freebsd.org
Subject:   Re: bash usage of fdescfs [was: Re: amd64/188699: Dev tree]
Message-ID:  <53559BE5.9090100@FreeBSD.org>
In-Reply-To: <535594FE.7040509@FreeBSD.org>
References:  <201404171850.s3HIo1am064874@freefall.freebsd.org> <201404211431.12922.jhb@freebsd.org> <20140421195133.GO4016@kib.kiev.ua> <201404211723.04580.jhb@freebsd.org> <20140421214046.GS4016@kib.kiev.ua> <8e2622634c9f220edfeb990fbd668b9e@shatow.net> <535594FE.7040509@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 2014-04-21 18:00:30 -0400, Jung-uk Kim wrote:
2014년  4월 21일 18:00, Jung-uk Kim 쓴 글:> On 2014-04-21 17:46:32
- -0400, Bryan Drewery wrote:
>> On 2014-04-21 16:40, Konstantin Belousov wrote:
>>> On Mon, Apr 21, 2014 at 05:23:04PM -0400, John Baldwin wrote:
>>>> On Monday, April 21, 2014 3:51:33 pm Konstantin Belousov 
>>>> wrote:
>>>>> On Mon, Apr 21, 2014 at 02:31:12PM -0400, John Baldwin 
>>>>> wrote:
>>>>>> On Thursday, April 17, 2014 2:50:01 pm Konstantin
>>>>>> Belousov wrote:
>>>>>>> The following reply was made to PR amd64/188699; it
>>>>>>> has been
>>>> noted by GNATS.
>>>>>>> 
>>>>>>> From: Konstantin Belousov <kostikbel@gmail.com> To:
>>>>>>> John Allman <freebsd@hugme.org> Cc: 
>>>>>>> freebsd-gnats-submit@FreeBSD.org Subject: Re: 
>>>>>>> amd64/188699: Dev tree Date: Thu, 17 Apr 2014 21:44:52 
>>>>>>> +0300
>>>>>>> 
>>>>>>> On Wed, Apr 16, 2014 at 05:32:45PM +0000, John Allman 
>>>>>>> wrote:
>>>>>>>> This is how to reproduce it:
>>>>>>>> 
>>>>>>>> Fresh install of 10 on AMD 64 install bash `pkg
>>>>>>>> install bash` Switch to bash `bash` push a here
>>>>>>>> document into a loop: `while true ; do echo;
>>>> done< <(echo "123")`
>>>>>>>> receive an error: "-su: /dev/fd/62: No such file or 
>>>>>>>> directory"
>>>>>>>> 
>>>>>>>> I'm sorry I haven't been able to research this any 
>>>>>>>> further.
>>>> I found how while working on some important matters. As I 
>>>> mentioned the above works fine in all
>>>>>> previous versions of FreeBSD up until 10.
>>>>>>>>> How-To-Repeat:
>>>>>>>> Fresh install pkg install bash bash while true; do
>>>>>>>> echo foo done< <(echo "123")
>>>>>>>> 
>>>>>>>> -su: /dev/fd/62: No such file or directory
>>>>>>> 
>>>>>>> So do you have fdescfs mounted on /dev/fd on the
>>>>>>> machine where
>>>> the
>>>>>>> test fails ?  It works for me on head, and if
>>>>>>> unmounted, I get
>>>> the
>>>>>>> same failure message as yours.  I very much doubt that
>>>>>>> it has
>>>> anything
>>>>>>> to do with a system version.
>>>>>> 
>>>>>> Question I have is why is bash deciding to use
>>>>>> /dev/fd/<n> and
>>>> require
>>>>>> fdescfs?  On older releases bash uses named pipes for
>>>>>> this instead.
>>>>> 
>>>>> The aclocal.m4 contains the test which verifies the
>>>>> presence and
>>>> usability
>>>>> of /dev/fd/n for n>=3 on the _build_ host.  The result of
>>>>> the test is used on the installation host afterward.
>>>>> 
>>>>> Such kinds of bugs are endemic in our ports, but
>>>>> apparently upstreams are guilty too.
>>>> 
>>>> Yuck, yuck.  Should we fix our default package builders to
>>>> not mount fdescfs?
>>> 
>>> IMO, using /dev/fd is more efficient since it avoids pipe
>>> inode creation for the 'document here' interpretation.  The
>>> /dev/fd is also needed for fexecve(2) to work (with the shebang
>>> scripts). Also, I believe that some other high-profile ports
>>> require it (OpenJDK ?).
>>> 
>>> That said, the solution is to have fdescfs mounted on /dev/fd.
>>>  This probably should be done by an installer.
> 
>> Yup, we mount it mostly for the java ports.
> 
> Basically, OpenJDK uses it as poor man's closefrom(2).  If
> necessary, we can drop the need for fdescfs from next revision as
> all supported FreeBSD versions have it.

Actually, java/openjdk6 also uses it for getOpenFileDescriptorCount().

http://docs.oracle.com/javase/7/docs/jre/api/management/extension/com/sun/management/UnixOperatingSystemMXBean.html

FYI, java/openjdk7 and java/openjdk8 (which is based on java/openjdk7
patches) are missing the implementation.

Sorry, it was long ago and I forget the detail. :-(

Jung-uk Kim
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (FreeBSD)

iQEcBAEBAgAGBQJTVZvlAAoJEHyflib82/FGmvwH+QH9paQz45GzytlG906i1qjF
0qEXGdTKFJaQ/gpiYq3McIv42GviGT4/bHIi2zGP1YjAf540TkageDuZM4Ia+pwK
/bN62msx+X/h1rjfUpLvNbjU312K3hEpyyWhK8omkpUMl8j9CtcWJve3qz4Tzjoh
q29qBMgRKBAIbuLywsLASmO5RzrFca4Dhz5ltuc9so6d4HF4Hu82L1tPy1H662L6
RSyyZ5Sv6YIViZQnXFq4Fl+k4uOtMlroYQbDbqdlWsMoYbsIn+CjgRPM7s+5iUNh
Ccst1EApwcmI2UUKIcnqwELCyk08Qnupl2MOa0OJiBmWwr52mryuUow7HLv8D1U=
=TNgt
-----END PGP SIGNATURE-----



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?53559BE5.9090100>