From mboxrd@z Thu Jan 1 00:00:00 1970 From: Adolf Belka To: development@lists.ipfire.org Subject: Re: qemu-user-static build of other architectures Date: Sun, 27 Nov 2022 13:26:07 +0100 Message-ID: <7821758c-d77f-fd67-9858-ed009b1de146@ipfire.org> In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1403502922582040160==" List-Id: --===============1403502922582040160== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi Michael, On 27/11/2022 13:09, Michael Tremer wrote: > Hello Adolf, >=20 >> On 26 Nov 2022, at 22:24, Adolf Belka wrote: >> >> Hi All, >> >> I tried to run a aarch64 build of samba so that I could get the correct ro= otfile but I had a few problems. >> >> I installed qemu-user-static on Arch Linux but when I tried to run the get= toolchain command I got an error message about not finding the binfmt_misc he= lper. >> >> Figured out that I needed to also install qemu-user-static-binfmt as well.= Then the error message changed to the fact that it could not find /usr/bin/q= emu-aarch64-static but it was in that directory. >> >> Eventually used the find static command from ./make.sh and found that on A= rch Linux it does not have "statically linked" but "static-pie linked". Chang= ing the ./make.sh find static command to look for "static-pie linked" then al= lowed the build for aarch64 to proceed. >=20 > It is required that QEMU is statically linked. >=20 > The reason for that is that we copy the binary into the build environment w= here it has no access to any libraries of the host - and to make those availa= ble, they need to be compiled into the binary. >=20 > PIE does not have anything to do with a statically linked binary (well kind= of, but I wouldn=E2=80=99t know why that is relevant in this context). >=20 > So what did you change exactly for this to work on your system? make.sh wou= ld normally automatically try to find the correct binary. I changed line 913 in make.sh from file -L "${file}" 2>/dev/null | grep -q "statically linked" to file -L "${file}" 2>/dev/null | grep -q -e "statically linked" -e "static-pi= e linked" I did this based on running file -L on the qemu-aarch64-static file in /usr/b= in on my Arch Linux system after installing qemu-user-static. I got /usr/bin/qemu-aarch64-static: ELF 64-bit LSB pie executable, x86-64, version = 1 (GNU/Linux), static-pie linked, BuildID[sha1]=3D92b6a9c54239756a47441b87bed= 1dfab884cfdc8, for GNU/Linux 4.4.0, stripped as the response which has static-pie linked instead of statically linked. Changing the grep to look for static-pie linked may have got the build runnin= g but glibc took nearly three hors to build. I know it would be slower with t= he emulation and probably also slower the first time round as there would be = nothing in the ccache but nearly three hours for one package seems excessive,= especially when the native build is taking around 1.5 hours for the whole IP= Fire build. Could the fact that my qemu-user-static program has the files static-pie link= ed be the cause of this very long run time? Regards, Adolf. >=20 >> Of course having changed ./make.sh means that it now shows up as a modifie= d file in the git status. I will look at changing the find static command to = look for either "statically linked" or "static-pie linked" and submit it as a= patch for consideration. >=20 >> Regards, >> >> Adolf. >> >=20 > -Michael --===============1403502922582040160==--