Entries Tagged 'packaging' ↓

Fixing Packaging in Linux #1

I really, really, really want feedback on this:

Over the past few months, I’ve really gotten into packaging on Fedora and Ubuntu. I’m not an expert, but I can genuinely say our packaging situation is crap. We are so close. And yet we ended up with two major implementations, that are almost the same. There is no significant difference between RPM and Dpgk.

So will Fedora abandon their 15,000 packages and choose Dpkg? Will Debian abandon their 35,000 packages and choose RPM? No. Neither will. There is no way for them to transition. And they will not give up their self branded solution. The only way forward is to make a new system, that is both better, and backwards compatible with RPM and Dpkg.

That is what I have been toying with for the past few months. It is called Packagetastic and It is a replacement for Dpkg and RPM, but still backwards compatible with them. Right now it is just a proof of concept, but can build many small packages on Ubuntu and Fedora.

I made a screencast to show how it works. This is just a simple, introduction. More example on how to use it will come soon. You can view the screencast below:




packagetastic_1.ogv (96.2 MB)

More information about the project can be found here: http://launchpad.net/packagetastic

Please provide your criticism and feedback at the mailing list, this blog post, or my identica page.

New Shrip Package

I made a new Shrip package. This is for the new 0.5 release.

http://workhorsy.org/junk/shrip_0.5.0-1_i386.deb

Source packages:

http://workhorsy.org/junk/shrip_0.5.0-1.diff.gz

http://workhorsy.org/junk/shrip_0.5.0-1.dsc

http://workhorsy.org/junk/shrip_0.5.0.orig.tar.gz

Updated:

Here is how to use shrip:

For example to encode episode 1 of Jericho from a DVD ISO to a matroska container with h.264 video and aac audio at 720×480, you would do this:

shrip encode --device=/media/archive2/JERICHO_S1_AC_D1.iso --title=3 --chapters=1-9 --audio=1 --scale=720:480 --crop=0:0:720:480 --container=mkv --video-codec=x264 --video-quality=extreme --audio-quality=10 --passes=1 --audio-codec=aac --normalize --ensure-sync --threads=2 /home/matt/Desktop/jericho_ep_1.mkv

You should be able to just change some of the parameters in the above example.

Adventures in Ubuntu packaging

Lately I’ve been researching how to create Ubuntu packages. For those that don’t know, packages are the Linux way of installing and managing software. Think Windows Update, but for all software on your computer. There are a few differences though: Each package will specify what versions of other packages it requires. This makes it trivial to see if a newer version of some library will break any software on your system. And since everything on your system is managed by one repository, you usually don’t have to worry about each program installing another copy of the same library. This happens on Windows a lot. When you install a game, it tends to install its own private version of DirectX.

The only down side to packaging, is that it takes a few hours to awkwardly walk through making your first package, and many more to properly package more complex programs.

I decided to start by packaging shrip. It is the command-line sister program of ogmrip. It makes it easy to encode DVDs into other containers and formats such as AVI, MPEG, OGG, MKV, et cetera.

I decided on it because, it is a smallish, stand-alone program, which would be much easier than packaging something that is in pieces, like open office. I also wanted to use it for a project I am working on called Ripspread.

I first started learning about packaging by reading the official Complete Ubuntu Packaging Guide. This did not turn out well, as the guide goes off on tangents, and those tangets go off on tangents, and somehow we would end up moving onto the next step, without me understanding which part was actually performed. I muddled through anyway and built the example package. Then I did it again. And again. Even after that I did not retain much of the process.

Then those smarties at ubuntu decided to make a screencast packaging guide. But instead of explaining every possible way of doing it, they focused on how they would do it in real life. And it was nice.

Since then I have been able to package shrip and a few other things. Generally my packages work. But there are some things I have not yet figured out. I want to list them here, so I can refer to them as I continue my research:

  • How do I label a package that is not an official release, but checked out from a code repository? And what if I have to change the code before the package can compile?
  • What about recommended packages? In some places you might want to just install libdvdcss, and others you might want to leave it up to use user’s discretion.
  • What about situations where there are multiple options for a required package? For example there are 3 different options for OCR software for reading subtitles in shrip. But I have to pick one when compiling. Is there any way to let the end user decide which to use when installing the package?
  • What is the difference between XSBC-Original-Maintainer and Original-Maintainer? The Ubuntu guides use XSBC-Original-Maintainer, but many packages just use Original-Maintainer.
  • How does a package get marked as being in Multiverse or Universe? There does not seem to be anything in the control files that indicates this.
  • Is it correct to mark the maintainer as Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com>, even though I am not yet a MOTU? People at this mailing list will have no idea what this package is. It makes me feel like I am misrepresenting the MOTU by doing this.
  • What is the difference between having the priority set as “extra” or “optional”? They seem almost the same  when you read the description.

I hope to figure out these issues, and make some good packages that make it into ubuntu some day.