dpkg-source --commit fails to find local changes

2014-08-15 Thread Neil Williams
I'm unable to get dpkg-source to see that I have changed files in a
python source package format 3.0 (quilt):

dpkg-source: info: there are no local changes to record

No matter what I seem to do inside the json-schema-validator package,
dpkg refuses to spot the change, even renaming the package in setup.py
or changing the .py files. I get no warning on building and I have to
create the patch manually.

Is this a regression or is there something different about the
json-schema-validator and versiontools packages?

This happened with 1.17.11 and 1.17.12.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



signature.asc
Description: PGP signature


Re: dpkg-query --print-avail: how to get long descriptions?

2014-04-25 Thread Neil Williams
On Thu, 24 Apr 2014 23:04:35 +0200
Marcel Partap mpar...@gmx.net wrote:

 Dear DPKG developers,
 for all my packages installed (via aptitude), long descriptions are
 written (by? aptitude? dpkg?) to /var/lib/dpkg/{status,available} ..
 How to get them for uninstalled packages as well? The
 /var/lib/dpkg/available generated by dselect update does only contain
 the short description.. apt-cache also doesn't show them.

apt-cache show package
does include the long description, along with all of the other fields.

The full list of long descriptions for all packages, as well as all the
other information, will be in /var/lib/apt/lists/ - one large file per
apt source, combining installed and uninstalled packages.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



signature.asc
Description: PGP signature


Bug#737634: dpkg-dev: please reject native/non-native version when building native/non-native source packages

2014-02-11 Thread Neil Williams
On Mon, 10 Feb 2014 22:13:45 +0100
Wouter Verhelst wou...@debian.org wrote:

 Sigh.
 
 On Wed, Feb 05, 2014 at 12:59:23PM +, Neil Williams wrote:
  Using packages to support upstream development is a common problem

/common problem/common source of problems/

  and this is exactly where things get awkward.
 
 No, it is not a *problem*; it is a *method* of doing things.

... one which I've used consistently for more years than I've been a DD
and had frequent problems with various assumptions in various tools
and in more distributions than just Debian and its derivatives.

Hopefully the clarification will show that I'm not questioning
the methods of anyone (other than possibly my own).

 It is not your place (nor mine) to question another person's methods
 of doing things; especially not if said methods are done outside of
 Debian, as is here the case.

... and in my ongoing work.

If using distribution tools for upstream development was easy, we might
not have had people developing tools like pypi, ruby gems, CPAN or a
whole range of other non-distribution distributive tools. This isn't
just a Debian problem. (Indeed fixing it in Debian isn't going to fix
the problems because upstreams will rarely fixate on a single
distribution across the entire team - for entirely sane reasons.)

It is right for upstream to want to deploy to FHS compliant paths and
use dependencies from the main distribution system etc. None of the
distribution tools for any of the distributions actually make it easy
to then develop within those paths without either rebuilding unreleased
upstream packages or copying files into privileged paths. Both of these
routes need sudo access which just makes things harder again. Why must
every developer have sudo access on the development box? That is
exactly why pypi and buildout have got so much traction. It annoys me
that I have to use such methods for upstream work because dpkg-dev is
too constrained by rules which *only* relate to official builds.

Doing a quick native build of a non-native package for use and
distribution within a known team is a *common requirement* for upstream
teams. (e.g. it means that developers can push to a branch, get a quick
native package built, uploaded locally, installed via an inotify and
available to test without the unnecessary step of building
an .orig.tar.gz in the middle.) It's not quite as clean or DRY as
restarting a daemon directly from a user-privilege git clone but it is
workable.

Why should that require two branches of the packaging files?

Developing using Debian is not just about development of Debian.
Upstream teams use dpkg-dev too.

Constraints which are entirely warranted for developing packages
destined for ftp-master are directly harmful for developing packages
destined for a repository on 192.168.

Yes this could work with overrides but those overrides need to be build
specific (not package specific or version specific). This is exactly
why a ~/.gbp.conf is the right approach.

  Not true. There are options to use debuild or pdebuild or
  dpkg-buildpackage in-place.
  
  e.g. I use:
  
  [DEFAULT]
  #builder = git-pbuilder
  builder = debuild
  cleaner = fakeroot debian/rules clean
  pristine-tar = True
  
  [git-buildpackage]
  export-dir = ../build-area/
  tarball-dir = ../tarballs/
 
 Even if so, this increases the complexity of the system, and requires
 people to learn yet another tool to Just Do what was previously
 possible with no extra fluff.
 
 It's okay for a tool (like dpkg) to warn if something doesn't look
 right. It's not okay for a tool (like dpkg) to pretend to be smarter
 than the person operating said tool.

True - however, there will always be a need for tools like git-bp and
it is common to use aliases and JDTRT scripts to provide a consistent
interface no matter what changes beneath. Thankfully, none of those
hacks make it into Debian but that does mean that people within Debian
don't get to see how the tools are actually used.

Switching a non-native package to native arbitrarily is a necessary use
of dpkg and it needs to be supported cleanly and in a way which is easy
to override using a per-build configuration option.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



signature.asc
Description: PGP signature


Bug#737634: dpkg-dev: please reject native/non-native version when building native/non-native source packages

2014-02-05 Thread Neil Williams
On Wed, 5 Feb 2014 12:21:30 +
Sam Hartman hartm...@debian.org wrote:

  Andreas == Andreas Beckmann a...@debian.org writes:
 
 Andreas On 2014-02-05 10:57, Sam Hartman wrote:
  tarballs useful; anyone who is likely to want to build this
  from source probably has a copy of git and can checkout a tag.
 
 Andreas Such a tag corresponds to an upstrema version?
 
 yes.
 
  I'm happy to entertain other options rather than 3.0(native)
  but my requirements are:
  
  * support for upstream version * support for debian revision
  
  * No need to have upstream sources available to
  dpkg-buildpackage prior to running it
  
  * No need to maintain .orig.tar.gz artifacts produced by
  dpkg-source and keep the checksums of these artifacts
  consistent between packages with the same upstream versions.
 
 Andreas All this sounds like it can be done with git-buildpackage
 Andreas --git-pristine-tar --git-pristine-tar-commit. Can be set
 Andreas in debian/gbp.conf. And maybe dpkg-source
 Andreas --single-debian-patch.  
 
 no, that means I have to maintain the artifact (namely the
 .orig.tar.gz).
 The archive software (both reprepro and dak were I to use that)
 require that the .orig.tar.gz not change checksums.

Using packages to support upstream development is a common problem and
this is exactly where things get awkward.

For my own role within an upstream team, I'm considering using
unofficial or developer upstream tarball releases. We'll probably
use a date based tag 2014.02 etc for the main monthly release.
Developer builds will have a shortened git hash appended (this happens
to match our existing deployment method) like 2014.02.234fdga2 and
incremental upstream releases will use tag.01 etc. so 2014.02.01

This has advantages that developers self-verify that the tarballs work
which finds problems due to new files not being included in the
tarball. It also retains the upstream packaging behaviour.

 I don't want my build machines to be able to push back to my master
 repository.
 Nor do I want to have to release upstream versions if I lose state on
 my build machines.
 So this violates my requirements because I have to maintain  an
 artifact of dpkg-source (the .orig.tar.gz) and makesure its checksum
 never changes.
 
 Also, using git-buildpackage is difficult.
 The build is done by sbuild, which does not call git-buildpackage.

Not true. There are options to use debuild or pdebuild or
dpkg-buildpackage in-place.

e.g. I use:

[DEFAULT]
#builder = git-pbuilder
builder = debuild
cleaner = fakeroot debian/rules clean
pristine-tar = True

[git-buildpackage]
export-dir = ../build-area/
tarball-dir = ../tarballs/

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



signature.asc
Description: PGP signature


Re: Add multiarch library paths to DEFAULT_LIBRARY_PATH in Dpkg::Shlibs?

2013-04-16 Thread Neil Williams
On Tue, 16 Apr 2013 15:34:40 +0400
Игорь Пашев pashev.i...@gmail.com wrote:

 Now, /usr/share/perl5/Dpkg/Shlibs.pm defines default library search path as:
 use constant DEFAULT_LIBRARY_PATH =
 qw(/lib /usr/lib /lib32 /usr/lib32 /lib64 /usr/lib64
/emul/ia32-linux/lib /emul/ia32-linux/usr/lib);
 
 and adds multiarch dirs only for crosscompiling:
 
 if ($crossprefix) {
 push @crosslibrarypaths, /lib/$multiarch, /usr/lib/$multiarch,
 /$crossprefix/lib, /usr/$crossprefix/lib,
 /$crossprefix/lib32, /usr/$crossprefix/lib32,
 /$crossprefix/lib64, /usr/$crossprefix/lib64;
 }

i.e. when cross-compiling, the foreign architecture object files need
to be linked against the shared libraries of the same architecture.
Dpkg::Shlibs is used in package building, not at runtime.

The value of $multiarch depends on the architecture being built.
($crossprefix is the old dpkg-cross style path)

 I think it would be better to add multiarch dirs to DEFAULT_LIBRARY_PATH,
 and put them in first positions.

Why?

AFAICT, the only time ordering is going to matter is if libfoo1 is not
multiarch and libfoo2 is multiarch, both are installed for the current
dpkg build architecture and you are building something which compiles
against both versions. That's a false premise because, currently, the
-dev side of MultiArch isn't complete and even if foo builds
libfoo2-dev and libfoo1-dev still exists, libfoo1-dev and libfoo2-dev
will not be co-installable. So the actual .so symlink will be for
whichever one gets installed. The mere fact that one version is
multiarch and one is not is incidental to this problem.

When calculating the shlibs of a package during the build, the libfoo
part of the dependency is not relevant, it is the libfoo?-dev package
which determines which .so symlink gets used and therefore which libfoo
gets linked.

This is a topic for the debian-dpkg list, please follow up there.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpa45NBs1Zd_.pgp
Description: PGP signature


Re: Add multiarch library paths to DEFAULT_LIBRARY_PATH in Dpkg::Shlibs?

2013-04-16 Thread Neil Williams
On Tue, 16 Apr 2013 16:11:24 +0400
Игорь Пашев pashev.i...@gmail.com wrote:

 2013/4/16 Raphael Hertzog hert...@debian.org:
  On Tue, 16 Apr 2013, Игорь Пашев wrote:
  I think it would be better to add multiarch dirs to DEFAULT_LIBRARY_PATH,
  and put them in first positions.
 
  Why?
 
  This modules tries to mimick ld.so's logic to find libraries as closely
  as possible.
 
 /lib:/usr/lib was the default path, now it is
 /lib/multiarch:/usr/lib/multiarch, isn't it?

No - there's confusion here between the runtime link path and the
build time link path. Dpkg::Shlibs at the point quoted is concerned
with the build time paths. Where to find the stuff which has been
linked against the built binaries for the current architecture of the
current build.

The shared library libfoo.so.1.2.3 lives in /usr/lib/$triplet for
runtime usage but the -dev package which provides the .so symlink which
is used to find the actual .so.N.N.N file is not necessarily in a
MultiArch path. The implementation of MultiArch for -dev packages is
not complete and most -dev packages are not co-installable with a
foreign architecture of the same -dev package. (Any one package build is
only building for a single architecture at any one time, discounting
the issues with CC_FOR_BUILD which needs to be handled differently.
Therefore, building bar for i386 and then armhf means removing some
of the i386 build-deps and installing the armhf build-deps instead.
This typically includes removing libfoo-dev:i386 and installing
libfoo2:armhf  libfoo-dev:armhf. libfoo2:armhf can, of course, stay
installed for later.)

MultiArch in Debian is principally concerned with runtime paths, the
build-time paths and consequent cross-compilation support still has a
few wrinkles to resolve. (or dpkg-cross could have been removed from
Wheezy.)

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpydxnZopYnS.pgp
Description: PGP signature


Re: Bug#180128: state of integration of dpkg-cross into dpkg

2012-07-22 Thread Neil Williams
On Sun, 22 Jul 2012 18:01:05 +0100
Wookey woo...@wookware.org wrote:

 +++ Neil Williams [2012-07-22 17:05 +0100]:
  One unresolved issue is the cache values and architecture support:
  where to put the cross- config settings currently implemented
  in /etc/dpkg-cross/cross* which pass the architecture-specific values
  to autotools projects. CC'ing debian-embedded for more input on
  that. 
 
 It was sugested at the multiarch-cross BOF at debconf this year that we
 create a 'crossbuild-support' package to take over these various glue
 functions from dpkg-cross. That could just stay named 'dpkg-cross' for
 simplicity but if we are going to drop all the cross-conversion
 functionality and add a load of other stuff, a name change makes
 sense.

OK. I don't mind what the package name is, as long as it Breaks: xapt.
If it's not dpkg-cross, it will also need to Conflict: dpkg-cross

The cross-conversion functionality can only be dropped once the
critical mass of -dev packages are implemented.
 
  Therefore, I think this bug will need to remain open, unless dpkg
  maintainers do not wish to integrate the cross architecture-specific
  metadata at all. (This data does not change until a new port is
  accepted by dpkg or an old port removed, at which point it is just a
  single file addition/removal containing data provided by the porters.)
 
 I don't think that dpkg is the right place for this data. 

The architecture-specific data? Is that really subject to change? True
the package-specific stuff is going to change and is not useful in
dpkg, but once a port has been accepted, the chances of the size of a
long long being changed are slim (and a serious problem).

 We want to
 be able to update it easily without having to mess with important
 things like dpkg. 

True - for the package-specific stuff. Equally, the package-specific
stuff could actually be patched into the relevant packages which is a
better place for it - eventually.

 The core cross functionality is now in dpkg and apt.

with the sole exception of the size of a long long for DEB_HOST_ARCH
etc.

 We should discuss where remaining stuff like autoconf cache variables,
 triplet-prefixed commands like triplet-pkg-config and
 triplet-config scripts, cross-build-essential package lists and the
 like should live, but I don't currently see good arguments to put any
 more of it into dpkg. 

The package-specific stuff does not need to be lumped in with the truly
architecture-specific variables.

Most of the package-specific cache variables are not also
architecture-specific, separating those out means less files need
updates and if we do get the package-specific cache values into the
packages, the whole cache problem becomes more manageable.

This is a long-term goal, it will take until Wheezy+1 to even get that
critical mass of -dev MultiArch packages.

 If we are agreed on that then this bug is indeed closed. 

So is it worth separating out the architecture-specific cache values?

It's not easy to do until other changes are in place but I think it
should be done.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpg709runOyv.pgp
Description: PGP signature


Re: Bug#180128: state of integration of dpkg-cross into dpkg

2012-07-22 Thread Neil Williams
On Sun, 22 Jul 2012 19:23:44 +0200
Guillem Jover guil...@debian.org wrote:

 On Sun, 2012-07-22 at 18:01:05 +0100, Wookey wrote:
  It was sugested at the multiarch-cross BOF at debconf this year that we
  create a 'crossbuild-support' package to take over these various glue
  functions from dpkg-cross. That could just stay named 'dpkg-cross' for
  simplicity but if we are going to drop all the cross-conversion
  functionality and add a load of other stuff, a name change makes
  sense.
 
 Such package sounds like a good idea indeed, but I'd really like if any
 glue required there would end up being mere environment variable
 settings (like appropriate CC for cross-building for example), symlinks
 for cross tools, the cache files or at most a tiny wrapper for
 dpkg-buildpackage passing correct options. Anything else should be
 integrated back in the lower layers IMO (if it makes sense and the
 solutions are “generic enough”).

OK.
 
   e.g. for armel:
   ac_cv_c_bigendian=no
   ac_cv_c_char_unsigned=yes
   ac_cv_sizeof_long_long=8
   ac_cv_sizeof_unsigned_long_long=8
   ac_cv_sizeof_long=4
 
 Something that has crossed my mind in the recent past is that cputable
 has most of this data, but not all, and it could make sense to add
 more information so that the architecture ABI is crystal clear from
 the tables alone.

That sounds like a very useful goal. Thanks.

 dpkg-cross or crossbuild-support or whatever could
 then generate an autoconf cache file at build time from the dpkg tables
 for example. Because I'd assume there's other cached values that will
 end up there and those would certainly not be appropriate for dpkg.

OK.
 
  I don't think that dpkg is the right place for this data. We want to
  be able to update it easily without having to mess with important
  things like dpkg. The core cross functionality is now in dpkg and apt.
  We should discuss where remaining stuff like autoconf cache variables,
  triplet-prefixed commands like triplet-pkg-config and
  triplet-config scripts, cross-build-essential package lists and the
  like should live, but I don't currently see good arguments to put any
  more of it into dpkg.
 
 Except for my comments above, I tend to agree with this.

I'd be happy if this bug is closed with an upload of dpkg which extends
the cputable data to complete the ABI declarations with the
architecture-specific values from which dpkg-cross / replacement can
derive the cache values.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpgpoy3ZoYdp.pgp
Description: PGP signature


Bug#180128: state of integration of dpkg-cross into dpkg

2012-07-22 Thread Neil Williams
On Wed, 18 Jul 2012 19:11:38 +0200
Guillem Jover guil...@debian.org wrote:

  The bulk of the patch is now out of date but rather than spend time
  updating the patch, work is ongoing to merge the existing dpkg-cross
  package (which includes all the cache values and architecture support)
  into dpkg itself, sometime after Lenny.
 
  Far better, in my view, to remove the 'patch' tag from this report, keep
  it open as wishlist and I'll merge it with the eventual bug report that
  implements an updated patch (arranged with Guillem) that fully merges
  dpkg-cross into dpkg and then remove dpkg-cross (and apt-cross) from
  unstable.
 
 So, was checking this (and also the dpkg roadmap) and was wondering what
 else is still missing to be merged from dpkg-cross? If the only problem
 is the listed below, then it'd seem this bug has been resolved and it
 can be closed.

One unresolved issue is the cache values and architecture support:
where to put the cross- config settings currently implemented
in /etc/dpkg-cross/cross* which pass the architecture-specific values
to autotools projects. CC'ing debian-embedded for more input on
that. 

e.g. /usr/share/perl5/Dpkg/Shlibs.pm contains numerous references to
dpkg-cross-style paths which pick up these files as well as allow
dpkg-cross'd libraries to be usable whilst MultiArch is still being
rolled out. 

This parallel support needs to be retained until some critical mass
of libraries and -dev packages are completely MultiArch compliant. At
that point (and not before) dpkg-cross would change into a transitional
package which is merely a configuration shell with no command-line
interface (and no perl module) but which just provides the
existing /etc/dpkg-cross/cross* data. At that point, xapt would have to
be removed from Debian.

My proposal would be that this transition is marked as dpkg-cross 3.0.0
and xapt gains a Depends: dpkg-cross (= 3) immediately Wheezy is
released. dpkg-cross 3.0.0 would then have a Breaks: xapt and xapt
would be removed once dpkg-cross 3.0.0 arrived in unstable, possibly
not until after Wheezy +1, depending on the resolution of -dev
MultiArch package issues. To allow final removal of the transitional
dpkg-cross 3.0.0 and closure of this bug, dpkg-dev would adopt the
arch-specific metadata in dpkg-cross 3.0.0. Packages which currently
rely on package-specific metadata in /etc/dpkg-cross/cross* will have
to be patched to continue any cross-building support before dpkg-cross
can finally be removed.

The rest of this problem comes down to individual packages:

0: packages using custom config scripts instead of pkg-config

1: packages which have m4 macros which don't handle cross-building
cleanly, e.g. AC_TRY_RUN without fallbacks.

I think having dpkg-cross 3.0.0 is a useful interim stage which allows
the problems with -dev MultiArch packages to be resolved after Wheezy,
allows packages to migrate whilst retaining what cross-build support we
already have and provides a somewhat smooth path to eventual removal of
dpkg-cross.

Therefore, I think this bug will need to remain open, unless dpkg
maintainers do not wish to integrate the cross architecture-specific
metadata at all. (This data does not change until a new port is
accepted by dpkg or an old port removed, at which point it is just a
single file addition/removal containing data provided by the porters.)

e.g. for armel:
ac_cv_c_bigendian=no
ac_cv_c_char_unsigned=yes
ac_cv_sizeof_long_long=8
ac_cv_sizeof_unsigned_long_long=8
ac_cv_sizeof_long=4

  The main issue unresolved in this bug report is the mapping
  of /usr/lib/foo.so to /usr/arm-linux-gnu/lib/foo.so for packages that do
  not use pkg-config (e.g. I'm having upstream problems trying to
  configure a package that build-depends on Postgres and ODBC using
  pg_config and iodbc-config respectively).
 
 This should be solved by making those packages multi-arch ready.

Yes, this part of it is resolved as far as dpkg is concerned and the
work is now with package maintainers to implement MultiArch support but
there remains the issues around MultiArch and -dev packages which may
yet require some dpkg support - and thereby block this bug.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpk3mGsbK5UH.pgp
Description: PGP signature


Re: BinNMU changelog handling for Multi-Arch: same packages

2012-07-11 Thread Neil Williams
On Wed, 11 Jul 2012 17:01:24 -0700
Russ Allbery r...@debian.org wrote:

 Raphael Hertzog hert...@debian.org writes:
 
  The right *temporary* solution then. Remember that this was meant as an
  intermediary solution until the full changelog (with the bin-nmu entry)
  is just integrated in the package medata (control.tar).

Please don't put that into the files used to prepare content for dpkg
-s and apt-cache - that output is large enough as it is. A single step
like this could seriously compromise package handling on low resource
machines and push apt passed it's memory mapping limits again even on
more powerful machines.

 Oh, yes, absolutely agreed.  Sorry for not making that clear.  Putting the
 changelog in the package metadata makes a ton of sense.  In fact, if we
 could also do that with the copyright file, that would eliminate nearly
 all of our issues with linked doc directories and would simplify a whole
 currently-contentious area of Policy, replacing it with a much simpler
 debate about the right interface to view those files for installed
 packages.

... and that would be even worse if not isolated from the status and
cache information at the point where it is unpacked.

Wherever the data lives inside the .deb is not the problem. 

Where the data gets cached, copied, listed and parsed is likely to be a
major problem.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpRuL0mtyRmz.pgp
Description: PGP signature


Re: dpkg-query --show, invalid output when package is not found, and executed within a bash script.

2012-06-15 Thread Neil Williams
On Fri, 15 Jun 2012 16:16:22 +0800
eugene qin picocrea...@gmail.com wrote:

 The following shows an unexpected behaviour of the query output directly to
 the console screen, as oppose to what was intended in the bash script. The
 following 2 bash script examples, will probably explain the bug better.

$ dpkg-query --show theseAintTheDroidsYourLookingFor 21
No packages found matching theseAintTheDroidsYourLookingFor.
$ dpkg-query --show theseAintTheDroidsYourLookingFor 2/dev/null
$ dpkg-query --show theseAintTheDroidsYourLookingFor file 21
$ cat file
No packages found matching theseAintTheDroidsYourLookingFor.

The behaviour is correct - requested output goes to STDOUT, error
messages go to STDERR.

 In the second case, the variable is returned a blank

The variable is reading STDOUT.

, while the No package
 found output goes directly to console screen.

... because you aren't capturing STDERR

 PS: Im sending this email, as I am unable to find the bug tracker for the
 package directly =x

http://bugs.debian.org/dpkg

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpZbkfHtvvXo.pgp
Description: PGP signature


Re: Bug #340306: Specification draft for signed debs

2012-06-11 Thread Neil Williams
On Mon, 11 Jun 2012 11:26:19 +0200 (CEST)
ni...@thykier.net (Niels Thykier) wrote:

  * Role (required, simple).  Defines the signers relation to the
package.  It must be one of the following values:
 - builder: The signer built the package.  At most one
   signature file can use this role.
 - reviewer: The signer reviewed the package.  This role can
   be used in any number of signature files.
 - vendor: The signer is a vendor (re-)distributing the
   package.  The name of the vendor will be in the Vendor
   field.  This role can be used in any number of signature
   files (assuming the vendors import the deb as-is and
   simply resign it).
   * Vendor (special, simple).  Contains the name of the Vendor
 - Field is mandatory if Role has the value vendor, otherwise
   it should be absent.
 - Example value: Debian
   * Vendor-URI (optional, simple).  URI to the vendor's website or
 documentation.
 - Should be omitted if Vendor is not present.
 - Example value: http://debian.org

 Open question: should we allow implementation specific fields with the
 usual X-field notation (or something similar)?

That would be useful for Emdebian and other derivatives who need to
preserve the original builder information and then sign as itself as a
builder (effectively a rebuilder) because we modify the data.tar.gz and
control.tar.gz without changing the md5sums of the compiled files
within the data.tar.gz. (We simply remove files  compress
debian/copyright). Preserving the original builder metadata helps
demonstrate binary compatibility with the original Debian package as
the signature file for that builder would have to be removed - it's now
a broken sig.

If there is to be only one builder role, the additional fields can used
to store the details of the original builder role, effectively
transferring the builder role to Emdebian and storing the old value
as another field. Reviewer doesn't really fit.

X-DebianBuilder: the Signer details from the original Debian package
X-DebianDate: the date the Debian package was signed.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgplB6NS2U8xt.pgp
Description: PGP signature


Re: Temporary Files in Packages

2012-02-20 Thread Neil Williams
On Mon, 20 Feb 2012 10:38:05 -0500
Brandon Phelps bphe...@gls.com wrote:

 I'm not sure if this is the best list for this question so please
 correct me if not.

Probably not the right list, IMHO.
 
 I am putting together some packages for our internal servers and have an
 SQL file that I need to run on the database during the package install.
  I realize I could put the .sql file in /tmp and simply remove it after
 I've successfully imported it into the mysql database like this:
 
 service mysqld stop
 mysqld --bootstrap  /tmp/dbscript.sql
 service mysqld start
 rm /tmp/dbscript.sql
 
 But I am wondering if there is a better place for this? 

Yes. From previous experience of exactly these startup situations,
there will *always* be situations where the local admin is going to need
to redo this SQL injection for whatever reason and it is a lot easier,
therefore, if the SQL file is kept in the package, maintained by the
package and used from that location by the package. Myself, I'd put
the .sql file in /var/lib/ or /usr/share/ and let your postinst read it
from there.

What is generating the content of the SQL file? If the rest of the
postinst generates the SQL itself, then maybe /tmp might be OK but you
should allow admins to rescue systems which may get into a state where
the first part of the generation process takes an amount of time /
hit a bug elsewhere and just having the .sql somewhere outside /tmp
and not hidden away in an unusual location would make things easier.

Perhaps generate the SQL in the package build and then include it
directly in the postinst? (No need to remove it either, for above
reasons.)

Make life easier for the local admins to see what was done to cover
situations where it just doesn't work as expected. Don't hide (or
erase) useful stuff...someday, you'll regret that 'rm' when someone
files a bug...

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpLtrniMjq5I.pgp
Description: PGP signature


Re: Please test gzip -9n - related to dpkg with multiarch support

2012-02-07 Thread Neil Williams
On Tue, 07 Feb 2012 19:11:16 +0100
Michael Biebl bi...@debian.org wrote:

 On 07.02.2012 18:07, Joey Hess wrote:
  Neil Williams wrote:
  I'd like to ask for some help with a bug which is tripping up my tests
  with the multiarch-aware dpkg from experimental - #647522 -
  non-deterministic behaviour of gzip -9n.
  
  pristine-tar hat tricks[1] aside, none of gzip, bzip2, xz are required
  to always produce the same compressed file for a given input file, and I
  can tell you from experience that there is a wide amount of variation. If
  multiarch requires this, then its design is at worst broken, and at
  best, there will be a lot of coordination pain every time there is a
  new/different version of any of these that happens to compress slightly
  differently.

Exactly. I'm not convinced that this is fixable at the gzip level, nor
is it likely to be fixable by the trauma of changing from gzip to
something else. That would be pointless.

What matters, to me, is that package installations do not fail
somewhere down the dependency chain in ways which are difficult to fix.
Compression is used to save space, not to provide unique identification
of file contents. As it is now clear that the compression is getting in
the way of dealing with files which are (in terms of their actual
*usable* content) identical, then the compression needs to be taken out
of the comparison operation. Where the checksum matches that's all well
and good (problems with md5sum collisions aside), where it does not
match then dpkg cannot deem that the files conflict without creating a
checksum based on the decompressed content of the two files. A checksum
failure of a compressed file is clearly unreliable and will generate
dozens of unreproducible bugs.

MultiArch has many benefits but saving space is not why MultiArch
exists and systems which will use MultiArch in anger will not be likely
to be short of either RAM or swap space. Yes, the machines which are
*targeted* by the builds which occur as a result of having MultiArch
available for Emdebian will definitely be aimed at low resource
devices but those devices do NOT need to actually use MultiArch
themselves. In the parlance of --build, --host and autotools, MultiArch
is a build tool, not a host mechanism. If you've got the resources to
cross-build something, you have the resources to checksum the
decompressed content of some files.

As far as having MultiArch to install non-free i386 on amd64, it is
less of a problem simply because the number of packages installed as
MultiArch packages is likely to be a lot less. Even so, although the
likelihood drops, the effect of one of these collisions getting through
is the same.

 This seems to be a rather common problem as evindenced by e.g.
 
 https://bugs.launchpad.net/ubuntu/+source/clutter-1.0/+bug/901522
 https://bugs.launchpad.net/ubuntu/+source/libtasn1-3/+bug/889303
 https://bugs.launchpad.net/ubuntu/oneiric/+source/pam/+bug/871083

See the number of .gz files in this list:
http://people.debian.org/~jwilk/multi-arch/same-md5sums.txt

 In Ubuntu they started to work-around that by excluding random files
 from being compressed. So far I refused to add those hacks to the Debian
 package as this needs to be addressed properly.

Maybe the way to solve this properly is to remove compression from the
uniqueness check - compare the contents of the file in memory after
decompression. Yes, it will take longer but it is only needed when the
md5sum (which already exists) doesn't match.

The core problem is that the times when the md5sum of the compressed
file won't match are unpredictable. No workaround is going to be
reliable because there is no apparent logic to the files which become
affected and any file which was affected at libfoo0_1.2.3 could well be
completely blameless in libfoo0_1.2.3+b1.

(binNMU's aren't the answer either because that could just as easily
transfer the bug from libfoo0 to libfoo-dev and so on.)

There appears to be plenty of evidence that checksums of compressed
files are only useful until the checksums fail to match, at which point
I think dpkg will just have to fall back to decompressing the contents
in RAM / swap and doing a fresh checksum on the contents of each
contentious compressed file. If the checksums of the contents match,
the compressed file on the filesystem wins.

Anything else and Debian loses all the reproducibility which is so
important to developers and users. When I need to make a cross-building
chroot from unstable (or write a tool for others to create such
chroots), it can't randomly fail today, work tomorrow and fail
with some other package the day after.

If others agree, I think that bug #647522, currently open against gzip,
could be reassigned to dpkg and retitled to not rely on checksums for
compressed files when determining MultiArch file collisions.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgptj0LtSC5J0.pgp
Description: PGP signature


Changes in unpacking in dpkg 1.16

2011-10-06 Thread Neil Williams
What has changed in the actions of dpkg --unpack recently which has
altered the detection of which packages remain to be configured?

A chroot created with multistrap now fails to configure because dpkg
--configure -a not only does not identify any packages as needing
configuration but also changes the status from install ok unpacked to
install ok installed for every package without doing any work.

(dpkg --unpack cannot be used directly because multistrap is not
operating natively and cannot execute anything within the chroot.)

I can't see any differences currently in the files
in /chroot/var/lib/dpkg/ between using dpkg --unpack (native
architecture) and the multistrap method (native or foreign).

Can we look again at a way of unpacking a .deb which is
architecture-neutral but still allows the package to be configured
once the fs is accessed under the appropriate arch?

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpPFrl67HkXs.pgp
Description: PGP signature


Re: dpkg 1.16.1 configure

2011-09-28 Thread Neil Williams
On Wed, 28 Sep 2011 08:40:06 +0200
Gabor Z. Papp g...@papp.hu wrote:

 * Guillem Jover wrote:
 
 |  without installed dpkg the new 1.16.1 tarball can't be
 |  configured/compiled due the above error.
 
 | W/o more context I can only guess, but did configure fail to find the
 | perl binary for any reason? Maybe you don't have it installed or you
 | do but in a non-standard path?
 
 I have installed, but in a non-standard path, but even it could be
 found, I don't have dpkg installed, so dpkg-architecture.pl will fail.

Gabor: dpkg does try to avoid depending on itself, so there is no need
for dpkg-architecture to exist in $PATH. The configure script is
actually looking for dpkg-architecture.pl in the scripts/ directory of
the unpacked source. So it should be entirely possible to build dpkg
without having dpkg installed (it would make it impossible to bootstrap
new architectures otherwise).

See lines 10671, 10693  10715 of the configure script - it also sets
the PERL5LIB to look at the unpacked sources so that the Dpkg modules
can be found without having to have them installed.

What dpkg does need is a working perl installation to be able to run
the perl scripts directly from the unpacked sources.

So as long as perl can be found, whether you have dpkg installed or
not, dpkg-architecture.pl will work from the scripts/ directory. (Once
the package is built, the actual script becomes dpkg-architecture -
losing the .pl suffix, so this is one way to work out which script is
being called.)

Therefore, as Guillem has already mentioned, this is more likely to be
down to your perl installation - if you set the correct path to perl
does dpkg then build?

What path do you need to specify to run any perl script which is not
already in your $PATH?

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpmZbJ323RyV.pgp
Description: PGP signature


Re: Bug#616111: Bootstrapping a foreign architecture with multiarch

2011-04-02 Thread Neil Williams
On Sat, 2 Apr 2011 05:47:47 +0200
Guillem Jover guil...@debian.org wrote:

Adding linaro people and debian-embedded to CC:

 Hi!
 
 On Fri, 2011-04-01 at 22:31:07 +0100, Neil Williams wrote:
  dpkg cannot be executed inside the chroot because it has not
  necessarily been unpacked at this stage, it certainly has not been
  configured. (dpkg is running from outside the chroot).
 
 (An Essential package does not need to be configured to be functional.)

(It's quite possibly the wrong architecture inside the chroot, so
this doesn't apply.) 

  Yet dpkg-query won't work with --admindir to operate from outside:

I'm checking on this - it could be an artefact of how the chroot was
initially created.

  Anyways:
  
   Multi-Arch: same packages will use
   /var/lib/dpkg/info/package:arch.something
   
For Multistrap, every file in /var/lib/dpkg/ has to be created by
multistrap, based on the data obtained from dpkg -e (basically the
DEBIAN/ content). This data needs only to be sufficient that dpkg can
correctly configure the packages once dpkg itself is able to be
executed inside the new filesystem.
   
   It's sufficient, you just need to know the value of the Multi-Arch field.
  
  True. I've got a change now which uses dpkg -f to check the Multi-Arch
  field of the actual downloaded .deb (independent of arch) and use that
  to detect Multi-Arch: same, then lookup Architecture in the same way,
  add that to the filename of the created maintainer script etc.
  for /path/to/chroot/var/lib/dpkg/info/*
 
 If you are not going to install multiple instances of “Multi-Arch: same”
 packages, then just keep writting the files as you are currently
 doing, the next dpkg native run on that chroot image will
 automatically upgrade the db layout. Which seems to be the less
 onerous way to handle this. Otherwise you'll have to duplicate the
 db layout handling, including format file, etc, and at that point I'd
 say you are on your own.

Multistrap will need to be able to create chroots containing multiple
instances of Multi-Arch: same packages because it needs to be able to
build cross-building chroots with libc6-dev of the build and host
architectures, as well as other common dependencies like libglib2.0-0
(needed as build arch by pkg-config and as host arch by everything
else).

Multistrap, like debootstrap and other similar scripts, is commonly
used in two roles - to create a chroot of the build architecture for
building stuff in a contained environment and creating a chroot of a
foreign architecture to act as a root filesystem.

As with debootstrap, I see no reason to implement two different methods
to creating these chroots inside a single tool, so when creating a build
arch chroot multistrap uses the same processing as when creating a
foreign arch chroot. That processing has to avoid a design flaw in dpkg
where the normal --unpack method would attempt to run the preinst
scripts.

 On Fri, 2011-04-01 at 22:43:35 +0100, Neil Williams wrote:
  Further to this, --control-path doesn't include 'list' but 
  $pkg:$arch.list files are created.
 
 This was done on purpose, .list and .conffiles are internal files, the
 correct interfaces to access the information is dpkg-query.

Internal files maybe, but multistrap still needs to create them to
handle packages of a foreign architecture.

Even once Multi-Arch is fully deployed, this will continue because the
assumption with Multi-Arch is that the foreign architecture packages
are being installed alongside the build architecture. When preparing a
root filesystem for a foreign architecture (e.g. an embedded device),
multistrap cannot put the amd64 binaries into the chroot and then add
the armel, it needs to be able to unpack armel binaries into an armel
chroot without running the preinst scripts or using the armel dpkg
binary inside the chroot. The preinst scripts can't run on the build
arch (amd64) because that would expose the chroot to the external
configuration. i.e. it needs to be possible to create an armel chroot
of Ubuntu natty from an i386 machine running Debian Wheezy and
similarly from Ubuntu natty i386 to create a Debian Wheezy armel
chroot. Currently, dpkg --unpack cannot cope with this and the existing
Multi-Arch changes in dpkg do not address this problem.

This has been covered before in this bug and elsewhere without
resolution, but please reconsider how dpkg - even in a Multi-Arch world
- needs to support unpacking foreign architecture binaries into a
foreign architecture chroot and that this mandates that dpkg *must not*
attempt to execute the preinst scripts inside the foreign chroot. It
can *only* do so if the packages are to be unpacked into the main,
external, system.

When using --admindir and --instdir options to --unpack, dpkg *must*
allow for the specified directories to actually be a foreign
architecture chroot and act accordingly. Maybe this requires the
addition of an --arch option to --unpack but it *does* need to be
addressed

Re: Bootstrapping a foreign architecture with multiarch

2011-04-01 Thread Neil Williams
On Thu, 3 Mar 2011 08:31:51 +0100
Raphael Hertzog hert...@debian.org wrote:

   3/ Any program that assumes the current layout of control files
  (/var/lib/dpkg/info/package.something) will be broken (at
   least for some packages) since the layout will change to support
   Multi-Arch: same packages that can be co-installed.
   
  You should use dpkg-query --control-path package something to
  retrieve the path of the file. This has been introduced in dpkg
   1.15.4 and is thus in squeeze already.

dpkg cannot be executed inside the chroot because it has not
necessarily been unpacked at this stage, it certainly has not been
configured. (dpkg is running from outside the chroot).

Yet dpkg-query won't work with --admindir to operate from outside:

$ dpkg-query --admindir /home/neil/code/chroots/natty-amd64/var/lib/dpkg 
--control-path libc6 postinst
$

Inside:
/home/test# dpkg-query --control-path libc6 postinst
/var/lib/dpkg/info/libc6:amd64.postinst

/home/test# dpkg-query --admindir /var/lib/dpkg --control-path libc6 control
/var/lib/dpkg/info/libc6:amd64.control

$ ls -l /home/neil/code/chroots/natty-amd64/var/lib/dpkg/status
-rw-r--r-- 1 root root 261652 Apr  1 21:46 
/home/neil/code/chroots/natty-amd64/var/lib/dpkg/status

dpkg outside the chroot is 1.15.8.10

Do you want a bug report for that one?

Anyways:

 Multi-Arch: same packages will use
 /var/lib/dpkg/info/package:arch.something
 
  For Multistrap, every file in /var/lib/dpkg/ has to be created by
  multistrap, based on the data obtained from dpkg -e (basically the
  DEBIAN/ content). This data needs only to be sufficient that dpkg can
  correctly configure the packages once dpkg itself is able to be
  executed inside the new filesystem.
 
 It's sufficient, you just need to know the value of the Multi-Arch field.

True. I've got a change now which uses dpkg -f to check the Multi-Arch
field of the actual downloaded .deb (independent of arch) and use that
to detect Multi-Arch: same, then lookup Architecture in the same way,
add that to the filename of the created maintainer script etc.
for /path/to/chroot/var/lib/dpkg/info/*

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgp27291eH5tY.pgp
Description: PGP signature


Re: Bootstrapping a foreign architecture with multiarch

2011-04-01 Thread Neil Williams
On Fri, 1 Apr 2011 22:31:07 +0100
Neil Williams codeh...@debian.org wrote:

 Inside:
 /home/test# dpkg-query --control-path libc6 postinst
 /var/lib/dpkg/info/libc6:amd64.postinst
 
 /home/test# dpkg-query --admindir /var/lib/dpkg --control-path libc6 control
 /var/lib/dpkg/info/libc6:amd64.control
 
 $ ls -l /home/neil/code/chroots/natty-amd64/var/lib/dpkg/status
 -rw-r--r-- 1 root root 261652 Apr  1 21:46 
 /home/neil/code/chroots/natty-amd64/var/lib/dpkg/status
 
 dpkg outside the chroot is 1.15.8.10
 
 Do you want a bug report for that one?

Further to this, --control-path doesn't include 'list' but 
$pkg:$arch.list files are created.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpNGuXETpW7D.pgp
Description: PGP signature


Re: [PATCH] Dpkg/Shlibs.pm: multiarch search paths

2011-03-21 Thread Neil Williams
On Mon, 21 Mar 2011 09:55:26 +0100
Raphael Hertzog hert...@debian.org wrote:

(Trimming the CC: feel free to drop patches@l.o if linaro-dev@l.l.o is
more useful. Please keep debian-embedded in CC to reach me.)

 Not knowing much about cross-compilation I had started with a sligthly
 different approach than you, mimicking exactly what was done for
 cross-compilation support.

09:48  codehelp buxy: vorlon: my original query related to not so
much building a cross-compiler but building gcc-* to install and run on
cross, i.e.  reverse-cross where build=amd64,host=armel,target=armel
09:48  codehelp cross-compiler build=amd64,host=amd64,target=armel
09:48  codehelp doesn't give you a libgcc1 which can be used to
satisfy dependencies of packages cross-built using the cross-compiler

Cross-building an entire distro, like Emdebian Crush, involved a long
winded process:
0: Build gcc-4.* as an arm cross-compiler (not armel in those days but
that's not important to the method)
1: Build build-dependencies of gcc using the cross-compiler
2: Build gcc-4.* as a normal package using the cross-compiler 

The people who are most likely to be doing this now are Linaro.
Emdebian Crush stalled after Lenny (and used ARM not armel), so the
version of gcc-4.2 in Lenny should still build with the typical
dpkg-buildpackage -aarm. Later versions of gcc probably have other
fixes which would cause the reverse cross build to fail, not due to the
failure of the original patches but due to changes in gcc itself.

To create a fully bootstrap-able system, gcc does need to support the
reverse cross and this will need testing in Multi-arch world.

Typically, gcc-4.* *should* be expected to build correctly just using:
$ dpkg-buildpackage -a$arch

No special target specification (except internally in debian/rules
etc.), no expectation of building a cross-compiler, just building it as
if it is any other package which needs to be cross-built.

Of course, if libgcc1 can be made available in any other way than
having to pretend that we actually want a native compiler on these
systems (99% of the time we really don't), then everyone wins.

 Neil (or anyone else knowledgable on the topic), can you review the
 patches and tell us what's really needed and most logical according to
 you?
 
 Steve's patch:
 - adds the multi-arch path at the start of the search paths
 - adds them only for stantard cross-compilation (host != build) but not
   for the special cases used to detect a cross-compiler build

Intuitively this does sound the correct way to do it, especially as
what I wanted from the original patch was a standard cross-build, not
the special case of building a cross-compiler, but:

 My patch:
 - adds the multi-arch path before the cross-arch patch but after the
   standard search path

 - add them in all cases where the cross-compilation paths are used
 
 Putting the multi-arch paths after the default path should not matter as
 dpkg-shlibdeps skips libraries of non-matching architecture.

This is more in line with how it actually works out when trying to
cross-build gcc itself.

I'm not sure of the benefit of putting the multiarch lib location in
front of the default lib location. I'm not sure if having some i386
libraries in a multi-arch path and the main system amd64 libraries in a
non-multi-arch path would actually matter (after all, the same libraries
*should* get updated together). That's a traditional Multi-Arch
question, so I'd defer to Steve on that one.

For cross-building, it's simply sufficient that the new
multi-arch-cross paths precede the old dpkg-cross paths and both
patches achieve this.

 For the case of building a cross-compiler, Steve's experience tends to
 prove that adding the multi-arch path is not needed... but I don't see why
 it should be treated differently than the cross-arch paths.
 
 Can you enlighten us?

For building a cross-compiler, Steve is correct - it doesn't matter.

For using that cross-compiler to cross-compile gcc itself, it will
matter. Multi-Arch paths will be necessary to build a version of
libgcc1 which can be installed on the target.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpnyLu6Y9VK5.pgp
Description: PGP signature


Re: [PATCH] Dpkg/Shlibs.pm: multiarch search paths

2011-03-21 Thread Neil Williams
On Mon, 21 Mar 2011 14:03:37 +0100
Matthias Klose d...@ubuntu.com wrote:

 On 21.03.2011 11:25, Neil Williams wrote:
  The people who are most likely to be doing this now are Linaro.
  Emdebian Crush stalled after Lenny (and used ARM not armel), so the
  version of gcc-4.2 in Lenny should still build with the typical
  dpkg-buildpackage -aarm. Later versions of gcc probably have other
  fixes which would cause the reverse cross build to fail, not due to the
  failure of the original patches but due to changes in gcc itself.
 
 the gcc-4.4 packaging is able to build a reverse cross.  I didn't check 
 gcc-4.5
 and gcc-4.6.
 
   Matthias

Oops, sorry Matthias - that was meant to be later versions of gcc
*might* have other (internal) changes which could cause... I didn't
mean to infer that I'd tried and failed a reverse cross with newer
versions, I haven't had time to do that test. Thanks for the info on
gcc-4.4.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpN9YV74jLFL.pgp
Description: PGP signature


Re: Bootstrapping a foreign architecture with multiarch

2011-03-02 Thread Neil Williams
 that will be affected by the above problems?
 Please file a bug and usertag it with this command:
 $ bts user debian-dpkg@lists.debian.org . usertag $bug + multiarch

Done. #616111

Bug CC'd.

-- 


Neil Williams
=
http://www.linux.codehelp.co.uk/



pgpEOZfL6En7b.pgp
Description: PGP signature


Bug#591522: Original patch for dpkg-dev avoiding DEFAULT_LIBRARY_PATH

2010-08-03 Thread Neil Williams
http://lists.debian.org/debian-dpkg/2007/08/msg00027.html

http://lists.debian.org/debian-dpkg/2007/09/msg00032.html

Bug: #439979

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgprvE8XYLx40.pgp
Description: PGP signature


Re: Adding chroot support to the dpkg functional testsuite (was Bug#580984...)

2010-05-13 Thread Neil Williams
On Thu, 13 May 2010 07:21:26 +0200
Guillem Jover guil...@debian.org wrote:

 [ Moving this to the debian-dpkg where it is relevant, CCing
   debian-embedded for the cross-installation bit. ]
 On Mon, 2010-05-10 at 18:55:13 +0200, Raphael Hertzog wrote:
 [ Bug in “dpkg --root” support. ]

dpkg --root isn't used in the current Emdebian or cross-installation
methods - TBH it doesn't appear useful from the dpkg manpage:

--root=dir
   Changing root changes instdir to dir and admindir to
dir/var/lib/dpkg.

(--root appears to be a shortcut to combine --admindir and --instdir
into one option)

The only options where this would be used, AFAICT, is --install but
that means running the maintainer scripts which is impossible when
building a cross-chroot.

Unless the new Multiarch code uses this method, it doesn't appear to be
something debian-embedded needs to rely upon. 

Much more useful would be a way of 'installing' *without* allowing any
maintainer scripts (or any command within the chroot) to be executed.
dpkg in this mode would need to do everything it usually does to
maintain the status files (in another directory) and put the maintainer
scripts in a nominated directory, without executing any of them. If
--root did that, it would be useful. Currently, Emdebian has to
replicate this behaviour externally (e.g. in the multistrap package
which we use to replace debootstrap and cdebootstrap) - it works very
well but it would still be better if dpkg understood that maintainer
scripts *cannot* hope to run inside a foreign chroot, ever. No amount
of prefixes or hackery or magic will make it work - dpkg must simply
accept that there are some situations where the maintainer scripts
must not be allowed to execute, no exceptions, no complaints.

I think this feature deserves a non-regression test given how
seldom it's used in daily usages by the developers.
   
   That would imply adding the infrastructure to create a chroot,
   which might be nice to have anyway to test dpkg w/o affecting the
   installed system, but still, I'm not prepared to do this right
   now.
  
 What I had in mind was for example to add a new --test option which
 would make dpkg pass a new environment variable (say DPKG_ROOT_DIR) to
 the maintainer scripts denoting the root directory and just avoid
 doing the chroot() call. Care would need to be taken to use the
 correct built backends, though. This option (if properly renamed)
 might also be useful for cross-installations, perhaps. Although
 package maintainer scripts would need to be accomodated (if possible
 at all) to make called programs operate on the different root path,
 which might uglify them quite a bit.

No. Cross-installation means that the package maintainer scripts are
to be ignored under all circumstances and that there must never be any
opportunity for any of the foreign package maintainer scripts to be
executed, let alone discover where they are.

Package maintainer scripts *cannot* be accommodated by a
cross-installation but dpkg should still be able to create and maintain
the relevant status files and put the maintainer scripts inside the
chroot without calling them. dpkg should treat the package content as
if was all just data and had no executable content whatsoever.

It is not sane to run the scripts outside the chroot (amd64) and expect
the configuration to be appropriate for armel or mips.

This is the reason why Emdebian cannot use dpkg --unpack and has to
have a separate method involving dpkg -x and dpkg -e. 

'dpkg --unpack and dpkg --root foo --install' insist on trying to run
the prerm/preinst which is just wrong.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgpU5hMBdq2hH.pgp
Description: PGP signature


Bug#560391: dpkg-dev: dpkg-source --print-format fails to recognise 3.0 (quilt)

2009-12-11 Thread Neil Williams
On Fri, 11 Dec 2009 08:21:05 +0100
Raphael Hertzog hert...@debian.org wrote:

 On Thu, 10 Dec 2009, Neil Williams wrote:
  $ cd gpe-calendar-0.92/
  gpe-calendar-0.92$ dpkg-source --print-format .
  1.0
 
 Try building with dpkg-source -b . and you'll see that it fails
 to select 3.0 (quilt).
 
 You need to call it in the same conditions than dpkg-source -b, that
 means from somewhere where the .orig tarball is available in the
 current directory.
 
 I might need to make this more explicit in the documentation.

But then it also insists on finding ./debian/changelog in that
same directory.

That makes some very large assumptions about directory layout for
something as simple as querying/verifying a source format string.

e.g. this was to be used in svn-buildpackage in which case we have:

./foo/tarballs/foo_1.2.3.orig.tar.bz2
./foo/trunk/debian/changelog
./foo/trunk/debian/source/format

(trunk cannot be assumed here, it could be absent in a branch.)

Why does --print-format need to locate the .orig.tar.gz|bz2 anyway?

BTW the bash completion for --print-format is also broken, it does not
allow a directory to be specified after the option when a directory is
mandatory.)

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgpVuiB7BOX5o.pgp
Description: PGP signature


Bug#560391: dpkg-dev: dpkg-source --print-format fails to recognise 3.0 (quilt)

2009-12-11 Thread Neil Williams
On Fri, 11 Dec 2009 11:10:48 +0100
Raphael Hertzog hert...@debian.org wrote:

 On Fri, 11 Dec 2009, Neil Williams wrote:
  That makes some very large assumptions about directory layout for
  something as simple as querying/verifying a source format string.
 
 Well, it's the same code than -b except we stop right after
 having selected the target format.

So the docs should describe it as:

When using --print-format, dpkg-source needs to be run in the same
directory as any .orig.tar.gz|bz2 and also given the top level
source directory (where it can find ./debian/changelog). e.g. after
unpacking with 'dpkg-source -x foo_1.2.3-1.dsc', the command would be
'dpkg-source --print-format foo-1.2.3/', without changing the
current working directory.

This gets over the point that dpkg-source --print-format actually
requires the user to think about two directories - the current one
which dpkg-source uses to find the orig tarball and the one specified
which dpkg-source uses to find debian/changelog. In most programs,
specifying a directory leads the user to think that all operations
would use that directory and that the current working directory
shouldn't matter. e.g. $ ls /path/ doesn't care about `pwd` unless pwd
doesn't exist, equally dpkg -x /path/foo /tmp/ doesn't care about pwd
at all.

IMHO it would be better if --print-format understood the existence of
the foo-1.2.3/ directory that the -x option to dpkg-source may well have
created and handled it transparently. That way, --print-format could be
given a directory in which to find the source (as unpacked by apt-get
source) and work out the rest itself. 

  Why does --print-format need to locate the .orig.tar.gz|bz2 anyway?
 
 Because currently, if you don't have a .orig.tar file it will
 fallback to creating a native package in 1.0 format.

IMHO dpkg-source --print-format should explain this fallback by putting
a message on STDERR that the orig tarball has not been found, maybe
dpkg-source was run from the wrong directory, especially if
debian/source/format exists and contains something matching /3\.0.*/
(or anything other than 1.0).

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgpBKYIWJNMNp.pgp
Description: PGP signature


Bug#560391: dpkg-dev: dpkg-source --print-format fails to recognise 3.0 (quilt)

2009-12-10 Thread Neil Williams
Package: dpkg-dev
Version: 1.15.5.4
Severity: normal

I'm testing format 3.0 (quilt) with a branch of gpe-calendar in
collab-maint and also trying to get svn-buildpackage to understand
source format 3.0 but dpkg-source --print-format is failing:

$ dpkg-source -x gpe-calendar_0.92-4.dsc 
dpkg-source: info: extracting gpe-calendar in gpe-calendar-0.92
dpkg-source: info: unpacking gpe-calendar_0.92.orig.tar.gz
dpkg-source: info: unpacking gpe-calendar_0.92-4.debian.tar.gz
dpkg-source: info: applying dependency-renaming
dpkg-source: info: applying desktop-validity
dpkg-source: info: applying add-lgthread-linkage
dpkg-source: info: applying migrate-to-soup_2.4
$ cd gpe-calendar-0.92/
gpe-calendar-0.92$ dpkg-source --print-format .
1.0
gpe-calendar-0.92$ cat debian/source/format 
3.0 (quilt)

$ head gpe-calendar_0.92-4.dsc
Hash: SHA1

Format: 3.0 (quilt)
Source: gpe-calendar
Binary: gpe-calendar
Architecture: any
Version: 0.92-4

The branch can be found at:
http://svn.debian.org/viewsvn/pkg-gpe/trunk/gpe-calendar/branches/trunk/

The relevant tarball is already in Debian or can be retrieved using
'uscan --force-download'

Although only debian/ is in svn, I'm also testing in a complete
(unpacked) source directory, as shown above.

I can make the updated source package available if requested.

-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.31-1-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8) (ignored: LC_ALL 
set to en_GB.UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages dpkg-dev depends on:
ii  base-files5.0.0  Debian base system miscellaneous f
ii  binutils  2.20-4 The GNU assembler, linker and bina
ii  bzip2 1.0.5-3high-quality block-sorting file co
ii  dpkg  1.15.5.4   Debian package management system
ii  libtimedate-perl  1.1900-1   Time and date functions for Perl
ii  lzma  4.43-14Compression method of 7z format in
ii  make  3.81-7 An utility for Directing compilati
ii  patch 2.6-2  Apply a diff file to an original
ii  perl [perl5]  5.10.1-8   Larry Wall's Practical Extraction 
ii  perl-modules  5.10.1-8   Core Perl modules
ii  xz-utils  4.999.9beta+20091116-1 XZ-format compression utilities

Versions of packages dpkg-dev recommends:
ii  build-essential   11.4   Informational list of build-essent
ii  fakeroot  1.14.4-1   Gives a fake root environment
ii  gcc [c-compiler]  4:4.4.2-2  The GNU C compiler
ii  gcc-4.3 [c-compiler]  4.3.4-6The GNU C compiler
ii  gcc-4.4 [c-compiler]  4.4.2-3The GNU C compiler
ii  gnupg 1.4.10-2   GNU privacy guard - a free PGP rep
ii  gpgv  1.4.10-2   GNU privacy guard - signature veri

Versions of packages dpkg-dev suggests:
ii  debian-keyring [debian-mainta 2009.11.04 GnuPG (and obsolete PGP) keys of D

-- no debconf information




-- 
To UNSUBSCRIBE, email to debian-dpkg-bugs-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#551118: dpkg-dev: PKG_CONFIG_LIBDIR override makes it difficult to compile build-architecture binaries when necessary

2009-10-16 Thread Neil Williams
 is that $host-pkg-config will indeed be
 automatically used for anyone who's using the PKG_CHECK_MODULES
 Autoconf macro (which I suspect is the majority, but certainly won't
 be everyone), but not for anyone who's just calling pkg-config
 directly. 

A wrapper that knows about dpkg-architecture should be able to handle
that.

 Should we just say that if they're doing that then they
 need to compare build and host architectures directly, the way
 they're probably already doing for gcc and friends? Would this be a
 serious regression for Emdebian that would need to be tackled in
 advance?

Emdebian Crush (the cross-built distribution) is already in a serious
regression but this provides an opportunity for major changes whilst
everything is up for grabs.

Fixing this will not cause any regression in Emdebian that is not
already present - the implementation of multiarch is the ideal time
to do TheRightThing.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgpzll42Auv1z.pgp
Description: PGP signature


Bug#550252: dpkg-divert: should ignore missing files

2009-10-08 Thread Neil Williams
Package: dpkg
Version: 1.15.4
Severity: normal

This occurs in Emdebian Grip but could also occur whenever a file that
is diverted has been deleted. When the diversion comes to be updated,
dpkg-divert tries to 'mv' the old diverted file without checking that it
exists, 'mv' then fails and dpkg-divert errors out causing the postinst
to fail.

The particular problem was with dash:

Setting up dash (0.5.5.1-2em1) ...
mv: cannot stat `/usr/share/man/man1/sh.distrib.1.gz': No such file or
directory
dpkg: error processing dash (--configure):
 subprocess installed post-installation script returned error exit
status 1

Errors were encountered while processing:
 dash
E: Sub-process /usr/bin/dpkg returned an error code (1)

# touch /usr/share/man/man1/sh.distrib.1.gz
Setting up dash (0.5.5.1-2em1) ...
Removing `diversion of /usr/share/man/man1/sh.1.gz to
/usr/share/man/man1/sh.distrib.1.gz by dash'

dpkg-divert could simply ignore the missing file.

-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (1, 'experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.30-1-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages dpkg depends on:
ii  coreutils 7.5-6  GNU core utilities
ii  libc6 2.9-27 GNU C Library: Shared libraries
ii  lzma  4.43-14Compression method of 7z format in

dpkg recommends no packages.

Versions of packages dpkg suggests:
ii  apt   0.7.24 Advanced front-end for dpkg

-- no debconf information




-- 
To UNSUBSCRIBE, email to debian-dpkg-bugs-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Re: Howto automate etch-lenny dist-upgrade via preseed?

2009-07-14 Thread Neil Williams
On Mon, 13 Jul 2009 18:03:56 -0700
Chris Hiestand chiest...@salk.edu wrote:

 I have tried stfw, reading debian documentation, man pages, the debian- 
 users mailing list, irc.debian.org #debian - all to no avail. Help  
 would be greatly appreciated - even just an answer explaining that  
 what I want was ill conceived or impossible.

Wrong list - this isn't a dpkg issue, it is a pre-seeding issue which
would mean debian-b...@lists.debian.org; dpkg has no understanding of
pre-seeding.
 
 My goal is to automate the etch-lenny upgrade such that no manual  
 interaction is needed for generic (non-special) systems. I have gotten  
 this 95% of the way using debconf-get-selections and debconf-set- 
 selections. But there are 2 categories of questions that I have been  
 unable to pressed.

Pre-seeding relates to first-time installations and the debconf
settings need to be understood by the installer. In your case, you
already have an installed system and pre-seeding is unlikely to be
useful. If it does work, it is likely to be unreliable and could break
on future releases because the point of pre-seeding is to support
first-time installations, not upgrades.

The only real option for upgrades is to set debconf to be
non-interactive and require that every package sets it's own default.
You can learn about that from the debconf documentation. Ask on
debian-mentors for more questions on debconf.

 Category 1. Which services to restart after a library (eg libc6) is  
 upgraded. There are debconf questions for this, they are just ignored  
 when I try to set them.

Because pre-seeding is bound to the installer, not dpkg.
 
 Is there anyway to preseed install_new or keep_current in relation  
 to these files? Maybe I need to use the python or perl interfaces  
 instead of debconf-set-selections?

Pre-seeding these values is likely to break things, probably better to
set debconf to just do the default, always, just as it does in the
preparation of build chroots etc.

See the pbuilder source code or information at Emdebian about debconf
settings:

http://www.emdebian.org/release/grip/a1106.html

http://www.emdebian.org/svn/browser/current/host/trunk/emdebian-rootfs/trunk/emdebian.crossd#L77

DEBIAN_FRONTEND=noninteractive
DEBCONF_NONINTERACTIVE_SEEN=true
export DEBIAN_FRONTEND DEBCONF_NONINTERACTIVE_SEEN

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgpxHcVP07PIV.pgp
Description: PGP signature


Bug#532222: dpkg-dev: dpkg-vendor not listening to DEB_VENDOR correctly

2009-06-07 Thread Neil Williams
Package: dpkg-dev
Version: 1.15.2
Severity: normal

With this vendor file:

$ cat /etc/dpkg/origins/emdebian-crush 
Vendor: Emdebian Crush
Vendor-URL: http://www.emdebian.org/crush/
Bugs: debbugs://bugs.debian.org
Bugs-Package: buildd.emdebian.org
Cross-Compiling: yes
Grip-Build-Option: usecrush
Blacklist: coreutils perl python ldap
 adduser
Parent: Debian

I get confusing results from dpkg-vendor:

$ dpkg-vendor --vendor emdebian-crush --query Cross-Compiling
yes

(correct)

$ dpkg-vendor --query Cross-Compiling; echo $?
1

(correct)

$ DEB_VENDOR=emdebian-crush dpkg-vendor --query Cross-Compiling; echo $?
dpkg-vendor: error: vendor Emdebian Crush doesn't exist in /etc/dpkg/origins/
2

Huh?

Emdebian Crush is a different vendor to Emdebian Grip (Crush is cross-built,
Grip is not).

Is there some hidden assumption that the filename must match the Vendor because
the existing default file does not follow that convention, at least as far
as case-sensitivity is concerned. (debian vs Debian).

-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.26-1-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8) (ignored: LC_ALL 
set to en_GB.UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages dpkg-dev depends on:
ii  binutils  2.19.1-1   The GNU assembler, linker and bina
ii  bzip2 1.0.5-1high-quality block-sorting file co
ii  dpkg  1.15.2 Debian package management system
ii  libtimedate-perl  1.1600-9   Time and date functions for Perl
ii  lzma  4.43-14Compression method of 7z format in
ii  make  3.81-5 The GNU version of the make util
ii  patch 2.5.9-5Apply a diff file to an original
ii  perl [perl5]  5.10.0-22  Larry Wall's Practical Extraction 
ii  perl-modules  5.10.0-22  Core Perl modules

Versions of packages dpkg-dev recommends:
ii  build-essential   11.4   Informational list of build-essent
ii  gcc [c-compiler]  4:4.3.3-8  The GNU C compiler
ii  gcc-4.3 [c-compiler]  4.3.3-10   The GNU C compiler
ii  gcc-4.4 [c-compiler]  4.4.0-5The GNU C compiler
ii  gnupg 1.4.9-4GNU privacy guard - a free PGP rep
ii  gpgv  1.4.9-4GNU privacy guard - signature veri

Versions of packages dpkg-dev suggests:
ii  debian-keyring2009.05.28 GnuPG (and obsolete PGP) keys of D
pn  debian-maintainersnone (no description available)

-- no debconf information




-- 
To UNSUBSCRIBE, email to debian-dpkg-bugs-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#532222: dpkg-dev: dpkg-vendor not listening to DEB_VENDOR correctly

2009-06-07 Thread Neil Williams
On Sun, 7 Jun 2009 18:45:53 +0200
Raphael Hertzog hert...@debian.org wrote:

 On Sun, 07 Jun 2009, Neil Williams wrote:
  Is there some hidden assumption that the filename must match the Vendor
  because the existing default file does not follow that convention, at
  least as far as case-sensitivity is concerned. (debian vs Debian).
 
 Yes. Case-sensitivity is taken care of (we try files named $vendor,
 lc($vendor), ucfirst($vendor)), but that's the only difference
 allowed between the name of the vendor and the filename.

That isn't true because --vendor accepts the file, DEB_VENDOR fails.
 
 There's no documentation of the origins files for now and I'm not sure
 what you want me to do to resolve this bug.

The behaviour with DEB_VENDOR should match the behaviour with --vendor
and there should be some way of handling vendor names that include
spaces without needing to use quote marks when using the environment
variables or --vendor options.

It is inconsistent that the command line option works one way and the
environment variable works another way. It would be better to look only
for the matching filename and then use the value for the field from
that file.

If the supplied argument matches the filename, why bother
cross-checking that with the Vendor: field inside the file? I would
have thought that the field can be the longer, descriptive title and
the filename can be a shortened version.

Currently, if the file specified originally has the Vendor changed from
the correct title Emdebian Crush to the corrupted form
Emdebian-Crush, then dpkg-vendor works in the same way with both
forms. This change should not be necessary.

What is the reason for the duplicate check? 

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/





-- 
To UNSUBSCRIBE, email to debian-dpkg-bugs-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Re: Next upload 2009-05-18 (dpkg 1.15.1)

2009-05-17 Thread Neil Williams
On Sun, 17 May 2009 16:20:41 +0200
Raphael Hertzog hert...@debian.org wrote:

  * Build flags env settings.
  
Raphaël mentioned on IRC that we could wait a bit for this, but I
think we rather stop exporting them now so that no more
  maintainers start relying on them. We can always reenable them
  later on if we end up deciding this is the way to go.
 
 I would rather wait a final decision on this instead of knowingly
 breaking packages once more. Not sure how to reach a decision, the
 discussion is rather slowly paced. Maybe asking a recommendation to
 the technical committee ?
 
 Also why should we keep the dpkg-architecture environment variables
 if we decide that using environment variables in not a good idea ?

Because use of dpkg-architecture - by definition - is not the default
and therefore that it is one way of setting the environment variables
necessary for non-standard builds, i.e. cross-builds.

Environment variables are core to how any package cross-builds in
Debian - what needs to happen is that the standard native builds
don't interfere with the cross-building environment (see #450483).

The discussion centred on defaults like CFLAGS and those need to be
overridden for cross-building anyway, sometimes via setting the
PKG_CONFIG environment variables as a result of environment variables
set by dpkg-architecture -a.

How is dpkg-buildpackage -a meant to work without dpkg-architecture -a
setting environment variables?

The only problem that results from dpkg-architecture usage (AFAICT) is
that some maintainers have got the autotools-dev advice wrong and are
always setting --host as well as --build instead of just --build - that
can't be fixed in dpkg anyway.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgpg57hX2RIgd.pgp
Description: PGP signature


Re: [RFC] [Cross Toolchain] Multiarch and sysrooted toolchain

2009-03-15 Thread Neil Williams
 macros to
 find installed software).
 
Simon

That can't work either. If the core Debian packaging tools are going to
change in our favour at all, they are going to change to support
multiarch - that much has been made clear repeatedly. If cross-building
doesn't get up to speed then the packaging tools could change in a way
that breaks all cross-builds, not just the harder corner cases.
Multiarch isn't perfect for Emdebian but it is the best we are going to
get, it is immeasurably better than what we have (principally because
it can support future development needs) and we need to work with it and
modify it to our needs.

The current layout is simply not an option. It has gone as far as it
can go, it simply cannot cope with forthcoming changes within dpkg or
likely future changes. There is no way to make any progress with
cross-building larger parts of Debian without an unsustainable mess of
multiple layers of package patches, specialised tools and horrible
hacks to what should be standard tools. Perpetuating the current system
will only add back layer upon layer of new hacks, to replace the ones
I've been working to remove, as our methods once again fall behind core
Debian methods and get left to bitrot. If that happens, there will be
no way to expand Emdebian Crush.

A lot of progress has been made in removing old hacks from the current
tools but there is nowhere left to go. The next step is to get support
into dpkg - only then can any of the bugs in apt-cross and the more
complex bugs in Emdebian Crush actually get fixed. That much has been
inevitable from the start.

I think that it is highly unlikely that Emdebian Crush will ever be
able to support more than ARM or armel (i.e. one architecture at a
time) *unless* the current cross-building methods are dropped - the
workload is simply too high. I do not think that is acceptable.

There are problems with using multiarch, yes, but the prize is
infinitely more important than the difficulties. If some things need to
be adapted to work with unchanged core tools then so be it - if some
things still need specialised wrappers, so be it. The aim is and has
always been to get the core cross-building support into the core Debian
packaging tools and that means dpkg and no dpkg-cross, it means apt
and no apt-cross and it means that cross-building needs to adopt and
modify multiarch to the point where we can all use it, albeit with
wrappers and support tools where necessary. Then, we can work on
absorbing those wrappers into the new dpkg when the time comes.

Multiarch is the only deal on the table and we need to make it work,
even if certain features/artefacts of the current system are lost.

Please don't argue the points any further, we may lose all that we have
gained so far.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgpHVDnRQdfoh.pgp
Description: PGP signature


Re: [RFC] [Cross Toolchain] Multiarch and sysrooted toolchain

2009-03-12 Thread Neil Williams
On Thu, 12 Mar 2009 10:31:03 +0100
Goswin von Brederlow goswin-...@web.de wrote:

  I thought mulitarch wanted:

(this is making a lot more sense now.)

So, updating:

  /usr/
|-- include/
| `-- $arch-linux-gnu/
| `-- foo.h
 `-- lib/
  `-- $arch-linux-gnu/
`-- libfoo.so
 
 
  The problem, as I see it, with /usr/include/$arch-linux-gnu/foo.h is
  that it makes it impossible to export one entire tree of all
  cross-build stuff. i.e. make /usr/$arch-linux-gnu/ available and
  everything is in a single place. Instead, three paths need to be
  exported.

In the end, it's two paths.

 One reason against /usr/$arch-linux-gnu/ was that it pollutes the/usr
 namespace. In my opinion that is a pretty weak argument. The
 directories would only be there as needed and never many.

Agreed - it's also a tradition of long-standing with lots of existing
tools to support it, inside and outside Debian.

However, cross-dependencies need to use the multiarch methods to be
included into normal Debian which makes the specialised tools either
redundant or standard. I think that is a price worth paying. The
objective all along has been to have Debian supporting cross-building
and toolchains without specialised support.

  So which layout do we need for LHS?
 
  /usr/
 `-- $arch-linux-gnu/
   |-- include/
   |  `-- foo.h
   `-- lib/
`-- libfoo.so
 
  i.e. a complete hierarchy beneath /usr/arm-linux-gnu/ with files that
  are normally in /bin/ in /usr/$arch-linux-gnu/bin and files that are
  normally in /usr/bin/ in /usr/$arch-linux-gnu/usr/bin, similarly for
  lib.
 
 That will not work. You can not for example but /bin/sh into

s/but/boot/

I don't think anyone wants to boot into that location, they want to be
able to export it complete to another system that has also booted
normally. It is only the 32bit/64bit multiarch usage where booting
becomes an issue.

  Is there any information arround, maybe LHS, on how to setup DIR
   layout?
  
  Nowadays we are using non multiarch structure as:
  
   usr/$arch-linux-gnu
|-- include
`-- lib
  
  But what it should look like in future? /usr/include/$arch-linux-gnu?
   Would it be reasonable to be using a new layout like:
  
   usr/include/$arch-linux-gnu

   usr/
|-- include
| `-- $arch-linux-gnu
`-- lib
  `-- $arch-linux-gnu

  That is already standard on i386/amd64 at least. Many /usr/include/*
  files just include the right usr/include/$arch-linux-gnu file
  depending on wether __i386__ or __x86_64__ is set. gcc also looks into
  those dirs on its own. So yes, do use those.
 
  Is that /usr/include/$arch-linux-gnu/usr/include/foo.h ?
 
 No, just /usr/include/$arch-linux-gnu/foo.h.

and /usr/lib/$arch-linux-gnu/libfoo.so ?

 Special case as some of binutils behave differently depending on the
 arch they support. That is not something that is needed distribution
 wide.

True.
 
 Also isn't there an /usr/bin/arm-linux-gnu-objdump? Maybe just a link
 to /usr/arm-linux-gnu/bin/objdump?

-rwxr-xr-x 2 root root 882128 2008-07-01 16:41 /usr/arm-linux-gnu/bin/objdump
-rwxr-xr-x 2 root root 882128 2008-07-01 16:41 /usr/bin/arm-linux-gnu-objdump

Not a symlink, but it is there.

  Hmm, so dpkg-cross would need to change the path to include/ for
  headers but not change the path for libraries?
 
 dpkg-cross does not need to change anything. First gcc needs to
 change. Then packages. And last dpkg/apt/aptitude. And then dpkg-cross
 is obsolete.

This is the plan, yes. Once dpkg supports multiarch
in /usr/include/$arch-linux-gnu and /usr/lib/$arch-linux-gnu/ then
dpkg-cross becomes not only obsolete but counter-productive. That
version of dpkg will conflict with dpkg-cross, leading to the
inevitable removal of dpkg-cross from unstable.

  We'd have:
 
  /usr/arm-linux-gnu/lib/libfoo.so
  /usr/include/arm-linux-gnu/include/foo.h
  or
  /usr/arm-linux-gnu/usr/lib/libfoo.so
  /usr/include/arm-linux-gnu/usr/include/foo.h
 

So current dpkg-cross behaviour:
/usr/arm-linux-gnu/lib/libfoo.so
/usr/arm-linux-gnu/include/foo.h

Multiarch behaviour that doesn't need dpkg-cross:
/usr/lib/arm-linux-gnu/libfoo.so
/usr/include/arm-linux-gnu/foo.h

  as a conversion of /usr/lib/libfoo.so
 
 The question is 
 
 /arm-linux-gnu/lib/libfoo.so
l /usr/arm-linux-gnu/[usr/]lib/libbla.so
 /usr/arm-linux-gnu/[usr/]include/foo.h
 
 or
 
 /lib/arm-linux-gnu/libfoo.so
 /usr/lib/arm-linux-gnu/libbla.so
 /usr/include/arm-linux-gnu/foo.h
 
 It has always been a question of where to put the tripplet, not
 whether or not to have an extra subdir below that. Although I'm
 against the subdirs. No need to duplicate that this is usr.

I'd agree - [usr] below $arch-linux-gnu appears redundant to me. The
only difference between /lib and /usr/lib/ relates to the libraries
required to boot before /usr is mounted. That reasoning doesn't apply
to toolchain issues.

-- 


Neil Williams

Re: Transition from dpkg to GNU install-info

2009-03-12 Thread Neil Williams
On Thu, 12 Mar 2009 16:00:26 +0200
Guillem Jover guil...@debian.org wrote:

 On Wed, 2009-03-11 at 12:13:47 +, Neil Williams wrote:
  What I really need, in order to test properly, is a package that can
  trigger install-info. I admit, I'm a bit unfamiliar with triggers still
  - what do I need to change in a package (say coreutils) that currently
  contains an info document and maintainer script changes, in order to
  test it with a trigger created by a patch to the experimental texinfo
  sources above?
  
  Is it a case of:
  1. create debian/install-info.triggers in the tex source above
  2. create a modified coreutils (for testing in a chroot) where the info
  document is part of the package, not mentioned in the maintainer
  scripts
  3. and?
 
 Neil, please hold your horses! Once dpkg provides the dummy install-info,
 then this is solved for you, and you don't have to do anything. Please
 check the transition plan on the wiki.

:-) I was just experimenting.

 Also:
 
  * As long as the new install-info packages is not installed on your
system, then it won't be triggered.
  * Ideally we should not need any .install-info file, if we get the
remaning incomplete Info files properly fixed.

Thanks, Guillem, that will be a good solution.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgpGgyTS1lwnN.pgp
Description: PGP signature


Re: Transition from dpkg to GNU install-info

2009-03-11 Thread Neil Williams
On Wed, 11 Mar 2009 09:40:46 +0100
Norbert Preining prein...@logic.at wrote:

  Here immediately some questions: I can start preparing a separate
  install-info bin package for experimental, but 
  - should we install GNU install-info into /usr/bin where there is
ginstall-info ATM, or into /usr/sbin, where there is dpkg ii?
I would suggest /usr/bin.
 
 Ok, here is a package, crude, nothing tested, but it is there:
   deb http://people.debian.org/~preining/TeX/ i-i/
   deb-src http://people.debian.org/~preining/TeX/ i-i/
 
 or dget
 http://people.debian.org/~preining/TeX/i-i/texinfo_4.13a.dfsg.1-2~exp01.dsc
 
 It does:
 - split install-info package off
 - make info depend on install-info
 - still ship ginstall-info
 - ship install-info shell script from Nicolas

So all this now does is echo the command that should be used instead:
texinfo-4.13a.dfsg.1$ ./debian/install-info/usr/bin/install-info 
/usr/share/info/coreutils.info ; echo $?
/usr/bin/ginstall-info --quiet /usr/share/info/coreutils.info
0
(even if the actual info page does not exist)

Is it meant to only echo the command out?

In an Emdebian Grip chroot (with the current workaround replacement
install-info script renamed):

# dpkg --unpack /var/cache/apt/archives/coreutils_6.10-6em1_amd64.deb ; echo $?
(Reading database ... 5726 files and directories currently installed.)
Preparing to replace coreutils 6.10-6em1 (using 
.../coreutils_6.10-6em1_amd64.deb) ...
/usr/bin/ginstall-info --quiet --remove /usr/share/info/coreutils.info
Unpacking replacement coreutils ...
0
# dpkg --configure coreutils ; echo $?
Setting up coreutils (6.10-6em1) ...
/usr/bin/ginstall-info --quiet /usr/share/info/coreutils.info
0

My only concern is this:

# /usr/bin/ginstall-info --quiet /usr/share/info/coreutils.info ; echo $?
install-info: No dir file specified; try --help for more information.
1

and this:

# /usr/bin/ginstall-info --info-dir=/usr/share/info --quiet 
/usr/share/info/coreutils.info ; echo $?
install-info: No such file or directory for /usr/share/info/coreutils.info
1

(The reason I'm CC'd in all of this is because of #518737
dpkg: install-info should still exit zero if info document is not found)

I can adapt the Emdebian Grip processes to remove the trigger file from
packages like coreutils when the info document is removed, so if the
intention is that the postinst will become a no-op - merely echoing the
command - then this seems OK for what I need.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgpDmlZoArq1r.pgp
Description: PGP signature


Re: Transition from dpkg to GNU install-info

2009-03-11 Thread Neil Williams
On Wed, 11 Mar 2009 10:30:12 +0100
Norbert Preining prein...@logic.at wrote:

 On Mi, 11 Mär 2009, Neil Williams wrote:
  Is it meant to only echo the command out?
 
 Uups, forgot the comment out the part in the install-info.sh. please can
 you do so and retry. The very first lines ;-)
 
 Change packages are on the server, version 4.13a.dfsg.1-2~exp02

Then it will fail and the Emdebian install will still break.
:-(

# dpkg --unpack /var/cache/apt/archives/coreutils_6.10-6em1_amd64.deb ; echo $?
(Reading database ... 5726 files and directories currently installed.)
Preparing to replace coreutils 6.10-6em1 (using 
.../coreutils_6.10-6em1_amd64.deb) ...
Unpacking replacement coreutils ...
0

# dpkg --configure coreutils ; echo $?
Setting up coreutils (6.10-6em1) ...
install-info: No dir file specified; try --help for more information.
dpkg: error processing coreutils (--configure):
 subprocess post-installation script returned error exit status 1
Errors were encountered while processing:
 coreutils
1

and with the -dir specified, it will still break:

# dpkg --configure coreutils ; echo $?
Setting up coreutils (6.10-6em1) ...
install-info: /usr/share/info: empty file
dpkg: error processing coreutils (--configure):
 subprocess post-installation script returned error exit status 1
Errors were encountered while processing:
 coreutils
1

This is expressly what I need to avoid happening.

Now, what we could do is have the /usr/bin/install-info wrapper ignore
such errors because, after all, packages should be migrating to trigger
support with .install-info files and make no mention of install-info in
the maintainer scripts. I can then file bugs against those packages that
retain maintainer scripts listing install-info. (lintian tests would be
good too.)

That way, Grip can remove the info document and the trigger file
together, ensuring smooth package installations for those that complete
the transition.

The patch would be:

diff -u texinfo-4.13a.dfsg.1/debian/install-info.sh 
texinfo-4.13a.dfsg.1/debian/install-info.sh
--- texinfo-4.13a.dfsg.1/debian/install-info.sh
+++ texinfo-4.13a.dfsg.1/debian/install-info.sh
@@ -51 +51 @@
-/bin/sh -c $INSTALL_INFO $options
+/bin/sh -c $INSTALL_INFO --dir /usr/share/info $options || true


Rendering:
dpkg --configure coreutils ; echo $?
Setting up coreutils (6.10-6em1) ...
install-info: /usr/share/info: empty file
0

It depends how quickly we can transition all the packages listed in the
existing bug report #518737 to *not* have any mention of install-info
in their maintainer scripts.

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=518737#27

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgp73oN7Q5uc0.pgp
Description: PGP signature


Re: Transition from dpkg to GNU install-info

2009-03-11 Thread Neil Williams
On Wed, 11 Mar 2009 09:40:46 +0100
Norbert Preining prein...@logic.at wrote:

 Ok, here is a package, crude, nothing tested, but it is there:
   deb http://people.debian.org/~preining/TeX/ i-i/
   deb-src http://people.debian.org/~preining/TeX/ i-i/

What I really need, in order to test properly, is a package that can
trigger install-info. I admit, I'm a bit unfamiliar with triggers still
- what do I need to change in a package (say coreutils) that currently
contains an info document and maintainer script changes, in order to
test it with a trigger created by a patch to the experimental texinfo
sources above?

Is it a case of:
1. create debian/install-info.triggers in the tex source above
2. create a modified coreutils (for testing in a chroot) where the info
document is part of the package, not mentioned in the maintainer
scripts
3. and?


-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgpT75VoIxGc9.pgp
Description: PGP signature


Re: [RFC] [Cross Toolchain] Multiarch and sysrooted toolchain

2009-03-11 Thread Neil Williams
On Wed, 11 Mar 2009 14:50:19 +0100
Goswin von Brederlow goswin-...@web.de wrote:

 
   [*]
I have been looking lately into making some cross toolchain
  improvements, one of them will be to change to a sysrooted cross
  toolchain, but the current layout we are using by dpkg-cross installs
  relevant bits under:
   DIR/{include,bin,lib,lib64}
Mainstream code expects a different layout more LHS compliant,
   DIR/{usr/include,bin,lib,lib64}

dpkg-cross currently does:
/usr/
  `-- $arch-linux-gnu/
   |-- include/
   |   `-- foo.h
`-- lib/
 `-- libfoo.so

$ ls /usr/arm-linux-gnu/
bin  include  lib

Very flat but quite simple.

I thought mulitarch wanted:
/usr/
  |-- bin/
  | `-- $arch-linux-gnu/
  |-- include/
  | `-- $arch-linux-gnu/
  | `-- foo.h
  |--  lib64/
  | `-- $arch-linux-gnu/
   `-- lib/
`-- $arch-linux-gnu/
  `-- libfoo.so

?

The problem, as I see it, with /usr/include/$arch-linux-gnu/foo.h is
that it makes it impossible to export one entire tree of all
cross-build stuff. i.e. make /usr/$arch-linux-gnu/ available and
everything is in a single place. Instead, three paths need to be
exported.

So which layout do we need for LHS?

/usr/
   `-- $arch-linux-gnu/
   |-- bin/
   |-- lib64/
   !-- lib/
   |-- usr/
   `--  |-- bin/
|-- include/
|  `-- foo.h
 `-- lib/
   `-- libfoo.so

$ ls /usr/arm-linux-gnu/
bin lib64 lib usr
$ ls /usr/arm-linux-gnu/usr
bin include lib
(with or without a symlink of /usr/arm-linux-gnu/usr/lib64
to /usr/arm-linux-gnu/usr/lib) ?

i.e. a complete hierarchy beneath /usr/arm-linux-gnu/ with files that
are normally in /bin/ in /usr/$arch-linux-gnu/bin and files that are
normally in /usr/bin/ in /usr/$arch-linux-gnu/usr/bin, similarly for
lib.

 Is there any information arround, maybe LHS, on how to setup DIR
  layout?
 
 Nowadays we are using non multiarch structure as:
 
  usr/$arch-linux-gnu
  |-- bin
  |-- include
  |-- lib
  `-- lib64
 
 But what it should look like in future? /usr/include/$arch-linux-gnu?
  Would it be reasonable to be using a new layout like:
 
  usr/include/$arch-linux-gnu
 
 That is already standard on i386/amd64 at least. Many /usr/include/*
 files just include the right usr/include/$arch-linux-gnu file
 depending on wether __i386__ or __x86_64__ is set. gcc also looks into
 those dirs on its own. So yes, do use those.

Is that /usr/include/$arch-linux-gnu/usr/include/foo.h ?

  |-- bin
 
 All binaries are assumed to do the same thing no matter what
 architecture they are compiled for. As such there is no need to have
 the same binary compiled for different archs at the same time. Also
 any change here would play havock with shebang lines.

binutils-multiarch puts stuff in /usr/$arch-linux-gnu/bin/

$ ls /usr/arm-linux-gnu/bin/
ar  as  ld  nm  objcopy  objdump  ranlib  strip

I am missing some papers on multiarch, are there any kind of
  information out there.

 You are missing the actual multiarch or cross-compile library dirs:
 
 /usr/$arch-linux-gnu/lib  (cross-compile)
 /usr/lib/$arch-linux-gnu  (multiarch)

 I still haven't heart a good reason why multiarch can't use the
 cross-compile dirs as the libraries for each are ment to be
 interchangable (and in fact dpkg-cross demonstrates that already).

Hmm, so dpkg-cross would need to change the path to include/ for
headers but not change the path for libraries?

We'd have:

/usr/arm-linux-gnu/lib/libfoo.so
/usr/include/arm-linux-gnu/include/foo.h
or
/usr/arm-linux-gnu/usr/lib/libfoo.so
/usr/include/arm-linux-gnu/usr/include/foo.h

?

I thought the question was whether we would have:

/usr/lib/arm-linux-gnu/lib/libfoo.so
or
/usr/lib/arm-linux-gnu/usr/lib/libfoo.so
or
/usr/arm-linux-gnu/usr/lib/libfoo.so
or the current
/usr/arm-linux-gnu/lib/libfoo.so

as a conversion of /usr/lib/libfoo.so

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgp9tgMdTd7tZ.pgp
Description: PGP signature


Bug#518719: dpkg needs unpack support that does not run any maintainer scripts

2009-03-08 Thread Neil Williams
Package: dpkg
Version: 1.14.25
Severity: normal

dpkg --unpack needs to be able to work without executing any maintainer 
scripts, just
extracting the data.tar.gz, decompressing the control.tar.gz, moving maintainer 
scripts
to the var/lib/dpkg/info/ directory, handling var/lib/dpkg/status and 
var/lib/dpkg/available
and leaving the status of the package as Status: install ok unpacked

This mode is particularly important for debootstrap usage when the archives are 
for a
different architecture to the host system. I've had to implement two versions 
of this
support, one in shell and one in perl, for Emdebian. The main objective is to 
achieve
a debootstrap that leaves an almost complete filesystem with every file in 
place and
only needing 'dpkg --configure -a' to be run on the actual machine.

Emdebian Grip has a particular need for this support, so that the debootstrap'd 
directory
can be packed into a .tar.gz *without* needing to carry large numbers of .deb 
packages in
var/cache/apt/archives/. It seems utterly pointless that 24Mb of .debs are 
needed merely so
that the maintainer scripts can be created and executed before removing all the 
.debs on 
a machine where file I/O can be slow and space for the extra 24Mb is not 
necessarily
available. It gets worse when such machines need to have more than a basic 
debootstrap
in the installation image, e.g. when the user needs to make a complete 
installation image
that includes a full XFCE GUI without any .debs in the tarball.

If the new mode could simply detect that the architecture of the .deb does not 
match the
architecture of the host system (i.e. the system outside the chroot), it could 
conceivably
do everything except executing any code/scripts installed by the package. This 
would also
require that the unpack mode would be closer to the extract support that is 
able to write
files to a nominated directory - i.e. running dpkg from outside the chroot and 
writing to
files in $PREFIX/var/lib/dpkg etc.

Requiring that a directory '$PREFIX' is specified and that the $PREFIX cannot 
be '/' should
minimise problems of this mode being used in a normal filesystem. As such, 
maybe an option
to dpkg -e would be more appropriate than a change to dpkg --unpack.

This is the test code (perl version) that adds to the functionality available 
with dpkg -e:
(I don't consider it fully debugged, it is merely here to show the steps that 
Emdebian
currently needs due to the lack of this functionality within dpkg itself. The 
final code
will be executed from the top level of what will become the chroot, but never 
from '/'
and will repeat over each archive in no particular order.)

#!/usr/bin/perl

# $dir will eventually hold a prefix that cannot be /
$dir=;
$cachedir=var/cache/apt/;
$libdir = var/lib/apt/; # lists
$etcdir = etc/apt/; # sources
$dpkgdir = var/lib/dpkg/;   # state

force_unpack;
exit 0;

sub force_unpack
{
my %unpack=();
$deb = wget_1.11.4-2_armel.deb;
{
print I: Extracting $deb...\n;
system (ar -p \./${cachedir}archives/$deb\ data.tar.gz | 
zcat | tar -xf -);
my $ver=`dpkg -f ./${cachedir}archives/$deb Version`;
my $pkg=`dpkg -f ./${cachedir}archives/$deb Package`;
chomp ($ver);
chomp ($pkg);
print   - Unpacking control data...\n;
mkdir (tmp/listing);
system (ar -p \./${cachedir}archives/$deb\ data.tar.gz  
tmp/listing/data.tar.gz);
my $datatar = `tar -tzf tmp/listing/data.tar.gz`;
my @lines = split(\n, $datatar);
open (LIST, ${dpkgdir}info/${pkg}.list);
foreach my $l (@lines)
{
chomp ($l);
$l =~ s:^\.::;
$l =~ s:^/$:/\.:;
$l =~ s:/$::;
print LIST $l\n;
}
close (LIST);
# this needs to use mktemp -d and only remove that dir.
system (rm -rf tmp/*);
system (dpkg -e ./${cachedir}archives/$deb tmp/);
opendir (MAINT, tmp);
my @maint=grep(!m:\.\.?:, readdir (MAINT));
closedir (MAINT);
open (AVAIL, ${dpkgdir}available);
open (STATUS, ${dpkgdir}status);
foreach my $mscript (@maint)
{
rename tmp/$mscript, ${dpkgdir}info/$pkg.$mscript;
if ( $mscript eq control )
{
open (MSCRIPT, ${dpkgdir}info/$pkg.$mscript);
my @scr=MSCRIPT;
close (MSCRIPT);
my @avail = grep(!/^$/, @scr);
print AVAIL @avail;
print STATUS @avail;
   

Bug#518737: dpkg: install-info should still exit zero if info document is not found

2009-03-08 Thread Neil Williams
Package: dpkg
Version: 1.14.25
Severity: normal

Various GNU packages handle info documents in maintainer scripts via 
install-info
but Emdebian Grip removes those info documents, just as it removes manpages and
other documentation, to save space. The files are removed from the packages and
the reduced packages made available via http://www.emdebian.org/grip to handle
bandwidth and temporary space issues on the devices running Grip.

Currently, Grip needs to replace install-info from dpkg with an empty script 
because
install-info halts the entire installation if a single info document is missing.

The packages themselves have the Emdebian version string (em[0-9]) suffix but 
have
no changes to the maintainer scripts (to maintain compatibility with Debian).

To simplify Grip installations, install-info needs to not halt the installation 
of
a package merely because the info document has been removed from the package. A
warning or message is not needed either - users of Emdebian Grip know that info
documents and manpages are not going to exist in the Grip packages. Retaining 
binary
compatibility with Debian does mean that individual packages can be installed 
from
Debian where the user wants to have the extra files and apt-pinning can do the 
rest.

update-alternatives has now gained this support and it would be much 
appreciated if
install-info could be quiet about missing info documents whilst still supporting
those Debian packages that the user may still wish to install.

This would make info management as simple as manpage management where man-db 
really
doesn't care if a package used to contain a manpage but does not contain one 
anymore,
it just does the right thing and carries on without halting the installation.

-- System Information:
Debian Release: squeeze/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.26-1-amd64 (SMP w/2 CPU cores)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8) (ignored: LC_ALL 
set to en_GB.UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages dpkg depends on:
ii  coreutils 7.1-2  The GNU core utilities
ii  libc6 2.9-4  GNU C Library: Shared libraries
ii  lzma  4.43-14Compression method of 7z format in

dpkg recommends no packages.

Versions of packages dpkg suggests:
ii  apt   0.7.20.2   Advanced front-end for dpkg

-- no debconf information




-- 
To UNSUBSCRIBE, email to debian-dpkg-bugs-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#518719: dpkg needs unpack support that does not run any maintainer scripts

2009-03-08 Thread Neil Williams
On Sun, 8 Mar 2009 16:29:29 +0100
Raphael Hertzog hert...@debian.org wrote:

 On Sun, 08 Mar 2009, Neil Williams wrote:
  dpkg --unpack needs to be able to work without executing any maintainer 
  scripts, just
  extracting the data.tar.gz, decompressing the control.tar.gz, moving 
  maintainer scripts
  to the var/lib/dpkg/info/ directory, handling var/lib/dpkg/status and 
  var/lib/dpkg/available
  and leaving the status of the package as Status: install ok unpacked
 
 You're asking us to support crude hacks… --unpack is not --unpack if it
 doesn't call the preinst/prerm.

--unpack cannot operate if the architecture of the .deb does not match
the architecture of the system. It is a fundamental requirement of any
cross-architecture, even multi-architecture, system that no binaries
are executed.

It isn't a crude hack, it is a middle-stage between --unpack and
--extract || --control and it underpins all operations in Debian that
involve multiple architectures. It is still up to dpkg to sort out
everything else via 'dpkg --configure -a' run on the target machine.

This is an area of intense interest and activity around Debian, it
would be a shame for dpkg to assume that native is the only supported
system, particularly around installation support.

 While I understand your need, I'm not convinced that dpkg has to be
 modified to support this use case. After all policy compliant packages
 have the right to expect in their postinst that the prerm/preinst have
 been run.

That will still happen, however, not until the binaries have been
copied onto a system capable of executing them. The new mode would
merely add a delay between tar -xzf and running the preinst sufficient
to allow the files to be copied to a suitable system within that delay.

All of these situations are based on debootstrap type environments
where --force-depends --force-configure-any, --force-conflicts,
--force-overwrite and --ignore-depends are likely to be in use.

I don't mind if this new mode becomes a --force-foo *and* is only
operative if the system architecture does not match the .deb
architecture, i.e. needs to be used from outside what will become a
chroot.

 I fail to see why we would want to allow that. Hacks are okay to get
 something done, but I wouldn't want to officialize hacks by integrating
 them in dpkg itself.

True, however there is more to dpkg than native-only.
 
 I would suggest you to look into using virtualisation or other similar
 solution instead.

On an iPAQ?? Making cross-installation require Xen is a bizarre idea.
 
 That's just my opinion. Maybe Guillem has some nicer approach to suggest,
 we'll see.

OK.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgpxWQjZEai7Z.pgp
Description: PGP signature


Bug#518737: dpkg: install-info should still exit zero if info document is not found

2009-03-08 Thread Neil Williams
On Sun, 8 Mar 2009 16:46:53 +0100
Raphael Hertzog hert...@debian.org wrote:

 On Sun, 08 Mar 2009, Neil Williams wrote:
  The packages themselves have the Emdebian version string (em[0-9]) suffix 
  but have
  no changes to the maintainer scripts (to maintain compatibility with 
  Debian).
  
  To simplify Grip installations, install-info needs to not halt the 
  installation of
  a package merely because the info document has been removed from the 
  package. A
  warning or message is not needed either - users of Emdebian Grip know that 
  info
  documents and manpages are not going to exist in the Grip packages. 
  Retaining binary
  compatibility with Debian does mean that individual packages can be 
  installed from
  Debian where the user wants to have the extra files and apt-pinning can do 
  the rest.
  
  update-alternatives has now gained this support and it would be much 
  appreciated if
  install-info could be quiet about missing info documents whilst still 
  supporting
  those Debian packages that the user may still wish to install.
 
 The plan is always to get rid of install-info inside dpkg, so asking us
 for this change is not the right long-term solution. (And contrary to
 update-alternatives, I don't think such a change make sense)

Any timescales?

Will the package containing install-info become Priority: required or
will all packages using info documents need to be changed to check for
install-info in their postinsts?

 I would really suggest that you design a solution that doesn't require
 the postinst snippet at all. A simple solution could be:
 - have a package install-info register a file trigger on 
 /usr/share/install-info/
 - have other packages provide a .install-info file in that directory that
   tells how install-info should be called
 - add a dh_installinfo helper to automatize the installation of this file
 - have info readers depend on the new install-info package
 
 Opinions ?

One thing I cannot do is modify the relevant debian/rules of the
packages concerned because Grip does not rebuild any packages, in order
to retain binary compatibility with Debian.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgp9PN1ImoUnP.pgp
Description: PGP signature


Bug#518719: dpkg needs unpack support that does not run any maintainer scripts

2009-03-08 Thread Neil Williams
On Sun, 8 Mar 2009 17:30:02 +0100
Raphael Hertzog hert...@debian.org wrote:

 On Sun, 08 Mar 2009, Neil Williams wrote:
   I would suggest you to look into using virtualisation or other similar
   solution instead.
  
  On an iPAQ?? Making cross-installation require Xen is a bizarre idea.
 
 As I understand, you want to create a root filesystem with dpkg not on the
 target device but on your devel machine. 

Yes, because unpacking .debs onto the target machine takes huge amounts
of time compared to merely running 'dpkg --configure -a' after copying
the filesystem across. Also, requiring that the .debs exist in the
tarball containing the filesystem makes things even more difficult by
making the install into a two-stage process. (Unpack the base system on
the device, remove all the .debs then download/copy/obtain the rest of
the system and unpack it all over again.)

If debootstrap took 3 hours per install, would you not prefer a system
that turns that into a 15 minute process? All for the sake of delaying
the execution of maintainer scripts?

 So maybe running dpkg in a qemu
 host emulating the architecture of the iPAQ would be a solution.

We rejected qemu (or any emulator) long ago - the system needs to be
built from source without emulators.

Why should dpkg require that cross-installs require emulators or Xen?

It's just unpacking .debs, why should that require an emulator?

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgpFI1Dda9fco.pgp
Description: PGP signature


Re: Merging dpkg-cross into the dpkg source

2009-02-23 Thread Neil Williams
On Mon, 23 Feb 2009 22:46:24 +1030
Ron r...@debian.org wrote:

 On Sun, Feb 22, 2009 at 12:23:22PM +, Neil Williams wrote:
   The rationale is, things like arm and uclibc have many possible variants,
   and we cannot possibly provide them all by default. 
  
  archtable.d/ was meant for this support - although the name does tend
  to indicate only one side of the table but that can be changed.
 
 Ok, I'm probably a bit confused still about where everything is planning
 to move to, I had thought dpkg-cross was going to mostly disappear, but
 if it fits better there, I'm not really fussy about what it's called.

The dpkg-cross executable will disappear - the issue is where to place
the configuration support files and the mechanisms to support variants,
as you and others require.

As for planning, umm, what planning?
:-)

This is being discussed in order to make a plan but the main hindrance
is just how multiarch will actually work. Without the detail of the
multiarch implementation, we can't really make a detailed plan for
dpkg-cross itself.

However, I feel that the cross-config.$arch and associated archtable.d/
support is orthogonal to what actually happens to dpkg-cross and
multiarch. The two issues both need to be resolved but the detailed
implementation of dpkg-cross within a multiarch capable dpkg will need
to work with a realistic multiarch implementation *and* a working
implementation of the cross-config and archtable.d/ support. So, in
some ways, we can discuss and plan elements of such support in advance
of a detailed plan for multiarch itself.

  1. Do you need to alter ostable, archtable and tripletable or can we
  arrange a method to host all three in one file/directory? Combining the
  tables requires an element of rigour to the definitions and should
  prevent overlaps or omissions.
 
 I need to alter ostable and triplettable for the arm-uclibc builds.
 I also don't really mind how that is done, but it makes sense to me
 that whatever mechanism we choose should be basically similar to what
 dpkg currently uses.  ie. I should be able to create 'unofficial' archs
 of my own on demand, but those same definitions should also be able to
 be moved to dpkg later should this become an 'official' arch, without
 any visible difference to the tools using it.

OK.

 I think we worked out a basic form for how the triplets should be composed
 previously that would work 'universally'.  We'd definitely want to shake
 that down again and provide it as a guidance for people customising this.

A Wiki page would be suitable, linked from http://wiki.debian.org/dpkg
and http://wiki.debian.org/Embedded_Debian.
 
  2. Do you need dpkg to support this directly or will support via other
  tools be sufficient? (i.e. as now with archtable and dpkg-cross). If
  so, which tools? (bearing in mind that dpkg-cross itself will
  disappear).
 
 Basically, I need `dpkg-architecture -a $myarch` and dpkg-buildpackage -a
 to work as if $myarch were a 'real' arch in the os/triplet tables.

That's the crux of the problem. The current method relies on you
querying the architecture values via a wrapper like dpkg-cross or a
script using libdebian-dpkgcross-perl. To handle this inside
dpkg-architecture will need the .d/ directory to be supported by dpkg
directly.
 
 We may want to set up some sort of 'registrar', where people can publish
 names that are in use, to avoid accidental conflicts, but that could be
 as simple as a wiki page that people can update with the names they are
 using.  I don't expect that will be a huge problem in the near future,
 but as more people do this there may be value in something like that.
 (in the same sense that wnpp helps people avoid conflicting package
 names for works in progress)

Agreed. A Wiki page is probably a good start - scripts to parse the
various values can be written later.
 
   While we may provide
   one or more of them for general use, specialised devices are each going
   to want to enable or disable different (sometimes incompatible) features.
  
  To do so, you may well need to also modify the cross-config.cache
  values as these provide the results of macros run by autoconf based on
  a standard Debian system. If uClibc or any other variant changes the
  behaviour of functions compared to standard glibc and standard Debian,
  the variant would also need to take account of these changes.
 
 Yes, that's something that people defining a 'new arch' would also need to
 take care of.  So far the things I need don't depend too heavily on that,
 but you couldn't build all of the packages in the distro without it.
 Unless I'm missing something this should work without changes though, since
 you have a unique triplet for each new arch.  It's just a part of the cross
 environment you need to bootstrap when kicking off a new arch variant.

Yes, although care will be needed to prevent unnecessary duplication if
the cross-config.cache file needs modification for particular
architecture

Re: Merging dpkg-cross into the dpkg source

2009-02-22 Thread Neil Williams
On Fri, 20 Feb 2009 16:08:45 +1030
Ron r...@debian.org wrote:

 On Thu, Feb 19, 2009 at 10:24:34AM +, Neil Williams wrote:
  On Thu, 19 Feb 2009 08:47:47 +0200
  Guillem Jover guil...@debian.org wrote:
  
3. Any renaming issues or other changes required in the current package?
   
   There's the arch name divergences, from the IRC logs, I think most
   should just be removed and the ones from dpkg-architecture used
   instead. If those need fixing then we should check for each specific
   case.
  
  The only remaining values are:
  
  armeb: armeb-linux-gnueabi
  hurd-i386: i386-gnu#XXX This differs from dpkg-architecture
  s390x: 's390-linux-gnu'  #XXX This differs from dpkg-architecture
  openbsd-i386: 'i386-openbsd' #XXX This differs from dpkg-architecture
  freebsd-i386: 'i386-freebsd' #XXX This differs from dpkg-architecture
  darwin-i386: 'i386-darwin',   #XXX This differs from dpkg-architecture
  win32-i386: 'i386-cygwin'
  
  Compare in each case with the output of:
  $ dpkg-architecture -a$key -qDEB_HOST_GNU_TYPE 2/dev/null
  
  The main effect is to allow i386 in the GNU type where dpkg insists on
  changing it to i486.
  
  The mechanism itself was intended to support uClibc architectures -
  Simon?
 
 The other issue related to this was some mechanism to permit local
 definitions to be maintained in ostable and triplettable. 

/etc/dpkg-cross/archtable.d/ could be extended for that purpose -
it's a much better idea than the legacy method of hardcoding such
variants into dpkg-cross itself. It was originally designed for this
situation, so if it isn't suitable, it needs to be fixed. See #447427

 The rationale is, things like arm and uclibc have many possible variants,
 and we cannot possibly provide them all by default. 

archtable.d/ was meant for this support - although the name does tend
to indicate only one side of the table but that can be changed.

The questions are:

1. Do you need to alter ostable, archtable and tripletable or can we
arrange a method to host all three in one file/directory? Combining the
tables requires an element of rigour to the definitions and should
prevent overlaps or omissions.

2. Do you need dpkg to support this directly or will support via other
tools be sufficient? (i.e. as now with archtable and dpkg-cross). If
so, which tools? (bearing in mind that dpkg-cross itself will
disappear).

Maybe what we shall end up doing is migrating the package conversion
routines from /usr/bin/dpkg-cross into dpkg|dpkg-dev using multi-arch
support and implementing the architecture-support configuration of
dpkg-cross as a configuration package that handles the static data like
cross-config. $arch, archtable.d/ and the rest in /etc/. The only issue
for me is about the status of multi-arch in Debian - where are we at?

 While we may provide
 one or more of them for general use, specialised devices are each going
 to want to enable or disable different (sometimes incompatible) features.

To do so, you may well need to also modify the cross-config.cache
values as these provide the results of macros run by autoconf based on
a standard Debian system. If uClibc or any other variant changes the
behaviour of functions compared to standard glibc and standard Debian,
the variant would also need to take account of these changes.

 Since the majority of the  2000 arm machine types now registered with the
 linux kernel are in some way or another specialised, this is very
 desirable from the point of view of manufacturers trying to get the best
 performance from their devices using an OS built from Debian sources,
 and cross tools on a Debian host workstation to build it all.

Then what we need is a test suite for these systems whereby we get the
results of the ./configure tests performed by each package currently
supported by /etc/dpkg-cross/cross-config.cache or putting files
into /etc/dpkg-cross/cross-config.d/ in a native build and then
reporting back on any changes in the cached values. There is a
prototype script to do that kind of thing in emdebian-tools already,
emcache. Patches to modify it for such a test suite would be
welcome. ;-)

 Delineating them by triplets works well as the toolchains and autoconf
 all support this cleanly without any extra hackery required.
 
 I've been using a specialised arm/uclibc toolchain like this with our
 products since about the middle of 2007 and it's been working really
 nicely.  The only thing I need to keep tweaking is to add:
 
 ostable:
 uclibc-linux  linux-uclibclinux[^-]*-uclibc
 
 triplettable:
 uclibc-linux-cpuuclibc-cpu
 
 ... every time I update dpkg and they get overwritten again.

OK, so which executables and which routines need to call these values -
would support inside dpkg-cross be sufficient or are you seeking for
dpkg to support /etc/dpkg/arch.d/ instead?

Most of the support you need does exist but it sounds like it needs to
be optimised. There is no need to alter /usr/share/dpkg/ostable
or /usr/share

Re: Please test master branch and update-alternatives in particular

2009-02-22 Thread Neil Williams
On Sun, 22 Feb 2009 23:24:15 +0100
Raphael Hertzog hert...@debian.org wrote:

 Hello,
 
 as some might have noticed I largely rewrote update-alternatives,
 corrected bugs and implemented most features requested in the BTS.

Hmm, maybe I left it too late to put my own request into the BTS for
update-alternatives. :-(
 
 With any change of this importance, and despite the (relatively extensive)
 test-suite which covers most important actions, I expect that we'll find
 small problems, in particular in the user interface or in messages
 displayed.
 
 Please compile and run the dpkg in the master branch and report any
 problem you might have with update-alternatives. TIA.

Something that may not have come up before, I'm looking for a way for
update-alternatives to fail gracefully if things like man pages simply
don't exist on the filesystem. (Emdebian doesn't have manpages but
the Grip flavour does have other targets of alternatives - Crush
drops alternatives completely.)

Currently, I'm using a config package to replace the current
update-alternatives with a minor change that brute forces things to
make update-alternatives exit with zero instead of 2 in the quit
subfunction. Yes, I know, it's a hack but I needed to get it fixed to
get Grip working and planned on getting a sane implementation in a few
weeks time and bringing it to dpkg at that time.

Just from the bare outline, is there a good way of implementing a fix
for this?

I can create a file in /etc/ that update-alternatives notices in order
to change behaviour, that seemed like the best initial approach.
(Doesn't have to be in /etc/ actually.)

Does update-alternatives need to fail noisily / die if the target of an
alternative does not exist? (thereby breaking the install). Has this
been looked at before?

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgpNdiHAvdKNV.pgp
Description: PGP signature


Re: Merging dpkg-cross into the dpkg source

2009-02-19 Thread Neil Williams
On Thu, 19 Feb 2009 08:47:47 +0200
Guillem Jover guil...@debian.org wrote:

  3. Any renaming issues or other changes required in the current package?
 
 There's the arch name divergences, from the IRC logs, I think most
 should just be removed and the ones from dpkg-architecture used
 instead. If those need fixing then we should check for each specific
 case.

The only remaining values are:

armeb: armeb-linux-gnueabi
hurd-i386: i386-gnu#XXX This differs from dpkg-architecture
s390x: 's390-linux-gnu'  #XXX This differs from dpkg-architecture
openbsd-i386: 'i386-openbsd' #XXX This differs from dpkg-architecture
freebsd-i386: 'i386-freebsd' #XXX This differs from dpkg-architecture
darwin-i386: 'i386-darwin',   #XXX This differs from dpkg-architecture
win32-i386: 'i386-cygwin'

Compare in each case with the output of:
$ dpkg-architecture -a$key -qDEB_HOST_GNU_TYPE 2/dev/null

The main effect is to allow i386 in the GNU type where dpkg insists on
changing it to i486.

The mechanism itself was intended to support uClibc architectures -
Simon?

 There's also the ELF table, but detect_arch does not seem to be used
 anywhere in the pkg. If it's not really needed then just drop it.

It used to be used in emdebian-tools but a lintian check script proved
to be a better method. I'll drop detect_arch and the ELF table in the
next version of dpkg-cross - along with other legacy code.

  4. Which package should take on the hierarchy of cross-configuration
  conffiles in /etc/dpkg-cross/ ?
 
 The autoconf config.cache files are not really specific to dpkg, so
 it might make more sense to provide them somewhere else. They could be
 used to speed up a bit normal builds as well. It would also make sense
 to rename them to contain the gnu-triplet instead of the Debian arch
 name. 

That can be done - I'll do some testing. For this to work with native
packages, something (probably dpkg-buildpackage) has to set the
CONFIG_SITE environment variable that points to the relevant file (all
of which are actually shell scripts).

There is also the /etc/dpkg-cross/cross-config.d/ directory which is
intended to be used by packages to drop in their own files, e.g.
orbit2. The directory could have package-specific files to replace the
values in cross-config.cache. I haven't made that known to the packages
involved yet as there are a few issues with ensuring that values remain
package-specific.

I'll continue working on those.

 One of the problems I mentioned was that if not explicitly
 specified configure by default tries to load them from the default
 prefix, which tends to be /usr/local or from the prefix specified on the
 command line, which might not be always the same place for all  builds.

Which makes me think that dpkg-buildpackage needs to set an explicit
location in CONFIG_SITE if these are going to be used for native
builds. Currently, emdebuild sets it for cross-builds.

  Where do we start?
 
 gcc is still lacking some patches to properly support building using
 the multiarch dirs, Aurélien Jarno said he would be preparing some
 patches for which Matthias Klose agreed to include (at least agreed with
 the idea behind the patches).
 
 Once we have a working toolchain we can start drafting the details for
 the implementation in the packaging level, and we'll be able to test
 stuff easily. Although, there's already some previous implementation
 work from at least Hugo Mills and Tollef Fog Heen that I'm aware of.

OK. Thanks Guillem.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgpIaCd6s1F7T.pgp
Description: PGP signature


Merging dpkg-cross into the dpkg source

2009-02-18 Thread Neil Williams
dpkg-cross 2.4.0 is now in unstable and has had a lot of outdated
cruft removed during the Lenny freeze. I'd like to start the process of
removing dpkg-cross itself and providing all functionality via
dpkg/dpkg-dev.

Questions:

1. Should dpkg-cross remain as a discrete executable or as
functionality of another executable in dpkg or dpkg-dev?

2. How to retain the *very* useful default cross-building architecture
and associated debconf support, depending on the answer to Q1.

3. Any renaming issues or other changes required in the current package?

4. Which package should take on the hierarchy of cross-configuration
conffiles in /etc/dpkg-cross/ ?

5. What needs to happen to the perl module (currently
Debian::DpkgCross) - apart from the pending removal of all legacy code
(already marked as such in the module).

I'd like to make as many of these changes as I can during the 2.4.x
series, leaving one final upload of dpkg-cross 2.5.0 in a state that
can be easily merged into dpkg.

Once there is a clear path for dpkg-cross, I'll be moving on to seeking
the migration of apt-cross into apt which is a (theoretically) harder
task as I need to convert that from perl to C++.

If there is a desire for dpkg-cross functionality to be C rather than
perl, I can cope with that - depends what we want to achieve.

Where do we start?

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgpoqF0xMiOtn.pgp
Description: PGP signature


Re: Fixing info in Debian

2008-12-21 Thread Neil Williams
On Sun, 21 Dec 2008 17:56:23 +
Sam Morris s...@robots.org.uk wrote:

 A while ago, Nicolas François announced plans to fix the dpkg and info
 packages so that they would work together and user commands such as
 'info pr' (as documented in various manpages throughout Debian) would
 work again. But #139569 has not seen any updates since then, and the
 info command still doesn't work. I'm wondering if anyone is still
 working on this bug?

The same problem exists now as when the bug report was last discussed,
except it is now a different release - Lenny. If this had been raised a
year ago . . .

Try again in 6 months time?

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgpsG6hSq08mv.pgp
Description: PGP signature


Bug#139569: Fixing info in Debian

2008-12-21 Thread Neil Williams
On Sun, 21 Dec 2008 17:56:23 +
Sam Morris s...@robots.org.uk wrote:

 A while ago, Nicolas François announced plans to fix the dpkg and info
 packages so that they would work together and user commands such as
 'info pr' (as documented in various manpages throughout Debian) would
 work again. But #139569 has not seen any updates since then, and the
 info command still doesn't work. I'm wondering if anyone is still
 working on this bug?

The same problem exists now as when the bug report was last discussed,
except it is now a different release - Lenny. If this had been raised a
year ago . . .

Try again in 6 months time?

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgpj6dU5SujoB.pgp
Description: PGP signature


Re: help to make a .deb package needed till monday

2008-12-12 Thread Neil Williams
On Fri, 12 Dec 2008 21:16:01 +0100
M. Peterson petersonm...@googlemail.com wrote:

 we need help to make a .deb package out of a source for linux binary
 http://sourceforge.net/project/showfiles.php?group_id=233927package_id=299091

Wrong list.

Ask on debian-ment...@lists.debian.org but note that there cannot be
any expectation that any help would be available within a specific
deadline. Everyone is a volunteer, no-one can say whether anyone will
be able to help you.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgpHR9byoNDoD.pgp
Description: PGP signature


Re: Thoughts about tdebs

2008-12-03 Thread Neil Williams
On Wed, 3 Dec 2008 09:12:46 +0100
Raphael Hertzog [EMAIL PROTECTED] wrote:

BTW, it was Eddy Petrisor, not Eric - typo. Sorry Eddy.
(Thanks, Christian.)

 On Tue, 02 Dec 2008, Neil Williams wrote:
   It is a very sizable special case, though, and growing thanks to
   the tireless translation efforts within and beyond Debian. This
   is why the consensus at the meeting seemed to be to get this
   right even if it means having to implement some special casing.
  
  Raphael - I think you've missed some of the purpose behind TDebs
  and if that is a fault of the current draft TDeb spec, then I would
  value your comments on how to fix it.
 
 I hear the size problem that Emdebian is facing but Tdeb is not the
 right solution for this either IMO. We should rather aim at having
 some DEB_BUILD_OPTIONS or something similar to instruct the build
 process to create the minimalist package that you need instead of
 dropping the translation entirely from the original .deb.

We already have DEB_BUILD_OPTIONS to instruct the build process to
create the minimalist package but those don't meet the need for TDebs.

It isn't the translation it is dozens of translations per package - a
single package can contain 30 or 40 .mo files, between 7k and 30kb each.
An embedded device does not need all the translations, it needs one,
two, maybe four or five at most, carefully matched against the locales
supported on that one specific device. The rest are a complete waste of
storage because storage space is not cheap. Emdebian users need control
over which translations are installed - absolute control - without
bloating the download sizes of the packages themselves. Therefore,
Emdebian Crush splits out each .mo file into a dedicated .tdeb package
and provides tools to match the package against the supported locales
and the installed package list. No other component of a Debian package
needs as much specialised code - manpages, other docs, all those can be
dumped out of the package without any other considerations. Package
names can be changed to reflect changes in --enable-foo to
--disable-foo using DEB_BUILD_OPTIONS to attain reductions in the sizes
of the actual binaries and (more importantly) the dependency chain of
those binaries, other DEB_BUILD_OPTIONS can drop README and TODO etc.,
but translations are special.

The current TDeb specification also allows for Debian users to have a
similar level of control over what actually gets installed - albeit
without the ability to reduce the size of the total download. That's OK
because Debian doesn't need to care about the size of the download via
apt-get etc. - Emdebian does.

TDebs are a specialised solution to one side of the need for smaller
packages but Emdebian has other ways of reducing the size of the rest
of the package. I don't want to handle translations as just another
component of a package, I want a solution that works as a translator.
I have a host of other methods for reducing the package size, that is
only part of the goal for tdebs.

 You can always continue to use Tdebs to distribute the translation
 that you need while installing the minimalistic .deb.

That is precisely what we already provide. Minimalised .debs (rebuilt
using cross-build support or repackaged using dpkg support) with TDebs
in a separate repository and tools that allow users to manage the
actual translations that get installed.

TDebs are a solution for translations, not for the creation of the
minimalistic .deb - however, once you have a set of TDebs for a
package, it makes no sense to retain any .mo files in the .deb.
Actually making the remainder of the .deb smaller then comes down to
use of DEB_BUILD_OPTIONS.

  If the idea becomes separated from translations, automated creation
  of TDebs by translation review teams would be compromised,
  difficulties in re-assembling the source to ensure that subsequent
  uploads retain the intervening translation updates become even more
  complex and the drive to deliver TDebs starts to wane. (Personally,
  I am also not at all convinced that ftp-master would consider
  partial debs as a viable option.)
 
 I'm sorry but the technical choice has little to do with the ability
 of translation teams to create .tdeb.

Then what is the point? TDebs are all about the translation teams
creating .tdeb - without that the whole thing is pointless.

The technical choice must rely on the needs of the translation teams.
A significant reason for adopting TDebs in Debian is to make it easier
and less intrusive for translations to be updated in a release freeze -
to allow Christian a better method than doing source NMU's on every
package using debconf when everything else is meant to be frozen. It
isn't a good idea to keep rebuilding binaries just to update the
templates file - TDebs solve that problem. It is a specialised problem
and TDebs are a specialised solution.

If the technical choice does not consider the needs of the translation
teams in deciding how to allow

Re: Thoughts about tdebs

2008-12-03 Thread Neil Williams
On Wed, 3 Dec 2008 14:28:58 +
Mark Brown [EMAIL PROTECTED] wrote:

  From what I understand of your idea, you seem to think about
  translations mainly as updates. While it is one of the goals to
  enable translation-only updates, it is not quite obvious to me what
  your proposal has to offer in terms of splitting translations out
  of the debs, which is an explicit goal. Also, the proposal
  specifically aims at limiting the amount of data that the archive
  and apt have to handle.
 
 Surely translations can be modeled as updates to translationless .deb
 files (ie, you have a .deb with no translations and then patch that
 package to add the translations)?

Why patch the package? Why not simply put a TDeb alongside the
translationless Debian package? The internal layout of the TDeb is
important to the overall usefulness of TDebs in general. Updates to the
TDeb then simply replace the previous TDeb, leaving the .dsc and the
rest of the (signed) Debian files completely unchanged. AFAICT it is
not possible to patch a binary debian package - you lose all the
benefit of signing the .dsc in the first place.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgpxlqSVXll3i.pgp
Description: PGP signature


Re: Thoughts about tdebs

2008-12-03 Thread Neil Williams
 translations.

http://www.emdebian.org/emdebian/flavours.html

 Whatever experiment you might have done within Emdebian, I will not
 trust any design decision that lacks a (serious) rationale and
 explanations of why the alternatives are not viable.

I can understand that, but I offer a challenge in response - I will not
be charitable to changes in design that lack the testing and
documentation even currently available for TDebs. Ideas are fine but
this is already a working implementation with a long history - and
existing approval from various teams in Debian who would need to be
considered in any design changes. Show me some code that works to meet
all the criteria required for TDebs and I'll consider it more
carefully. Show me code that meets with the requirements of
ftp-master and i18n and I'll be more interested. What's good for one is
good for the other.

http://www.emdebian.org/emdebian/langupdate.html
http://www.emdebian.org/locale/search.php

 (That said, it's only my opinion and I'm not the one that maintains
 the C part of dpkg)

There will need to be minor changes in dpkg-dev too - dpkg-gencontrol.pl
only needs a minor tweak 
(see
http://git.debian.org/?p=users/codehelp/dpkg.git;a=commit;h=f7e88a887f4a7e3a9d6b8cbfbfef561a3533a5c6
and  http://people.debian.org/~codehelp/tdeb/ch4.html)

Other changes are needed in devscripts and a few other packages.

The biggest changes are in the archive, hence ftp-master was approached
and the design altered substantially in discussion with ftp-master and
i18n teams during DebConf8 - this much was inevitable as all parties
accept that Emdebian TDebs cannot be implemented in Debian without
changes to the numbers of packages generated. Those changes are now in
place. The changes for dpkg, by comparison, are small. In many ways,
the scope of the changes within dpkg are dwarfed by the scale of
changes required in the archive and elsewhere and those changes, as
I said above, are already agreed with the relevant teams.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgp4SHTwP126A.pgp
Description: PGP signature


Re: Thoughts about tdebs

2008-12-02 Thread Neil Williams
 is translation, building from the embedded
implementation. As I see it, partial debs are not useful within Debian
but for deployments of Debian - e.g. I've been asked before about kiosk
type implementations where there is a need to only update those parts
of the package that have actually changed in the latest release - many
Debian revisions change only a single file and many of those have
absolutely no effect on the compiled binaries or actual functionality
of the package. This has little benefit for Emdebian - what we need are
smaller packages in smaller repositories containing everything
necessary and no bloat.

Actually, from my perspective, your idea is far from simple and seems
to be a lot more complex than anything so far agreed with ftp-master.

I think this would be better handled within what we have by deployment
of dpkg classes to allow arbitrary selection of package components.
That is not the same as the locale root components within a TDeb, your
suggestion is far more general and needs a different solution. TDebs
can use dpkg class support once available but the tdeb is a special
case (just as a udeb is a special case).

In essence, it is the old problem of enabling a query interface (which
file do you want from this package?) and always getting a different
answer depending on which user you ask. Maybe partial debs would be
useful to other users as a layer on top of dpkg classes but partial debs
would not be suitable for what we need from TDebs.

 From what I understand of your idea, you seem to think about
 translations mainly as updates. While it is one of the goals to enable
 translation-only updates, it is not quite obvious to me what your
 proposal has to offer in terms of splitting translations out of the
 debs, which is an explicit goal. Also, the proposal specifically aims
 at limiting the amount of data that the archive and apt have to
 handle.
 
 I'm not quite sure how useful the notes about design considerations
 are, but you could always ask Neil whether they are in a shape to
 publish them for further discussion. It seems that at Casar de
 Cáceres we found quite a few corner-cases that had not been
 previously considered.

I've tried to include all the notes about design into the specification
but there has been little work on comparing this with the original TDeb
proposals put forward by Eric Petrisor. (AFAIAM, Eric is happy with the
new model).

If there is anything in the specification that is unclear, please let
me know. In particular, if there is a need for more detail relating to
the background, purpose and motivation behind TDebs.

You might also be interested in the slides for the presentation I made
at FOSDEM last year on TDebs:

http://buildd.emdebian.org/svn/browser/current/emdebian/trunk/docs/fosdem2008/debian

 With some distance, it might well be that we could generalize (at
 least parts of) the tdeb-implementation to class support (with
 different members of the ar archive per class[1]). We would still
 want to separate them out, but that might be a good way to arrive at
 a better mechanism.
 
 In summary, yes, there might be room for generalization, but taking
 your suggestions as an indication, maybe part of your dissatisfaction
 with the direction that the tdeb proposal takes stems from a
 disparity in the goals that each is concerned with.

Within Emdebian, we want to use dpkg class alongside DEB_VENDOR to
provide more flexibility in how Debian packages are assembled. 

I certainly want to have class support within tdebs (to make it easier
to remove translated manpages that are useless in Emdebian).

Right now, I'm concentrating on what changes are necessary within
debhelper and dpkg to implement TDebs based on the agreement with
ftp-master for what is actually achievable and with i18n for what is
actually usable - whilst still retaining the functionality that is
necessary for TDebs in Emdebian.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.linux.codehelp.co.uk/
http://e-mail.is-not-s.ms/



pgpzybuUk7Cgc.pgp
Description: PGP signature


Re: Bug#489771: New Build-Options field and build-arch option, please review

2008-09-11 Thread Neil Williams
On Thu, 2008-09-11 at 08:46 +0200, Raphael Hertzog wrote:
 On Wed, 10 Sep 2008, Bill Allombert wrote:
People have noticed that and already requested that we can call 
arbitrary
targets of debian/rules with all the proper initialization done 
precisely
for test purpose during packaging work (see #477916).
   
   I must say, I really do not like this direction.  debhelper and cdbs and
   similar sytsems are the places to provide this help where people want to
   use it, in my opinion. 

The actual support will be implemented in debhelper - all that is needed
is a consistent manner to pass the same options to debhelper across a
range of packages. Packages then add extra support if necessary, e.g. if
a package installs docs manually instead of using dh_installdocs, then
those sections of debian/rules need to be either conditionally excluded:
ifeq (,$(findstring nodocs,$(DEB_BUILD_OPTIONS)))
install foo.1 debian/foo/usr/share/man/man1/
...
endif

or redone for debhelper support via foo.install files, etc.

After Lenny, I will be filing bugs for this support - at least for the
packages used in Emdebian.

  We have a lot of past experience with that and we
   have the compatibility level to handle smoothing transitions.  (And to
   provide a way for people to never transition, I admit, and I see where
   that's the problem that you're solving, but I prefer that problem to the
   problems introduced by the instability of having the package build
   infrastructure change the input to the builds without coordination with
   the package.)

There has to be coordination with the package - the package needs to
support the build option, either explicitly or via debhelper. All CDBS
or any other layer needs to do is pass down the option to make it
accessible to debhelper (usually via DEB_BUILD_OPTIONS).

  I like to say I concurr with Russ. There are some much difference
  between packages that distributions wide default does not make sense.

On the contrary, there are clear divisions where distribution-wide build
options do make sense. Raphael correctly identifies nodocs and nocheck
as the current Emdebian distribution-wide build options. nodocs itself
needs to be refined to allow for graded levels of documentation
exclusion and other build options may change the build process itself -
all under the control of the particular package. If the package does not
understand the option, nothing happens.

e.g. Emdebian needs nodocs (or something as broad) that drops
everything, from README and TODO to changelog.gz and manpages during the
build, rather than after downloading. Preferably, nodocs would also lead
to the mandatory compression of copyright to save more space. It is not
new for DEB_BUILD_OPTIONS to break Debian Policy - supporting a
distribution-wide superset of options allows the use of the set to
conform to Emdebian Policy etc.

Other uses of options could use graduations so that examples are dropped
but not the rest, or just manpages or just HTML docs etc. Dpkg Classes
will help with graduations, as long as the distro can afford to remove
the files *after* the package has been downloaded.

 But more and more people want to be able to change distribution wide
 default: Emdebian wants to enable nodocs and nocheck by default, other
 want to be able to enable hardening options by default and I agree with
 them that official support for such a facility is desirable.
 
 See also #498355 and #498380 for such requests from Emdebian.

Note also that Ubuntu are interested in supporting distribution-wide
build options.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Re: Bug#489771: New Build-Options field and build-arch option, please review

2008-09-11 Thread Neil Williams
On Thu, 2008-09-11 at 10:53 -0700, Russ Allbery wrote:
 Raphael Hertzog [EMAIL PROTECTED] writes:
  On Wed, 10 Sep 2008, Bill Allombert wrote:
 
  I like to say I concurr with Russ. There are some much difference
  between packages that distributions wide default does not make sense.
  Such change would rather lead me to hardcode values of
  DEBIAN_BUILD_OPTIONS in debian/rules if they are used blidly.
 
  But more and more people want to be able to change distribution wide
  default: Emdebian wants to enable nodocs and nocheck by default,
  other want to be able to enable hardening options by default and I agree
  with them that official support for such a facility is desirable.
 
 So they should set DEB_BUILD_OPTIONS in the environment.  That's what it's
 for.  I don't have any objections to that, or even to doing it via
 dpkg-buildpackage.

That is what DEB_VENDOR seeks to achieve - set it once and it sets the
same options across all builds, in the environment.

This is getting to be a long list of CC: - isn't it worth sending to
debian-devel instead? Goswin von Brederlow and Simon Richter did a lot
of work on this at Extremadura and they aren't on the current CC:.

I'm losing track of all the bugs in the CC: and why they are listed.

 My objection is specifically to having dpkg-buildpackage set a variety of
 environment variables *by default*, and then telling package maintainers
 that they should rely on those environment variables being set in the
 default case. 

If by default you mean Debian, then NO. DEB_BUILD_OPTIONS is empty for
Debian and will continue so.

  That breaks the debian/rules interface and requires that
 all package builds go through dpkg-buildpackage.  Having dpkg-buildpackage
 set environment variables in the non-default case like Emdebian is not a
 problem, since for Emdebian builds (for example) Emdebian can decide that
 using dpkg-buildpackage or setting the environment variables manually is
 required.  There is no existing precedent, and they can make that rule
 from scratch.

Exactly.

 My concern is for the default build where there *is* an existing precedent
 that debian/rules build should work sanely, not for support for special
 cases like that where the existing debian/rules interface already doesn't
 do the right thing without additional help.
 
 If you are going to go down this path of having dpkg-buildpackage set up
 an environment that package maintainers should rely on, you or someone
 else on the dpkg team needs to make a debian-devel-announce post making it
 clear that debian/rules build is no longer a supported interface for
 building packages and using dpkg-buildpackage is required for consistent
 behavior.
 
 Right now, I don't think most Debian Developers have any idea what the
 implications of these changes are.

That's fine. DEB_BUILD_OPTIONS would be empty if DEB_VENDOR is not set
or is set to Debian.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Bug#229357: Bug#489771: New Build-Options field and build-arch option, please review

2008-09-11 Thread Neil Williams
On Thu, 2008-09-11 at 08:46 +0200, Raphael Hertzog wrote:
 On Wed, 10 Sep 2008, Bill Allombert wrote:
People have noticed that and already requested that we can call 
arbitrary
targets of debian/rules with all the proper initialization done 
precisely
for test purpose during packaging work (see #477916).
   
   I must say, I really do not like this direction.  debhelper and cdbs and
   similar sytsems are the places to provide this help where people want to
   use it, in my opinion. 

The actual support will be implemented in debhelper - all that is needed
is a consistent manner to pass the same options to debhelper across a
range of packages. Packages then add extra support if necessary, e.g. if
a package installs docs manually instead of using dh_installdocs, then
those sections of debian/rules need to be either conditionally excluded:
ifeq (,$(findstring nodocs,$(DEB_BUILD_OPTIONS)))
install foo.1 debian/foo/usr/share/man/man1/
...
endif

or redone for debhelper support via foo.install files, etc.

After Lenny, I will be filing bugs for this support - at least for the
packages used in Emdebian.

  We have a lot of past experience with that and we
   have the compatibility level to handle smoothing transitions.  (And to
   provide a way for people to never transition, I admit, and I see where
   that's the problem that you're solving, but I prefer that problem to the
   problems introduced by the instability of having the package build
   infrastructure change the input to the builds without coordination with
   the package.)

There has to be coordination with the package - the package needs to
support the build option, either explicitly or via debhelper. All CDBS
or any other layer needs to do is pass down the option to make it
accessible to debhelper (usually via DEB_BUILD_OPTIONS).

  I like to say I concurr with Russ. There are some much difference
  between packages that distributions wide default does not make sense.

On the contrary, there are clear divisions where distribution-wide build
options do make sense. Raphael correctly identifies nodocs and nocheck
as the current Emdebian distribution-wide build options. nodocs itself
needs to be refined to allow for graded levels of documentation
exclusion and other build options may change the build process itself -
all under the control of the particular package. If the package does not
understand the option, nothing happens.

e.g. Emdebian needs nodocs (or something as broad) that drops
everything, from README and TODO to changelog.gz and manpages during the
build, rather than after downloading. Preferably, nodocs would also lead
to the mandatory compression of copyright to save more space. It is not
new for DEB_BUILD_OPTIONS to break Debian Policy - supporting a
distribution-wide superset of options allows the use of the set to
conform to Emdebian Policy etc.

Other uses of options could use graduations so that examples are dropped
but not the rest, or just manpages or just HTML docs etc. Dpkg Classes
will help with graduations, as long as the distro can afford to remove
the files *after* the package has been downloaded.

 But more and more people want to be able to change distribution wide
 default: Emdebian wants to enable nodocs and nocheck by default, other
 want to be able to enable hardening options by default and I agree with
 them that official support for such a facility is desirable.
 
 See also #498355 and #498380 for such requests from Emdebian.

Note also that Ubuntu are interested in supporting distribution-wide
build options.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Bug#229357: Bug#489771: New Build-Options field and build-arch option, please review

2008-09-11 Thread Neil Williams
On Thu, 2008-09-11 at 10:53 -0700, Russ Allbery wrote:
 Raphael Hertzog [EMAIL PROTECTED] writes:
  On Wed, 10 Sep 2008, Bill Allombert wrote:
 
  I like to say I concurr with Russ. There are some much difference
  between packages that distributions wide default does not make sense.
  Such change would rather lead me to hardcode values of
  DEBIAN_BUILD_OPTIONS in debian/rules if they are used blidly.
 
  But more and more people want to be able to change distribution wide
  default: Emdebian wants to enable nodocs and nocheck by default,
  other want to be able to enable hardening options by default and I agree
  with them that official support for such a facility is desirable.
 
 So they should set DEB_BUILD_OPTIONS in the environment.  That's what it's
 for.  I don't have any objections to that, or even to doing it via
 dpkg-buildpackage.

That is what DEB_VENDOR seeks to achieve - set it once and it sets the
same options across all builds, in the environment.

This is getting to be a long list of CC: - isn't it worth sending to
debian-devel instead? Goswin von Brederlow and Simon Richter did a lot
of work on this at Extremadura and they aren't on the current CC:.

I'm losing track of all the bugs in the CC: and why they are listed.

 My objection is specifically to having dpkg-buildpackage set a variety of
 environment variables *by default*, and then telling package maintainers
 that they should rely on those environment variables being set in the
 default case. 

If by default you mean Debian, then NO. DEB_BUILD_OPTIONS is empty for
Debian and will continue so.

  That breaks the debian/rules interface and requires that
 all package builds go through dpkg-buildpackage.  Having dpkg-buildpackage
 set environment variables in the non-default case like Emdebian is not a
 problem, since for Emdebian builds (for example) Emdebian can decide that
 using dpkg-buildpackage or setting the environment variables manually is
 required.  There is no existing precedent, and they can make that rule
 from scratch.

Exactly.

 My concern is for the default build where there *is* an existing precedent
 that debian/rules build should work sanely, not for support for special
 cases like that where the existing debian/rules interface already doesn't
 do the right thing without additional help.
 
 If you are going to go down this path of having dpkg-buildpackage set up
 an environment that package maintainers should rely on, you or someone
 else on the dpkg team needs to make a debian-devel-announce post making it
 clear that debian/rules build is no longer a supported interface for
 building packages and using dpkg-buildpackage is required for consistent
 behavior.
 
 Right now, I don't think most Debian Developers have any idea what the
 implications of these changes are.

That's fine. DEB_BUILD_OPTIONS would be empty if DEB_VENDOR is not set
or is set to Debian.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Re: RFC: Idea for improved diversions and alternatives handling

2008-07-06 Thread Neil Williams
Goswin von Brederlow wrote:
 working on dpkg reminded me that I wanted to propose a better
 diversion and alternatives handling for debian packages. Currently
 they have to be manually added and removed in the maintainer
 scripts. This method is prone to errors and can easily leave
 diversions or alternatives behind. Instead I suggest creating two new
 control files detailing the diversions and alternatives a package
 should have.

Can symlinks be supported in the declarative control file stanzas?

One problem within Emdebian is replacing coreutils etc. with busybox -
currently we are having to use a rigid replacement where the options
enabled in busybox must be removed from the package set (or added as
Conflicts: in busybox) and then the symlinks for each applet are listed
in the dpkg file list. This requires a particular level of coordination
and makes it harder to customise Emdebian for a different scenario.

If both /bin/foo and /bin/bar are called during the boot/init process,
the issue is allowing for this scenario:

Install package foo, includes symlink /bin/bar - /bin/foo
Also includes a variety of others (about 30 in total).

At a later date, the installation needs to be customised to allow the
full version of /bin/bar from package bar to be installed for extra
functionality. If Replaces: is used, bar cannot be removed because the
box would not be bootable anymore - the previous symlink has gone
forever.

How to divert a symlink such that it can be restored later?

Alternatives isn't a good solution because it means reimplementing the
alternatives support code to avoid the use of Perl - and alternatives
(IIRC) does not support symlinks as alternatives.

What I need to avoid is having to make dozens of changes to postinst
scripts to enable diversions in a long list of packages.

Busybox 1.10.3 (not yet in Debian) does support discrete binaries linked
to a shared library version of busybox but the library is bigger than
the current busybox binary and each discrete binary is just over 4Kb so
that is an appreciable increase in total size. (Seeing as this is
busybox, size increases must be avoided.) It would allow the use of
alternatives (subject to replacement non-perl code) but that method also
needs changes in other packages (currently). So that costs an extra 2Mb
or so and involves rewriting the code supporting alternatives - not my
favourite option when the entire OS has to fit into 32Mb (or 64Mb for a
full GUI using glibc).

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Re: Multiarch and idea for improved diversions and alternatives handling

2008-07-04 Thread Neil Williams
On Fri, 2008-07-04 at 08:33 +0200, Tollef Fog Heen wrote:
 * Neil Williams 
 
 | Just a thought - why use /usr/lib/$ARCH and /usr/include/$ARCH at all
 | when it would (IMHO) be simpler to use /usr/$TRIPLET/ and put the entire
 | package under that, as we do with dpkg-cross currently:
 
 How would you then handle libraries that go in /lib?  (Apart from the
 fact that I think just using a subdirectory of /usr/lib is much neater
 than random subdirectories in /usr.

/lib/
/arm-linux-gnu/lib/

(did I miss that bit?)

A single subdirectory of /usr is, IMHO, neater than a subdirectory
of /usr/include and /usr/lib/. It would also mean less changes for those
who are currently using multiple architectures on one system for the
purposes of cross building. I wouldn't want to go the whole hog though
and have /arm-linux-gnu/usr/lib /arm-linux-gnu/lib because that would be
ugly, at least to me.

 
 | /usr/include/
 | /usr/arm-linux-gnu/include/
 
 Please note that the initial goal of multiarch at least has been just
 running of packages from foreign architectures.  Not building them.

True but the current usage of these mechanisms is in cross-building so
sometimes the results of having to do something without major changes
elsewhere can be helpful in designing the subsequent mechanism.

 
 | multiarch could even add:
 | /usr/share/
 | /usr/arm-linux-gnu/share
 
 Pardon my language, but this is crack.  The point of /usr/share is you
 can share it between systems.  If you go down this route, just use a
 chroot and some wrapper scripts to bounce between them instead.

It was only a suggestion for /usr/share - it was an alternative to
renaming the package to get a different directory in /usr/share/ as the
current tools do. Until all suitable packages have things like
translations separated out into TDebs and other things like images in a
-data or -common package instead of being packaged along with the
architecture-dependent binaries, conflicts will occur if /usr/share is
used as intended.

Personally, I think it is better to avoid the need for complicated
changes to diversions, alternatives or Replaces: if a simpler change in
the packaging can achieve a smoother effect overall - albeit that the
change in packaging would affect a lot more packages. Multiarch isn't
needed for every possible package - not even every lib package or every
binary package, changes can be made in the relevant package when people
find a need to use that package as a multiarch package.

 
 [...]
 
 | BTW I think it is a mistake to want to use /usr/lib/i386/ when it is
 | entirely possible that multiarch users will actually need the full
 | triplet - think about hurd or kfreebsd as multiarch packages.
 
 I don't believe anybody has suggested using just /usr/lib/i386, but
 rather /usr/lib/i486-linux-gnu?

OK - as I said, my connection has been flaky and I might have missed
that bit.


-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Re: Multiarch and idea for improved diversions and alternatives handling

2008-07-03 Thread Neil Williams
On Tue, 2008-07-01 at 18:44 +0200, Goswin von Brederlow wrote:
 James Vega [EMAIL PROTECTED] writes:
 
  On Sat, Jun 28, 2008 at 02:03:05AM -0700, Steve Langasek wrote:
  So if we allow multiple packages to be installed at the same time which
  divert the same file, then I think we have another case for wanting to
  continue supporting an optional diversion target - or at least for not 
  using
  .diverted by default, since we wouldn't want diversions from multiple
  packages to collide.  Maybe .diverted-$package, then?

(My internet connection has been very flaky since this thread started
and I have only been able to post intermittently so apologies if this
appears to be late or out-of-sync with other posts.)

Just a thought - why use /usr/lib/$ARCH and /usr/include/$ARCH at all
when it would (IMHO) be simpler to use /usr/$TRIPLET/ and put the entire
package under that, as we do with dpkg-cross currently:

/usr/lib/
/usr/arm-linux-gnu/lib/

/usr/include/
/usr/arm-linux-gnu/include/

multiarch could even add:
/usr/share/
/usr/arm-linux-gnu/share

This adds only one new directory, it keeps the main contents of the
package in a single location (making it easier to manage and parse
things like dpkg -L) and it means less changes for existing packages
that use these paths already.

It also means no need for extra diversions at all, no need for Replaces:
and no headaches when removing the multiarch vs removing the primary
package etc.

BTW I think it is a mistake to want to use /usr/lib/i386/ when it is
entirely possible that multiarch users will actually need the full
triplet - think about hurd or kfreebsd as multiarch packages.

  There are two use cases to consider regarding multiple packages and
  diversions.
 
  1) Multiple packages installing a file that has been diverted.
  Currently, there is only one divert to filename so you'll end up
  losing data once the second diverted file is installed.  This could be
  alleviated by instead basing the divert to filename on the package
  which contains the file being diverted (as you suggest above).
 
  There's still the problem of what to do when the package providing the
  diversion is uninstalled as now you have conflicting packages.
  Actually, you already had conflicting packages that just weren't
  affected yet because of the diversion, which leads to 2).

If the multiarch package can be installed alongside the primary without
any conflicts by using /usr/$triplet instead, then the need for the
diversion and consequent hacks goes away entirely.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Re: Another multiarch decision

2008-06-26 Thread Neil Williams
On Thu, 2008-06-26 at 14:56 +0200, Goswin von Brederlow wrote:
 Raphael Hertzog [EMAIL PROTECTED] writes:
 
  On Thu, 26 Jun 2008, Goswin von Brederlow wrote:
  So I think for Multi-Arch: abi packages the /usr/share/doc/package
  in its entirety should be renamed and now there is a choice to make:
 
  I like none of your suggestions. I'd like to suggest to rely on the
  work done by Tollef that lets dpkg skip some files in packages. The first
  purpose was to strip doc and locale data in some embedded usage
  but it could be improved with new rules that exclude such common
  name spaces for package which are for another architecture
  than the current one.
 
  Cheers,
 
 So when I install iceweasel 32bit on amd64 (for stupid plugins) I will
 have no copyright, changelog nor license? I doubt that would be legal.
 Even for libaries there is no garanty that the native flavour of a
 library will be present when another architectures flavour is
 installed.

Your use case is a touch unusual (from my perspective anyway) - current
behaviour (via dpkg-cross) is focused on only providing the binaries of
a particular package for purposes of linking during cross builds, in
which case dropping everything not related to linkage is the obvious
solution, hence dpkg filtering and dpkg-cross.

Similarly, many multiarch dpkg runs will take place in a temporary
chroot during a cross-build - there isn't a need for any copyright or
changelog files in that situation. (Currently, these -cross packages are
generated on-the-fly from the Debian mirrors for the requested
architecture, obtained using apt-cross).

Actually running foreign binaries involves a different set of problems
(and dependencies). iceweasel 32bit on amd64 isn't what I would think of
as the typical use of dpkg multiarch support. If we are to continue
migrating dpkg-cross into dpkg, the multiarch support will need to
support installing ARM packages on amd64 and i386 - not for the purposes
of running them via qemu or anything else, purely for the purposes of
linking against them during builds.

 If a user wants to skip them that is their problem but Debian shipping
 a dpkg that skips them allways or by default would be problematic.

(Although common in a variety of embedded installations so by no means a
deal-breaker.)

Besides, dpkg-cross has been in Debian for a decade with the default
action doing precisely this kind of stripping:

$ dpkg -L libqof1-arm-cross
/.
/usr
/usr/arm-linux-gnu
/usr/arm-linux-gnu/lib
/usr/arm-linux-gnu/lib/libqof.so.1.0.10
/usr/share
/usr/share/doc
/usr/share/doc/libqof1-arm-cross
/usr/share/doc/libqof1-arm-cross/README
/usr/arm-linux-gnu/lib/libqof.so.1


 Can you give me an url for Tollefs work? Maybe that can be used to
 rename by default.

See this thread in the dpkg list archives:

http://lists.debian.org/debian-dpkg/2008/01/msg1.html

And some other links for background:
http://www.linux.codehelp.co.uk/serendipity/index.php?/archives/25-dpkg-filtering.html
http://www.emdebian.org/docs/howto-4.html


-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Re: Another multiarch decision

2008-06-26 Thread Neil Williams
On Thu, 2008-06-26 at 14:56 +0200, Goswin von Brederlow wrote:
 Can you give me an url for Tollefs work? Maybe that can be used to
 rename by default.

See this thread in the dpkg list archives:

Try this one instead:
http://lists.debian.org/debian-dpkg/2008/01/msg00011.html


-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Re: Another multiarch decision

2008-06-26 Thread Neil Williams
On Thu, 2008-06-26 at 10:45 -0400, Felipe Sateler wrote:
 Goswin von Brederlow wrote:
 
  Raphael Hertzog [EMAIL PROTECTED] writes:
  
  On Thu, 26 Jun 2008, Goswin von Brederlow wrote:
  So I think for Multi-Arch: abi packages the /usr/share/doc/package
  in its entirety should be renamed and now there is a choice to make:
 
  I like none of your suggestions. I'd like to suggest to rely on the
  work done by Tollef that lets dpkg skip some files in packages. The first
  purpose was to strip doc and locale data in some embedded usage
  but it could be improved with new rules that exclude such common
  name spaces for package which are for another architecture
  than the current one.
 
  Cheers,
  
  So when I install iceweasel 32bit on amd64 (for stupid plugins) I will
  have no copyright, changelog nor license? I doubt that would be legal.
  Even for libaries there is no garanty that the native flavour of a
  library will be present when another architectures flavour is
  installed.
  
  If a user wants to skip them that is their problem but Debian shipping
  a dpkg that skips them allways or by default would be problematic.
 
 Maybe install the first one and skip the next? ie, if I install iceweasel 32
 bits first, then /u/s/d/iceweasel gets installed. When I install the amd64
 version, /u/s/d/iceweasel gets skipped.
 
 Another option would be for dpkg to automatically assume that each arch
 Replaces: the same package for other archs, and so it will just overwrite said
 files.

If we are to have automated Replaces:, wouldn't it make sense to assert
that the primary arch replaces all other architectures?

i.e. in the same manner as the buildd allows Architecture: all uploads
for the first upload but requires -B builds for the ports.

Whichever is the primary system architecture (according to
dpkg-architecture when passed no arguments) has first call on all files
installed for that architecture - everything else is deemed to be
replaced by the primary. In the case of conflict or Replaces: the files
stay under the ownership of the primary architecture.

The problem with arbitrary or sequential decisions on Replaces: is that
whichever package finally gets the flag ends up with ownership so if
the user removes the multiarch but leaves the primary, the files are not
put back because Replaces: is already in effect.

If users install a multiarch version without the primary version, is
that something dpkg even needs to worry about? The default (to me)
should be to preserve the primary architecture and ensure that if the
multiarch package is purged, the primary architecture package is still
in a pristine state. Allowing the multiarch to Replace: the primary will
only ensure that the primary arch package is always incomplete if the
multiarch is ever removed. 

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Bug#180128: state of integration of dpkg-cross into dpkg

2008-06-22 Thread Neil Williams
tag 180128 - patch
thanks

The bulk of the patch is now out of date but rather than spend time
updating the patch, work is ongoing to merge the existing dpkg-cross
package (which includes all the cache values and architecture support)
into dpkg itself, sometime after Lenny.

dpkg-buildpackage -a is working due to other bug fixes in dpkg (=
1.14.17) and the use of dpkg-cross.

The idea behind this bug is still open but the patch itself is too out
of date to be useful (not the fault of the submitter), other methods are
being followed to achieve the long term goal and a working solution does
already exist.

Far better, in my view, to remove the 'patch' tag from this report, keep
it open as wishlist and I'll merge it with the eventual bug report that
implements an updated patch (arranged with Guillem) that fully merges
dpkg-cross into dpkg and then remove dpkg-cross (and apt-cross) from
unstable.

The main issue unresolved in this bug report is the mapping
of /usr/lib/foo.so to /usr/arm-linux-gnu/lib/foo.so for packages that do
not use pkg-config (e.g. I'm having upstream problems trying to
configure a package that build-depends on Postgres and ODBC using
pg_config and iodbc-config respectively).

dpkg-cross implements a workaround solution (gccross) but the real fix
is getting exec-prefix support in such config scripts and in other
situations where a package build mistakenly looks in /usr/lib/ during a
cross-build due to some problem with FOO_LIBS settings.

A variation of that bug is internal libraries within packages (either
where the package builds a library and a binary or builds more than one
library and one library depends on at least one of the others). gccross
assists in this situation too but, again, upstream support will be
needed for some of these packages.

Support for removing dpkg-cross entirely is therefore far from complete
(even without considering the other use of dpkg-cross in making the
-cross packages available in /usr/arm-linux-gnu/lib in the first place)
and the patch in this bug report is certainly insufficient (and was when
originally posted IMHO).

More information on dpkg-cross, apt-cross, cross-building in general and
issues relating to how Debian can be made easier to cross-build, see
http://www.emdebian.org/

Just in the last few weeks, it has become possible to track the
cross-builds of packages in Emdebian - 230 source packages are currently
supported with manual builds, maybe 60% will cross-build without
intervention and this proportion will increase over time. (The main
purpose of the autobuilder so far is simply to make the build logs
available and help me find the packages that need fixes.)

http://www.emdebian.org/buildd/


-- 
Neil Williams [EMAIL PROTECTED]





-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: Generated changes and patch systems

2008-05-27 Thread Neil Williams
On Sun, 2008-05-25 at 08:40 -0700, Russ Allbery wrote:
 Neil Williams [EMAIL PROTECTED] writes:
  On Sun, 2008-05-25 at 13:19 +0100, Mark Brown wrote:
 
  If you run autotools at build time you should also ensure that the
  changes which autotools makes are reverted in the clean target.  This
  means that your diff doesn't get cluttered with automatically generated
  things and ensures that repeated builds of the package produce the same
  diff.gz.
 
  I haven't seen any other packages doing that - is there an example
  involving aclocal.m4 somewhere?
 
 Lots of other packages do this -- one of mine off the top of my head is
 xml-security-c.

Nope. No mention of aclocal.m4 in debian/rules for that package,
just /usr/share/misc/config.guess and config.sub.

I need to patch configure and configure.ac in this package, that means
that aclocal.m4 is constantly being changed and reverted. It shouldn't
matter - it really should not.

I see no purpose in lintian (or dpkg come to that) testing for changes
in aclocal.m4 - IMHO it should simply be exempt from this check. No
distro can risk patching aclocal.m4 - by it's nature it is transient and
volatile and subject to large changes entirely at the mercy of external
factors. Any build system that tries is simply going to break
constantly, AFAICT.

No matter how I wrap the cp foo foo.safe mv foo.safe foo in
debian/rules, the first build can be OK but all subsequent builds end up
with aclocal.m4 in the .diff.gz. Besides, replacing aclocal.m4 after it
has just been updated by ./configure is not a good idea to me.

  I really don't want to do all that for the tmpl/* files as well - I
  don't see the need, copying dozens of files into foo.safe or
  foo.upstream and then moving them back?
 
 Just delete them then.

??? That simply does not work. The problem is that running gtk-doc not
only requires tmpl/*.sgml files to exist but it *then modifies them*!
Even though I don't install these files into the package, I cannot
delete them and I cannot move them out of the way or the documentation
is not updated. Again, first build can be OK, second build generates a
dozen spurious warnings (because the files are modified after
the .diff.gz is created but cannot be reliably reverted before the next
build).

I don't see that I should provide out-dated documentation (by dropping
--enable-gtk-doc) just because it suits lintian - neither can I patch
the updates because the updates themselves are generated by a third
party tool so I can neither control the changes made nor maintain
clean patches. I suspect the issue arises because upstream happen to
prepare the release tarballs on Ubuntu or Fedora where the tool version
differs. The precise reason is inconsequential - the problem is that
Debian should not need to care about these modifications. It's taking
'divergence' one stage too far.

With these gtk-doc files, it's not so much that the tmpl/*.sgml files
are generated but that a tool essential to the build modifies them in a
way that cannot be patched because the results of the patches are
variable according to that third party tool. The changes then affect the
files that are packaged. Some of these are formatting changes -
whitespace changes, extra lines, comment changes. Other changes cause
sections or entire pages to migrate within the final files. The sense
of the docs doesn't appear to change, just the internal structure - as
determined by the differing versions of the tools used.

The CDBS build doesn't do anything different - it's just that lintian
doesn't produces any warnings for this check in CDBS packages, ever.

 The point is to not put mechanically generated changes in the diff, since
 it makes it much harder to review what the maintainer has actually done.

I don't see how it can be prevented. Take a look at the current .diff.gz
for libgpewidget 0.115-5 in the archive.

 I think most people take the approach of just deleting such files in the
 clean target, which will exclude their changes from the diff.

Sorry, it is not as simple as that - the package simply won't build if
tmpl/*.sgml are removed, no rule to make tmpl/*.sgml.

The tmpl/*.sgml files cannot be cleaned and removing aclocal.m4 is
simply pointless (and creates an even larger .diff.gz).

I still don't see what problem this test is trying to solve - AFAICT the
problem didn't exist in the first place and all this extra work appears
pointless.

I still think patch-system-but-direct-changes-in-diff should be
downgraded to info only, if kept at all.

I fail to see what I'm doing wrong - or even why it matters to lintian.

We risk swapping a minor problem that only occurs when the maintainer
upgrades from one version to another (and which could be fixed by
dpkg-source ignoring changes to generated files in the .diff.gz or not
applying generated changes that do exist in the .diff.gz) for a major
FTBFS error every time some random third party package is updated by
erroneously patching files that contain generated

Re: Transition to GNU's install-info (was: Removing cleanup-info)

2008-05-22 Thread Neil Williams
On Thu, 2008-05-22 at 16:36 +0200, Sven Joachim wrote:
  Agreed. Guillem wanted to remove it once the install-info issue had been
  sorted. But progress has been slower than expected on this front. I'm
  never quite sure if GNU's install-info has all the features now and what
  the next step is... maybe you could lead that effort?
 
 From the texinfo NEWS file and the output of the respective
 `install-info --help' commands, I get the impression that all options of
 dpkg's install-info are supported in texinfo's install-info as of
 version 4.12 (which is not packaged for Debian yet).  So, in principle
 it would be possible to switch to GNU's install-info now¹ with the
 following steps:
 
 - create a separate install-info package from the texinfo source that
   Replaces: dpkg ( 1.15.0)
 
 - remove {cleanup,install}-info files from dpkg and let dpkg 1.15.x
   pre-depend on install-info
 
 But another question is: what exactly do we want from install-info?

The ability to omit it entirely if DEB_BUILD_OPTIONS specifies nodocs.
From an Emdebian perspective, I would rather that dpkg did not
pre-depend on install-info - rather dpkg should be able to operate
without install-info ever existing. Not every usage of dpkg wants info
documents as well.

Currently, despite removing info documents from the rebuilt packages and
install-info calls from maintainer scripts, I still need to have a
useless /usr/bin/install-info containing #!/bin/sh - it would be nice to
not require such a hack, merely to dump documentation.

 Another feature that would be very desirable is triggers support.  In
 the long run, install-info should probably not be Priority: Required, as
 it's only useful if a package providing info-browser is installed.

Agreed.

-- 
Neil Williams [EMAIL PROTECTED]


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: Dpkg + Architecture limitations

2008-05-07 Thread Neil Williams
On Wed, 2008-05-07 at 10:13 +0300, dani wrote:
 Good Morning, 
 
 I have compiled a uclibc based system 

I think you should probably be asking this on the debian-embedded list.

http://lists.debian.org/debian-embedded/

uClibc is not in Debian at this time and dpkg does not have explicit
support for it yet. dpkg-cross is probably where you would start with
uClibc requirements.

Debian-embedded looks after dpkg-cross and I'm currently doing most of
the work on the source code for it.

 and I want to use dpkg as the package 
 manager. My config.site is;
 host=$(uname -m)-anchor-linux-uclibc

Why put 'anchor' in there? To what does anchor refer? A uClibc
architecture string is not specific to one particular machine. It should
specify the CPU (i486 because i686 is not a distinct architecture from
i486 which in turn is not distinct from i386), the kernel and the OS
suffix.

 build=$host
 target=$host
 ac_cv_host=$host
 ac_cv_build=$build
 ac_cv_target=$target 

That doesn't look right to me. Where did you find this snippet?

dpkg-cross does not use system-level config.site files of that type
anymore. The i386 config.site data is:

#
# i386 specific configure variables
#
# If you have additions to this file, please tell [EMAIL PROTECTED]
# so they can be included in the package.
#
ac_cv_c_bigendian=no
ac_cv_c_char_unsigned=no
ac_cv_sizeof_long_long=8
ac_cv_sizeof_unsigned_long_long=8
ac_cv_sizeof_long=4
ac_cv_sizeof_unsigned_long=4
ac_cv_sizeof_int=4
ac_cv_sizeof_unsigned_int=4
ac_cv_sizeof_short=2
ac_cv_sizeof_unsigned_short=2
ac_cv_sizeof_short=2
ac_cv_sizeof_unsigned_short=2
ac_cv_sizeof_float=4
ac_cv_sizeof_double=8
ac_cv_sizeof_long_double=12

Nothing in that file is any different on i486, i686 or uClibc.

 My machine architecture is i686 (output of uname -m). 

I think you may be confusing things - to build uClibc packages on an
i686 machine that will run on i386 machine, you don't need config.site.

The experimental uClibc support in emdebian-tools uses an existing
toolchain (cross building toolchain if necessary) and simply bolts-on
uClibc support to that toolchain.

This snippet gives you your proper architecture string:

$ perl -e '$u=i486-linux-gnu; $u =~ 
s/([[:alnum:]]*)-([[:alnum:]]*)-gnu(.*)/$1-$2-uclibc$3/; print $u\n;'
i486-linux-uclibc

The value to pass to $u is the value from:
$ dpkg-architecture -ai386 -qDEB_HOST_GNU_TYPE

Take a look at the source code for emchain in current SVN for
emdebian-tools:

http://buildd.emdebian.org/svn/browser/current/host/trunk/emdebian-tools/trunk/emchain#L698

 My problem is; when  I run the configure script (dpkg-1.14.15), I get the 
 following warnings; 
 
 configure: loading site script /usr/share/config.site
 checking build system type... (cached) i686-anchor-linux-uclibc
 checking host system type... (cached) i686-anchor-linux-uclibc
 checking target system type... (cached) i686-anchor-linux-uclibc

That is plain wrong, sorry.

Call ./configure with:
--build=i486-linux-gnu --host=i486-linux-uclibc

(Just don't use config.site to do it.)

With a correctly setup uClibc environment using emchain to munge the gcc
specs files, that would be all you need. No config.site.

 What should I add to the ostable, triplettable, and cputable files to get 
 rid of the above warnings?

Nothing. The warnings, AFAICT are correct, your original approach seems
wrong.

-- 
Neil Williams [EMAIL PROTECTED]


signature.asc
Description: This is a digitally signed message part


Bug#476530: control field to tell that cross-building is not possible

2008-04-17 Thread Neil Williams
 \
--disable-debugging --sysconfdir=/var/lib/ntp \


The remaining problem is how to cope with these cache-files
for ./configure data that would normally be determined by running a
binary compiled during the ./configure operation. Cache files are a bit
of a hack really and risk going stale in some circumstances.

I'm investigating any other methods if anyone has ideas

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Bug#476530: control field to tell that cross-building is not possible

2008-04-17 Thread Neil Williams
On Thu, 2008-04-17 at 13:14 +0200, Peter Eisentraut wrote:
 Package: dpkg-dev
 Version: 1.14.16.6
 Severity: wishlist

I've just noticed that despite the matter being a problem in ntp, this
bug was filed against dpkg-dev and at 1.14.6.6 when 1.14.18 contains
changes that directly improve the cross-build support for packages like
ntp.

*ALL* the remaining issues in crossbuilding ntp lie solely within the
ntp package - namely debian/rules.

I think this bug should be closed forthwith. dpkg-dev has already done
everything necessary to support cross-building on Lenny in 1.14.18.

As outlined already, I'm more than happy to supply a patch for ntp.
Sorry that the patch went to this report instead of #315935.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Bug#456332: support for an option to drop lzma during rebuilds?

2008-04-01 Thread Neil Williams
Just my 2p, from an embedded angle, it would be very useful if all the
lzma options can be turned off (cleanly and reproducibly) when
rebuilding / crossbuilding the package because if lzma is used too
widely it could easily overwhelm embedded devices with limited memory.

Pre-Depends isn't an issue for Emdebian, what worries me is a previously
working Emdebian package set suddenly needing a four fold increase in
memory requirements just to upgrade a handful (or even single) package.
We can't just add more RAM to embedded devices! ;-o

Ideally, something in DEB_BUILD_OPTIONS would be very helpful, which
means allowing debian/rules complete control over whether lzma is used
or not and all consequent changes. Then a simple check for 'nolzma' in
DEB_BUILD_OPTIONS can turn off all the lzma features and revert to gzip.

The Ubuntu page also talks about using lzma for the Packages file in
repositories to save download time - the risk of making it impossible
for low memory devices to actually then unpack the Packages file worries
me a lot so a duplicate file is probably best for that (but is off-topic
for this bug).

It would be a shame to fix important cross-building bugs in one release
and then undermine using dpkg on devices that require crossbuilt
packages in the next.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Bug#439979: extra setting for Architecture:all pkgconfig data

2008-03-28 Thread Neil Williams
On Fri, 2008-03-28 at 14:43 +0100, Raphael Hertzog wrote:
 On Tue, 01 Jan 2008, Neil Williams wrote:
  The full setting for PKG_CONFIG_LIBDIR is:
  
  $ENV{PKG_CONFIG_LIBDIR}=/usr/$(DEB_HOST_GNU_TYPE)/lib/pkgconfig/:/usr/share/pkgconfig/;
  
  Adding /usr/share/ allows the few Architecture: all packages that
  contain pkgconfig data to be located during cross builds. (e.g.
  gnome-mime-data).
 
 Please review the attached patch. I hope it does what you want.
 If it works for you, then I'll integrate it for the next dpkg.

It works perfectly, thanks Raphael.

I've been testing it on a variety of existing Emdebian packages and it
works exactly as requested.

 Having the opinion of Frank and Guillem would be nice too.
 
 I believe it's worthwhile to try to get those changes for lenny. 

Closing this and #453267 would provide sane cross-building support
native to dpkg in Lenny and that is fantastic news. It may not sound
like a big event to the rest of Debian, but IMHO this warrants being
listed as one of the major improvements between Etch and Lenny for
anyone interested in embedded development.

 I have no definitive opinion on this particular patch, but it's important
 to have a sane cross-compilation toolchain and if that helps Neil, then
 I'm ok for it.

I may be the one filing the bugs but there are lots of other people who
want to use Debian as their platform-of-choice when developing embedded
software.

Thanks for committing this improvement to dpkg!

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Bug#453267: dpkg-shlibdeps and cross-building

2008-03-28 Thread Neil Williams
On Thu, 2008-03-27 at 22:54 +0100, Raphael Hertzog wrote:
 Hi,
 
 On Tue, 04 Dec 2007, Neil Williams wrote:
  It does apply against dpkg 1.14.12 (albeit with offsets), it was
  developed against 1.14.11.
 
 I have merged a variant of this patch this evening:
 http://git.debian.org/?p=dpkg/dpkg.git;a=commitdiff;h=626dda6f55bb7fb025be6a7c276651df884ac8a1
 
 Can you check that it works as you want?

I have been testing this with a variety of packages, including
reverse_cross builds and cross-compiler builds of gcc-4.2 (there are
upstream problems with gcc-4.3 right now) and a mix of other Emdebian
packages and it works perfectly.

Thanks for committing this fix, it will help Emdebian enormously.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Re: debconf: Bad file descriptor

2008-01-09 Thread Neil Williams
On Wed, 2008-01-09 at 12:28 +, Alex Gonzalez wrote:
 Hi,
 
 Please redirect me to the correct list if this happens to be off-topic here.
 
 A post installation script on a private debian package performs the following:
 
 mount /dev/hda2 /mnt/hda
 mount -t proc none /mnt/hda/proc
 chroot /mnt/hda /bin/bash -c 'apt-get install portmap'

chroot /mnt/hda apt-get install portmap

You shouldn't need the extra shell.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Re: Review of file exclusion branch requested

2008-01-05 Thread Neil Williams
On Sat, 2008-01-05 at 09:48 -0200, Otavio Salvador wrote:
 Tollef Fog Heen [EMAIL PROTECTED] writes:
 
  Hi,
 
  I've finally gotten around to fixing up my support for excluding bits
  of packages as they are unpacked.  It can be gotten from
  git://git.err.no/dpkg in the master branch (sorry about that, it
  should probably have gone in a separate branch).
 
 What would be the usage scenario for it? Embedded devices?

Yes, it was originally something that I set out to do at DebConf7 but
Tollef came up with a better implementation of my patch.

Once dpkg filtering is supported upon installation, I'll be looking at
extending Tollef's work into filtering upon build so that I can further
reduce the number of patches required to strip out unwanted components
of Debian packages for Emdebian, in conjunction with support for noudeb,
nodocs etc.

dpkg-filtering upon installation isn't a complete solution for embedded
devices because the device still has to download the entire package and
unpack it - it is better to combine installation filtering with
rebuilding the package upstream so that the device actually has room to
unpack the .deb before starting filtering. Nevertheless, filtering is a
powerful addition to embedded support in dpkg and Debian, especially for
packages that contain lots of small files to be filtered out and where
patches to remove those files are unnecessarily intrusive. (I'm thinking
here of package files that Debian must include, due to Policy, but which
Emdebian and others can actually do without.) However, for more powerful
embedded devices, dpkg filtering may be all they need to be able to run
normal Debian packages.

Other uses include easier support for testing package changes such as
splits and moving files between packages or replacing the static
Essential list with a volatile list of packages selected during the
installation. e.g. Emdebian already disregards Essential in order to
reduce the size of the root filesystem - however the idea of Essential
is still useful so Emdebian is considering how to implement a
device-specific Essential list that is much smaller than the current
Debian default. After all, apt doesn't care whether a package is
Essential to your machine when running on my machine - it only cares
about what is Essential to the current device.

I can envisage testing for package splits by filtering out certain
package components during install, seeing which applications actually
need those components and thereby devising a new package split that
operates on a *functional* basis instead of an archive basis.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: This is a digitally signed message part


Bug#439979: extra setting for Architecture:all pkgconfig data

2008-01-01 Thread Neil Williams
The full setting for PKG_CONFIG_LIBDIR is:

$ENV{PKG_CONFIG_LIBDIR}=/usr/$(DEB_HOST_GNU_TYPE)/lib/pkgconfig/:/usr/share/pkgconfig/;

Adding /usr/share/ allows the few Architecture: all packages that
contain pkgconfig data to be located during cross builds. (e.g.
gnome-mime-data).

-- 

Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/


pgpY6CEFJ1uNo.pgp
Description: PGP signature


Re: Why does dpkg invoke find instead of doing own searches?

2007-12-12 Thread Neil Williams
On Wed, 12 Dec 2007 10:11:37 +
Phil Lello [EMAIL PROTECTED] wrote:

 Hi all,
 
 Can someone clarify for me why dpkg invokes 'find' to search for
 files, instead of having it's own code?

Why have two versions of the same code?

Is there a library that would do the same job? (Would it be sensible to
use it if there was? I guess it would be OK if the library was built
from the 'find' source.)

Is there a problem with invoking find?

busybox provides find if you don't want to install findutils (as in
Emdebian). It would be a very strange GNU/Linux box that did away with
some kind of find functionality.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgpCHCC6KTtZ4.pgp
Description: PGP signature


Bug#453267: tested patch

2007-12-09 Thread Neil Williams
Raphael Hertzog wrote:
 On Sun, 09 Dec 2007, Neil Williams wrote:
 Emdebian cannot build, patch or test every permutation of toolchain that
 people need so this isn't about us patching locally, it is about
 lowering the barrier to cross building on Debian by not forcing every
 user to patch locally. This is why we are at the current impasse - too
 many permutations.
 
 Emdebian provides ready to use cross compiler. You can also provides
 ready-to-use source packages for building other cross-compilers that are
 not yet provided.

? You make it sound as trivial as providing a web page.

Emdebian provides a small selection of binary toolchains containing
selected cross compilers. Extending that range is a truly massive
undertaking that nobody has the time to do. There are no usable
toolchain-source packages anymore - unmaintainable - we can provide
simple scripts that can assist in building a variant toolchain but we do
not provide ready-to-use source packages for building cross compilers.

The major reason why this is so much work is because the necessary
changes have not been incorporated into dpkg and we end up having to
patch a patch of a diversion of a patch.

Emdebian has quite a good relationship with the gcc maintainers and our
patches are generally welcome but that does not diminish the amount of
time involved in making a tested patch in the first place. Emdebian only
has enough developer time to derive patches for the latest versions of
gcc and even then it can be difficult to keep up with gcc releases. We
look forward to the stability of the pre-Lenny freeze because we know
that we can catch up and get a stable set of toolchains for unstable and
testing, all thoroughly tested and fixed. Then as soon as Lenny comes
out, we'll be swamped by gcc changes again. (We, in this case, equals
Hector Oron, myself and Wookey - gcc has a much larger team just for
itself.)

 Why propose changing every version of gcc (a process that could take
 extreme amounts of time to test, implement and get into testing) and
 then make it impossible to build cross compilers in Etch? Are we looking
 at backports as well?? Who is going to do all that work? (Not me, before
 anyone asks.)
 
 ARCH is a very generic environment variable that might be set for some
 other reasons (I use it for example in debian-cd) and I don't like to
 change the behaviour of dpkg-shlibdeps just because it's set. IMO,
 there should be a single check to activate cross-building support

cross building != building a cross compiler, as I've said many times.

A single check for cross building is already in place -
DEB_BUILD_GNU_TYPE != DEB_HOST_GNU_TYPE

I created a patch for that in gcc for reverse cross support, it is
included in gcc-4.2.

A mass bug filing is already under way to implement this single check
for cross building support across Debian. The patch to dpkg-shlibdeps
contains a part of that support.

Cross building gcc is NOT the problem. gcc now cross builds just like
any other package in Debian. If reverse cross support in Debian goes
wrong, I'll fix it. I've no problem with that.

Building a cross compiler is a completely separate task and one that has
only become a problem *after* changes in dpkg made the dpkg-cross
diversions impractical.

 and gcc's crossbuild should provide the right variables.

It does, thanks to the reverse cross support in gcc-4.2. Thankfully, we
don't need reverse cross support in 4.1 or earlier. (Well, it would be
nice if it could happen but then nobody has the time to do it so ...)

 I'm ok with a
 supplementary specific check for building of a cross-compiler, but not
 with a generic check like testing the ARCH environment variable.

OK, I have a solution for that - replace $ARCH with $GCC_TARGET.

I've tested with this change to the patch for scripts/Dpkg/Shlibs.pm

# GCC_TARGET for cross compiler builds
my $crossprefix = Dpkg::Arch::debarch_to_gnutriplet($ENV{GCC_TARGET}) if
($ENV{GCC_TARGET});
...

I went for ARCH before because, in the context of building a cross
compiler, ARCH is only set at certain times. GCC_TARGET is set at the
beginning and is present throughout the build. This means that the
patched dpkg-shlibdeps behaves much more like the original diversion
from dpkg-cross - it effectively extends the list of directories
searched by dpkg-shlibdeps to include the ${crossprefix} ones for every
call throughout the entire build. It may slow things down a little bit
but building a cross compiler isn't exactly quick anyway. It is far more
important that the build completes than shaving a few more seconds off
the build time.

 Furthermore, all the cross-building support in gcc has been contributed
 by various Emdebian people (according to doko), so it looks like Emdebian
 is also able to fix gcc in that regard if needed.

Those fixes (or hacks) were implemented piecemeal over many years and
the cross building support in Emdebian has recently been rewritten so
some of those hacks (i.e. the dpkg-cross

Bug#453267: tested patch

2007-12-09 Thread Neil Williams
Raphael Hertzog wrote:
 On Sun, 09 Dec 2007, Neil Williams wrote:
 I'm ok with a
 supplementary specific check for building of a cross-compiler, but not
 with a generic check like testing the ARCH environment variable.
 OK, I have a solution for that - replace $ARCH with $GCC_TARGET.

 I've tested with this change to the patch for scripts/Dpkg/Shlibs.pm

 # GCC_TARGET for cross compiler builds
 my $crossprefix = Dpkg::Arch::debarch_to_gnutriplet($ENV{GCC_TARGET}) if
 ($ENV{GCC_TARGET});
 ...

 I went for ARCH before because, in the context of building a cross
 compiler, ARCH is only set at certain times. GCC_TARGET is set at the
 beginning and is present throughout the build. 
 
 If I understand you correctly, we can check for GCC_TARGET only and we
 don't need to check DEB_TARGET_GNU_TYPE != DEB_BUILD_GNU_TYPE.

What's the obsession with cutting components out of the patch?? I'm
confused.

dpkg-shlibdeps should at least *support* the right way of doing
things, even if the packages currently do not use that. At least it
supports a migration route away from GCC_TARGET for future releases of
gcc. GCC_TARGET is a hack, yes, but we need it around for older
compilers that simply aren't going to get fixed. It would be nice to
provide a migration path to do it TheRightWay(TM) eventually because
that only means changing the latest version of gcc (probably 4.3) and we
can do that in the Lenny freeze when everything else gets easier too. I
don't want to have to go through all this again. GCC_TARGET is likely to
be around until gcc-4.3 gets into oldstable but that's a small price to
pay, IMHO. (It's been around for as long as dpkg-cross which is a decade
so a bit longer isn't going to hurt.)

 Is that correct and does that work ?

I don't believe it is correct but it happens to work - for now.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: OpenPGP digital signature


Bug#453267: tested patch

2007-12-08 Thread Neil Williams
Raphael Hertzog wrote:
 On Wed, 05 Dec 2007, Neil Williams wrote:
 My first patch did exactly that - and failed on building a cross
 compiler. gcc needs dpkg-shlibdeps to take notice of $ARCH in the
 preparation of libgcc1-$arch-cross and other libraries used in the
 complete toolchain. It needs (and sets) DEB_TARGET_GNU_TYPE !=
 DEB_BUILD_GNU_TYPE at other stages of the build.
 
 If that's the case, I'd like to know if this is deliberate and really
 required... can't the gcc package be consistent and always have both
 DEB_TARGET_GNU_TYPE and DEB_BUILD_GNU_TYPE properly set ?

Even if gcc changes that behaviour in 4.2 (or 4.3), lots of people still
need to be able to build cross compilers from older versions of gcc,
especially 4.1 and some even need 3.3 or 3.4.

Emdebian still hosts 4.1 and 3.4 toolchains:
http://www.emdebian.org/toolchains/search.php?package=gcc-3.4-arm-linux-gnu

It's not sensible to say that these cannot be built in the future
without writing a whole new diversion for dpkg-shlibdeps. Emdebian and
lots of other people doing cross building need backwards compatibility here.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: OpenPGP digital signature


Bug#453267: tested patch

2007-12-04 Thread Neil Williams
Hector and I have tested this patch with normal builds, cross builds
and cross compiler builds.

It does apply against dpkg 1.14.12 (albeit with offsets), it was
developed against 1.14.11.

-- 

Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/
--- dpkg.old/scripts/Dpkg/Shlibs.pm	2007-11-23 02:42:51.0 +
+++ dpkg-1.14.11/scripts/Dpkg/Shlibs.pm	2007-11-28 22:06:15.0 +
@@ -25,11 +25,28 @@
 use Dpkg::Gettext;
 use Dpkg::ErrorHandling qw(syserr);
 use Dpkg::Shlibs::Objdump;
+use Dpkg::Arch;
 
 use constant DEFAULT_LIBRARY_PATH =
 qw(/lib /usr/lib /lib32 /usr/lib32 /lib64 /usr/lib64
/emul/ia32-linux/lib /emul/ia32-linux/usr/lib);
-our @librarypaths = (DEFAULT_LIBRARY_PATH);
+my @shlibdeps=();
+# ARCH for some awkward builds
+my $crossprefix = Dpkg::Arch::debarch_to_gnutriplet($ENV{ARCH}) if ($ENV{ARCH});
+# host for normal cross builds.
+$crossprefix = $ENV{DEB_HOST_GNU_TYPE}
+if (($ENV{DEB_HOST_GNU_TYPE}) and ($ENV{DEB_HOST_GNU_TYPE} ne $ENV{DEB_BUILD_GNU_TYPE}));
+# target when building a cross compiler
+$crossprefix = $ENV{DEB_TARGET_GNU_TYPE}
+if (($ENV{DEB_TARGET_GNU_TYPE}) and ($ENV{DEB_TARGET_GNU_TYPE} ne $ENV{DEB_BUILD_GNU_TYPE}));
+if ($crossprefix)
+{
+@shlibdeps = ( ${crossprefix}/lib, /usr/${crossprefix}/lib,
+/${crossprefix}/lib32, /usr/${crossprefix}/lib32,
+/${crossprefix}/lib64, /usr/${crossprefix}/lib64,
+/emul/ia32-linux/lib, /emul/ia32-linux/usr/lib );
+}
+our @librarypaths = ((DEFAULT_LIBRARY_PATH), @shlibdeps);
 
 # Update library paths with LD_LIBRARY_PATH
 if ($ENV{LD_LIBRARY_PATH}) {


pgpRmMrVgW4AO.pgp
Description: PGP signature


Bug#453267: tested patch

2007-12-04 Thread Neil Williams
Frank Lichtenheld wrote:
 On Tue, Dec 04, 2007 at 10:27:35AM +, Neil Williams wrote:
  use constant DEFAULT_LIBRARY_PATH =
  qw(/lib /usr/lib /lib32 /usr/lib32 /lib64 /usr/lib64
 /emul/ia32-linux/lib /emul/ia32-linux/usr/lib);
 [...]
 +if ($crossprefix)
 +{
 +@shlibdeps = ( ${crossprefix}/lib, /usr/${crossprefix}/lib,
 +/${crossprefix}/lib32, /usr/${crossprefix}/lib32,
 +/${crossprefix}/lib64, /usr/${crossprefix}/lib64,
 +/emul/ia32-linux/lib, /emul/ia32-linux/usr/lib );
 +}
 
 Why do you add /emul/ia32-linux/lib, /emul/ia32-linux/usr/lib again?
 
 Gruesse,


Oops.

Do you want a new patch with that final line amended?

Sorry about the typo - there is no need for the repeated /emul/, it is a
hangover from when the cross paths overwrote the standard paths instead
of appending to them.

It should be:

+if ($crossprefix)
+{
+@shlibdeps = ( ${crossprefix}/lib, /usr/${crossprefix}/lib,
+/${crossprefix}/lib32, /usr/${crossprefix}/lib32,
+/${crossprefix}/lib64, /usr/${crossprefix}/lib64);
+}


-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: OpenPGP digital signature


Bug#453267: tested patch

2007-12-04 Thread Neil Williams
On Wed, 5 Dec 2007 00:01:22 +0100
Raphael Hertzog [EMAIL PROTECTED] wrote:

 On Tue, 04 Dec 2007, Neil Williams wrote:
  +my @shlibdeps=();
  +# ARCH for some awkward builds
  +my $crossprefix = Dpkg::Arch::debarch_to_gnutriplet($ENV{ARCH}) if 
  ($ENV{ARCH});
 
 What's the role of $ARCH ? And why shall we consider that we're
 crossbuilding only because this variable is set ?

Not cross building - building a cross compiler.

gcc relies on $ARCH when preparing libgcc1-$arch-cross and other
toolchain libraries.

The actual call in gcc is:

ARCH=arm MAKEFLAGS=CC=something dh_shlibdeps -plibgcc1-arm-cross

e.g.

 cd /opt/emdebian/emchain/gcc-4.2-4.2.2
 GCC_TARGET=arm DEB_CROSS=yes debian/rules control
 GCC_TARGET=arm DEB_CROSS=yes dpkg-buildpackage -b -uc -us -rfakeroot

 build completes as normal with the patch

 Testing from gcc-4.2-4.2.2 directory:
 ARCH=arm MAKEFLAGS=CC=something dh_shlibdeps -plibgcc1-arm-cross

 no errors.

 Without the patch, I get:
 dpkg-shlibdeps: failure: couldn't find library libc.so.6 needed by
 debian/libgcc1-arm-cross/usr/arm-linux-gnu/lib/libgcc_s.so.1 (its RPATH
 is '').
 Note: libraries are not searched in other binary packages that do not
 have any shlibs file.
 To help dpkg-shlibdeps find private libraries, you might need to set
 LD_LIBRARY_PATH.
 dh_shlibdeps: command returned error code 512

...

  +# host for normal cross builds.
  +$crossprefix = $ENV{DEB_HOST_GNU_TYPE}
  +if (($ENV{DEB_HOST_GNU_TYPE}) and ($ENV{DEB_HOST_GNU_TYPE} ne 
  $ENV{DEB_BUILD_GNU_TYPE}));
 
 I think you should use the functions contained in Dpkg::Arch instead of
 relying only the environment variables here... 

Those variables are only defined in a cross build, not when building a
cross compiler or a toolchain.

We cannot use 'dpkg-architecture -a..' when building a cross compiler,
therefore we only have the environment variables.

 use Dpkg::Arch qw(get_host_arch get_build_arch debarch_to_gnutriplet);
 [...]
 if (get_host_arch() ne get_build_arch()) {
 $crossprefix = debarch_to_gnutriplet(get_host_arch());
 }
 
  +# target when building a cross compiler
  +$crossprefix = $ENV{DEB_TARGET_GNU_TYPE}
  +if (($ENV{DEB_TARGET_GNU_TYPE}) and ($ENV{DEB_TARGET_GNU_TYPE} ne 
  $ENV{DEB_BUILD_GNU_TYPE}));
 
 Why would we need a special treatment of libs when creating a
 cross-compiler? The cross-compiler runs on the build arch but is not linked
 against any lib of the target arch so it doesn't need to scan the
 directories of the target arch.

The cross compiler needs to build cross libraries that *are* called
when preparing the cross compiler itself.

-- 

Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/


pgp6NZvDnv5Nk.pgp
Description: PGP signature


Re: Bug#439979: dpkg-dev: Please support removal of dpkg-cross diversions

2007-11-28 Thread Neil Williams
Raphael Hertzog wrote:
 On Tue, 28 Aug 2007, Neil Williams wrote:
 As outlined on the debian-dpkg lists, I've been testing the removal of
 the dpkg-cross diversions of dpkg-buildpackage and dpkg-shlibdeps during
 the rewrite of dpkg-cross and I now have two patches (slightly modified
 from the last ones posted to the list) that I would like to see in
 dpkg-dev as a beginning to a process to merge dpkg-cross back into dpkg.
 
 Okay, to make it easier to not loose track of this I properly reassigned
 this to dpkg-dev and split it in two issues: one for dpkg-buildpackage and
 one for dpkg-shlibdeps.
 
 Contrary to what Hector forwarded from you on -devel, the changes for
 dpkg-shlibdeps are relatively independant from the rest and since I've
 been doing the work on dpkg-shlibdeps I can review and merge a good patch
 of you.

I thought Guillem wanted to review the use of /usr/arm-linux-gnu/lib and
/usr/arm-linux-gnu/include ? I do have perl code that solves the problem
(used it to cross build GPE for Emdebian) involving adding search
directories to LD_LIBRARY_PATH but I wasn't sure if Guillem was looking
at a different implementation for those directories.

CC'ing debian-dpkg to find out.

Guillem: what are your plans for the diversion replacements?

Are you planning on changing the current usage of /usr/$arch/include
etc. or just changing the way that the diversion used to use a temporary
directory of symlinks or something else? Should Raphael and I work on a
solution for dpkg-shlibdeps using LD_LIBRARY_PATH using the example below?

 If you don't provide the patch, it'll take some more time but I'll get
 around to it sometime.

This is the core of what would be the patch:

my $crossprefix = check_arch($arch);
#(check_arch takes a user-specified string and checks that
#dpkg-architecture supports it, then returns the triplet so for 'arm',
# e.g. $crossprefix=arm-linux-gnu;

my @librarypaths = qw( /lib /usr/lib /lib32 /usr/lib32 /lib64 /usr/lib64
/emul/ia32-linux/lib /emul/ia32-linux/usr/lib );

my @shlibdeps = ( ${crossprefix}/lib, /usr/${crossprefix}/lib,
/${crossprefix}/lib32, /usr/${crossprefix}/lib32,
/${crossprefix}/lib64, /usr/${crossprefix}/lib64,
/emul/ia32-linux/lib, /emul/ia32-linux/usr/lib );

my $libpath = join (:, @librarypaths) . join (:, @shlibdeps);

$ENV{LD_LIBRARY_PATH}.=$libpath;

That is what I'm using with the current dpkg-shlibdeps from 1.14.11 and
AFAICT it is fine (providing that the cross paths are added to the
standard paths and not replace them or perl gets confused).

If this method is ok, I'll prepare the patch against 1.14.11.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: OpenPGP digital signature


Bug#453267: Bug#439979: dpkg-dev: Please support removal of dpkg-cross diversions

2007-11-28 Thread Neil Williams
Raphael Hertzog wrote:
 On Tue, 28 Aug 2007, Neil Williams wrote:
 As outlined on the debian-dpkg lists, I've been testing the removal of
 the dpkg-cross diversions of dpkg-buildpackage and dpkg-shlibdeps during
 the rewrite of dpkg-cross and I now have two patches (slightly modified
 from the last ones posted to the list) that I would like to see in
 dpkg-dev as a beginning to a process to merge dpkg-cross back into dpkg.
 
 Okay, to make it easier to not loose track of this I properly reassigned
 this to dpkg-dev and split it in two issues: one for dpkg-buildpackage and
 one for dpkg-shlibdeps.
 
 Contrary to what Hector forwarded from you on -devel, the changes for
 dpkg-shlibdeps are relatively independant from the rest and since I've
 been doing the work on dpkg-shlibdeps I can review and merge a good patch
 of you.

I thought Guillem wanted to review the use of /usr/arm-linux-gnu/lib and
/usr/arm-linux-gnu/include ? I do have perl code that solves the problem
(used it to cross build GPE for Emdebian) involving adding search
directories to LD_LIBRARY_PATH but I wasn't sure if Guillem was looking
at a different implementation for those directories.

CC'ing debian-dpkg to find out.

Guillem: what are your plans for the diversion replacements?

Are you planning on changing the current usage of /usr/$arch/include
etc. or just changing the way that the diversion used to use a temporary
directory of symlinks or something else? Should Raphael and I work on a
solution for dpkg-shlibdeps using LD_LIBRARY_PATH using the example below?

 If you don't provide the patch, it'll take some more time but I'll get
 around to it sometime.

This is the core of what would be the patch:

my $crossprefix = check_arch($arch);
#(check_arch takes a user-specified string and checks that
#dpkg-architecture supports it, then returns the triplet so for 'arm',
# e.g. $crossprefix=arm-linux-gnu;

my @librarypaths = qw( /lib /usr/lib /lib32 /usr/lib32 /lib64 /usr/lib64
/emul/ia32-linux/lib /emul/ia32-linux/usr/lib );

my @shlibdeps = ( ${crossprefix}/lib, /usr/${crossprefix}/lib,
/${crossprefix}/lib32, /usr/${crossprefix}/lib32,
/${crossprefix}/lib64, /usr/${crossprefix}/lib64,
/emul/ia32-linux/lib, /emul/ia32-linux/usr/lib );

my $libpath = join (:, @librarypaths) . join (:, @shlibdeps);

$ENV{LD_LIBRARY_PATH}.=$libpath;

That is what I'm using with the current dpkg-shlibdeps from 1.14.11 and
AFAICT it is fine (providing that the cross paths are added to the
standard paths and not replace them or perl gets confused).

If this method is ok, I'll prepare the patch against 1.14.11.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: OpenPGP digital signature


dpkg-deb breaks ALL cross building

2007-11-21 Thread Neil Williams
 dpkg  1.14.9
 dpkg-dev  1.14.9

Try with a simple, really quick package that has just been patched to
cross-build successfully with emdebian-tools :

$ apt-get source hostname
$ cd hostname-2.94/
# comment out dh_shlibdeps to allow the build to complete
# (awaiting fix for 439979)

$ dpkg-buildpackage -aarm

dpkg-buildpackage: source package hostname
dpkg-buildpackage: source version 2.94em1
dpkg-buildpackage: source changed by Neil Williams [EMAIL PROTECTED]
dpkg-architecture: warning: Specified GNU system type arm-linux-gnu does
not match gcc system type x86_64-linux-gnu.
dpkg-buildpackage: host architecture arm
 fakeroot debian/rules clean
dh_testdir
dh_testroot
rm -f build-stamp
# Cleaning package
/usr/bin/make clean
make[1]: Entering directory
`/opt/emdebian/trunk/h/hostname/trunk/hostname-2.94'
rm -f hostname.o hostname dnsdomainname
make[1]: Leaving directory
`/opt/emdebian/trunk/h/hostname/trunk/hostname-2.94'
dh_clean
 dpkg-source -b hostname-2.94
dpkg-source: warning: source directory './hostname-2.94' is not
sourcepackage-upstreamversion 'hostname-2.94em1'
dpkg-source: building hostname in hostname_2.94em1.tar.gz
dpkg-source: building hostname in hostname_2.94em1.dsc
 debian/rules build
dh_testdir
# Building package
CFLAGS=-Wall -g -O2 /usr/bin/make CC=arm-linux-gnu-gcc
make[1]: Entering directory
`/opt/emdebian/trunk/h/hostname/trunk/hostname-2.94'
arm-linux-gnu-gcc -O2 -Wall   -c -o hostname.o hostname.c
arm-linux-gnu-gcc -O2 -Wall -o hostname hostname.o
ln -fs hostname dnsdomainname
make[1]: Leaving directory
`/opt/emdebian/trunk/h/hostname/trunk/hostname-2.94'
touch build-stamp
 fakeroot debian/rules binary
dh_testdir
dh_testroot
dh_clean -k
dh_installdirs
# Installing package
/usr/bin/make install
BASEDIR=/opt/emdebian/trunk/h/hostname/trunk/hostname-2.94/debian/hostname
CC=arm-linux-gnu-gcc
make[1]: Entering directory
`/opt/emdebian/trunk/h/hostname/trunk/hostname-2.94'
install -d
/opt/emdebian/trunk/h/hostname/trunk/hostname-2.94/debian/hostname/usr/share/man/man1
install -o root -g root -m 0644 hostname.1
/opt/emdebian/trunk/h/hostname/trunk/hostname-2.94/debian/hostname/usr/share/man/man1
ln -fs hostname.1
/opt/emdebian/trunk/h/hostname/trunk/hostname-2.94/debian/hostname/usr/share/man/man1/dnsdomainname.1
install -d
/opt/emdebian/trunk/h/hostname/trunk/hostname-2.94/debian/hostname/bin
install -o root -g root -m 0755 hostname
/opt/emdebian/trunk/h/hostname/trunk/hostname-2.94/debian/hostname/bin
ln -f hostname
/opt/emdebian/trunk/h/hostname/trunk/hostname-2.94/debian/hostname/bin/dnsdomainname
make[1]: Leaving directory
`/opt/emdebian/trunk/h/hostname/trunk/hostname-2.94'
dh_testdir
dh_testroot
rm -f -r debian/hostname/usr/share/man/
dh_install
dh_link
dh_strip
dh_compress
dh_fixperms
dh_installdeb
dh_gencontrol
dpkg-gencontrol: warning: unknown substitution variable ${shlibs:Depends}
dh_md5sums
dh_builddeb
dpkg-deb: building package `hostname' in `../hostname_2.94em1_amd64.deb'.
 signfile hostname_2.94em1.dsc
gpg: skipped Neil Williams [EMAIL PROTECTED]: secret key not available
gpg: [stdin]: clearsign failed: secret key not available

 dpkg-genchanges  ../hostname_2.94em1_arm.changes
dpkg-genchanges: including full source code in upload
dpkg-buildpackage: full upload; Debian-native package (full source is
included)


Note:
dpkg-deb: building package `hostname' in `../hostname_2.94em1_amd64.deb'.

 dpkg-genchanges  ../hostname_2.94em1_arm.changes

What is going on?

The build clearly uses arm-linux-gnu-gcc, it builds an arm package
containing arm binaries (checked with 'file'), it creates an arm
.changes file but dpkg-deb gives me an amd64 suffix!!!

HELP! Can we have a 1.14.10 fix, like real, real soon?

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/




signature.asc
Description: OpenPGP digital signature


Re: UNable to configure my package

2007-09-26 Thread Neil Williams
On Wed, 26 Sep 2007 00:22:16 -0700 (PDT)
varun_shrivastava [EMAIL PROTECTED] wrote:

 
 hi
 
 i have made a package which is a simple gtk application.
 it depends on gtk-directfb-2.0.so.0 ,
 i included this library in the depends field in control file.

That should be the -dev version of that package.
libgtk-directfb-2.0-dev

 after creating the package when i try to install it using dpkg -i 
 it displays following error
 
 dpkg: dependency problems prevent configuration of clock:
  clock depends on libgtk-directfb-2.0 (= 2.2); however:
   Package libgtk-directfb-2.0 is not installed.

$ sudo apt-get install libgtk-directfb-2.0-0

 the package is installed at /usr/local/lib but i did a make install

You should not mix packaging systems - you still need to install the
libgtk-directfb-2.0-dev binary package (which will bring in the
libgtk-directfb-2.0-0 package as a dependency) using dpkg (via apt or
aptitude). You must also ensure that your package builds against this
version so that it will build on other Debian systems, including the
autobuilders. dpkg cannot be expected to work with software that is
installed directly from upstream source instead of from a Debian binary.

 for this
 library, i haven't installed it from a gtk-directfb package.

Why not? You need to install the package in order to install any
packages that use it.

 Also i found
 that as i have manually installed it, there is no gtk.shlibs file at
 /var/lib/dpkg/info/, so i manually wrote a shlibs.local file in debian/
 directory for my package.
 but still i get this error

Stop working around the lack of the Debian binary - install the binary
from the Debian mirrors and if your package doesn't build against it,
fix your package so that it does. If there is a bug in the Debian
package that prevents your package from working, rebuild
libgtk-directfb-2.0-0 from source, create a patch to fix that bug and
report it to the Debian bug tracking system.

You cannot expect to be able to install your package via dpkg if you
have not also installed *all* the dependencies of that package via dpkg.

Either you use:
Debian -- libgtk-directfb-2.0-0 (/usr/local/) -- clock (/usr/local)
or
Debian == libgtk-directfb-2.0-0 (Debian) == clock (dpkg install)

You cannot expect it to work as:
Debian -- libgtk-directfb-2.0-0 (/usr/local/) == clock (dpkg install)

(where -- represents building the upstream source directly and 
== represents installing a Debian package.)

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgpZFowrPnrww.pgp
Description: PGP signature


Re: UNable to configure my package

2007-09-26 Thread Neil Williams
On Wed, 26 Sep 2007 02:30:36 -0700 (PDT)
varun_shrivastava [EMAIL PROTECTED] wrote:

 
 thanks for the reply
 i want to add some information that i m using a cross compilation tool
 scratchbox

Then you should look at Emdebian which has updated tools for
cross-building using Debian sources.

http://www.emdebian.org/

(Next time, please mention that you are cross-building as the very
first thing you say because 99.999% of Debian people will try and
answer from a *native* build perspective - even those who regularly
cross-build a variety of packages, like me.)

 All the source code i have installed in scratchbox is using make install
 (not from the deb packages)

So why are you trying to install your program using dpkg?
dpkg: dependency problems prevent configuration of clock:
 clock depends on libgtk-directfb-2.0 (= 2.2); however:
  Package libgtk-directfb-2.0 is not installed.

If you want to use dpkg to install clock, you must install
libgtk-directfb-2.0-0 using dpkg too, irrespective of whether you are
using scratchbox or emdebian-tools.

 So if i want to convert an application to deb package, first i need to
 convert all other source code  (becoz i have made changes to them according
 to my requirement) that i have installed using make install, otherwise i
 wouldn't be able to make a deb package.

But you cannot install that deb package without also installing the
dependency as a deb as well. If you install a dependency of a package
with 'sudo make install' then you must install the package with 'sudo
make install' as well - you cannot revert to dpkg without also
installing all dependencies via dpkg.

I'm an Emdebian developer as well as a DD so I am used to
cross-building Debian packages. However, I don't use scratchbox because
(unless you are using scratchbox2) there are known bugs and it's quite
out of date.

If you want to work with upstream source, use OpenEmbedded.

If you want to work with Debian packages, use Emdebian.

If you want help on using scratchbox2, ask on the debian-embedded
mailing list (where you'll find the scratchbox2 maintainer, me and
various other cross-building types).

Whatever you want, this problem is *not* in dpkg and there isn't any
point continuing this thread here.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgpyZhclwYCBV.pgp
Description: PGP signature


Re: Bug#439979: reversed patches

2007-09-23 Thread Neil Williams
On Sun, 23 Sep 2007 13:56:24 +0200
Frank Lichtenheld [EMAIL PROTECTED] wrote:

 On Tue, Aug 28, 2007 at 09:39:40PM +0100, Neil Williams wrote:
  The /usr/share/dpkg-cross/buildcross file is part of dpkg-cross 1.99
  +2.0.0pre2 which is due to be uploaded to experimental just after pre1
  leaves NEW.
 [...]
  --- dpkg.old/scripts/dpkg-buildpackage.sh   2007-08-27 23:23:28.0 
  +0100
  +++ dpkg-1.14.5/scripts/dpkg-buildpackage.sh2007-08-28 
  20:06:39.0 +0100
  @@ -84,6 +84,18 @@
   passopts=''
   admindir=''
   
  +DPKGCROSSENABLE=0
  +if [ -f /usr/share/dpkg-cross/buildcross ]; then
  + . /usr/share/dpkg-cross/buildcross
  + DPKGCROSSENABLE=1
  +fi
  +
  +function enhance_cross {
  +   if [ $DPKGCROSSENABLE -gt 0 ]; then
  +   setup_cross
  +   fi
  +}
  +
 
 Just to make your life harder ;) I've now decided to convert
 dpkg-buildpackage to a Perl script (see head of master branch
 in git). Therefor this part of the patch doesn't apply anymore.

It isn't a problem - this is a workaround patch. Guillem doesn't want
the external lookup involved in the workaround, he wants an internal
solution. The perl version simply needs to implement the functionality
of setup_cross which, in turn, needs to setup and use a directory of
symlinks that are only in the PATH when cross-compiling and which allow
the command line paths passed to the cross-compiler to be manipulated
in real time to set the actual location of the cross header and -dev
package contents.

$args =~ s,/usr/include/,/usr/$arch_type/include/;
where $arch_type is arm-linux-gnu, for example, retrieved from
dpkg-architecture (which in turn is set by the -a switch).

That functionality is available as gccross in the dpkg-cross source at
the moment and could be implemented that way in dpkg -
dpkg-buildpackage just needs to setup the PATH to put the directory
containing gccross first.

http://alioth.debian.org/plugins/scmcvs/cvsweb.php/dpkg-cross/buildcross?rev=1.1;content-type=text%2Fplain;cvsroot=dpkg-cross


-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgppt6qynGcrY.pgp
Description: PGP signature


Re: [RFC] dpkg-buildpackage: Convert from Shell to Perl

2007-09-23 Thread Neil Williams
On Sun, 23 Sep 2007 19:28:16 + (UTC)
Oleg Verych [EMAIL PROTECTED] wrote:

 21-09-2007, Guillem Jover:
 
  Yes, such a rewrite has crossed my mind few times, I'd say go ahead!
 
 What's the problem in keepeing both? 

Maintenance time - think about why Emdebian wants the dpkg-cross
diversions to be removed.

1. We've been maintaining the diverted code for a decade [0] and it's
a PITA. Honest, there is NO WAY I want those diversions to make it into
Lenny. What is the point of creating ANOTHER instance of the same problem?

2. During all that time, dpkg developers have been busy, emdebian
developers have been busy but not with dpkg. Result? Pretty obvious
really, the code in the diverted scripts are almost a decade out of date.

Why on earth would Debian want two versions of the same thing when it
is absolutely guaranteed that one or other version will be continuously
out of date.

[0] 
http://packages.debian.org/changelogs/pool/main/d/dpkg-cross/current/changelog

 I like shell (not bash) and i can
 not read perl. 

? Why does your personal preference determine the choice of language of
a script that you don't maintain ?

As long as perl is not necessary to run the basic dpkg functions of
install, remove and update, there isn't a problem. Embedded systems
don't need perl (or bash) but embedded systems also won't be running
dpkg-buildpackage. Anything capable of doing anything useful with
dpkg-buildpackage won't have a problem running perl.

 I can do most of the packaging stuff with shell and
 sed. 

I can do *all* of the packaging stuff with Perl and CPAN. Last time I
checked, neither you nor I are dpkg maintainers / uploaders so let's
just work with those who have accepted the task of maintaining the code. 

-- 

Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/


pgpd63TCbpIOi.pgp
Description: PGP signature


Bug#439979: reversed patches

2007-09-23 Thread Neil Williams
On Sun, 23 Sep 2007 13:56:24 +0200
Frank Lichtenheld [EMAIL PROTECTED] wrote:

 On Tue, Aug 28, 2007 at 09:39:40PM +0100, Neil Williams wrote:
  The /usr/share/dpkg-cross/buildcross file is part of dpkg-cross 1.99
  +2.0.0pre2 which is due to be uploaded to experimental just after pre1
  leaves NEW.
 [...]
  --- dpkg.old/scripts/dpkg-buildpackage.sh   2007-08-27 23:23:28.0 
  +0100
  +++ dpkg-1.14.5/scripts/dpkg-buildpackage.sh2007-08-28 
  20:06:39.0 +0100
  @@ -84,6 +84,18 @@
   passopts=''
   admindir=''
   
  +DPKGCROSSENABLE=0
  +if [ -f /usr/share/dpkg-cross/buildcross ]; then
  + . /usr/share/dpkg-cross/buildcross
  + DPKGCROSSENABLE=1
  +fi
  +
  +function enhance_cross {
  +   if [ $DPKGCROSSENABLE -gt 0 ]; then
  +   setup_cross
  +   fi
  +}
  +
 
 Just to make your life harder ;) I've now decided to convert
 dpkg-buildpackage to a Perl script (see head of master branch
 in git). Therefor this part of the patch doesn't apply anymore.

It isn't a problem - this is a workaround patch. Guillem doesn't want
the external lookup involved in the workaround, he wants an internal
solution. The perl version simply needs to implement the functionality
of setup_cross which, in turn, needs to setup and use a directory of
symlinks that are only in the PATH when cross-compiling and which allow
the command line paths passed to the cross-compiler to be manipulated
in real time to set the actual location of the cross header and -dev
package contents.

$args =~ s,/usr/include/,/usr/$arch_type/include/;
where $arch_type is arm-linux-gnu, for example, retrieved from
dpkg-architecture (which in turn is set by the -a switch).

That functionality is available as gccross in the dpkg-cross source at
the moment and could be implemented that way in dpkg -
dpkg-buildpackage just needs to setup the PATH to put the directory
containing gccross first.

http://alioth.debian.org/plugins/scmcvs/cvsweb.php/dpkg-cross/buildcross?rev=1.1;content-type=text%2Fplain;cvsroot=dpkg-cross


-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgpAerT0CQV0Q.pgp
Description: PGP signature


Bug#439979: dpkg-dev: Please support removal of dpkg-cross diversions

2007-08-28 Thread Neil Williams
Package: dpkg
Version: 1.14.5
Severity: normal
Tags: patch

As outlined on the debian-dpkg lists, I've been testing the removal of
the dpkg-cross diversions of dpkg-buildpackage and dpkg-shlibdeps during
the rewrite of dpkg-cross and I now have two patches (slightly modified
from the last ones posted to the list) that I would like to see in
dpkg-dev as a beginning to a process to merge dpkg-cross back into dpkg.

The first part is to remove the diversions and requires PATH and
environment changes within 'dpkg-buildpackage -a' via a small set of
shell functions provided by dpkg-cross. Cross support for dpkg-shlibdeps
needs a few more PATH changes and a dependency on binutils-multiarch.

Once these patches are included, maybe the shell functions and the
existing cross-config.$arch files can also be merged into dpkg-dev,
leaving dpkg-cross with the original task of preparing foreign shared
objects as Architecture:all packages that can be installed into
/usr/$arch-triplet/lib etc. to make the libraries and headers accessible
to the cross-compiler.

-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable')
Architecture: amd64 (x86_64)

Kernel: Linux 2.6.21-2-amd64 (SMP w/1 CPU core)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash

Versions of packages dpkg depends on:
ii  coreutils 5.97-5.4   The GNU core utilities
ii  libc6 2.6.1-1GNU C Library: Shared libraries

dpkg recommends no packages.

-- no debconf information
--- dpkg-1.14.5/scripts/dpkg-buildpackage.sh2007-08-28 20:06:39.0 
+0100
+++ dpkg.old/scripts/dpkg-buildpackage.sh   2007-08-27 23:23:28.0 
+0100
@@ -84,18 +84,6 @@
 passopts=''
 admindir=''
 
-DPKGCROSSENABLE=0
-if [ -f /usr/share/dpkg-cross/buildcross ]; then
- . /usr/share/dpkg-cross/buildcross
- DPKGCROSSENABLE=1
-fi
-
-function enhance_cross {
-   if [ $DPKGCROSSENABLE -gt 0 ]; then
-   setup_cross
-   fi
-}
-
 while [ $# != 0 ]
 do
value=`echo x\$1\ | sed -e 's/x--.*=//;s/^x-.//'`
@@ -116,7 +104,7 @@
-us)signsource=: ;;
-uc)signchanges=: ;;
-ap)usepause=true;;
-   -a*)targetarch=$value; checkbuilddep=false; enhance_cross ;;
+   -a*)targetarch=$value; checkbuilddep=false ;;
-si)sourcestyle=-si ;;
-sa)sourcestyle=-sa ;;
-sd)sourcestyle=-sd ;;
--- dpkg-1.14.5/scripts/dpkg-shlibdeps.pl   2007-08-28 00:02:16.0 
+0100
+++ dpkg.old/scripts/dpkg-shlibdeps.pl  2007-08-27 23:23:48.0 +0100
@@ -75,16 +75,6 @@
 ), $progname, join(/,@depfields);
 }
 
-# detect cross-compilation
-my $result = `dpkg-architecture -qDEB_HOST_ARCH`;
-chomp($result);
-my $host_arch = $result;
-$result = `dpkg-architecture -qDEB_BUILD_ARCH`;
-chomp($result);
-my $target_arch = $result;
-my $use_cross = 0;
-$use_cross = 1 if ($host_arch ne $target_arch);
-
 my ($stdout, @exec, @execfield);
 foreach (@ARGV) {
 if (m/^-T/) {
@@ -144,21 +134,8 @@
 }
 }
 
-my @librarypaths=();
-if ($use_cross)
-{
-my $crossprefix = `dpkg-architecture -qDEB_HOST_GNU_TYPE`;
-chomp($crossprefix);
-@librarypaths = ( ${crossprefix}/lib, /usr/${crossprefix}/lib,
-/${crossprefix}/lib32, /usr/${crossprefix}/lib32,
-/${crossprefix}/lib64, /usr/${crossprefix}/lib64,
-/emul/ia32-linux/lib, /emul/ia32-linux/usr/lib );
-}
-else
-{
-@librarypaths = qw( /lib /usr/lib /lib32 /usr/lib32 /lib64 /usr/lib64
-  /emul/ia32-linux/lib /emul/ia32-linux/usr/lib );
-}
+my @librarypaths = qw( /lib /usr/lib /lib32 /usr/lib32 /lib64 /usr/lib64
+  /emul/ia32-linux/lib /emul/ia32-linux/usr/lib );
 my %librarypaths = map { $_ = 'default' } @librarypaths;
 
 if ($ENV{LD_LIBRARY_PATH}) {


Bug#439979: reversed patches

2007-08-28 Thread Neil Williams
Bah!

Patches were the wrong way around. Try these.

The /usr/share/dpkg-cross/buildcross file is part of dpkg-cross 1.99
+2.0.0pre2 which is due to be uploaded to experimental just after pre1
leaves NEW.

dpkg-cross will need to depend on the version of dpkg-dev that includes
these patches before migrating into unstable.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/

--- dpkg.old/scripts/dpkg-buildpackage.sh	2007-08-27 23:23:28.0 +0100
+++ dpkg-1.14.5/scripts/dpkg-buildpackage.sh	2007-08-28 20:06:39.0 +0100
@@ -84,6 +84,18 @@
 passopts=''
 admindir=''
 
+DPKGCROSSENABLE=0
+if [ -f /usr/share/dpkg-cross/buildcross ]; then
+ . /usr/share/dpkg-cross/buildcross
+ DPKGCROSSENABLE=1
+fi
+
+function enhance_cross {
+	if [ $DPKGCROSSENABLE -gt 0 ]; then
+		setup_cross
+	fi
+}
+
 while [ $# != 0 ]
 do
 	value=`echo x\$1\ | sed -e 's/x--.*=//;s/^x-.//'`
@@ -104,7 +116,7 @@
 	-us)	signsource=: ;;
 	-uc)	signchanges=: ;;
 	-ap)	usepause=true;;
-	-a*)targetarch=$value; checkbuilddep=false ;;
+	-a*)targetarch=$value; checkbuilddep=false; enhance_cross ;;
 	-si)	sourcestyle=-si ;;
 	-sa)	sourcestyle=-sa ;;
 	-sd)	sourcestyle=-sd ;;
--- dpkg.old/scripts/dpkg-shlibdeps.pl	2007-08-27 23:23:48.0 +0100
+++ dpkg-1.14.5/scripts/dpkg-shlibdeps.pl	2007-08-28 00:02:16.0 +0100
@@ -75,6 +75,16 @@
 ), $progname, join(/,@depfields);
 }
 
+# detect cross-compilation
+my $result = `dpkg-architecture -qDEB_HOST_ARCH`;
+chomp($result);
+my $host_arch = $result;
+$result = `dpkg-architecture -qDEB_BUILD_ARCH`;
+chomp($result);
+my $target_arch = $result;
+my $use_cross = 0;
+$use_cross = 1 if ($host_arch ne $target_arch);
+
 my ($stdout, @exec, @execfield);
 foreach (@ARGV) {
 if (m/^-T/) {
@@ -134,8 +144,21 @@
 }
 }
 
-my @librarypaths = qw( /lib /usr/lib /lib32 /usr/lib32 /lib64 /usr/lib64
-		   /emul/ia32-linux/lib /emul/ia32-linux/usr/lib );
+my @librarypaths=();
+if ($use_cross)
+{
+my $crossprefix = `dpkg-architecture -qDEB_HOST_GNU_TYPE`;
+chomp($crossprefix);
+@librarypaths = ( ${crossprefix}/lib, /usr/${crossprefix}/lib,
+/${crossprefix}/lib32, /usr/${crossprefix}/lib32,
+/${crossprefix}/lib64, /usr/${crossprefix}/lib64,
+/emul/ia32-linux/lib, /emul/ia32-linux/usr/lib );
+}
+else
+{
+@librarypaths = qw( /lib /usr/lib /lib32 /usr/lib32 /lib64 /usr/lib64
+  /emul/ia32-linux/lib /emul/ia32-linux/usr/lib );
+}
 my %librarypaths = map { $_ = 'default' } @librarypaths;
 
 if ($ENV{LD_LIBRARY_PATH}) {


pgpsoQs66dx5H.pgp
Description: PGP signature


Preliminary patches to remove dpkg-cross diversions

2007-08-27 Thread Neil Williams
OK, I now have two patches (and a dummy changelog patch that just acts
to separate these changes from the existing dpkg packages) attached. I
also have maintainer script changes that remove any previous dpkg-cross
diversions upon installation of / upgrade to the new code.

dpkg-cross pre2 now depends on binutils-multiarch and this makes the
patches to dpkg-buildpackage and dpkg-shlibdeps in dpkg almost trivial.

Most of the detailed work in the enhanced 'dpkg-buildpackage -a' is done
by scripts provided by dpkg-cross but the patch to dpkg-shlibdeps
completely replaces the previous dpkg-cross code, courtesy of
binutils-multiarch, by checking the values returned by
dpkg-architecture.

I'm continuing to test the dpkg-cross code so the patches are submitted
here for review really. Once testing is complete I can submit a bug
report with the patches if that is preferable.

dpkg-cross will need to depend on the version of dpkg-dev that contains
the final versions of these patches *before* it leaves experimental.

For now, the old versions of the dpkg-cross scripts will be retained
in /usr/share/dpkg-cross/ to support bespoke configurations, corner
cases and other situations where the rewrite still needs work.

The changes in dpkg-dev are almost trivial (and, I hope,
self-explanatory after my previous posts).

Finally, this means that bug reports filed against dpkg for native
builds cannot be confused by having dpkg-cross also installed. The
dpkg-cross code is only called during a cross-build - i.e. only when
the -a option is supplied to dpkg-buildpackage.

With dpkg-cross pre2, the diversions are gone for good.
;-)

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/

--- dpkg-1.14.5/scripts/dpkg-buildpackage.sh	2007-08-27 13:14:12.0 +0100
+++ dpkg.new/scripts/dpkg-buildpackage.sh	2007-08-27 13:14:49.0 +0100
@@ -84,6 +84,18 @@
 passopts=''
 admindir=''
 
+DPKGCROSSENABLE=0
+if [ -f /usr/share/dpkg-cross/buildcross ]; then
+ . /usr/share/dpkg-cross/buildcross
+ DPKGCROSSENABLE=1
+fi
+
+function enhance_cross {
+	if [ $DPKGCROSSENABLE -gt 0 ]; then
+		setup_cross
+	fi
+}
+
 while [ $# != 0 ]
 do
 	value=`echo x\$1\ | sed -e 's/x--.*=//;s/^x-.//'`
@@ -104,7 +116,7 @@
 	-us)	signsource=: ;;
 	-uc)	signchanges=: ;;
 	-ap)	usepause=true;;
-	-a*)targetarch=$value; checkbuilddep=false ;;
+	-a*)targetarch=$value; checkbuilddep=false; enhance_cross ;;
 	-si)	sourcestyle=-si ;;
 	-sa)	sourcestyle=-sa ;;
 	-sd)	sourcestyle=-sd ;;
@@ -181,7 +193,7 @@
 	if test $signinterface = gpg ; then
 		(cat ../$1 ; echo ) | \
 		$signcommand --local-user ${signkey:-$maintainer} --clearsign --armor \
-			--textmode   ../$1.asc 
+			--textmode   ../$1.asc
 	else
 		$signcommand -u ${signkey:-$maintainer} +clearsig=on -fast ../$1 \
 			../$1.asc
@@ -226,7 +238,7 @@
 	cd ..; withecho dpkg-source $passopts $diffignore $tarignore -b $dirn; cd $dirn
 fi
 if [ x$sourceonly = x ]; then
-	withecho debian/rules build 
+	withecho debian/rules build
 	withecho $rootcommand debian/rules $binarytarget
 fi
 if [ $usepause = true ]  \
@@ -251,7 +263,7 @@
 	fir=$?
 	set -e
 	return $fir
-}	
+}
 
 
 if fileomitted '\.deb'; then
--- dpkg.new/debian/changelog	2007-08-27 13:04:42.0 +0100
+++ dpkg-1.14.5/debian/changelog	2007-08-27 13:24:56.0 +0100
@@ -1,3 +1,11 @@
+dpkg (1.14.5.1) unstable; urgency=low
+
+  * Dummy entry to test the patches.
+  * Include patches to support removal of dpkg-cross diversions
+  for dpkg-buildpackage and dpkg-shlibdeps
+
+ -- Neil Williams [EMAIL PROTECTED]  Mon, 27 Aug 2007 12:58:20 +0100
+
 dpkg (1.14.5) unstable; urgency=low
 
   [ Guillem Jover ]
--- dpkg-1.14.5/scripts/dpkg-shlibdeps.pl	2007-08-27 13:14:06.0 +0100
+++ dpkg.new/scripts/dpkg-shlibdeps.pl	2007-08-27 13:16:46.0 +0100
@@ -75,6 +75,16 @@
 ), $progname, join(/,@depfields);
 }
 
+# detect cross-compilation
+my $result = `dpkg-architecture -qDEB_HOST_ARCH`;
+chomp($result);
+my $host_arch = $result;
+$result = `dpkg-architecture -qDEB_BUILD_ARCH`;
+chomp($result);
+my $target_arch = $result;
+my $use_cross = 0;
+$use_cross = 1 if ($host_arch ne $target_arch);
+
 my ($stdout, @exec, @execfield);
 foreach (@ARGV) {
 if (m/^-T/) {
@@ -134,8 +144,16 @@
 }
 }
 
-my @librarypaths = qw( /lib /usr/lib /lib32 /usr/lib32 /lib64 /usr/lib64
-		   /emul/ia32-linux/lib /emul/ia32-linux/usr/lib );
+my $crossprefix = '/';
+if ($use_cross)
+{
+	$crossprefix = `dpkg-architecture -qDEB_HOST_GNU_TYPE`;
+	chomp($crossprefix);
+	$crossprefix = $crossprefix/;
+}
+my @librarypaths = ( ${crossprefix}lib, /usr/${crossprefix}lib, ${crossprefix}lib32,
+		/usr/${crossprefix}lib32, ${crossprefix}lib64, /usr/${crossprefix}lib64,
+		/emul/ia32-linux/lib, /emul/ia32-linux/usr/lib );
 my %librarypaths = map { $_ = 'default' } @librarypaths;
 
 if ($ENV{LD_LIBRARY_PATH}) {


pgppnf0ZpvY26.pgp
Description: PGP signature


Re: Preliminary patches to remove dpkg-cross diversions

2007-08-27 Thread Neil Williams
On Mon, 27 Aug 2007 14:26:07 +0100
Neil Williams [EMAIL PROTECTED] wrote:

 OK, I now have two patches (and a dummy changelog patch that just acts
 to separate these changes from the existing dpkg packages) attached. I
 also have maintainer script changes that remove any previous dpkg-cross
 diversions upon installation of / upgrade to the new code.

Bah!

There are a few whitespace changes in the previously attached patches.
I thought I'd cleared those.

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgp55vMMfRu0k.pgp
Description: PGP signature


Removing the dpkg-buildpackage diversion in dpkg-cross

2007-08-26 Thread Neil Williams
I now have a replacement shell library (it's only 60 lines) that
replicates the functions of the dpkg-buildpackage diversion script from
dpkg-cross (which was perl) and with a few more tests I will be able to
submit this as a patch to the dpkg-buildpackage script in dpkg-dev. With
other changes to dpkg-shlibdeps to merge that into dpkg-dev, I
anticipate this construction:

1. dpkg-dev does not need to depend on dpkg-cross

2. dpkg-cross Enhances: dpkg-dev, Depends: dpkg-dev (= 1.15)

3. This code (or something quite like it) in dpkg-buildpackage from
dpkg-dev (somewhere around line 87-ish):

DPKGCROSSENABLE=0
if [ -f /usr/share/dpkg-cross/buildcross ]; then
 . /usr/share/dpkg-cross/buildcross
 DPKGCROSSENABLE=1
fi

function enhance_cross {
if [ $DPKGCROSSENABLE -gt 0 ]; then
setup_cross
fi
}

The '-a' switch to dpkg-buildpackage then calls a new function, patched
into dpkg-dev:

...
-a*)targetarch=$value; checkbuilddep=false; enhance_cross ;;
...

setup_cross comes from the new dpkg-cross file and basically implements
the path and environment changes within the dpkg-dev version of
dpkg-buildpackage to access /usr/share/dpkg-cross/bin/gccross and
cross-config.$arch files. gccross rewrites the @ARGV during the build
to ensure that the cross-compiler locates the correct headers and
shared object files. cross-config.$arch provides common cached values
for ./configure on the requested arch.

This way, the patch to dpkg-dev is trivial and debian-embedded can
update all the relevant files as often as needed without affecting
dpkg. (We don't need to bug you for future updates!) It's so trivial,
it could almost go in as-is - I just need to finish the dpkg-shlibdeps
code.

The remaining changes are in gccross and porting the dpkg-cross
dpkg-shlibdeps diversion code into the dpkg-dev version (both are perl)
to use the binutils-mulitarch versions of objdump and strip.

dpkg-cross can then remove the dpkg-buildpackage and dpkg-shlibdeps
diversions and relocate the scripts into /usr/share/dpkg-cross
alongside the old versions of objcopy, objdump and strip for
reference / trouble-shooting. The final dpkg-cross 2.0.0 release will
remove the files completely. Only dpkg-cross goes into /usr/bin/. I'm
thinking that we could have a /usr/share/dpkg-cross/bin/gccross so that
there is no chance of the old scripts being called accidentally. It
seems strange to have a bin/ below share/ but I'm not sure what else to
call it at the moment. The only file on my system in a similar location
is /usr/share/openoffice/bin/openoffice-xlate-lang which is also a perl
script.

This will be in dpkg-cross 1.99+2.0.0pre2 (experimental) - although
pre1 is yet to leave NEW. :-(

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgpLM4jAfTngE.pgp
Description: PGP signature


Re: migrating dpkg-cross diversions into dpkg-dev (was Dependencies on shared libs)

2007-08-24 Thread Neil Williams
On Fri, 24 Aug 2007 14:44:01 +0200
Raphael Hertzog [EMAIL PROTECTED] wrote:

  The second stage is to replace the dpkg-shlibdeps diversion too. It has
  to identify the shared dependencies of a foreign binary, then look up
  the packages that provide those. It needs updating because it is
  currently somewhere around dpkg-dev 1.10. The standard dpkg method has
  to be adapted for cross-building because you can't read the binaries
  normally.
 
 If dpkg-cross can depend on binutils-multiarch, then dpkg-shlibdeps needs
 no modification to be able to read binaries.

I'll look into that. I know there's been a lot of discussion around
multiarch in the past. I'll have to check on the current status.

 Furthermore it's already smart enough to ignore libraries which are
 incompatible (another type reported by objdump -a).
 
  Alternatively, dpkg-shlibdeps could do the complete job and check the
  alternative dpkg data itself when in cross-compiling mode.
 
 We could detect that cross-compiling mode simply because the analyzed
 binaries do not match the host binaries.

Is it possible to use a more routine method of checking the values
returned by dpkg-architecture?

(e.g. in makefile syntax) 
DEB_HOST_GNU_TYPE=$(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE=$(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)

(On the basis of the line of least surprise for existing
cross-builders?)

 How is $crossroot supposed to be defined ?

Currently, it is read in from a dpkg-cross configuration file. Any
other method could be arranged. $crossroot isn't that common, yet,
because Emdebian has been working primarily with the rootfs and there
has been only limited opportunity for splitting packages or using
optional dependencies. It is part of why I need to do after these
dpkg-cross changes in order to build an Emdebian distribution based on
GPE and Gtk.

Although I wish to remove the diversions, there is clearly still going
to be a need for dpkg-cross when actually cross-building packages. Even
when building a toolchain or rootfs, libraries need to be processed by
dpkg-cross to make the foreign binary available to the build process
in /usr/${archtriplet}/lib and include/.

There is also a need for the cross-config.$arch files that are
currently part of dpkg-cross. These are cache values read in for
autotools builds that describe the common differences between the build
and host architectures so that ./configure gets sensible values that
actually work on the host, despite what would have been generated
normally on the build arch. These config values are read in
by ./configure using the CONFIG_SITE variable.

 How can we map the elf type to the archtriplet ?

dpkg-cross already has a working perl table to do this. It is
incomplete but has sufficient coverage for the current cross-building
requirements. (%archdetecttable in Debian::DpkgCross. See also %
crossprefixtable). 

Debian::DpkgCross is still a work-in-migration so the documentation is
quite poor, even if I say so myself. I can't really improve that until
the codebase within the module has had a chance to settle, which in
turn means deciding issues like $crossroot, %archtable etc.

%archtable has recently been remapped to use dpkg-architecture wherever
possible but it does still map some architectures that
dpkg-architecture either does not define or defines differently:
%archtable = (
'armeb' = 'armeb-linux-gnueabi', #XXX This differs from 
dpkg-architecture
'hurd-i386' = 'i386-gnu',#XXX This differs from 
dpkg-architecture
's390x' = 's390-linux-gnu',  #XXX This differs from 
dpkg-architecture
'openbsd-i386' = 'i386-openbsd', #XXX This differs from 
dpkg-architecture
'freebsd-i386' = 'i386-freebsd', #XXX This differs from 
dpkg-architecture
'darwin-i386' = 'i386-darwin',   #XXX This differs from 
dpkg-architecture
'win32-i386' = 'i386-cygwin'
);

dpkg-architecture values:
armeb = armeb-linux-gnu
hurd-i386 = i486-gnu
s390x = s390x-linux-gnu
openbsd-i386 = i486-openbsd
freebas-i386 = i486-freebsd
darwinbsd-i386 is unknown to dpkg-architecture
win32-i386 is unknown to dpkg-architecture

These remaining issues need to be discussed on debian-embedded. (My
internet connection has become quite brittle in the last few days so
discussion on IRC is difficult. I'll raise these remaining
discrepancies on the mailing list.)

-- 


Neil Williams
=
http://www.data-freedom.org/
http://www.nosoftwarepatents.com/
http://www.linux.codehelp.co.uk/



pgpX3p31AX0zJ.pgp
Description: PGP signature


  1   2   >