ROOTCMD in cfengine script
Per Foreby
perf at ddg.lth.se
Sun Aug 19 02:00:49 CEST 2007
On Sat, 18 Aug 2007, Thomas Lange wrote:
>>>>>> On Sat, 18 Aug 2007 18:52:20 +0200 (CEST), Per Foreby <perf at ddg.lth.se> said:
>
> > Is it possible to use $ROOTCMD in cfengine scripts?
> > I update a configuration file for tex-common, and want to run
> > update-texmf after that. It must work both for install and softupdate.
>
> > shellcommands:
> > any::
> > ${ROOTCMD} /usr/sbin/update-texmf
>
> > The error from cfengine says that the command must be an absolute path,
> IMO this error is because chroot is not used as /sbin/chroot but
> only as chroot in $ROOTCMD. You may define $ROOTCMD in a class/*.var file.
But i got the error message when doing a softupdate, and then $ROOTCMD
is set to nothing, so it is not the missing path for chroot that is the
problem.
I did some testing, and the problem seems to be ROOTCMD= (empty) in
/usr/sbin/fai. I tried to come up with some commands that just executed
its arguments without the need for quoting (like /bin/sh -c). Writing
such a "shell" is of cource easy. I would know since I have written
a number of them for restricted environments, but now I tried to find
something out-of-the-box. This worked:
ROOTCMD="/usr/bin/nice -n 0"
But then I found an even simpler soulution:
ROOTCMD=" "
This works togeter with "noabspath=true"
This is what my test script looked like:
control:
actionsequence = ( shellcommands )
shellcommands:
any::
"${ROOTCMD} /usr/bin/touch /root/tt" noabspath=true
Setting ROOTCMD to " " doesn't affect shell scripts, so I would suggest
a change in /usr/sbin/fai:
ROOTCMD="/usr/sbin/chroot $FAI_ROOT"
# no chroot needed
[ "$FAI_ROOT" = '/' ] && ROOTCMD=" "
Or, to be safe if chroot would move to another directory:
ROOTCMD="`which chroot` $FAI_ROOT"
# no chroot needed
[ "$FAI_ROOT" = '/' ] && ROOTCMD=" "
For the time beeing I will put this in a *.var script.
/Per
More information about the linux-fai
mailing list