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 PKGBUILDComprendre 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] targetafin de déterminer quels packages contiennt la cibletarget.
Variation des intitulés
Le nom des dépendances peut varier d’une distribution à l’autre. Par exemple,
libzstd1sous Debian correspond àzstdsous 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 >> PKGBUILDWARNING
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}"
}