Creating an RPM file for XMind


I am a big fan of mind-mapping software and, for years, I’ve been using Freemind.

I’ve noticed that a lot of people are moving towards XMind which, for some peculiar reason, is only available as a Debian (.deb) package. This is a bit problematic as I run Fedora and CentOS which are both based on RPM (Redhat Package Manager). Here is how I managed to convert the .deb package into an .rpm which can then be easily installed with a yum localinstall:

(1) Download the Debian package

(2) Create the RPM

alien -r --scripts package.deb

This command (alien) converts the Debian package into an RPM and makes sure that any scripts (pre- and post- installation) will run when the RPM file is installed. See this for more info.

(3) The issue is that the RPM will fail to install as there is a conflict with three directories: /, /usr/bin and /usr/lib. The solution is to install rpmrebuild and use it as follows:

rpmrebuild -pe xmind.rpm

Remove all lines for /, /usr/bin and /usr/lib in the %files section and you should then get an RPM. See this for more info.

Have fun with XMind ;-)

Using jigdo to rebuild a Linux ISO image


A few years ago, Internet was very slow in Mauritius (and some will argue that this is still the case…) Downloading a Linux DVD (or, more precisely, an ISO image) took ages.

Now the Internet is way quicker but downloading a 4Gb ISO image still takes a long time.

A few years ago, a Debian guy invented Jigdo, a tool which I’ve been using for some time now to only download the few files I don’t have when a new Linux release is made and reconstruct the ISO locally. The steps to follow are documented in this post but are basically:

(1) Download the full ISO on a server where Internet is very quick (I do that on a VPS I have in the middle of the Silicon Valley where I routinely get 250Mbit/s). Let’s call the ISO image Centos-Linux-6.6.iso

(2) Use jigdo to create a .jigdo and a .template set of files. Before that it is important to mount the ISO on the distant server so that the individual files in the ISO can be accessed directly by jigdo. I generally do:

mkdir Centos-Linux-6.6

mount -t iso9660 -o loop Centos-Linux-6.6.iso Centos-Linux-6.6

jigdo-file mt -i Centos-Linux-6.6.iso -j Centos-Linux-6.6.jigdo -t Centos-Linux-6.6.template Centos-Linux-6.6/

(3) On completion, Centos-Linux-6.6.jigdo and Centos-Linux-6.6.template (which are generally small) need to be downloaded locally.

(4) The final step is to reconstruct the ISO locally. This is done by:

jigdo-lite Centos-Linux-6.6.jigdo

jigdo-lite will prompt for folder names with existing content. For example, when I used jigdo yesterday to reconstruct the latest Centos 6.6 ISO image, I already had a Centos 6.4 DVD and all the updates released since. I only had to point jigdo-lite to these existing folders and, voilà, in a few minutes I had the latest Centos 6.6 ISO image ready.

To be complete, jigdo-lite complained that one file was missing (python-paste-script-1.7.3-5.el6_3.noarch.rpm) which I had to download manually. It was just a small file so no big deal.

All in all, jigdo, even if the software is now in maintenance mode, is still a lifesaver for me. I hope it becomes one for you too.

Have fun ;-)

Pygame with Fedora and Python 3


I’m having some fun with pygame, a library to create games in Python.

The exact steps to follow to have pygame in Python 3 on Fedora Linux are detailed in the Python Fun blog. In essence:

  • yum install python3 python3-tools python3-devel
  • yum install SDL SDL-devel portmidi portmidi-devel ffmpeg ffmpeg-devel
  • cd /usr/lib64 && ln -s

This takes care of all dependencies needed (minus smpeg which does not exist in recent Fedora Linux distributions). Then:

  • Get the pygame source code (e.g. hg clone
  • python3
  • python3 build
  • python3 install

That’s it! Test by running python3 and importing pygame.

Have fun creating games ;-)

Beautiful fonts in Linux


I love Fedora Linux and I love beautiful fonts. And, to be frank, these two do not easily love each other.

I’ve tried learning the complexities of subpixel rendering and bytecode hinting using freetype, I got fonts from our friends in Redmond and dabbed with infinality, which is a set of patches for freetype.

infinality worked really well until I realised that some software, especially Gimp 2.8 which I use on a daily basis at Knowledge Seven, do not work very well with it.

Fortunately, I also love Reddit and I stumbled upon this comment by ununununu:

You don’t need Infinality for pretty text rendering in Fedora. Here’s how to do it.

You may have noticed that fonts appear jagged and generally terrible-looking in Fedora 17 (and possibly in 18) while they appear smooth and lovely in Ubuntu. Both distributions use freetype for their renderer (kind of), though with different default settings.

The first step is to upgrade from the default freetype package to freetype-freeworld from the RPM Fusion repository. This version of freetype makes use of RGBA subpixel rendering which isn’t included in the default package for, uh, licensing reasons maybe?

Next, use gnome-tweak-tool to set Font Hinting to “None” and Font Antialiasing to “Rgba”. But that’s not all! There’s one more setting that Tweak Tool can’t set.

Create a file called .Xresources in your home directory. Its only contents need be Xft.lcdfilter: lcddefault which actually enables the subpixel rendering.

That’s it. I works great and I’m now looking at gorgeous fonts on my Fedora Linux laptop.

I couldn’t install the latest version of the Liberation fonts though because of Wine. I’ll try later.

[Thanks to Cuong, I did it, at the end, by downloading the Liberation 2.0 TrueType files and overwriting the existing Liberation 1.0 files in /usr/share/fonts. Then I changed my default font in Chrome to be Liberation and used the Stylish extension (with this script) to have this gorgeous font in Gmail, Facebook, Twitter, etc.]

[A second update: Some fonts from our friends in Redmond (e.g. Calibri) look crap at small sizes because of the bitmaps embedded in them. To make freetype ignore all these crap bitmaps, put the following in, say, ~/.config/fontconfig/conf.d/10-ignore-embedded-bitmaps.conf:

<match target=”font” >
<edit name=”embeddedbitmap” mode=”assign”>

Have fun!

Fixing Bittorrent clients crashing on Ubuntu


There are many Bittorrent client in Linux and, under Ubuntu (and this is surely true for other Linux distributions too), most of them depend on a library called libtorrent.

Under Ubuntu 12.04 LTS, libtorrent is buggy and causes Bittorrent clients to crash on a regular basis. The solution is, of course, to upgrade libtorrent from 0.15 to its latest version 0.16. The way to do that is to add the ppa:surfernsk/internet-software PPA and upgrade the whole system:

sudo add-apt-repository ppa:surfernsk/internet-software

sudo apt-get update

sudo apt-get upgrade

Doing that upgrades python-libtorrent to 0.16 and installs libtorrent-rasterbar7. Removing libtorrent-rasterbar6 (which is not needed anymore) is simply a

sudo aptitude remove libtorrent-rasterbar6

Since doing that, Deluge, the Bittorrent client I use, hasn’t crashed at all. Life is cool.

(Solution obtained in the Deluge forum)