potential patch to check-cross-arch

Matteo Guglielmi Matteo.Guglielmi at dalco.ch
Thu Oct 17 12:35:24 CEST 2019


For those interested,


the final and working patch that takes care of all possible

cases is the following one:



_ls=$(realpath -m $_ls)      # insert these two lines before
_ls=$target/${_ls#/target/}  # line n.36 (info=$(file $_ls))
info=$(file $_ls)




________________________________
From: linux-fai <linux-fai-bounces at uni-koeln.de> on behalf of Matteo Guglielmi <Matteo.Guglielmi at dalco.ch>
Sent: Thursday, October 10, 2019 12:05:59 PM
To: fully automatic installation for Linux
Subject: Re: potential patch to check-cross-arch

I've added debugging commands to show the problem:

# where is the ls command
if [ -f $target/bin/ls ]; then
    _ls=$target/bin/ls
elif [ -f $target/usr/bin/ls ]; then
    _ls=$target/usr/bin/ls
else
    echo "Cannot find ls command in $target"
    exit 3
fi


echo $_ls
ls -liah $_ls
file $_ls                       <<<==== causing the original error
file -L $_ls
_ls1=$target$(realpath $_ls)
echo $_ls1
ls -liah $_ls1
file $_ls1
_ls1=$target$(realpath -m $_ls)
echo $_ls1
ls -liah $_ls1
file $_ls1
_ls1=$target$(readlink -m $_ls)
echo $_ls1
ls -liah $_ls1
file $_ls1


# OUTPUT #


ftar: extracting /var/lib/fai/config/basefiles/OSUSE150S.tar to /target/
/target/bin/ls
6291548 lrwxrwxrwx 1 root root 11 Apr  9  2018 /target/bin/ls -> /usr/bin/ls
/target/bin/ls: symbolic link to /usr/bin/ls
/target/bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=a65f86cd6394e8f583c14d786d13b3bcbe051b87, stripped
/target/usr/bin/ls
4723631 -rwxr-xr-x 1 root root 132K Apr  9  2018 /target/usr/bin/ls
/target/usr/bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=2068163fab939170477770bed268bc34c81a5828, stripped
/target/usr/bin/ls
4723631 -rwxr-xr-x 1 root root 132K Apr  9  2018 /target/usr/bin/ls
/target/usr/bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=2068163fab939170477770bed268bc34c81a5828, stripped
/target/usr/bin/ls
4723631 -rwxr-xr-x 1 root root 132K Apr  9  2018 /target/usr/bin/ls
/target/usr/bin/ls: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=2068163fab939170477770bed268bc34c81a5828, stripped



please note the different "BuildID[sha1]" value for the "right" ls binary.




This the correct patch:



info=$(file $target$(readlink -m $_ls))


or


info=$(file $target$(realpath -m $_ls))



where the '-m' option is needed to preserve

the symlink (print it out!) in case it's

completely broken relative to the nfsroot...

we never know... it's a safety feature.

________________________________
From: linux-fai <linux-fai-bounces at uni-koeln.de> on behalf of Matteo Guglielmi <Matteo.Guglielmi at dalco.ch>
Sent: Thursday, October 10, 2019 11:11:38 AM
To: fully automatic installation for Linux
Subject: Re: potential patch to check-cross-arch

Actually I'm not sure if your patch is correct

because despite the fact that it does not cause

a crash.



In fact,


given the fact that on suse systems:


/bin/ls


is a symlink to:


/usr/bin/ls


what happens is that:


$_ls


whose absolute path is:


/srv/fai/nfsroot/target/bin/ls


will now be a symlink to:


/srv/fai/nfsroot/usr/bin/ls


instead of:


/srv/fai/nfsroot/target/usr/bin/ls



... I hope it's clear.




So,




the correct patch should be mine:



info=$(file $(readlink -m $_ls))


because, relative to the nfsroot we have:




_ls=/target/bin/ls



_ls=$(readlink -m $_ls)



echo $_ls



/target/usr/bin/ls






________________________________
From: linux-fai <linux-fai-bounces at uni-koeln.de> on behalf of Matteo Guglielmi <Matteo.Guglielmi at dalco.ch>
Sent: Thursday, October 10, 2019 8:40:33 AM
To: fully automatic installation for Linux
Subject: Re: potential patch to check-cross-arch

openSUSE Leap 15.0/15.1

SLES/SLED 15.0/15.1


yes,


both patches do work:


info=$(file -L $_ls)


info=$(file $(readlink -m $_ls))



your patch is better.

________________________________
From: linux-fai <linux-fai-bounces at uni-koeln.de> on behalf of Thomas Lange <lange at informatik.uni-koeln.de>
Sent: Wednesday, October 9, 2019 6:39:41 PM
To: fully automatic installation for Linux
Subject: Re: potential patch to check-cross-arch

>>>>> On Wed, 9 Oct 2019 15:40:02 +0000, Matteo Guglielmi <Matteo.Guglielmi at dalco.ch> said:

    > This script:
    > /srv/fai/nfsroot/usr/lib/fai/check-cross-arch

    > fails (line 36: info=$(file $_ls)) on openSUSE
    > and Suse Linux Enterprise systems because:
Which openSUSE version are you using?
Does file -L help?

--
regards Thomas


More information about the linux-fai mailing list