Re: Support for running xterm within a jail?

2011-11-18 Thread Kostik Belousov
On Thu, Nov 17, 2011 at 11:44:12AM -0800, David Wolfskill wrote:
 At $WORK, we have recently been reminded that xterm doesn't cope all
 that well with being invoked in an environment that returns ENOENT on
 xterm's attempt to open /dev/tty (in main.c).
 
 (The environment in question is a jailed 32-bit FreeBSD running on a
 FreeBSD/amd64 host.  Developers need to build in the jail; apparently
 they also want to run things like emacs in the jails.)
 
 In looking at the xterm sources, I found that there's some code (near
 main.c:3311 - 3329) to take evasive action if the attempt to open
 /dev/tty fails.
 
 There's even a bit to effectively ignore ENOENT -- if __CYGWIN__ is
 defined.
 
 But that's not our case -- and we don't want to be defining __CYGWIN__
 when we're building xterm for FreeBSD.
 
 Given that FreeBSD (with devfs) *can* return ENOENT to the attempt to
 open /dev/tty, it isn't clear to me why that aprticular error
 condition isn't ignored unconditionally (in a FreeBSD environment, at
 least).
 
 Accordingly, I cobbled up a patch (attached), and a colleague has
 verified that it avoids the issue we were encountering: it allows xterm
 to run in the jail.
 
 Do you think the xterm folks would be receptive to either making the
 ignore ENOENT unconditional or conditioning it on (say) __CYGWIN_
 being defined or __FREEBSD__ being defined?
 
 Failing that (or in the mean time) would you be receptive to a patch to
 the FreeBSD xterm port to patch xterm in a way similar to the attached
 patch?
 
 (I realize we're approaching 9.0-RELEASE; I'm not asking anyone to make
 changes before that release date.)

I am sure that the issue is a misconfiguration of the jail or attempt to
start xterm from the process that has no control terminal. For jail
misconfiguration, I mean either failure to properly mount devfs into
the jail /dev, or a rule that hides /dev/tty from the jail.

I use very similar configuration (32bit stable/8 jail on amd64 stable/9
kernel) and have no issues starting xterm.

That said, you should diagnose the issue further, otherwise I think the
patch is unneccessary.


pgpl06o1Li6O7.pgp
Description: PGP signature


Re: Support for running xterm within a jail?

2011-11-18 Thread David Wolfskill
On Fri, Nov 18, 2011 at 11:11:46AM +0200, Kostik Belousov wrote:
 ...
 I am sure that the issue is a misconfiguration of the jail or attempt to
 start xterm from the process that has no control terminal. For jail
 misconfiguration, I mean either failure to properly mount devfs into
 the jail /dev, or a rule that hides /dev/tty from the jail.
 
 I use very similar configuration (32bit stable/8 jail on amd64 stable/9
 kernel) and have no issues starting xterm.
 
 That said, you should diagnose the issue further, otherwise I think the
 patch is unneccessary.

I appreciate that, but admit that I'm not especially familiar with
working with jails.  i also admit that the use case is one that
strikes me as perverse, in that I would expect someone to run an
xterm locally.

In the case in question, the folks encountering the problem do not have
local X servers; they use MS Windows (with which I am almost completely
unfamiliar -- and in which I have no interest) on their desktops.

As I type, I am logged in to my desktop machine at work remotely (from
home, in another xterm).  From that xterm, I can run (e.g.):

dwolf-bsd(8.2-S)[10] ssh -Yfn dwolf-bsd xterm -T testing

and get a new xterm up, running on my desktop with DISPLAY set to a
value that will allow me to run other X clients from it.  This is the
functionality that is wanted.


If, instead, I do something similar to one of our older build machines:

dwolf-bsd(8.2-S)[11] ssh -Yfn dwolf.svl-lb xterm -T testing

I get a similar result -- an xterm running on the build machine with
DISPLAY set so I could run other X clients (e.g., emacs).


If I do the same for one of the jails:

dwolf-bsd(8.2-S)[12] ssh -Yfn svl-jail xterm -T testing
dwolf-bsd(8.2-S)[13] xterm: Error 14, errno 2: No such file or directory
Reason: spawn: open() failed on /dev/tty

If I use ssh  login to the jail:

dwolf-bsd(8.2-S)[13] ssh -Y svl-jail
...
svl-jail(7.1-R)[1] 

I can manually fire off xterm because /dev/tty exists and I am already
running an X server locally:

svl-jail(7.1-R)[1] ls -lTio /dev/tty
135 crw--w  1 dwolf  tty  -   0, 135 Nov 18 05:59:58 2011 /dev/tty


But if I terminate that connection, then try to perform that ls
command (as the only thing I want ssh to do for me), that only works if
I include the -t on the ssh invocation.

So if I try adding -t when I try to start the remote xterm, I see:

dwolf-bsd(8.2-S)[17] ssh -Ytfn svl-jail xterm -T testing
Pseudo-terminal will not be allocated because stdin is not a terminal.
dwolf-bsd(8.2-S)[18] xterm: Error 14, errno 2: No such file or directory
Reason: spawn: open() failed on /dev/tty


So I think it's apparent that we don't have a case where /dev/tty is
never available, but I don't know how to make it show up for the
intended use case.

And there already exists code in xterm to ignore the ENOENT case for
CygWin, so it seems that there really isn't much of a reason to treat
ENOENT on /dev/tty as a fatal error for xterm invocation.  Further,
applying the patch in question does provide the desired functionality.

If you (or anyone else) could provide some clues as to where to direct
my attention, that would be wonderful.

(In the mean time, upstream xterm developer has agreed to make the
change for xterm-277, and ehaupt@ has updated the x11/xterm port to
include the patch, pending xterm-277.)

Peace,
david
-- 
David H. Wolfskill  da...@catwhisker.org
Depriving a girl or boy of an opportunity for education is evil.

See http://www.catwhisker.org/~david/publickey.gpg for my public key.


pgp3eGqUU8zOB.pgp
Description: PGP signature


Re: Support for running xterm within a jail?

2011-11-18 Thread Kostik Belousov
On Fri, Nov 18, 2011 at 06:13:20AM -0800, David Wolfskill wrote:
 On Fri, Nov 18, 2011 at 11:11:46AM +0200, Kostik Belousov wrote:
  ...
  I am sure that the issue is a misconfiguration of the jail or attempt to
  start xterm from the process that has no control terminal. For jail
  misconfiguration, I mean either failure to properly mount devfs into
  the jail /dev, or a rule that hides /dev/tty from the jail.
  
  I use very similar configuration (32bit stable/8 jail on amd64 stable/9
  kernel) and have no issues starting xterm.
  
  That said, you should diagnose the issue further, otherwise I think the
  patch is unneccessary.
 
 I appreciate that, but admit that I'm not especially familiar with
 working with jails.  i also admit that the use case is one that
 strikes me as perverse, in that I would expect someone to run an
 xterm locally.
 
 In the case in question, the folks encountering the problem do not have
 local X servers; they use MS Windows (with which I am almost completely
 unfamiliar -- and in which I have no interest) on their desktops.
 
 As I type, I am logged in to my desktop machine at work remotely (from
 home, in another xterm).  From that xterm, I can run (e.g.):
 
 dwolf-bsd(8.2-S)[10] ssh -Yfn dwolf-bsd xterm -T testing
 
 and get a new xterm up, running on my desktop with DISPLAY set to a
 value that will allow me to run other X clients from it.  This is the
 functionality that is wanted.
 
 
 If, instead, I do something similar to one of our older build machines:
 
 dwolf-bsd(8.2-S)[11] ssh -Yfn dwolf.svl-lb xterm -T testing
 
 I get a similar result -- an xterm running on the build machine with
 DISPLAY set so I could run other X clients (e.g., emacs).
 
 
 If I do the same for one of the jails:
 
 dwolf-bsd(8.2-S)[12] ssh -Yfn svl-jail xterm -T testing
 dwolf-bsd(8.2-S)[13] xterm: Error 14, errno 2: No such file or directory
 Reason: spawn: open() failed on /dev/tty
 
 If I use ssh  login to the jail:
 
 dwolf-bsd(8.2-S)[13] ssh -Y svl-jail
 ...
 svl-jail(7.1-R)[1] 
 
 I can manually fire off xterm because /dev/tty exists and I am already
 running an X server locally:
 
 svl-jail(7.1-R)[1] ls -lTio /dev/tty
 135 crw--w  1 dwolf  tty  -   0, 135 Nov 18 05:59:58 2011 /dev/tty
 
 
 But if I terminate that connection, then try to perform that ls
 command (as the only thing I want ssh to do for me), that only works if
 I include the -t on the ssh invocation.
 
 So if I try adding -t when I try to start the remote xterm, I see:
 
 dwolf-bsd(8.2-S)[17] ssh -Ytfn svl-jail xterm -T testing
 Pseudo-terminal will not be allocated because stdin is not a terminal.
 dwolf-bsd(8.2-S)[18] xterm: Error 14, errno 2: No such file or directory
 Reason: spawn: open() failed on /dev/tty
 
 
 So I think it's apparent that we don't have a case where /dev/tty is
 never available, but I don't know how to make it show up for the
 intended use case.
The ssh is explicitely saying you what is going on. Did you note the
'Pseudo-terminal will not be allocated because stdin is not a terminal.'
line ? 

It telling that the control terminal will not be allocated. As a consequence,
/dev/tty cannot be opened. This has nothing to do with jail.

% ssh -Ytfn localhost tty
Pseudo-terminal will not be allocated because stdin is not a terminal.
not a tty
%

 
 And there already exists code in xterm to ignore the ENOENT case for
 CygWin, so it seems that there really isn't much of a reason to treat
 ENOENT on /dev/tty as a fatal error for xterm invocation.  Further,
 applying the patch in question does provide the desired functionality.
 
 If you (or anyone else) could provide some clues as to where to direct
 my attention, that would be wonderful.
 
 (In the mean time, upstream xterm developer has agreed to make the
 change for xterm-277, and ehaupt@ has updated the x11/xterm port to
 include the patch, pending xterm-277.)
 
 Peace,
 david
 -- 
 David H. Wolfskillda...@catwhisker.org
 Depriving a girl or boy of an opportunity for education is evil.
 
 See http://www.catwhisker.org/~david/publickey.gpg for my public key.




pgpSzmiKjyXvV.pgp
Description: PGP signature