apt-get install debian-wizard

Insider infos, master your Debian/Ubuntu distribution

  • About
    • About this blog
    • About me
    • My free software history
  • Support my work
  • Get the newsletter
  • More stuff
    • Support Debian Contributors
    • Other sites
      • My company
      • French Blog about Free Software
      • Personal Website (French)
  • Mastering Debian
  • Contributing 101
  • Packaging Tutorials

5 reasons why a Debian package is more than a simple file archive

November 8, 2010 by Raphaël Hertzog

Folder with gearsYou’re probably manipulating Debian packages everyday, but do you know what those files are? This article will show you their bowels… Surely they are more than file archives otherwise we would just use TAR archives (you know those files ending with .tar.gz). Let’s have a look!

1. It’s two TAR file archives in an AR file archive!

A .deb file is actually an archive using the AR format, you can manipulate it with the ar command. This archive contains 3 files, you can check it yourself, download any .deb file and run “ar t” on it:

$ ar t gwibber_2.31.91-1_all.deb
debian-binary
control.tar.gz
data.tar.gz

debian-binary is a text file indicating the version of the format of the .deb file, the current version is “2.0”.

$ ar p gwibber_2.31.91-1_all.deb debian-binary
2.0

data.tar.gz contains the real files of the package, the content of that archive gets installed in your root directory when you run “dpkg --unpack“.

But the most interesting part—which truly makes .deb files more than a file archive—is the last file. control.tar.gz contains meta-information used by the package manager. What are they?

$ ar p gwibber_2.31.91-1_all.deb control.tar.gz | tar tzf -
./
./postinst
./prerm
./preinst
./postrm
./conffiles
./md5sums
./control

2. It contains meta-information defining the package and its relationships

The control file within the control.tar.gz archive is the most fundamental file. It contains basic information about the package like its name, its version, its description, the architecture it runs on, who is maintaining it and so on. It also contains dependency fields so that the package manager can ensure that everything needed by the package is installed before-hand. If you want to learn more about those fields, you can check Binary control files in the Debian Policy.

Those information end up in /var/lib/dpkg/status once the package is installed.

3. It contains maintainer scripts so that everything can just work out of the box

At various steps of the installation/upgrade/removal process, dpkg is executing the maintainer scripts provided by the package:

  • postinst: after installation
  • preinst: before installation
  • postrm: after removal
  • prerm: before removal

Note that this description is largely simplified. In fact the scripts are executed on many other occasions with different parameters. There’s an entire chapter of the Debian Policy dedicated to this topic. But you might find this wiki page easier to grasp: http://wiki.debian.org/MaintainerScripts.

While this looks scary, it’s a very important feature. It’s required to cope with non-backwards compatible upgrades, to provide automatic configuration, to create system users on the fly, etc.

4. Configuration files are special files

Unpacking a file archive overwrites the previous version of the files. This is the desired behavior when you upgrade a package, except for configuration files. You prefer not to loose your customizations, don’t you?

That’s why packages can list configuration files in the conffiles file provided by control.tar.gz. That way dpkg will deal with them in a special way.

5. You can always add new meta-information

And in fact many tools already exploit the possibility to provide supplementary files in control.tar.gz:

  • debsums use the md5sums file to ensure no files were accidentally modified
  • dpkg-shlibdeps uses shlibs and symbols files to generate dependencies on libraries
  • debconf uses config scripts to collect configuration information from the user

Once installed, those files are kept by dpkg in /var/lib/dpkg/info/package.* along with maintainer scripts.

If you want to read more articles like this one, click here to subscribe to my free newsletter. You can also follow me on Identi.ca, Twitter and Facebook.

Managing distribution-specific patches with a common source package

November 5, 2010 by Raphaël Hertzog

In the comments of the article explaining how to generate different dependencies on Debian and Ubuntu with a common source package, I got asked if it was possible to apply a patch only in some distribution. And indeed it is.

The source package format 3.0 (quilt) has a neat feature for this. Instead of unconditionally using debian/patches/series to look up patches, dpkg-source first tries to use debian/patches/vendor.series (where vendor is ubuntu, debian, etc.). Note that dpkg-source does not stack patches from multiple series file, it uses a single series file, the first that exists.

So what’s the best way to use this? Debian should always provide debian/patches/series, they are supposed to provide the default set of patches to use. Any derivative cooperating with Debian can maintain their own series files within the common VCS repository used for package maintenance. They can drop Debian-specific patches (say branding patches for example), and they can add their own on top of the remaining Debian patches.

It’s worth noting that it’s the job of the maintainers to keep both series files in sync when needed. dpkg-source offers no way to have stacked series files (or dependencies between them).

If you want to use quilt to edit an alternate series file, you can temporarily set the QUILT_SERIES environment variable to “vendor.series”. Just make sure to start from a clean state, i.e. no patches applied. Otherwise quilt will be confused by the sudden mismatch between the series file and its internal data (stored in the .pc directory).

Found it useful? Click here to see how you can encourage me to provide more articles like this one.

Wiki page to share Debian presentations and associated templates

November 3, 2010 by Raphaël Hertzog

After having created my Debian presentation template, I wanted to share it so that future speakers can reuse my work. Surely there should be a place for this. I quickly found Ubuntu’s dedicated wiki page, and for Debian the relevant place was on the website.

However looking at that page, it’s obvious that the website is not the proper place: the page has not been updated with new talks since 2005. It’s just to much burden for any speaker. A wiki page is much more convenient in that regard. Switching to the wiki means we loose translations but that’s still better than an outdated translated page on the website.

So I went ahead, I created http://wiki.debian.org/Presentations and I filed a bug against www.debian.org to suggest to move the content to the wiki (see #601337) and to leave a link pointing to the new wiki page.

So the content of the website needs to be injected into the wiki. This is an easy task for someone that wishes to start contributing to Debian. Thus it’s your task.

Once completed send a mail to 601337@bugs.debian.org to inform the webmasters that the wiki part of the work has been completed. They just have to drop the old pages and replace them with links to the wiki.

PS: If you have given a Debian talk recently, please put your slides online and link to them on the new wiki page.

5 free software to support with Flattr

November 1, 2010 by Raphaël Hertzog

Flattr FOSS LogoIt’s already the fourth issue of Flattr FOSS: it means 20 different projects using Flattr that I presented you. Here are the 5 suggestions for November:

  1. Redshift is a small utility that adjusts the color temperature of your screen to make it less aggressive on your eyes, in particular during evening/nights. It uses the time of the day and the geographic location to know whether it’s night or day. I discovered it this summer and I liked it, although I’m not running it permanently.
  2. Noscript is a Firefox plugin to control what sites can execute javascript, flash and other plugins. All those are creating supplementary security risks and you browse safer if you allow only some sites to run them. This is the number one entry on Flattr in the opensource category, it recently took the place of dpkg.
  3. phyMyAdmin is a web interface to manage MySQL databases. If you have such a database on a web-hosting service, you have likely already seen it in action. It’s an award-winning software with a 12 year history, it’s not so common for PHP applications. 🙂
  4. Chromium maintenance in Debian. Chromium is a rapidly-evolving & complex software and Giuseppe Iuculano has been tirelessly working on packaging it. Almost alone within Debian. He deserves kudos for his work even though he reused work made by Fabien Tassin on the Ubuntu package.
  5. Dulwich is a pure-Python implementation of the Git file formats and protocols. It’s an important building block for interoperability between Bazaar and Git: bzr-git (a Bazaar plugin providing Git integration) is notably using it. Given the large usage of bzr in Ubuntu and the popularity of Git world-wide, it’s important to have such gateways.

This article is part of the Flattr FOSS project.

Update: mentioned the work of Fabien Tassin on the chromium package within Ubuntu.

  • « Previous Page
  • 1
  • …
  • 78
  • 79
  • 80
  • 81
  • 82
  • …
  • 102
  • Next Page »

Get the Debian Handbook

Available as paperback and as ebook.
Book cover

Email newsletter

Get updates and exclusive content by email, join the Debian Supporters Guild:

Follow me

  • Email
  • Facebook
  • GitHub
  • RSS
  • Twitter

Discover my French books

Planets

  • Planet Debian

Archives

I write software, books and documentation. I'm a Debian developer since 1998 and run my own company. I want to share my passion and knowledge of the Debian ecosystem. Read More…

Tags

3.0 (quilt) Activity summary APT aptitude Blog Book Cleanup conffile Contributing CUT d-i Debconf Debian Debian France Debian Handbook Debian Live Distro Tracker dpkg dpkg-source Flattr Flattr FOSS Freexian Funding Git GNOME GSOC HOWTO Interview LTS Me Multiarch nautilus-dropbox News Packaging pkg-security Programming PTS publican python-django Reference release rolling synaptic Ubuntu WordPress

Recent Posts

  • Freexian is looking to expand its team with more Debian contributors
  • Freexian’s report about Debian Long Term Support, July 2022
  • Freexian’s report about Debian Long Term Support, June 2022
  • Freexian’s report about Debian Long Term Support, May 2022
  • Freexian’s report about Debian Long Term Support, April 2022

Copyright © 2005-2021 Raphaël Hertzog