From: Michael Tokarev <mjt@tls.msk.ru>
To: Akihiko Odaki <akihiko.odaki@gmail.com>,
QEMU Developers <qemu-devel@nongnu.org>
Subject: Re: get_relocated_path: the configured paths are not looked for?
Date: Sun, 23 Apr 2023 13:28:04 +0300 [thread overview]
Message-ID: <a01a470e-891e-bdfc-aefc-00701a6a0413@msgid.tls.msk.ru> (raw)
In-Reply-To: <20e76562-b1c7-3574-a277-7df6260226cc@gmail.com>
20.04.2023 08:29, Akihiko Odaki wrote:
> On 2023/04/19 16:32, Michael Tokarev wrote:
>> Hello!
>>
>> Today I discovered an interesting issue here: I copied a system-installed
>> binary into another directory, in order to debug an unrelated issue. Just
>> to discover it does not work, being unable to find any modules or data
>> files.
>>
>> Here's how the strace of typical qemu-system-i386 run looks like (the
>> relevant parts only):
>>
>> access("/tmp/qemu-bundle", R_OK) = -1 ENOENT (No such file or directory)
>> access("/tmp/b/../lib/x86_64-linux-gnu/qemu/accel-tcg-i386.so", F_OK) = -1 ENOENT (No such file or directory)
>> access("/var/run/qemu/Debian_1_8.0~rc4+dfsg-3/accel-tcg-i386.so", F_OK) = -1 ENOENT (No such file or directory)
>>
>> (the executable in this case is in /tmp, obviously). And it fails with
>> error "fatal: could not load module for type 'tcg-accel-ops'".
>>
>> This is despite the fact that qemu has been configured with proper --libdir
>> and other --foodir to point to actual dirs such as /usr/lib /usr/share etc.
>
> Some files in QEMU installation is closely coupled with the binary so it does not make much sense to copy only the executable to another directory.
> You need to copy all of the files QEMU owns to relocate a QEMU installation. QEMU uses relative paths to find such relocated files.
>
> That said, it is indeed confusing that QEMU uses relative paths even if you specify an absolute path for --libdir. I prefer to require to specify
> relative paths for --libdir and other options to make a QEMU installation relocatable, but I didn't dare making such a breaking change.
Well, quite often it makes little sense still.
For example, in debian we had to (temporarily) move qemu-system-i386 from
/usr/bin/ to /usr/libexec/, replacing the /usr/bin/ one with a shell wrapper
(to decouple xen hvm build out of main qemu build). It was just by a chance
the directory nesting is the same still, - I wanted to move it to /usr/lib/qemu/
instead. But at least this one still works. Ditto for the actual xen version,
the binary is in /usr/libexec/qemu-system-i386-xen now, I was about to move it
to /usr/libexec/xen/qemu-system-i386 instead.
I see absolutely no reason for the binary to look into /usr/libexec/share/qemu/bios.bin
if it is told to get all data files from /usr/share/qemu/.
Quite often I debug issues and have to compare "old" qemu with current one
(exactly like I did in this case), extracting the old binary into /tmp/.
And wonder why it breaks in other ways.
And I still don't see how this turning absolute paths into relative (behind the
scenes) can be useful. If we put qemu into /usr/local/bin for example, it
can be configured to look for data files in /usr/local/share just fine,
there's no need for this "magic". On the other hand, if we really want
to use a different data dir, we can pass a right -L option.
I think I'll just remove this (very questionable) behavior at least from the
Debian package. I already patched out the previous version of this, when
it looked at ${exe_path}/../pc-bios - this at least made sense when we
needed to find firmware files for just-built qemu, in the source dir. But
it makes no sense (in my opinion) to do that for the installed version.
Thanks,
/mjt
next prev parent reply other threads:[~2023-04-23 10:28 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-19 7:32 get_relocated_path: the configured paths are not looked for? Michael Tokarev
2023-04-20 5:29 ` Akihiko Odaki
2023-04-23 10:28 ` Michael Tokarev [this message]
2023-04-23 11:22 ` Akihiko Odaki
2023-04-23 11:31 ` Michael Tokarev
2023-04-23 11:47 ` Akihiko Odaki
2023-04-23 13:22 ` Michael Tokarev
2023-04-23 17:39 ` Akihiko Odaki
2023-04-23 18:10 ` Michael Tokarev
2023-04-23 18:24 ` Akihiko Odaki
2023-04-23 18:33 ` Michael Tokarev
2023-04-23 18:37 ` Michael Tokarev
2023-04-23 18:39 ` Akihiko Odaki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a01a470e-891e-bdfc-aefc-00701a6a0413@msgid.tls.msk.ru \
--to=mjt@tls.msk.ru \
--cc=akihiko.odaki@gmail.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).