On Tue, 9 Jun 2015, Owen Synge wrote:
> On 06/09/2015 07:22 PM, Sage Weil wrote:
> > On Tue, 9 Jun 2015, Owen Synge wrote:
> >> Sorry to catch this thread late.
> >
> > There were two goals here:
> >
> > 1- make the generated tarball deterministic and independent of
> > configure options. Currently we have horrible hackery to include rocksdb
> > source in the tarball when configure doesn't get the rocksdb arguments,
> > and were hitting similar roadblocks/pain with libxio. This is avoided
> > with the make_dist.sh script (although we're not using it yet because of
> > the specfile generation piece).
>
> I think deterministic is a reasonable goal.
>
> I think independent of configure options, is not really a goal, its a
> solution to a goal that misses a couple of observations. The goal is
> deterministic operation.
>
> The important observations are:
>
> (a) The same source will need to be released multiple times.
> (b) It is nice to release with some differences to each environment.
This doesn't make sense to me. There should be *one* upstream .tar.gz (or
whatever) that is the canonical source associated with a release. That is
entirely independent of which distro you eventually build that source on,
and should (more or less) correspond to a snapshot of the git tree for the
release tag.
Currently the only reason ceph.spec is generated from autotools is to fill
in the version string. I can see why filling in all the other stuff makes
sense, but that points toward a process like
tar zxvf ceph-9.2.1.tar.gz # that's the canonical release tarball
cd ceph-9.2.1
./autogen.sh
./configure --with-systemd-libexec-dir=/usr/libexec/ceph \
--with-rpm-dir=/export/redhat/
make srpm
right?
Making different release tarball flavors for each distro seems crazy to
me...
sage
>
> If you combine (a) and (b) you quickly see why the "--configure" step
> exists before:
>
> make dist-bzip2
>
> as say on release you iterate between distributions to produce each
> setup deterministically.
>
> To illustrate I have put a little of my proposals for a replacement
> model of "make_dist.sh" to illustrate this in my opinion improved process.
>
> But if this step exists imagining a couple of patches later:
>
> $cat make_dist.sh
> #!/bin/sh -e
> # Common code
> autogen.sh
> # Redhat
> ./configure --with-systemd-libexec-dir=/usr/libexec/ceph \
> --with-rpm-dir=/export/redhat/
> make srpm
> # Suse
> ./configure --with-systemd-libexec-dir=/usr/lib/ceph/ \
> --with-rpm-dir=/export/suse/
> make srpm
> # Debian
> ./configure --with-systemd-libexec-dir=/usr/lib/ceph/ \
> --with-sdeb-dir=/export/debian/
> make sdeb
> # Ubuntu
> ./configure --with-systemd-libexec-dir=/usr/libexec/ceph \
> --with-sdeb-dir=/export/ubuntu
> make sdeb
>
> This will also solve the problems (1) and (2) with ceph.spec.in to
> ceph.spec transformation. And not just solve it once but make it clearer
> for each distribution.
>
> Problems.
>
> These are problems with your planned approach I don't have good answers
> for, and this approach solves now.
>
> (1) having autotools and another thing template ceph.spec.in could be
> complex.
>
> (2) This code need to be documented as its not standard autotools.
>
> (3) How much faster must the template tool be to be acceptably faster
> than ./configure
>
> > 2- avoid multiple passes through ./configure for 'make dist' and the
> > subsequent build. We currently do it for the 'make dist' step (which also
> > generates ceph.spec) and then for the eventual build. Using autotools for
> > generating the spec means we still do it twice.
> >
> > I'm less concerned about build speed and it may be worth consolidating all
> > of the distro logic in configure.ac. Honestly I don't really know if
> > that is better or not (vs conditionals in the specfile)... I have no real
> > love for autotools.
>
> autotools is not some thing I love, but I find it very useful, within
> the scope of building C/C++, I have found it has a solution with _every_
> use case already catered for. You just need some time to find it, and it
> may look different from what you thought you wanted and how you would
> make it, but I find the pre made autotools solution is a better solution
> than making your own from experience.
>
> I must say though, autotools is much nicer than rpm for macros and
> variables and template expansion.
>
> > But hopefully the tarball step can remain a fast, deterministic step that
> > doesn't require a configure pass?
>
> I really support you desire for deterministic.
>
> I commend your desire that each step remain fast.
>
> I believe you are missing a step if you follow the path of skipping the
> configure pass, and you loose some important functionality.
>
> I point out now what functionality in the hope that we can use it to
> make other work easier, and autoools can be used to template any files
> it needs to, including at least, spec files and deb files by putting
> paths into autotools.
>
>
> Owen
>
>
>
> > sage
> >
> >
> >
> >
> >>
> >> I come here via patch
> >>
> >> https://github.com/ceph/ceph/pull/4911#issuecomment-110422312
> >>
> >> I think you guys are missing that configure is doing some thing here.
> >>
> >> (1) Configure is generating the spec file.
> >> (2) It could also generate the deb files.
> >>
> >> What no one has done is to:
> >>
> >> (A) Use configure to eliminate the differences between OS's.
> >>
> >> If any one had done (A) you would not be considering this I hope.
> >>
> >> This impact is particularly felt in the ceph.spec.in file where because
> >> of the lack of (A) in the process we are plagued with OS specific
> >> conditionals.
> >>
> >> If the path of say:
> >>
> >> src/ceph-osd-prestart.sh
> >>
> >> is ether:
> >>
> >> /usr/libexec/ceph
> >>
> >> or:
> >>
> >> /usr/lib/ceph
> >>
> >>
> >> Is purely distribution specific.
> >>
> >> Having conditionals in
> >>
> >> ceph.sepc.in
> >>
> >> defeats the point of generating it via autotools.
> >>
> >> we can be remove many hard coded values replaced with variable and that
> >> probably will only grow in number for example
> >>
> >> %if 0%{?rhel} || 0%{?fedora}
> >> --with-systemd-libexec-dir=/usr/libexec/ceph \
> >> %endif
> >> %if 0%{?opensuse} || 0%{?suse_version}
> >> --with-systemd-libexec-dir=/usr/lib/ceph/ \
> >> %endif
> >>
> >> some wont need distribution specific locations like:
> >>
> >> --with-systemd-unit-dir=%_unitdir
> >>
> >> In the long term replaced all these path variables could be replaced by
> >> single parameter.
> >>
> >> ./configure --with-distro-defaults=redhat
> >> make rpm
> >> ./configure --with-distro-defaults=suse
> >> make rpm
> >> ./configure --with-distro-defaults=debian
> >> make deb
> >> ./configure --with-distro-defaults=ubuntu
> >> make deb
> >>
> >> Very easily.
> >>
> >> In summary, please reconsider this decision as if you follow this policy
> >> we are left with conditionals all over the ceph.spec.in file.
> >>
> >>
> >> Best regards
> >>
> >> Owen
> >>
> >>
> >>
> >>
> >>
> >>
> >> On 05/05/2015 09:31 PM, Sage Weil wrote:
> >>> On Tue, 5 May 2015, Loic Dachary wrote:
> >>>>> I think the long-term solution to Kefu's issue is that we need to
> >>>>> remove the requirement to run through a full "./configure" invocation
> >>>>> just to get a tarball. All the RPM and Debian packages internally run
> >>>>> ./configure, so running it a second time slows things down. I think it
> >>>>> makes sense to implement the tarball-generation functionality using a
> >>>>> simpler script at the root of the ceph.git tree. The operation should
> >>>>> be about as fast as "git archive".
> >>>>
> >>>> I agree. It's going to be significant work but it's worth it.
> >>>
> >>> Yep!
> >>>
> >>>>> The "ceph.spec.in" -> "ceph.spec" suffers from a similar issue. It
> >>>>> takes a full "./configure" run to get to a point where Make can write
> >>>>> the proper version numbers into that file. Ideally we could skip all
> >>>>> of that and simply do the variable interpolation with sed or something.
> >>>
> >>> Yep!
> >>>
> >>> sage
> >>> --
> >>> To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
> >>> the body of a message to [email protected]
> >>> More majordomo info at http://vger.kernel.org/majordomo-info.html
> >>>
> >>
> >> --
> >> SUSE LINUX GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB
> >> 21284 (AG
> >> Nürnberg)
> >>
> >> Maxfeldstraße 5
> >>
> >> 90409 Nürnberg
> >>
> >> Germany
> >> --
> >> To unsubscribe from this list: send the line "unsubscribe ceph-devel" in
> >> the body of a message to [email protected]
> >> More majordomo info at http://vger.kernel.org/majordomo-info.html
> >>
>
> --
> SUSE LINUX GmbH, GF: Jeff Hawn, Jennifer Guild, Felix Imendörffer, HRB
> 21284 (AG
> Nürnberg)
>
> Maxfeldstraße 5
>
> 90409 Nürnberg
>
> Germany
>
>