anaconda.real in RH7.1

Steve Holden steve at holdenweb.com
Wed Sep 7 13:02:38 EDT 2005


Allan Adler wrote:
> Allan Adler <ara at nestle.csail.mit.edu> writes:
> 
> 
>>I'm trying to reinstall RedHat 7.1 Linux on a PC that was disabled when
>>I tried to upgrade from RH7.1 [....] 
>>The file anaconda.real is invoked with the line
>>exec /usr/bin/anaconda.real -T "$@"
>>I don't know what effect the -T "$@" has.
> 
> 
> Tiny progress on this: in a shell script, "$@" apparently lets you refer
> to the output of a previous command. I don't know what output would be
> relevant, since the last few lines of the shell script anaconda that
> invokes anaconda.real are:
> 
> cd /usr/sbin
> uncpio < sbin.cgz
> rm sbin.cgz
> cd /lib
> uncpio < libs.cgz
> rm libs.cgz
> cd /
> exec /usr/bin/anaconda.real -T "$@"
> 
$@ doesn't refer to the output of a previous command. It refers to a 
list of quoted arguments of the script it's a part of. It's supposed, 
IIRC, to be equivalent to

     exec /usr/bin/anaconda.real -T "$1" "$2" "$2" ...

as opposed to $*, which would be equivalent to

     exec /usr/bin/anaconda.real -T $1 $2 $3 ...

> As for exec itself, the command line
> exec -T
> leads to a complaint that -T is an illegal option for exec, while
> python -T
> leads to a usage statement that doesn't list -T among the options for python.
> So, I still don't understand the statement that is used to call the python
> script anaconda.real.
> 
What's supposed to happen is that anaconda.real is supposed to be 
processed by the Python interpreter. You will probably find a "shebang" 
line at the start of anaconda.real that reads something like

#!/usr/bin/python1.5.2

The -T argument is, I suspect, intended for anaconda.real - you could 
check the source and verify that it looks at sys.argv.

> I also tried to execute in interactive session some of the commands in the
> file anaconda.real. E.g. the first command signal.signal(SIGINT,SIG_DFL)
> 
> Python 1.5.2 (#1, Mar  3 2001, 01:35:43)
> [GCC 2.96 20000731 (Red Hat Linux 7.1 2 on linux-i386
> Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam
> 
>>>>signal.signal(SIGINT,SIG_DFL)
> 
> Traceback (innermost last):
>   File "<stdin>", line 1, in ?
> NameError: signal
> 
>>>>import signal
>>>>signal.signal(SIGINT,SIG_DFL)
> 
> Traceback (innermost last):
>   File "<stdin>", line 1, in ?
> NameError: SIGINT
> 
>>>>import SIGINT
> 
> Traceback (innermost last):
>   File "<stdin>", line 1, in ?
> ImportError: No module named SIGINT
> 
> On the other hand, while looking at Kernighan and Pike, "The Unix programming
> environment" (1984), I fortuitously ran across a discussion of signals and
> interrupts on p.225, including the example
> 
> #include <signal.h>
> signal(SIGINT,SIG_DFL)
> 
> which restores default action for process termination. The resemblance to the
> first command in anaconda.real is so close that I think the intention in
> both must be the same. What is the right way to get python to do this?
> 
SIGINT is defined in the signal module so you probably want

     signal.signal(signal.SIGINT, signal.SIG_DFL)

> The file anaconda.real doesn't explicitly execute
> import signal
> but it still somehow knows what signal means (my example session above shows
> that it stops complaining about not knowing what signal means after I import
> signal). Presumably there is some way of invoking python that causes signal
> and other stuff to be imported automatically. What is it?

On that one you have me stumped. It's possible it imports some other 
module that plays with the namespace in a magical way.

regards
  Steve
-- 
Steve Holden       +44 150 684 7255  +1 800 494 3119
Holden Web LLC             http://www.holdenweb.com/




More information about the Python-list mailing list