Just a followup.
My script had a serious bug (plus a typo), too: since it gets sourced, $0 is not what I expected :( After many failed atttempts finally I noticed it and patched.

What I just tested:
-8<--
root@fai:/srv/fai/config/class# cat 99-disklist.sh
#! /bin/bash

mydisks() {

find $* -type l -printf "%f %l\n" | grep -Pv '^md|-part\d|^wwn-|^nvme-eui|^nvme-nvme' | egrep '^scsi|^ata|^nvme' | sed -e 's#.*/##g'| tr '\n' ' '
}

# This is really important, because we use shell globbing for creating the list of disks
cd /dev/disk/by-id || echo Cannot get disk information

filter='nvme*'

# can not use $0: script is sourced, not run explicitly !
datadir=$FAI/class/99-disklist.d
echo "**** Testing $datadir/$HOSTNAME"
if [ -f $datadir/$HOSTNAME ] ; then
    # Source host-specific list. Can define a new list or override filter
    . $datadir/$HOSTNAME
fi

if [ -z $newlist ]; then
    echo "newlist is empty, filter=$filter"
    newlist=$(mydisks $filter )
fi

if [ -n "$newlist" ]; then
    echo New disklist in 99-disklist.sh: $newlist
    echo "disklist=\"$newlist\" # $0" >> $LOGDIR/additional.var
fi
-8<--

And 99-disklist.d/fast00 (the host I'm installing) contains:
-8<--
#!/bin/bash
#filter='scsi-*'
#newlist='sdt '
. /usr/lib/fai/subroutines

newlist=$(smallestdisk)
-8<--

Hope it can be useful for others.

Diego

Il 22/02/2024 09:02, Diego Zuccato ha scritto:
I think there's a bug (well, a missing piece) in 99-disklist.sh: egrep ignores SCSI disk, considering just ATA and NVME.

If it can be useful, I also modified the script to look into 99-disklist.d for hostname-specific configs (I prefer having separate files instead of embedding in a bigger one):

-8<-- 99-disklist -8<--
#! /bin/bash

mydisks() {

    find $* -type l -printf "%f %l\n" | grep -Pv '^md|-part\d|^wwn-|^nvme-eui|^nvme-nvme' | egrep '^scsi|^ata|^nvme' | sed -e 's#.*/##g'| tr '\n' ' '
}

# This is really important, because we use shell globbing for creating the list of disks
cd /dev/disk/by-id || echo Cannot get disk information

filter='nvme*'

if [ -f $0.d/$HOSTNAME ] ; then
     # Source host-specific list.
     # Can define a new list or just override filter
     . $0.d/$HOSTNAME
fi

if [ -z $newlist ]; then
     newlist=$(mydisks $filter* )
fi

if [ -n "$newlist" ]; then
     echo New disklist: $newlist
     echo disklist=\"$newlist\" >> $LOGDIR/additional.var
fi
-8<--
Note the missing .sh extension.

The 99-disklist.d/$HOSTNAME file is just:
-8<--
#!/bin/bash
filter='scsi-*'
# or
#newlist='sda'
-8<--

HiH.

Diego

Il 31/01/2024 13:49, Thomas Lange ha scritto:
Hi all,

that is the example how to change the shell variable $disklist:
https://fai-project.org/download/misc/99-disklist.sh

Create the script class/99-disklist.sh in your config space (/s/rv/fai/config)

These are the imprtant lines:

if [ -n "$newlist" ]; then
     echo New disklist: $newlist
     echo disklist=\"$newlist\" >> $LOGDIR/additional.var
fi


This script writes the new valuespf disklist to
$LOGDIR/additional.var. Then FAI will parse it and sets the new value
for disklist before calling setup-storage.

regards Thomas


--
Diego Zuccato
DIFA - Dip. di Fisica e Astronomia
Servizi Informatici
Alma Mater Studiorum - Università di Bologna
V.le Berti-Pichat 6/2 - 40127 Bologna - Italy
tel.: +39 051 20 95786

Antwort per Email an