Making packages for Debian requires quite a lot of attention to -details. And one of the details is the content of the -debian/copyright file, which should list all relevant licenses used by -the code in the package in question, preferably in -machine -readable DEP5 format.
- -For large packages with lots of contributors it is hard to write -and update this file manually, and if you get some detail wrong, the -package is normally rejected by the ftpmasters. So getting it right -the first time around get the package into Debian faster, and save -both you and the ftpmasters some work.. Today, while trying to figure -out what was wrong with -the -zfsonlinux copyright file, I decided to spend some time on -figuring out the options for doing this job automatically, or at least -semi-automatically.
- -Lucikly, there are at least two tools available for generating the -file based on the code in the source package, -debmake -and cme. I'm -not sure which one of them came first, but both seem to be able to -create a sensible draft file. As far as I can tell, none of them can -be trusted to get the result just right, so the content need to be -polished a bit before the file is OK to upload. I found the debmake -option in -a -blog posts from 2014. - -
To generate using debmake, use the -cc option: - -
-debmake -cc > debian/copyright -- -
Note there are some problems with python and non-ASCII names, so -this might not be the best option.
- -The cme option is based on a config parsing library, and I found -this approach in -a -blog post from 2015. To generate using cme, use the 'update -dpkg-copyright' option: - -
-cme update dpkg-copyright -quiet -- -
This will create or update debian/copyright. The cme tool seem to -handle UTF-8 names better than debmake.
- -When the copyright file is created, I would also like some help to -check if the file is correct. For this I found two good options, -debmake -k and license-reconcile. The former seem -to focus on license types and file matching, and is able to detect -ineffective blocks in the copyright file. The latter reports missing -copyright holders and years, but was confused by inconsistent license -names (like CDDL vs. CDDL-1.0). I suspect it is good to use both and -fix all issues reported by them before uploading. But I do not know -if the tools and the ftpmasters agree on what is important to fix in a -copyright file, so the package might still be rejected.
- -The devscripts tool licensecheck deserve mentioning. It -will read through the source and try to find all copyright statements. -It is not comparing the result to the content of debian/copyright, but -can be useful when verifying the content of the copyright file.
- -Are you aware of better tools in Debian to create and update -debian/copyright file. Please let me know, or blog about it on -planet.debian.org.
- -As usual, if you use Bitcoin and want to show your support of my -activities, please send Bitcoin donations to my address -15oWEoG9dUPovwmUL9KWAnYRtNJEkP1u1b.
- -Update 2016-02-20: I got a tip from Mike Gabriel -on how to use licensecheck and cdbs to create a draft copyright file - -
-licensecheck --copyright -r `find * -type f` | \ - /usr/lib/cdbs/licensecheck2dep5 > debian/copyright.auto -- -
He mentioned that he normally check the generated file into the -version control system to make it easier to discover license and -copyright changes in the upstream source. I will try to do the same -with my packages in the future.
+ +When I set out a few weeks ago to figure out +which +multimedia player in Debian claimed to support most file formats / +MIME types, I was a bit surprised how varied the sets of MIME types +the various players claimed support for. The range was from 55 to 130 +MIME types. I suspect most media formats are supported by all +players, but this is not really reflected in the MimeTypes values in +their desktop files. There are probably also some bogus MIME types +listed, but it is hard to identify which one this is.
+ +Anyway, in the mean time I got in touch with upstream for some of +the players suggesting to add more MIME types to their desktop files, +and decided to spend some time myself improving the situation for my +favorite media player VLC. The fixes for VLC entered Debian unstable +yesterday. The complete list of MIME types can be seen on the +Multimedia +player MIME type support status Debian wiki page.
+ +The new "best" multimedia player in Debian? It is VLC, followed by +totem, parole, kplayer, gnome-mpv, mpv, smplayer, mplayer-gui and +kmplayer. I am sure some of the other players desktop files support +several of the formats currently listed as working only with vlc, +toten and parole.
+ +A sad observation is that only 14 MIME types are listed as +supported by all the tested multimedia players in Debian in their +desktop files: audio/mpeg, audio/vnd.rn-realaudio, audio/x-mpegurl, +audio/x-ms-wma, audio/x-scpls, audio/x-wav, video/mp4, video/mpeg, +video/quicktime, video/vnd.rn-realvideo, video/x-matroska, +video/x-ms-asf, video/x-ms-wmv and video/x-msvideo. Personally I find +it sad that video/ogg and video/webm is not supported by all the media +players in Debian. As far as I can tell, all of them can handle both +formats.
The appstream system -is taking shape in Debian, and one provided feature is a very -convenient way to tell you which package to install to make a given -firmware file available when the kernel is looking for it. This can -be done using apt-file too, but that is for someone else to blog -about. :)
- -Here is a small recipe to find the package with a given firmware -file, in this example I am looking for ctfw-3.2.3.0.bin, randomly -picked from the set of firmware announced using appstream in Debian -unstable. In general you would be looking for the firmware requested -by the kernel during kernel module loading. To find the package -providing the example file, do like this:
- -- --% apt install appstream -[...] -% apt update -[...] -% appstreamcli what-provides firmware:runtime ctfw-3.2.3.0.bin | \ - awk '/Package:/ {print $2}' -firmware-qlogic -% -
See the -appstream wiki page to learn how to embed the package metadata in -a way appstream can use.
- -This same approach can be used to find any package supporting a -given MIME type. This is very useful when you get a file you do not -know how to handle. First find the mime type using file ---mime-type, and next look up the package providing support for -it. Lets say you got an SVG file. Its MIME type is image/svg+xml, -and you can find all packages handling this type like this:
- --% apt install appstream -[...] -% apt update -[...] -% appstreamcli what-provides mimetype image/svg+xml | \ - awk '/Package:/ {print $2}' -bkchem -phototonic -inkscape -shutter -tetzle -geeqie -xia -pinta -gthumb -karbon -comix -mirage -viewnior -postr -ristretto -kolourpaint4 -eog -eom -gimagereader -midori + +5th June 2016+Many years ago, when koffice was fresh and with few users, I +decided to test its presentation tool when making the slides for a +talk I was giving for NUUG on Japhar, a free Java virtual machine. I +wrote the first draft of the slides, saved the result and went to bed +the day before I would give the talk. The next day I took a plane to +the location where the meeting should take place, and on the plane I +started up koffice again to polish the talk a bit, only to discover +that kpresenter refused to load its own data file. I cursed a bit and +started making the slides again from memory, to have something to +present when I arrived. I tested that the saved files could be +loaded, and the day seemed to be rescued. I continued to polish the +slides until I suddenly discovered that the saved file could no longer +be loaded into kpresenter. In the end I had to rewrite the slides +three times, condensing the content until the talk became shorter and +shorter. After the talk I was able to pinpoint the problem – +kpresenter wrote inline images in a way itself could not understand. +Eventually that bug was fixed and kpresenter ended up being a great +program to make slides. The point I'm trying to make is that we +expect a program to be able to load its own data files, and it is +embarrassing to its developers if it can't.
+ +Did you ever experience a program failing to load its own data +files from the desktop file browser? It is not a uncommon problem. A +while back I discovered that the screencast recorder +gtk-recordmydesktop would save an Ogg Theora video file the KDE file +browser would refuse to open. No video player claimed to understand +such file. I tracked down the cause being file --mime-type +returning the application/ogg MIME type, which no video player I had +installed listed as a MIME type they would understand. I asked for +file to change its +behavour and use the MIME type video/ogg instead. I also asked +several video players to add video/ogg to their desktop files, to give +the file browser an idea what to do about Ogg Theora files. After a +while, the desktop file browsers in Debian started to handle the +output from gtk-recordmydesktop properly.
+ +But history repeats itself. A few days ago I tested the music +system Rosegarden again, and I discovered that the KDE and xfce file +browsers did not know what to do with the Rosegarden project files +(*.rg). I've reported the +rosegarden problem to BTS and a fix is commited to git and will be +included in the next upload. To increase the chance of me remembering +how to fix the problem next time some program fail to load its files +from the file browser, here are some notes on how to fix it.
+ +The file browsers in Debian in general operates on MIME types. +There are two sources for the MIME type of a given file. The output from +file --mime-type mentioned above, and the content of the +shared MIME type registry (under /usr/share/mime/). The file MIME +type is mapped to programs supporting the MIME type, and this +information is collected from +the +desktop files available in /usr/share/applications/. If there is +one desktop file claiming support for the MIME type of the file, it is +activated when asking to open a given file. If there are more, one +can normally select which one to use by right-clicking on the file and +selecting the wanted one using 'Open with' or similar. In general +this work well. But it depend on each program picking a good MIME +type (preferably +a +MIME type registered with IANA), file and/or the shared MIME +registry recognizing the file and the desktop file to list the MIME +type in its list of supported MIME types.
+ +The /usr/share/mime/packages/rosegarden.xml entry for +the +Shared MIME database look like this:
+ ++ ++<?xml version="1.0" encoding="UTF-8"?> +<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info"> + <mime-type type="audio/x-rosegarden"> + <sub-class-of type="application/x-gzip"/> + <comment>Rosegarden project file</comment> + <glob pattern="*.rg"/> + </mime-type> +</mime-info> +This states that audio/x-rosegarden is a kind of application/x-gzip +(it is a gzipped XML file). Note, it is much better to use an +official MIME type registered with IANA than it is to make up ones own +unofficial ones like the x-rosegarden type used by rosegarden.
+ +The desktop file of the rosegarden program failed to list +audio/x-rosegarden in its list of supported MIME types, causing the +file browsers to have no idea what to do with *.rg files:
+ +- -+% grep Mime /usr/share/applications/rosegarden.desktop +MimeType=audio/x-rosegarden-composition;audio/x-rosegarden-device;audio/x-rosegarden-project;audio/x-rosegarden-template;audio/midi; +X-KDE-NativeMimeType=audio/x-rosegarden-composition % -I believe the MIME types are fetched from the desktop file for -packages providing appstream metadata.
+ + +The fix was to add "audio/x-rosegarden;" at the end of the +MimeType= line.
+ +If you run into a file which fail to open the correct program when +selected from the file browser, please check out the output from +file --mime-type for the file, ensure the file ending and +MIME type is registered somewhere under /usr/share/mime/ and check +that some desktop file under /usr/share/applications/ is claiming +support for this MIME type. If not, please report a bug to have it +fixed. :)