Introduction

Packet Tracer est un logiciel propriétaire distribué sous Windows, MacOS, et Ubuntu. À ce titre, lorsque l’on souhaite l’installer sous la distribution Arch Linux, il est nécessaire de packager le binaire comme suit, notamment pour correctement recenser et gérer ce dernier avec pacman. Pour concevoir le paquet, on commence par créer le répertoire de travail ainsi que le script de packaging PKGBUILD dans lequel seront spécifiées les différentes étapes du packaging :

mkdir ~/packettracer-build && cd ~/packettracer-build
# Copiez votre fichier .deb ici
touch PKGBUILD

Comprendre et manipuler le format .deb

Structure

Le format .deb correspond au format des paquets logiciels de la distribution Debian GNU/Linux. Il s’agit en réalité d’une simple archive ar1 contenant elle-même le fichier debian-binary, ainsi que les deux autres archives suivantes :

  • control.tar.gz : Corpus de méta-données de contrôle, à l’instar du nom du paquet, de la version, des dépendances, etc.
  • data.tar.gz : Contient les fichiers à installer.

Sous Debian, les fichiers .deb sont manipulés avec le programme dpkg. Sous Arch, l’utilisation de ar présent au sein du package binutils permet la décompression du fichier cible.

Extraire les dépendances

En ce qui nous concerne, il est nécessaire de déterminer les dépendances du software que l’on cherche à packager, afin de les spécifier dans notre paquet pour que pacman soit en mesure de correctement résoudre et installer ces dernières.

Pour ce faire, on procède ainsi :

tar -xOf control.tar.xz ./control | grep "Depends"

En l’occurrence, on obtient le résultat : Depends:coreutils,libc-bin,libfuse2,libzstd1,libpcre2-dev,sudo,xdg-utils,gtk-update-icon-cache,libc6 (>= 2.31),libstdc++6 (>= 9.3.0),bash (>=4.4).

Déterminer un package parent

On peut utiliser pkgfile [options] target afin de déterminer quels packages contiennt la cible target.

Variation des intitulés

Le nom des dépendances peut varier d’une distribution à l’autre. Par exemple, libzstd1 sous Debian correspond à zstd sous Arch.

Packaging

Dans le cadre de la création du paquet, on spécifie les métadonnées requises, prétraite l’archive en la décompressant (cf. prepare()), puis procéde à l’extraction des données à déplacer au sein de notre système.

Par soucis de sécurité, de précaution, makepkg utilise une archicture de fichier miroir au sein de pkgdir afin de simuler l’état du système de fichier tel qu’il le sera au moment de l’installation du paquet. En clair, au lieu de manipuler directement les sources en les déplaçant dans /usr/bin, /opt/, etc., on agit localement au sein de ~/paquettracer-build/pkg/.

On peut générer la signature du paquet avec la commande :

makepkg -g >> PKGBUILD

WARNING

Génère la somme de contrôle mais n’efface pas l’ancienne si elle est déjà dans le fichier.

Enfin, la compilation se fait avec makepkg -si.

WARNING

Si l’on a pas spécifié l’option !strip, on remarquera l’échec de l’opération. Celle-ci empêche Arch de modifier les binaires propriétaires, ce qui pourrait corrompre l’AppImage

# Maintainer: Ryan Bouchou <ryanbouchou dot pro at gmail dot com>
pkgname=packettracer
pkgver=9.0.0
pkgrel=1
pkgdesc="A cross-platform visual simulation tool designed by Cisco Systems that allows users to create network topologies and imitate modern computer network"
arch=('x86_64')
depends=(
  'fuse2'
  'pcre2'
  'gcc-libs'
  'glibc'
  'xdg-utils'
  'nss'
  'libxkbcommon-x11'
)
options=('!strip')
url="https://www.netacad.com/resources/lab-downloads"
license=('LicenseRef-Cisco-EULA')
 
source=("local://CiscoPacketTracer_900_Ubuntu_64bit.deb")
sha256sums=('dd9ac0d4c7fc37dcb68f627fd7c7e6fa6d4200c14492526e5618b9bd172ed920')
 
prepare() {
  ar x CiscoPacketTracer_900_Ubuntu_64bit.deb
}
 
package() {
  # Extraction
  tar -xJf data.tar.xz -C "${pkgdir}"
 
  # Permissions pour l'AppImage
  chmod +x "${pkgdir}/opt/pt/packettracer.AppImage"
 
  # Création du lien symbolique
  mkdir -p "${pkgdir}/usr/bin"
  ln -s /opt/pt/packettracer.AppImage "${pkgdir}/usr/bin/packettracer"
  chown -R root:root "${pkgdir}"
}

Footnotes

  1. Page Wikipedia dédiée à archiver