Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 03 Sep 2013 01:25:27 +0200
From:      Miroslav Lachman <000.fbsd@quip.cz>
To:        Jamie Gritton <jamie@FreeBSD.org>
Cc:        FreeBSD-Jail <freebsd-jail@FreeBSD.org>
Subject:   Re: jail.conf & cpuset.id
Message-ID:  <52251E67.1060002@quip.cz>
In-Reply-To: <5224F6E8.802@FreeBSD.org>
References:  <076B486D-A526-4945-BA38-DD7167365749@inbox.im> <514B09B2.70607@FreeBSD.org> <52224088.6040508@quip.cz> <5224F6E8.802@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Jamie Gritton wrote:

[...]

>>
>> Hi Jamie,
>> I tried your suggestion with exec_poststart for setting the cpuset.
>> It doesn't work. I don't know if it worked for you with any older
>> version of FreeBSD. I tried it on FreeBSD 9.1-RELESE.
>>
>> I have this in rc.conf
>>
>> jail_fox_exec_poststart0="cpuset -c -l 5-6 -j `cat /var/run/jail_fox.id`"
>>
>> With rc_debug="YES", I get this error
>>
>> # service jail start fox
>> cat: /var/run/jail_fox.id: No such file or directory
>> cat: /var/run/jail_fox.id: No such file or directory
>>
>> [snip]
>>
>> /etc/rc.d/jail: DEBUG: fox exec post-start #1: cpuset -c -l 5-6 -j
>>
>> [snip]
>>
>> fox.example.comcpuset: option requires an argument -- j
>> usage: cpuset [-l cpu-list] [-s setid] cmd ...
>> cpuset [-l cpu-list] [-s setid] -p pid
>> cpuset [-c] [-l cpu-list] -C -p pid
>> cpuset [-cr] [-l cpu-list] [-j jailid | -p pid | -t tid | -s
>> setid | -x irq]
>> cpuset [-cgir] [-j jailid | -p pid | -t tid | -s setid | -x irq]
>>
>>
>> I think the problem is, that the command is evaluated befor the jail is
>> started.
>>
>> Or am I doing something wrong?
>>
>> I also tried following with no luck:
>>
>> jail_fox_exec_poststart0="cpuset -c -l 5-6 -j `jls -j fox jid`"
>
> I'm not seeing /var/run/jail_*.id either, despite it being mentioned in
> /etc/rc.d/jail. The jls one works for me, but then I'm running current
> so maybe that's the difference.

I made a diff between rc.d/jail from HEAD, 8.4-RELEASE and 9.1-RELEASE 
and there is no changes in code for _exec_poststart.

I don't know how it is possible, that it works for you and doesn't for 
for me.

If I interpret it correctly, the following code in the begining of 
init_variables() does the eval on the command and backticks are executed 
at this time - before the jail is started.
Am I wrong?


	i=0
	while : ; do
		eval 
_exec_poststart${i}=\"\${jail_${_j}_exec_poststart${i}:-\${jail_exec_poststart${i}}}\"
		[ -z "$(eval echo \"\$_exec_poststart${i}\")" ] && break
		i=$((i + 1))
	done


Then there is code for debug printing only


	i=0
	while : ; do
		eval out=\"\${_exec_poststart${i}:-''}\"
		if [ -z "$out" ]; then
			break
		fi
		debug "$_j exec post-start #${i}: ${out}"
		i=$((i + 1))
	done


And in jail_start() there is jail command executions followed by 
execution of poststart commands, but at this time, the command is 
"cpuset -c -l 5-6 -j" and not "cpuset -c -l 5-6 -j `jls -j fox jid`"


		eval ${_setfib} jail ${_flags} -i ${_rootdir} ${_hostname} \
			\"${_addrl}\" ${_exec_start} > ${_tmp_jail} 2>&1 \
			</dev/null

			i=0
			while : ; do
				eval out=\"\${_exec_poststart${i}:-''}\"
				[ -z "$out" ] && break
				${out}
				i=$((i + 1))
			done


So how can it works for you? Is there any changes in "sh" with eval and 
backticks evaluation in HEAD?

 > If all else fails, you can hardcode the
 > jail number - that'll work as long as you only ever let the jails load
 > on startup.

Unluckily I need to restart some jails manually, so I think I cannot use 
hardcoded JID numbers :(

Thank you for your reply.

Miroslav Lachman



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?52251E67.1060002>