Archive for category Linux

Daemontools or how to relaunch a process if it dies

building-24220_150

Maybe you have been in the situation where a process (program or service) in the system dies or ends abruptly and needs to be relaunched  no matter what. You can try to monitor the process from time to time and restart it if it’s not found, but it could be a little complicated because you have to make a cron rule to check the process existence, filter the prceoss, etc. What if there would be a way to relaunch a process if it dies?…There is a way, it’s called daemontools which basically scan the process and relaunch it if  it’s not detected.

Here I’ll show you how to install and configure this tool on Linux.

Installing daemontools

On Debian you can install daemontools as root by typing this:

root@raspberrypi: # aptitude install daemontools-run daemontools

For Debain spin-off like Ubuntu would be the same. On Red Hat and alike you must check if there is a package for this tool.

Setting daemontools

You have to make a directory for the service (program) you want to monitor. In this example I would use qbittorrent-nox, a bittorrent client that runs on the background (nox = no for X environment):

root@raspberrypi:~# mkdir /etc/service/qbittorrent-nox

Then you have to write and script that start the process. It must be called “run“. Use your prefered text editor, for instance vi:

root@raspberrypi:~# vi /etc/service/qbittorrent-nox/run

And add the call to the program. In this case I wanted to launch qbitorrent-nox as the user pi, so I invoked it with sudo:

#!/bin/sh

sudo -u pi qbittorrent-nox

Finally change permissions to make it executable:

root@raspberrypi:~# chmod +x /etc/service/qbittorrent-nox/run

Checking the process with ps

You can check if the process is running the using ps command and filtering the output with grep:

root@raspberrypi:~# ps ax | grep qbit
3064 ? S 0:00 supervise qbittorrent-nox
3068 ? S 0:00 sudo -u pi qbittorrent-nox
3080 ? Sl 13:09 qbittorrent-nox
9926 pts/0 S+ 0:00 grep qbit

But there’s a better way to check  if the process is running, using daemontools. By the way, daemon-tools means tools for handling daemons (programs or services).

Checking the process with daemontools

If you want to check if the process is running and how lomg it ha been up, use the svtat command passing the service directory, as show next:

root@raspberrypi:~# svstat /etc/service/qbittorrent-nox
 /etc/service/qbittorrent-nox: up (pid 3066) 205846 seconds

In this case, my qbittorrent-nox process (program/service) has been running for almost two days and a half.

Stoping the scan

If you need to stop scanning the process,  for instance if you need to stop it for a while to change a setting, use the svc command with the following option:

root@raspberrypi:~# svc -d /etc/service/qbittorrent-nox

After this, check it one more time:

root@raspberrypi:~# svstat /etc/service/qbittorrent-nox
 /etc/service/qbittorrent-nox: down 2 seconds, normally up

Now the process won’t be checked for be relounched if it stops or dies.

Restaring the scan

In order to restart the scan, use the svc command as followed:

root@raspberrypi:~# svc -u /etc/service/qbittorrent-nox

One more time, check whether it’s running with svstat:

root@raspberrypi:~# svstat /etc/service/qbittorrent-nox
 /etc/service/qbittorrent-nox: up (pid 12805) 1 seconds

Reference: daemontoolsl

No Comments

Where to put my Rasperry Pi?

Rasperry TV

Due to I wanted to use my Rasperry Pi as a media center but I didn’t want to put lot of devices on my nightstand I came up with this idea. My Rasperry, a hard drive and a usb hub  look like corronchos (loricariidaes) but they are behind the TV.

Rasperry - Sticker

If you want to do something similar you can use stickers for holding photo frames (Command, Scoth, 3M, etc), and this way you can save some space and avoid to deal with a lot of devices on your room.

, ,

2 Comments

Installing SubDownloader on Raspberry Pi

SubDownloader 2.0.14 (on raspberrypi)

I’ve already install XBMC as my media center  and also qbittorrent Web as my “download” center. But one piece was missing: a subtitle downloader program. I knew about subdownloader, so I decide to give it a try on my Rasperry Pi but it is not on Raspbian repos…what can you do?

Easy, just add  Debian’s official repos for Sid and install it. Remember, Debian supports lot of architecture, even armhf. Let’s see how to do it…

Installing

  1. Edit file /etc/apt/sources.list to include sid’s repos:
    deb http://ftp.debian.org/debian/ sid main contrib non-free
  2. Update the package list:
    aptitude update
  3. Install SubDonwloader:
    aptitude install subdownloader
  4. Edit file /etc/apt/sources.list to delete sid’s repos (it’s enough by commenting the line with #):
    #deb http://ftp.debian.org/debian/ sid main contrib non-free
  5. Update the package list one more time:
    aptitude update

Now you can run the program on your Rasperry Pi locally or using ssh…but keep in mind it would run a little slow. Enjoy it!

Reference: SubDownloader project page

, , , ,

No Comments

Update DynDNS from OpenWrt

OpenWrt - DynDNS

This article shows how to update the DynDNS information with the IP supplies by your Internet provider from a router with OpenWrt, so every time your provider shanges the router’s IP, your DynDns doman will point to the new IP. Below are the stpes to follow with your OpenWrt

  1. Update the package list

    root@fluffy:~# opkg update
    
    Downloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/Packages.gz.
    Inflating http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/Packages.gz.
    Updated list of available packages in /var/opkg-lists/packages.
  2. Install the last version of  ddns-scripts:
    Downloading http://downloads.openwrt.org/backfire/10.03.1/ar71xx/packages/ddns-scripts_1.0.0-17_all.ipk.
    Configuring ddns-scripts.
    Collected errors:
     * resolve_conffiles: Existing conffile /etc/config/ddns is different from the conffile in the new package. The new conffile will be placed at /etc/config/ddns-opkg.
  3. Edit the configuration file  /etc/config/ddns with your DynDNS account information:
    config 'service' 'myddns'
    option 'enabled' '1'
    option 'service_name' 'dyndns.org'
    option 'ip_source' 'network'
    option 'ip_network' 'wan'
    option 'force_interval' '72'
    option 'force_unit' 'hours'
    option 'check_interval' '10'
    option 'check_unit' 'minutes'
    option 'domain' 'mydomain.dyndns.org'
    option 'username' 'myusername'
    option 'password' 'mypassword'

Update and debug

In order to updte the IP addrewaa the first time you can use the following script:

root@fluffy:~# /usr/lib/ddns/dynamic_dns_updater.sh myddns

update_url=http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]
force seconds = 259200
check seconds = 600
time_since_update = 144 hours
Running IP check...
current system ip = 173.194.37.14
registered domain ip = 173.194.37.14
update necessary, performing update ...
updating with url="http://myusername:mypassword%[email protected]/nic/update?hostname=mydomain.dyndns.org&myip=173.194.37.14
Connecting to members.dyndns.org (204.13.248.111:80)
- 100% |*****************************************************************************************************| 19 --:--:-- ETA
Update Output:
good 173.194.37.14
update complete, time is: Sat Sep 24 00:01:14 VET 2011

In this example myddns is the name of the service I configured in file /etc/config/ddns.

Reference: OpenWrt DDNS Client

,

No Comments

How to run Raspberry Pi from a USB hard drive

Raspberry Pi - USB Hard drive

I had been using my Raspberry Pi with a 4 GB – class 4  SD card Kingston until it decided to die (since I burn the image the first time that SD card was a little problematic). Because I didn’t have another 2GB or higher SD card, I decided to do a research to check if I could use the first partition as boot and another partition from an external USB hard drive of 320 GB. Effectively it can be done and I describe the steps on this article.

Raspbian Image

I decided to use the Raspbian image Raspbian 2013-02-09-wheezy-raspbian.img, but first I had to do a trick: dump the image to a 8 GB pen drive to be able separate the /boot partition and the remaining file system.

Dumping Raspbian to the pen drive

Just dump the Raspbian image as it were a SD card, but instead of  using /dev/mmcblk0 do it on your  pen drive:

# dd bs=4M if=/home/lgallard/Projects/RaspberryPi/2013-02-09-wheezy-raspbian.img of=/dev/sdb

Extracting the boot image

In order to extract the Raspbian’s boot image just dump the first partition of the pen drive:

# dd if=/dev/scb1 of=/home/lgallard/Projects/RaspberryPi/2013-02-09-wheezy-raspbian.boot.img

Extracting the operating system

Do the same to extract the file system where the operating systems resides:

# dd if=/dev/sdc2 of=/home/lgallard/Projects/RaspberryPi/2013-02-09-wheezy-raspbian.fsext4.img

Partition /boot on SD card

You will still need a SD card to boot your Rasperry, but it not longer need to be 2GB, in fact it could be much less, even 64 MB (I use a 1 GB I found). To do so you need to make a partition with GParted of about 60 MB as show in the next picture:

GParted - SD Card

Now copy the image content of the first image you dumped previously:

# dd if=/home/lgallard/Projects/RaspberryPi/2013-02-09-wheezy-raspbian.boot.img of=/dev/sdb1

Once you have copied the data you must mount that partition and then edit the file /media/usb0/cmdline.txt  (change /media/usb0 according to the mounting point), and put the following:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/sda1 rootfstype=ext4 elevator=deadline rootwait

Here is important to put root=/dev/sda1  so the Raspberry uses the first partition of the external USB hard drive as the root partition, I mean, the “/” directory at boot.

Partitioning the external USB hard drive

Connect the hard drive to a PC and make the partitions as shown in the next picture. The first partition will content the file system  and the second one will be used for saving data (you can define later that in the /etc/fstab of your the RaspBerry Pi).

GParted - hard drive

File system partition “/”

Now you can dump the Raspian image you got to the first partition of the USB hard drive. To do so type this:

# dd if=/home/lgallard/Projects/RaspberryPi/2013-02-09-wheezy-raspbian.fsext4.img of=/dev/sdc1

Fixing the size partition

As you can see in the last picture, the partition was created with 9 GB, but if you mount the partition it will report only 2 GB because the Raspian image has that size by default.  To fix this you must umount the partiton and and resize the file system:

# umount /dev/sdc1
# e2fsck -f /dev/sdc1
e2fsck 1.42.5 (29-Jul-2012)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Raspbian: 66488/114688 files (0.1% non-contiguous), 346538/458240 blocks
# resize2fs /dev/sdc1
resize2fs 1.42.5 (29-Jul-2012)
Resizing the filesystem on /dev/sdc1 to 2304000 (4k) blocks.
The filesystem on /dev/sdc1 is now 2304000 blocks long.

After that check the available space. It should report something like this:

# df -h
/dev/sdc2 285G 191M 271G 1% /media/Data
/dev/sdc1 8.7G 1.3G 7.0G 16% /media/Raspbian

If you follow these steps, your Rasperry Pi will boot from a USB hard drive.

Final notes

  • It’s a fact that a hard drive have a higher price than a SD card but you have to consider the later will suffer more, specially a file system with journal can kill the SD card, so it’s not crazy to think in an external USB hard drive.
  • This hard drive and keyword are powered by the Rasperry Pi without problems. But if I connect something more, for instance a mouse, it can’t handle all and the device reboots.
  • Using a hard drive can solve the SD card compatibility issue (recommended class 6 type). In my case I used a Sandsik of 1 GB, class 4 and it worked perfectly.
  • Probably you can use dd and extract the /boot and file system partitions, but due I didn’t know the exact size and because I was a little lazy a decide to dump the Rasbian image on a pen drive and extract the images that way.

, , , ,

6 Comments

XBMC on Rasperry Pi with Raspbian

XBMC - Raspbian

If you want to install XBMC on your Raspberry Pi using  Raspbian and got dependency problems, you can download it from this repo by adding the following line to /etc/apt/sources.list

# XBMC Repo
 deb http://archive.mene.za.net/raspbian wheezy contrib

Then update and install XBMC:

# aptitude update
 # aptitude install xbmc

After that, you can start it on boot and increase the priority level by editing file /etc/default/xbmc with these parameters:

# Set this to 1 to enable startup
 ENABLED=1
# The user to run XBMC as
 USER=pi
# Adjust niceness of XBMC (decrease for higher priority)
 NICE=-10

Remember to disable the LXDE or XFCE start on boot (you can ue rasp-config). Enjoy it!

Reference: XBMC for Raspberry Pi

, , ,

1 Comment

Mobile repository on Debian

Debian Mobile Repo

If by chances you have a slow connection but in another place have a better connection (school, university, work, etc.) and have a computer with Debian which on the same architecture (x86, x64, etc.)  with almost the same software selection, you can do this little trick to carry part of the downloaded packages:

Computer with good connection

Update and upgrade the computer with good connection:

root@dell~# aptitude update
aptitude safe-upgrade

On Debian and alike distros the downloaded packages are stored in /var/cache/apt/archives, so you can copy the content of that directory into a pen-drive or external hard drive:

cp -r /var/cache/apt/archives /media/usb0

Computer with poor connection

Update  the package list. Despite you have a poor connection , you still need Internet to retrieved the package’s information:

 root@cupcake:~# aptitude update
 root@cupcake:~# aptitude safe-upgrade
 The following packages will be upgraded:
 bind9-host dnsutils evolution-data-server evolution-data-server-common gdm3 gnome-shell gnome-shell-common google-chrome-stable gvfs
 gvfs-backends gvfs-bin gvfs-common gvfs-daemons gvfs-libs host icedtea-netx icedtea-netx-common krb5-locales libbind9-80 libc-bin libc-dev-bin
 libc6 libc6:i386 libc6-dev libc6-i386 libc6-i686:i386 libcairo-gobject2 libcairo2 libcamel-1.2-33 libdbus-glib-1-2 libdns88 libebackend-1.2-2
 libebook-1.2-13 libecal-1.2-11 libedata-book-1.2-13 libedata-cal-1.2-15 libedataserver-1.2-16 libedataserverui-3.0-1 libglib2.0-0
 libglib2.0-0:i386 libglib2.0-bin libglib2.0-data libgssapi-krb5-2 libgssapi-krb5-2:i386 libisc84 libisccc80 libisccfg82 libk5crypto3
 libk5crypto3:i386 libkrb5-3 libkrb5-3:i386 libkrb5support0 libkrb5support0:i386 liblwres80 libperl5.14 libproxy0 libssh-4 libxen-4.1
 libxenstore3.0 locales multiarch-support openssh-client openssh-server perl perl-base perl-modules python python-minimal vim vim-common
 vim-runtime vim-tiny xserver-xorg-video-nouveau
 The following packages are RECOMMENDED but will NOT be installed:
 xserver-xephyr
 73 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
 Need to get 103 MB of archives. After unpacking 16.6 MB will be used.
 Do you want to continue? [Y/n/?] n

Here you can see it needs to download 103 MB. Say no by typing “n”, and copy the packages from the pen-drive to  /var/cache/apt/archives/:

# cp -R /media/C6A7-9F3C/archives/* /var/cache/apt/archives/

Now update the package list and try to upgrade the packages one more time:

root@cupcake:~# aptitude update
 root@cupcake:~# aptitude safe-upgrade
 The following packages will be upgraded:
 bind9-host dnsutils evolution-data-server evolution-data-server-common gdm3 gnome-shell gnome-shell-common google-chrome-stable gvfs
 gvfs-backends gvfs-bin gvfs-common gvfs-daemons gvfs-libs host icedtea-netx icedtea-netx-common krb5-locales libbind9-80 libc-bin libc-dev-bin
 libc6 libc6:i386 libc6-dev libc6-i386 libc6-i686:i386 libcairo-gobject2 libcairo2 libcamel-1.2-33 libdbus-glib-1-2 libdns88 libebackend-1.2-2
 libebook-1.2-13 libecal-1.2-11 libedata-book-1.2-13 libedata-cal-1.2-15 libedataserver-1.2-16 libedataserverui-3.0-1 libglib2.0-0
 libglib2.0-0:i386 libglib2.0-bin libglib2.0-data libgssapi-krb5-2 libgssapi-krb5-2:i386 libisc84 libisccc80 libisccfg82 libk5crypto3
 libk5crypto3:i386 libkrb5-3 libkrb5-3:i386 libkrb5support0 libkrb5support0:i386 liblwres80 libperl5.14 libproxy0 libssh-4 libxen-4.1
 libxenstore3.0 locales multiarch-support openssh-client openssh-server perl perl-base perl-modules python python-minimal vim vim-common
 vim-runtime vim-tiny xserver-xorg-video-nouveau
 The following packages are RECOMMENDED but will NOT be installed:
 xserver-xephyr
 73 packages upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
 Need to get 2,474 kB/103 MB of archives. After unpacking 16.6 MB will be used.
 Do you want to continue? [Y/n/?]

As you can see, now it needs 2,4 MB,  much less than originally needed and it will last much less in downloading with a poor connection like the Venezuela’s 3G networks (put here your preferred mobile operator’s name).

,

2 Comments

Unboxing the Raspberry Pi

Raspberry board

My Raspberry Pi has arrived…and sooner than expected (they say in three weeks). I would say it just took one week to ship it to Venezuela. In my case I bought it at RS Raspberry Pi Store and the shipment was direct to Venezuela. And yes, IPOSTEL shipments do arrive.

Unboxing

Here  I leave some picture of the unboxing…

Raspberry Delivery Raspberry box

Unboxing the Raspberry Raspberry Quick Start

Raspberry Case AC adaptors
American AC wire

I just need a SD card, which must be class 4…at the moment I continue experimenting with the QEMU image as I mentioned in my last post.

, ,

10 Comments

Emulating Raspberry Pi with QEMU

XFCE4 - Raspberry Pi

I bought a Raspberry Pi but it will take three weeks until it arrives (add three more weeks thanks to the postal service) so I decided to see what I can read about the Raspberry. Then it occur to me the idea of trying to emulate the Raspberry Pi and it came to my mind QEMU, because the Raspberry Pi has a ARM1176 processor. Doing a quick research I found this blog where explains how to do it. But I didn’t want to use the Rasberry project’s image but one of the Raspbian variations, in particular the Hexxeh image. Finally, and because I wanted to do some tests without the need of a graphic interface, I did a research to make a bridge on QEMU. Then I set the image as suggested by the Raspbian page, because it comes too plain, so I uninstall LXDE in favor of XFCe with Slim. Here I explain how to do so:

Hexxhex image

I downloaded the  Raspbian Hexxeh image and applied the changes sugested:

  • I installed the  SSH server and regenerated the keys (you have to do this because everybody downloads that image and the keys must be unique). Just to this:
# rm /etc/ssh/ssh_host_*
# dpkg-reconfigure openssh-server
  • I upgraded the package list
  • I installed XFCE and Slim (login manager)  and uninstall LXDE because I thinks it’s ugly an heavier than XFCE.
  • I updated the timezone to Caracas, and set the time with ntp.
  • I set the locales to US_us UTF8
  • I set the keyboard layout to Latin American Spanish.

If you want custom this image as above follow the steps explained at the Raspbian Hexxeh web page.

Raspbian on QEMU

Now to run Raspbian on QEMU you must follow these steps:

  1. Download the kernel for this proccesor:
    $ wget http://xecdesign.com/downloads/linux-qemu/kernel-qemu
  2. Extract the Raspbian image downloaded. I put the Hexxeh image as example, but you can try any other image:
    $ unzip raspbian-r3.zip
  3. Run QEMU with the following options:
    $ qemu-system-arm -kernel kernel-qemu -cpu arm1176 -m 256 -M versatilepb -no-reboot -serial stdio -append "root=/dev/sda2" -hda raspbian-r3/raspbian-r3.img

Keep in mind that is an emulation  so no all the Raspberry’s hardware is supported. For example when booting the image you can see that the first partition is not loaded, which corresponds to the /boot partition, which is supplied by the downloaded kernel .

Setting the briged on QEMU

Another thing I wanted to do was to be able to access the emulation from a remote computer. The idea behind this is not to depend on a graphic environment but to be able to access the Raspberry image with ssh to, for example, be able to install packages with aptitude. To do so I had to make a bridge as explained next:

Installing the needed packages

First, you must download these packages:

# aptitude install bridge-utils uml-utilities

Granting permissions with sudo

In order add the network interfaces to the bridge you have to grant permissions to the user who launch the virtual machine. To do so you have to set sudo using the visudo command:

# This file MUST be edited with the 'visudo' command as root.
#
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
#
# See the man page for details on how to write a sudoers file.
#
Defaults env_reset
Defaults mail_badpass
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
# Host alias specification
# User alias specification
# Cmnd alias specification
Cmnd_Alias QEMU=/sbin/ifconfig, \
/sbin/brctl
# User privilege specification
root ALL=(ALL:ALL) ALL
lgallard ALL=NOPASSWD: QEMU
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:
#includedir /etc/sudoers.d

In this case lgallard is the user that is allowed to run ifconfig and brctl.

Setting the bridge

You have to set the file /etc/network/interfaces to bring up the bridge automatically . To do so you must disable the interfaces to be added to the bridge (for instance, ifdown eth0) and define just the bridge as explained below:

# This file describes the network interfaces available on your system
 # and how to activate them. For more information, see interfaces(5).
# The loopback network interface
 auto lo
 iface lo inet loopback
# The bridge network interface(s)
auto br0
iface br0 inet dhcp
 bridge_ports eth0
 bridge_fd 9
 bridge_hello 2
 bridge_maxage 12
 bridge_stp off

After this you can bring up the bridge by typing this:

# ifup br0

QEMU init script (/etc/eqemu-ifup)

This script let you bring up the network interfaces and the bridge with QEMU. To do so you have to edit /etc/qemu-ifup with the following info:

#!/bin/sh
#sudo -p "Password for $0:" /sbin/ifconfig $1 172.20.0.1

echo "Executing /etc/qemu-ifup"
echo "Bringing up $1 for bridged mode..."
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
echo "Setting tap0"
sudo tunctl -t tap0 -u lgallard
echo "Adding $1 to br0..."
sudo /sbin/brctl addif br0 $1
sleep 2

Screenshots

Here I leave some screenshots with the QEMU emulation:

Raspberry Pi - Hexxeh image

Raspberry Pui - Slim

Raspberry Pi - SSH

Rasbperry Pi basic

As you can see in the last screenshot, not all is installed on the image, so if something doesn’t work you have to download it. In this case you can install midory browser:

# aptitude install midory

Or any other browser you prefer.

References

,

3 Comments

Installing CrossOver on Debian x64

CrossOverCrossOver is a tool that let you install many popular Windows applications and games on PC running Linux. It was developed by Codewevers, and they highlight the fact it’s easy, you can afford it, you won’t need any Windows licenses and you will have Windows applications integrated smoothly on Linux, just click and run.

After this free ad for Codeweavers, I must say CrossOver it’s just a Wine with steroids  I mean, it’s Wine with the needed libraries that makes some Windows programs work without having to deal with those dependencies, and also they organize the installed software into “bottles” which it’s just Wine’s environments with different hard disks settings.

If you are interested in downloading the trial version you an do it here.

The problem

It sounds good until the intro, but when I tried to install it on Debian x64 I ran into this problem:

# gdebi /home/lgallard/Downloads/ia32-crossover_12.1.0-1_amd64.deb
Reading package lists... Done
 Building dependency tree
 Reading state information... Done
 Building data structures... Done
 Building data structures... Done
Requires the installation of the following packages:
 lib32asound2 lib32gcc1 lib32nss-mdns lib32z1 libc6-i386
 Run Windows applications like MS Office
 CrossOver Linux makes it possible to run Windows productivity applications
 such as Microsoft Office, and Quicken, and also lets you play Windows games
 like Skyrim and World of Warcraft.
 Do you want to install the software package? [y/N]: y
  [...]

 (Reading database ... 118461 files and directories currently installed.)
 Unpacking ia32-crossover (from .../ia32-crossover_12.1.0-1_amd64.deb) ...
 dpkg: dependency problems prevent configuration of ia32-crossover:
 ia32-crossover depends on ia32-libs; however:
 Package ia32-libs is not installed.
dpkg: error processing ia32-crossover (--install):
 dependency problems - leaving unconfigured
 Errors were encountered while processing:
 ia32-crossover

I seemed weird to me that gdebi couldn’t install the dependencies, so I tried to install the package by hand:

# aptitude install ia32-libs
 The following NEW packages will be installed:
 ia32-libs{b}
 The following partially installed packages will be configured:
 ia32-crossover
 0 packages upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
 Need to get 114 kB of archives. After unpacking 114 kB will be used.
 The following packages have unmet dependencies:
 ia32-libs : Depends: ia32-libs-i386 which is a virtual package.
 The following actions will resolve these dependencies:
Remove the following packages:
 1) ia32-crossover
Keep the following packages at their current version:
 2) ia32-libs [Not Installed]
Accept this solution? [Y/n/q/?] Y
 The following packages will be REMOVED:
 ia32-crossover{a} lib32asound2{u} lib32gcc1{u} lib32nss-mdns{u} lib32z1{u} libc6-i386{u}
 0 packages upgraded, 0 newly installed, 6 to remove and 0 not upgraded.
 Need to get 0 B of archives. After unpacking 163 MB will be freed.
 Do you want to continue? [Y/n/?]
 (Reading database ... 120124 files and directories currently installed.)
 Removing ia32-crossover ...
 Removing lib32asound2 ...
 Removing lib32gcc1 ...
 Removing lib32nss-mdns ...
 Removing lib32z1 ...
 Removing libc6-i386 ...

Current status: 0 broken [-1], 36004 new [-1].

But when I checked the status of the package I realized it wasn’t installed:

# aptitude search ia32-libs
 p ia32-libs - Transitional package to migrate ia32-libs to multiarch
 p ia32-libs-gtk - Transitional package to migrate ia32-libs-gtk to multiarch

The solution

Checking the dependencies CrossOver tries to install I remember one must add the i386 branch. To do so you have to do this:

# dpkg --add-architecture i386
# aptitude update

When the package list is updated, and you try to install CrossOver one more time you will see the package required grows:

# gdebi /home/lgallard/Downloads/ia32-crossover_12.1.0-1_amd64.deb

Reading package lists... Done Building dependency tree Reading state information... Done Building data structures... Done Building data structures... Done

Requires the installation of the following packages:

esound-common freeglut3:i386 gcc-4.7-base:i386 ia32-libs ia32-libs-i386:i386 lesstif2:i386 lib32asound2 lib32gcc1 lib32nss-mdns lib32z1 libacl1:i386 libaio1:i386 libasound2:i386 libasyncns0:i386 libattr1:i386 libaudio2:i386 libaudiofile1:i386 libavahi-client3:i386 libavahi-common-data:i386 libavahi-common3:i386 libbsd0:i386 libc6-i386 libc6-i686:i386 libc6:i386 libcaca0:i386 libcap2:i386 libcomerr2:i386 libcups2:i386 libcurl3:i386 libdb5.1:i386 libdbus-1-3:i386 libdirectfb-1.2-9:i386 libdrm-intel1:i386 libdrm-nouveau1a:i386 libdrm-radeon1:i386 libdrm2:i386 libedit2:i386 libesd0:i386 libexif12:i386 libexpat1:i386 libffi5:i386 libflac8:i386 libfltk1.1:i386 libfontconfig1:i386 libfreetype6:i386 libgcc1:i386 libgcrypt11:i386 libgd2-xpm:i386 libgdbm3:i386 libgl1-mesa-dri:i386 libgl1-mesa-glx:i386 libglapi-mesa:i386 libglu1-mesa:i386 libgnutls26:i386 libgpg-error0:i386 libgphoto2-2:i386 libgphoto2-l10n libgphoto2-port0:i386 libgpm2:i386 libgssapi-krb5-2:i386 libice6:i386 libidn11:i386 libieee1284-3:i386 libjack-jackd2-0:i386 libjbig0:i386 libjpeg62:i386 libjpeg8:i386 libjson0:i386 libk5crypto3:i386 libkeyutils1:i386 libkrb5-3:i386 libkrb5support0:i386 liblcms1:i386 libldap-2.4-2:i386 libltdl7:i386 liblzma5:i386 liblzo2-2:i386 libmpg123-0:i386 libncursesw5:i386 libnspr4-0d:i386 libnspr4:i386 libnss3-1d:i386 libnss3:i386 libodbc1:i386 libogg0:i386 libopenal1:i386 libp11-kit0:i386 libpam0g:i386 libpciaccess0:i386 libpng12-0:i386 libpopt0:i386 libpulse0:i386 librtmp0:i386 libsamplerate0:i386 libsane-extras-common libsane-extras:i386 libsane:i386 libsasl2-2:i386 libsasl2-modules:i386 libsdl1.2debian:i386 libselinux1:i386 libsigc++-2.0-0c2a:i386 libslang2:i386 libsm6:i386 libsndfile1:i386 libsqlite3-0:i386 libssh2-1:i386 libssl1.0.0:i386 libstdc++5:i386 libstdc++6:i386 libsvga1:i386 libsysfs2:i386 libtasn1-3:i386 libtdb1:i386 libtiff4:i386 libtinfo5:i386 libts-0.0-0:i386 libusb-0.1-4:i386 libuuid1:i386 libv4l-0:i386 libv4lconvert0:i386 libvorbis0a:i386 libvorbisenc2:i386 libvorbisfile3:i386 libwrap0:i386 libx11-6:i386 libx11-xcb1:i386 libx86-1:i386 libxau6:i386 libxaw7:i386 libxcb-glx0:i386 libxcb-render-util0:i386 libxcb-render0:i386 libxcb1:i386 libxcomposite1:i386 libxcursor1:i386 libxdamage1:i386 libxdmcp6:i386 libxext6:i386 libxfixes3:i386 libxft2:i386 libxi6:i386 libxinerama1:i386 libxml2:i386 libxmu6:i386 libxmuu1:i386 libxp6:i386 libxpm4:i386 libxrandr2:i386 libxrender1:i386 libxslt1.1:i386 libxss1:i386 libxt6:i386 libxtst6:i386 libxv1:i386 libxxf86vm1:i386 odbcinst1debian2:i386 uuid-runtime xaw3dg:i386 zlib1g:i386

 Run Windows applications like MS Office
CrossOver Linux makes it possible to run Windows productivity applications
such as Microsoft Office, and Quicken, and also lets you play Windows games
like Skyrim and World of Warcraft.
Do you want to install the software package? [y/N]:y

After accepting, all needed packages will be downloaded (they are many) and CrossOver will be installed correctly.

References:

No Comments