Jails that won't die...

Eirik Øverby eirik at unicore.no
Thu Jun 30 21:01:34 GMT 2005


On 30. jun. 2005, at 22.56, Brian Fundakowski Feldman wrote:

> On Thu, Jun 30, 2005 at 03:53:56PM +0200, Eirik Øverby wrote:
>
>>
>> On 29. jun. 2005, at 20.58, Brian Fundakowski Feldman wrote:
>>
>>
>>> On Wed, Jun 29, 2005 at 03:28:09PM +0200, Eirik Øverby wrote:
>>>
>>>
>>>>
>>>> On 28. jun. 2005, at 16.58, Brian Fundakowski Feldman wrote:
>>>>
>>>>
>>>>
>>>>> On Tue, Jun 28, 2005 at 10:37:29AM +0200, Eirik Øverby wrote:
>>>>>
>>>>>
>>>>>
>>>>>> Hi,
>>>>>>
>>>>>> I have, since upgrading to 5.x and updating my management tools,
>>>>>> seen
>>>>>> a number of problems relating to stopping jails.
>>>>>>
>>>>>> I'm maintaining several hosts with a number of full-featured  
>>>>>> jails
>>>>>> (i.e. full virtual FreeBSD installations in each jail), and in
>>>>>> general this works fine. However, whenever I stop a jail using
>>>>>> 'jexec
>>>>>> <id> kill -SIGNAL -1' or 'jexec <id> /bin/sh /etc/ 
>>>>>> rc.shutdown' (in
>>>>>> various combinations), jails have a tendency to stick around for
>>>>>> minutes or hours - according to 'jls'. Often I see an entry in
>>>>>> 'netstat -a' indicating that there is one or more sockets in
>>>>>> FIN_WAIT
>>>>>> state, preventing the jail from coming down. Taking the virtual
>>>>>> network interface (alias) down does not help. All I can do at  
>>>>>> this
>>>>>> point is wait.
>>>>>>
>>>>>> I normally use 'jls' to determine whether or not a jail can be
>>>>>> restarted (i.e. it's not running), but this is pretty useless in
>>>>>> such
>>>>>> cases. And right now I have a case where 'netstat -a' shows me
>>>>>> nothing pertaining to the jail, though it has no processes
>>>>>> running. I
>>>>>> have therefore force-started the jail again, which seems to work
>>>>>> nicely, but now 'jls' gives me two entries for this jail, with
>>>>>> different JIDs.
>>>>>>
>>>>>> What am I doing wrong here?
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>> You could just use ps to check for jailed processes and check  
>>>>> their
>>>>> respective jails using the procfs status entry (at least according
>>>>> to the ps manpage...)
>>>>>
>>>>>
>>>>
>>>> My jailctl script can do both - list by jls and list by  
>>>> processes in
>>>> the jail. There are NO processes running in the jail.
>>>>
>>>>
>>>
>>> So it's obviously not running, and you can mark its state as such.
>>>
>>
>> ...which is what I do on FreeBSD 4.x, but on 5.x the 'jls' command
>> still claims the jail is running. I think this is unbelieveably
>> dirty. Also, using /proc to determine if a jail is still running is a
>> bad idea, as mounting /proc is depreceated.
>>
>
> The deprecation is due to security concerns, not bit-rot.  You can
> just mount it with root-readable-only permissions.  The jls for
> current isn't incorrect, you're just expecting a different criteria to
> mean "alive" than it is using.  It would take increased kernel
> complexity to do what you want if you're not going to do it in
> userland.

I am aware of that. However, I have seen instabilities with /proc as  
well, but that's another story.

> Anyway, why aren't you just using a /var/run file in the "real" system
> to tell whether the jail is running or not?  It's the corollary to
> pid files versus doing "killall"...  Just seems like something really
> trivial to implement as you like it in the userland.

Sure, this is what I fall back on when running my jailctl script (/ 
usr/ports/sysutils/jailctl) on 4.x. However, I NEED 'jls' to be  
correct, because I use it to inject other processes (like executing  
shutdown scripts inside the jails when taking them down, etc.). I  
suppose I could sort the output of jls on jail id and always use  
whichever instance of a jail has the highest ID, but I don't know how  
these IDs work - if they are recycled, if they "wrap around" at some  
point, etc.

In any case it would be nice to know which criteria exactly jls uses  
- and perhaps a way to remove whichever criteria that keeps it  
thinking the jail is still running.

Thing is - sometimes jails stop just fine. Other times they don't. It  
all depends. Perhaps I should get lsof or something, see if there are  
any open files (though I think I tried once without finding any)...

/Eirik

>
> -- 
> Brian Fundakowski Feldman                            
> \'[ FreeBSD ]''''''''''\
>   <> green at FreeBSD.org                               \  The Power  
> to Serve! \
>  Opinions expressed are my own.                        
> \,,,,,,,,,,,,,,,,,,,,,,\
>



More information about the freebsd-stable mailing list