Conflits entre paquets dans Arch Linux

Arch Linux logo

Des conflits peuvent intervenir entre des paquets, au sein même, d'un dépôt officiel sous Arch Linux ppc.

Il faut savoir que Arch Linux (i686 et x86_64) est une distribution dite en rolling release, c'est à dire, mise à jour continuellement sans freeze pour la sortie d'une version stable.

Du côté de la version PowerPC, la fréquence des mises à jour, est nettement moins rapide [1]. Donc on pourrait s'attendre à une « cohérence » entre les différents paquets pré-compilés, et bien ce n'est pas forcément le cas, la preuve avec udisks.

Notes

[1] On peut très bien compiler ses propres paquets.

Le contexte

Étant un inconditionnel du projet Xfce, j'aime bien compiler mes propres paquets (pour être sûr d'avoir les dernières versions). Sous Arch Linux, la construction d'un paquet pré-compilé se fait à l'aide d'un script PKGBUILD. Cela permet de renseigner les différentes dépendances, d'automatiser la post-installation, etc.

En regardant les dépendances nécessaires au bon fonctionnement d'une extension (Thunar Volume Manager, ou thunar-volman) au gestionnaire de fichiers, Thunar, je me suis rendu compte qu'il me manquait la bibliothèque, udisks.

Cette dernière permet la gestion des périphériques de stockage (CD Rom, DVD, clé USB, disque dur, etc.), et de définir des « droits » aux utilisateurs du système, grâce à polkit.

En réalité udisks n'est pas mentionné dans le script shell configure, il s'agit plutôt d'une dépendance « implicite ». Bien souvent cette bibliothèque est présente sur la plupart des distribution Linux [1].

J'ai tout d'abord procédé à une recherche :

olivier@piraat:~ $ pacman -Ss udisks
extra/udisks 1.0.3-1
      Disk Management Service
olivier@piraat:~ $

Puis à son installation :

root@piraat:~ # pacman -S udisks
Résolution des dépendances...
Recherche des conflits possible entres paquets...
:: lvm2 et mkinitcpio sont en conflits (mkinitcpio<0.7). Supprimer mkinitcpio ? [o/N]

Comme, je ne souhaite pas désinstaller mkinitcpio, je me retrouve donc dans l'incapacité d'installer udisks, par ailleurs, je n'ai aucunement envie de repartitionner le disque avec lvm. Je suis donc allé regarder plus en détail les dépendances de udisks.

Apprendre à rechercher la bonne information

Le code source est accessible à cette adresse. En parcourant le fichier configure.ac (j'ai choisi la branche 1.0.3), on tombe sur ces lignes :

[...]
have_lvm2=no
AC_ARG_ENABLE(lvm2, AS_HELP_STRING([--disable-lvm2], [disable LVM2 support]))
if test "x$enable_lvm2" != "xno"; then
  PKG_CHECK_MODULES(LVM2, lvm2app >= 2.2,
                    [AC_DEFINE(HAVE_LVM2, 1, [Define if LVM2 is available]) have_lvm2=yes],
                    have_lvm2=no)
  AC_SUBST(LVM2_CFLAGS)
  AC_SUBST(LVM2_LIBS)
  if test "x$have_lvm2" = xno -a "x$enable_lvm2" = xyes; then
    AC_MSG_ERROR([lvm2 support requested but libraries not found])
  fi
fi
AM_CONDITIONAL(HAVE_LVM2, [test "$have_lvm2" = "yes"])

[...]

C'est ce qui nous intéresse, on peut désactiver le support pour lvm.

J'ai donc légèrement modifié le PKGBUILD :

[...]
depends=('udev' 'sg3_utils' 'glib2' 'dbus-glib' 'polkit' 'parted' 'device-mapper' 'libatasmart' 'lsof' 'eject')
makedepends=('intltool' 'pkgconfig' 'gettext')
[...]
build() {
  cd "${srcdir}/${pkgname}-${pkgver}"
  patch -Np0 -i "${srcdir}/01-mkfs-tempdir.patch"
  ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \
      --libexecdir=/usr/lib/udisks --mandir=/usr/man --disable-static \
      --disable-gtk-doc-html --disable-lvm2 \
      --enable-nls --without-html-dir
  #fix location for bash_completion helper
  sed -i -e 's|profile.d|bash_completion.d|' tools/Makefile

  make
}

[...]

Désormais thunar-volman est pleinement fonctionnel.

Notes

[1] Sous Slackware, il faut utiliser le SlackBuild, disponible sur SlackBuilds.org