<div dir="ltr"><div dir="ltr">Hi both,<div><br></div><div>thank you for your replies.</div><div><br>@Thomas: As of now your proposal or the workaround I am using currently are both OK for me.<br>   Additionally I understood that this is more like a "logical bug" and not really the wanted behavior, but changing is not easily possible on a quick fix.<br>   As of today I am on another project but maybe in future I have some spear time to check the "install_packages" script in more detail and make a proposal.</div><div><br>@Matteo: Thanks for the provided information & code. (I have something more or less similar in use)<br>   Unfortunately this is not really a solution related to the problem since the definition of classes within $classes variable / FAI_CLASSES file does not correctly take place here.<br>   Due to this independently of the definition order of defined classes the wrong / correct package actions are applied depending on classes order within install_packages config file.<br><br></div></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Am Mo., 6. Mai 2019 um 21:18 Uhr schrieb Matteo Guglielmi <<a href="mailto:Matteo.Guglielmi@dalco.ch">Matteo.Guglielmi@dalco.ch</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">This is how I solved my needs to handle or adjust the<br>
<br>
order of classes in FAI.<br>
<br>
<br>
<br>
In my case, I always wanted to define the "essential"<br>
<br>
classes in:<br>
<br>
<br>
50-host-classes<br>
<br>
<br>
and leaving the job of filing up the voids (or even<br>
<br>
remove or change the order of classes) to a secondary<br>
<br>
script (in my case '60-expand-classes').<br>
<br>
<br>
<br>
If you find this useful, you are welcome to use it.<br>
<br>
<br>
<br>
<br>
###<br>
<br>
<br>
<br>
cat /srv/fai/config/hooks/subroutines<br>
<br>
<br>
<br>
<br>
prependClass() {<br>
  sed -ri "/^$2$/i $1" /tmp/fai/FAI_CLASSES<br>
}<br>
<br>
appendClass() {<br>
  sed -ri "/^$2$/a $1" /tmp/fai/FAI_CLASSES<br>
}<br>
<br>
deleteClass() {<br>
  sed -ri "/^$1$/d" /tmp/fai/FAI_CLASSES<br>
}<br>
<br>
replaceClass() {<br>
  sed -ri "/^$2$/c $1" /tmp/fai/FAI_CLASSES<br>
}<br>
<br>
listClasses() {<br>
  cat /tmp/fai/FAI_CLASSES<br>
}<br>
<br>
assertUfbiClasses() {<br>
  grep -q '^UFBI' /tmp/fai/FAI_CLASSES || return 1<br>
}<br>
<br>
<br>
<br>
<br>
cat /srv/fai/config/class/50-host-classes<br>
<br>
<br>
<br>
<br>
case $HOSTNAME in<br>
  node01)<br>
    echo CENTOS75 MLKERNEL UFBIMONITOR UFBIOFED UFBISLURM<br>
  ;;<br>
  node02)<br>
    echo CENTOS76 LTKERNEL UFBIMONITOR UFBIOFED UFBISLURM<br>
  ;;<br>
  node03)<br>
    echo CENTOS75 MLKERNEL UFBIMONITOR UFBIOFED UFBISLURM<br>
  ;;<br>
  node04)<br>
    echo CENTOS76 LTKERNEL UFBIMONITOR UFBIOFED UFBISLURM<br>
  ;;<br>
  *)<br>
    echo CENTOS76<br>
  ;;<br>
esac<br>
<br>
<br>
<br>
<br>
cat /srv/fai/config/class/60-expand-classes<br>
<br>
<br>
<br>
if ifclass AMD64 ; then<br>
  appendClass FAIBASE AMD64<br>
else<br>
  exit 700 # we don't support 32-bit OSes<br>
fi<br>
<br>
if ifclass -o CENTOS75 CENTOS76 ; then<br>
  prependClass CENTOS 'CENTOS7[5-6]'<br>
<br>
  if ifclass -o LTKERNEL MLKERNEL ; then<br>
    if ifclass UFBIOFED ; then<br>
      replaceClass UFBIIB UFBIOFED<br>
    fi<br>
  fi<br>
fi<br>
<br>
if ifclass -o SLES150 SLES151 ; then<br>
  prependClass SLES 'SLES15[0,1]'<br>
fi<br>
<br>
if ifclass UBUNTU18 ; then<br>
  prependClass UBUNTU UBUNTU18<br>
fi<br>
<br>
if ifclass DEBIAN9 ; then<br>
  prependClass DEBIAN DEBIAN9<br>
fi<br>
<br>
if assertUfbiClasses ; then<br>
  ifclass UFBI || echo UFBI<br>
fi<br>
<br>
<br>
[ -d /sys/firmware/efi ] && echo EFI || echo BIOS<br>
<br>
<br>
<br>
________________________________<br>
From: linux-fai <<a href="mailto:linux-fai-bounces@uni-koeln.de" target="_blank">linux-fai-bounces@uni-koeln.de</a>> on behalf of Thomas Lange <<a href="mailto:lange@informatik.uni-koeln.de" target="_blank">lange@informatik.uni-koeln.de</a>><br>
Sent: Monday, May 6, 2019 10:34:40 AM<br>
To: fully automatic installation for Linux<br>
Subject: Re: package uninstall & install - different classes<br>
<br>
Your observation is correct. The order of classes are important when<br>
selecting configuration files, but do not matter inside a<br>
package_config file itself. The script install_packages reads the files in<br>
subdirectory package_config in the order given by the classes. But each<br>
file is read from the beginning to the end. If a line<br>
PACKAGE install CLASSA<br>
is found it justs checks if CLASSA is also defined, otherwise skips<br>
this part. So inside thise config the class is more like a true/false flag.<br>
<br>
It's not easy to change this, because you can list multiple classes<br>
after the PACKAGE install marker which forms a logical OR<br>
function. It's then hard to decide to which class the packages listed<br>
should be assigned to.<br>
<br>
In your case, is it possible to change your config by creating two<br>
files named CLASS1 and CLASS2 which each include a section PACKAGES<br>
install STRETCH64? Would that help you?<br>
<br>
--<br>
regards Thomas<br>
</blockquote></div>