Hello Michael,

Michael Tautschnig wrote:
[...]
 spring:/# echo $classes
 DEFAULT LINUX I386 FAIBASE UGENT GRUB AMD64 X4100 spring LAST

 So for some reasong I386 and AMD64 are defined.

 DEFAULT LINUX I386: are defined by the 10-base-classes script.

 FAIBASE UGENT GRUB: by 50-host-classes

 AMD64 X4100: by spring file in classes directory.

 Now in 50-host-classes I can see:
 [ -x "`which dpkg`" ] \
    && dpkg --print-installation-architecture | tr a-z A-Z

And when I run that in my nfsroot it prints I386. Because it is a i386 nfsroot.

I could remove that line, and manually define I386 or AMD64, but the file says I should do that :-)

[...]

While we don't use a common nfsroot for AMD64 and I386 at our site, we
still don't use the dpkg --print-installation-architecture thing here. One
reason for that is that we also want to distinguish between AMD and Intel
processors. So we are using the following to define the respective classes:


if grep AMD /proc/cpuinfo | grep -q 64 ; then
  echo AMD64
elif grep -q AMD /proc/cpuinfo ; then
  echo AMD
else
  echo IA32
fi

This is definitely not the most reliable code, but it seems to work properly
here. However, we currently only have a single AMD64 system, so there might be
cases that this code does not catch. Feedback would be most welcome...

Your script helped me a bit. But I'm having some problems when looking at it like this:

What if we want to install IA32 or EM64T machines from intel. (And even AMD64)

Say we boot the vmlinuz-install kernel via tftp. We look in /proc/cpuinfo to see which CPU it is. If we can find the 'lm' flag we know our cpu supports long mode, and thus 64 bit:

if egrep -q '^flags:.* lm$|flags:.* lm ' /proc/cpuinfo
then
        echo AMD64
else
        echo IA32
fi

But that means that we will always install 64bit machines on machines containing lm flag. How can we override that? For instance we want to install a 32 bit kernel with 32 bit userspace on a 64bit capable machine.

Setting IA32 in 'class/hostname', with above 10-base-classes script gives spring:~# echo $classes
DEFAULT LINUX AMD64 FAIBASE UGENT GRUB IA32 spring LAST

But because I have an AMD64 basefile it:
ftar: extracting /var/lib/fai/config/basefiles///AMD64.tar.gz to /tmp/target//

So how about doing it like this:

10-base-classes:
if egrep -q '^flags:.* lm$|flags:.* lm ' /proc/cpuinfo
then
        echo LONGMODE
fi

Put in class/hostname
32BIT

And if there would be a way to then have an other script that does:

if ifclass 32BIT
then
        echo IA32
else
        if ifclass LONGMODE
        then
                echo AMD64
        else
                echo IA32
        fi
fi

However I can't see how I can get FAI to execute the scripts in this order:
0) DEFAULT
1) [0-9][0-9]*: this is ok
2) contents class/hostname: this is ok
3) some script : ?
4) hostname als class: ok
5) LAST: ok

Also I'm not sure how FAI will react to having the IA32/AMD64 classes not after DEFAULT, but somewhere in the middle.

Any comments are appreciated :)

Rudy
--
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
Rudy Gevaert          [EMAIL PROTECTED]          tel:+32 9 264 4734
Directie ICT, afd. Infrastructuur ICT Department, Infrastructure office
Groep Systemen                    Systems group
Universiteit Gent                 Ghent University
Krijgslaan 281, gebouw S9, 9000 Gent, Belgie               www.UGent.be
-- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --

Antwort per Email an