Re: Is UNIX home directory really needed to run root? (fwd)

From: Dimitri Bourilkov <bourilkov_at_phys.ufl.edu>
Date: Mon, 27 Aug 2007 17:08:51 -0400


Hi Fons,

    Thanks for your mail. After debugging further, in

root 5.13.04e the FATAL message appears, but the job happily continues

               to completion
root 5.14.00e FATAL message appears to be sure, followed by

Maybe there were some changes in between?

    Cheers, Dimitri

Fons Rademakers wrote:

> Hi Dimitri,
> 
>   a priory the HOME directory is not needed anymore. Before removing the 
> Fatal() I've to check carefully if all occasions where we use the 
> HomeDirectory is properly protected against no-home directory.
> 
> Cheers, Fons.
> 
> 

>>
>> ---------- Forwarded message ----------
>> Date: Fri, 24 Aug 2007 20:19:32 -0400
>> From: Dimitri Bourilkov <bourilkov_at_phys.ufl.edu>
>> To: roottalk_at_pcroot.cern.ch
>> Subject: [ROOT] Is UNIX home directory really needed to run root?
>>
>> Hi,
>>
>> Having succeeded to use condor flocking to submit (my) batch jobs,
>> I am trying to submit _root_ batch jobs (root -b -q xxx.C) to a remote
>> farm where I do not have a unix account (condor is taking care of
>> this), just an NFS mounted working space. The jobs are running into
>> problems, terminating with the message:
>>
>> Fatal in <TROOT::InitSystem>: HOME directory not set
>>
>> Looking in the root source this comes from the snippets enclosed
>> below. If I read them correctly, things are more or less hardcoded to
>> look for the unix user and get the home dir from the passwd file.
>>
>> My questions are:
>> 1) Is this really needed to run root?
>> 2) Or defining a dir where root can read/write could be enough,
>> and how to achieve this (if needed, modifying the code)?
>>
>> Thanks, Dimitri
>>
>> PS Actually if mydir[kMAXPATHLEN] is initialized before calling
>> TUnixSystem::UnixHomedirectory maybe things will behave differently,
>> is this feasible and a viable solution?
>>
>> ============================
>> void TROOT::InitSystem()
>> {
>> // Initialize operating system interface.
>>
>> if (gSystem == 0) {
>> #if defined(R__UNIX)
>> gSystem = new TUnixSystem;
>> #elif defined(R__WIN32)
>> gSystem = new TWinNTSystem;
>> #elif defined(R__VMS)
>> gSystem = new TVmsSystem;
>> #else
>> gSystem = new TSystem;
>> #endif
>>
>> if (gSystem->Init())
>> fprintf(stderr, "Fatal in <TROOT::InitSystem>: can't init
>> operating system layer\n");
>>
>> if (!gSystem->HomeDirectory())
>> fprintf(stderr, "Fatal in <TROOT::InitSystem>: HOME directory
>> not set\n");
>> .....
>>
>> ===============================
>> and in TUnixSystem
>> ===============================
>> //______________________________________________________________________________
>>
>> const char *TUnixSystem::HomeDirectory(const char *userName)
>> {
>> // Return the user's home directory.
>>
>> return UnixHomedirectory(userName);
>> }
>>
>> //---- directories
>> -------------------------------------------------------------
>>
>> //______________________________________________________________________________
>>
>> const char *TUnixSystem::UnixHomedirectory(const char *name)
>> {
>> // Returns the user's home directory.
>>
>> static char path[kMAXPATHLEN], mydir[kMAXPATHLEN];
>> struct passwd *pw;
>>
>> if (name) {
>> pw = getpwnam(name);
>> if (pw) {
>> strncpy(path, pw->pw_dir, kMAXPATHLEN);
>> return path;
>> }
>> } else {
>> if (mydir[0])
>> return mydir;
>> pw = getpwuid(getuid());
>> if (pw) {
>> strncpy(mydir, pw->pw_dir, kMAXPATHLEN);
>> return mydir;
>> }
>> }
>> return 0;
>> }
>>

>
-- 
        _/_/_/                             _/_/_/
       _/    _/   Dimitri  BOURILKOV      _/    _/
      _/    _/   University of Florida   _/_/_/
     _/    _/   bourilkov_at_phys.ufl.edu  _/    _/
    _/_/_/                             _/_/_/
Received on Mon Aug 27 2007 - 23:10:07 CEST

This archive was generated by hypermail 2.2.0 : Tue Aug 28 2007 - 05:50:02 CEST