From: Peter Xu <peterx@redhat.com>
To: Laszlo Ersek <lersek@redhat.com>
Cc: Fam Zheng <famz@redhat.com>,
QEMU Devel Mailing List <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] Is there a way to package QEMU binaries?
Date: Wed, 13 Jun 2018 11:46:10 +0800 [thread overview]
Message-ID: <20180613034610.GG15344@xz-mi> (raw)
In-Reply-To: <818e1eff-6c10-5a00-c21c-217c2f02f02c@redhat.com>
On Tue, Jun 12, 2018 at 01:29:32PM +0200, Laszlo Ersek wrote:
> Hi Fam,
>
> On 06/12/18 08:41, Fam Zheng wrote:
> > On Tue, 06/12 14:24, Peter Xu wrote:
> >> Hi,
> >>
> >> For example, I wanted to compile QEMU once and install it on multiple
> >> systems. What would be the suggested way to do so?
> >>
> >> Is there something similar to "make bin-rpmpkg" for Linux?
> >>
> >> Thanks in advance,
> >
> > No. The big question is the libraries. Even if you create the rpm, the libraries
> > that you have linked against are not necessarily available on the systems you
> > install. This means you either list all possible libraries as required in the
> > rpm spec, which is a waste, or the list is generated dynamically, which is not
> > trivial. For example, you can easily build QEMU against a custom glib, but it's
> > very tricky to generate an rpm from it that works on other systems.
> >
> > For development, maybe it's easier to combine git and Ansible.
>
> libvirt supports RPM builds out of the upstream git tree:
>
> ./autogen.sh ...
> make rpm
>
> However, while QEMU doesn't support that, Peter's idea can be solved
> quite simply:
>
> * run QEMU's configure with "--prefix=...". For example,
> --prefix=/opt/qemu-<version>.
>
> * If you make sure that the prefix configured above is writeable to a
> non-root user, then "make install" can be executed without becoming root
> first.
>
> * You can then tar up the installed file tree under prefix, and extract
> it on other hosts (at the same absolute prefix). If the installation is
> no longer needed, you can simply remove the file tree under the prefix.
>
> * The above procedure works basically for all open source packages
> nowadays; however in order to actually use packages installed like this,
> a number of environment variables may have to be extended so they refer
> to various subdirectories under "prefix":
>
> - CPLUS_INCLUDE_PATH
> (so g++ can find include files)
> - C_INCLUDE_PATH
> (so gcc can find include files)
> - INFOPATH
> (so "info" can find docs)
> - LD_LIBRARY_PATH
> (so ld.so can load shared objects at executable startup)
> - LIBRARY_PATH
> (so gcc/g++/ld can resolve "-l" options at link editing time)
> - MANPATH
> (so "man" can find docs)
> - PATH
> (so the shell finds the binary)
> - PKG_CONFIG_PATH
> (modern replacement for CPLUS_INCLUDE_PATH, C_INCLUDE_PATH,
> and LIBRARY_PATH)
> - PYTHONPATH
> (so python can find python modules)
> - ...
>
> On my laptop, I have a bunch of packages installed like this, and I have
> a script that traverses /opt and generates another script that assigns
> all of the above variables. This latter script is then sourced by my
> ~/.bashrc.
>
> Considering QEMU specifically, only two of the above variables need to
> be extended in practice:
>
> - MANPATH: append <prefix>/share/man
> - PATH: append <prefix>/bin
These steps might be a bit heavy-weighted for debugging purpose of
mine, but please take my sincere thanks on all these steps! I believe
I could use the idea somewhere, for example, this marco list is really
a good thing to know when debugging libraries with old versions.
Also, the "tar + pipe" magic you offered in the other thread with Fam
is nice and more light-weighted to me.
I'm considering maybe I'll read about how to "make binrpm" for QEMU
some day in case it'll ease some of us.
>
> Summary: (1) configure QEMU with option "--prefix", (2) give rwx on
> "prefix" to the user that builds and installs QEMU, (3) build and
> install QEMU as that user, (3) transfer the tree under prefix to another
> host, (4) expand to the same prefix on the target, (5) update MANPATH
> and PATH on the target.
And... you even provided a summary for all the steps!
Thanks again, Laszlo!
--
Peter Xu
next prev parent reply other threads:[~2018-06-13 3:46 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-06-12 6:24 [Qemu-devel] Is there a way to package QEMU binaries? Peter Xu
2018-06-12 6:41 ` Fam Zheng
2018-06-12 6:52 ` Peter Xu
2018-06-12 7:01 ` Fam Zheng
2018-06-12 7:41 ` Peter Xu
2018-06-12 7:53 ` Liviu Ionescu
2018-06-13 3:48 ` Peter Xu
2018-06-12 11:34 ` Laszlo Ersek
2018-06-12 11:29 ` Laszlo Ersek
2018-06-13 3:46 ` Peter Xu [this message]
2018-06-12 8:52 ` Peter Maydell
2018-06-13 4:02 ` Peter Xu
2018-06-13 9:28 ` Daniel P. Berrangé
2018-06-14 2:55 ` Peter Xu
2018-06-14 8:14 ` Daniel P. Berrangé
2018-06-14 10:50 ` Peter Maydell
2018-06-14 11:03 ` Peter Xu
2018-06-14 12:58 ` Alex Bennée
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=20180613034610.GG15344@xz-mi \
--to=peterx@redhat.com \
--cc=famz@redhat.com \
--cc=lersek@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.