Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Sun, 07 Nov 2004 19:14:32 +0100
From: Maciek Pasternacki <>
Subject: Re: Owl-current moved to glibc 2.3.x

On Boomtime, The Aftermath 20, 3170 YOLD, Solar Designer wrote:

> I'm really surprised you went through all that trouble.  What you
> were supposed to do is a simple "make installworld" over your older
> system.  That would have taken care of all the issues you mention
> automagically.

Oh.  I've always seen Owl's build system as a build system and make
installworld as, well, installer.  After reading the scripts I see
it's more useful than I thought.  I didn't find it fully documented
after eyeball-grep (and grep -i for upgrade and installorder) on
native/Owl/doc/ (for me installorder.conf is especially important
because I don't use postfix and trying to install it could mess up my
qmail installation; am I right thinking adding third-party srpm
compiled with `make PACKAGE=' to installorder.conf will make `make
installworld' take care of installing/upgrading it?).  I'd love to see
the build system and scripts described in more detail.

>> One is not bumping up the release on all recompiled packages
> Yes, we're indeed well aware of it and, while definitely not elegant,
> this is intentional.  There's simply no obviously-correct way to
> decide when a package's release number should be bumped.  If we would
> spend the time to determine whenever a library a package depends on
> has been changed (or would develop a set of scripts to track that) and
> would bump release numbers each time this happens, that would result
> in a lot of mostly unnecessary changes to spec files.

On the other hand, installworld simply reinstalls files for all
packages; if release numbers were bumped each time, it'd create
seemingly unnecessary changes to spec files but it'd make it possible
to upgrade only packages that really need to be upgraded.

Now I usually just upgrade with poldek and it upgrades only packages
which version or release numbers have changed.  Since important
changes (like secfixes) get their release numbers bumped it usually
works good enough and I don't need to re-create every file from every
package on each upgrade.

> OK, the glibc change is a significant one.  And so is OpenSSL.  But
> what about all the smaller changes, such as re-building with new gcc?
> For C++ code, this is a significant change too (dependencies on
> libstdc++ change), but for plain C?..  Should we go ahead and bump
> release numbers in almost(?) all spec files each time we update gcc?

Well, when binary compatibility is broken I think release version
should go up.  When package contents significantly change
(recompilation with newer gcc IMHO isn't a significant change unless
previous gcc version had bugs -- gcc upgrade to next major version is
maybe something that maybe should be represented by release number
change, but minor number change IMHO can go without notice).  For me,
changes in package's contents or binary compatibility is when release
version should be increased -- dynamic linking will work well for
minor library changes (most of pre-upgrade Owl packages would run on
new glibc).

On PLD Linux Distribution, which I use for my desktop, packages'
release number change is used to indicate that package should be
rebuilt (because, e.g., some library has changed).  In PLD the
distribution isn't recompiled as whole (as it is in Owl) but
individual packages are sent to `builder' machine.  When after
building library binary package dependencies are broken, packages
that break them have their release version increased and are sent to
builder (actually, AFAIK, builder tracks CVS commits and when
package's version or release is upgraded it rebuilds the package
automatically -- it isn't confirmed in distro's docs though and
I don't have access to builders so I'm not 100% sure).  Broken
dependencies in binary packages are detected with poldek.

> Basically, currently it is assumed that by far the most Owl users will
> use "make installworld".  And if you do install packages manually,
> you need to realize that a matching package version number between
> Owl-current revisions or between different branches does not imply the
> package is built/linked against all the same library versions.

ACK.  I wasn't aware of this; release number policy isn't documented
anywhere and it's certainly not what I expected.  Relying on release
numbers have always worked well enough for me.  I don't like the idea
of replacing all files in the system on each minor secfix but I'll
make sure now to run `make installworld' from time to time to make
sure everything's up to date.

>> Currently
>> poldek doesn't compile OOTB on Owl because of some autotools magic not
>> detecting librpm correctly;
> Is that still the case with the latest Owl-current?

Yes.  In fact, it's the case only with the latest Owl-current (librpm3
was detected correctly and ran well).   As soon as I'll have some
meaningful results as to where the problem is I'll post more info.

>> as soon as I'll get my system completely
>> up and running I'll track this down with poldek developers.
> Oh, so you aren't fully upgraded yet?  It should have taken just a few
> minutes with "make installworld", really. :-)

Well, Owl upgrade didn't take so long (but, to be honest, it included
running an ad-hoc one-liner equivalent of installworld), but there are
also third-party packages that need to be upgraded and rebuilt
(Python, Jabberd, Jabber transports, Apache, MySQL, PHP (including
upgrade from php4 to 5), Perl CPAN modules, some minor packages like
stunnel or qmail-tlsd and libraries it all depends on... argh). ;)

>> Second inconsistency is /usr/lib/rpm/macros -- default cpu is now
>> i686; since I run i586 system, I was surprised by rpmbuild creating
>> i686 binaries for me (even more surprised by it running
>> i686-pc-linux-gnu compiler and saving resulting binaries as .i386.rpm
>> files).  Are binaries in -current also compiled for i686-pc-linux-gnu?
>> Why such change?  Or maybe I don't understand some details about
>> compiling for different flavours of x86?
> Now, this may be a bug, and I wasn't aware of it.  I'll let Galaxy
> investigate and fix it.  He's the boss at our rpm package presently.

OK.  Please let me know when something will be known about this (I'd
prefer not to change default RPM macros as much as I can).

Also I'm not sure whether it's a bug or a feature but
%_unpackaged_files_terminate_build is set to 1 in /usr/lib/rpm/macros;
in PLD unpackaged files just spit out warnings and as far as
I remember it was the case in pre-upgrade Owl.  If it's a feature I'll
just redefine it in my .rpmmacros (to allow third-party packages with
unpackaged files, like Python not packaging X11-related files without
X11 development packages in build-time, to build correctly) and live
with it.

>> (or, at least, rpm %pre script could be more informative,
>> maybe even print exact shell commands to convert the database without
>> doing too much harm to the system).
> Perhaps it should be made Owl-aware: detect that rpm is not running
> from within "make installworld" and explain that it probably should be.

Yes, it'd certainly be a good idea -- Owl binary RPMs are Owl-specific
anyway so it certainly won't break anything and adventurous users can
choose to rebuild RPM database by hand on their own risk (as I did). ;)

Thanks for reply,

__    Maciek Pasternacki <> [ ]
`| _   |_\  / { ...For I was born with a habit, from a sign,
,|{-}|}| }\/       the habit of a windswept thumb,
\/   |____/        and a sign of the rain... }                  ( Fish )  -><-

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.