Mon Oct 16 09:31:10 2017 UTC

Compiler dans un environnement isolé

Introduction

Cet article vous explique chaque étape pour la compilation de paquets dans une chroot.

Ajuster /etc/cards.conf

Pour pouvoir installer les paquets compilés dans votre chroot, vous devez ajuster votre fichier /etc/cards.conf. Vous y ajouez en haut de celui-ci:

dir /mnt/hd/usr/ports/perso

Vous êtes maintenant prêt pour installer et configurer votre chroot.

Installation de la chroot

En fonction du choix de la branche choisie, vous spécifiez celle-ci lors de l'appel du script:

La branche stable

VERSION="stable" install-nutyx

La branche development

VERSION="development" install-nutyx

Entrer dans la chroot

install-nutyx -ec
A partir de maintenant, tout ce que vous allez faire, vous le faite dans votre environnement chroot isolé.

Installation des outils de développement

L'installation par défaut est tout à fait adaptée donc un petit:

get cards.devel

Les fichiers de configuration

/etc/cards.conf

cat >/etc/cards.conf << EOF
dir /usr/ports/perso
dir /usr/ports/gui
dir /usr/ports/cli
dir /usr/ports/base
logdir /var/log/pkgbuild
base /usr/ports/base
EOF

Un dossier contenant mes recettes personnelles est ajouté. Ce dossier ainsi que les collections ne doivent jamais être mis à jour par la commande cards sync. On ne spécifie donc aucune URL.

Le dossier /var/log/pkgbuild contiendra les logs de compilation.

Je n'ai pas besoin de spécifier les locales, elles seront toujours toutes installées.

Le dossier /usr/ports/base définit le système de base lors de l'usage de la commande cards base -r.

/etc/pkgmk.conf

cat > /etc/pkgmk.conf << EOF
export CFLAGS="-O2 -pipe"
export CXXFLAGS="\${CFLAGS}"
case \${PKGMK_ARCH} in
    "x86_64"|"")
       export MAKEFLAGS="-j$(getconf _NPROCESSORS_ONLN)"
       ;;
    "i686")
       export MAKEFLAGS="-j$(getconf _NPROCESSORS_ONLN)"
       export CFLAGS="${CFLAGS} -m32"
       export CXXFLAGS="${CXXFLAGS} -m32"
       export LDFLAGS="${LDFLAGS} -m32"
       ;;
    *)
       echo "Unknown architecture selected! Exiting."
       exit 1
       ;;
esac
PKGMK_SOURCE_DIR="/tmp"
PKGMK_KEEP_SOURCES="yes"
PKGMK_WORK_DIR="/tmp/work"
PKGMK_IGNORE_REPO="no"
PKGMK_IGNORE_COLLECTION="no"
PKGMK_GROUPS=()
PKGMK_LOCALES=()
PKGMK_COMPRESS_PACKAGE="yes"
PKGMK_COMPRESSION_MODE="xz"
PKGMK_CLEAN="no"
PKGMK_IGNORE_RUNTIMEDEPS="no"
EOF

Il est indispensable de vérifier toutes les variables nécessaires pour le bon fonctionnement du duo pkgmk/cards.

Les sources sont stockées dans un dossier commun, je ne souhaite pas qu'elles soient effacées.

Les binaires produits seront dans le format de compression xz.

Je ne souhaite pas supprimer mes binaires produits une fois installés.

Je souhaite que les dépendances soient ajoutées automatiquement dans le binaire.

Synchronisation des binaires via rsync

Cette opération consiste à rapatrier les paquets contenus dans les collections base, cli, et gui disponibles en binaires. Elle peut durer entre quelques minutes et quelques heures en fonction de votre connection.

Heureusement, cette opération n'est à faire qu'une fois Laughing Laughing Laughing.

Il faut commencer par créer le dossier racine

mkdir -p /usr/ports/perso

On peut maintenant synchroniser l'ensemble des binaires:

La branche stable

for i in base cli gui
do
  rsync -avz --delete-after rsync://downloads.nutyx.org/nutyx/`uname -m`/stable/$i/ \
  /usr/ports/$i/
done

La branche development

for i in base cli gui
do
  rsync -avz --delete-after rsync://downloads.nutyx.org/nutyx/`uname -m`/development/$i/ \
  /usr/ports/$i/
done

Allez peut-être boire un café, manger une pizza ou un bon paquet de frites Laughing, ça peut-être long...

Compilation et installation de votre paquet

Vous commencez par créer le dossier dans lequel sera placé votre nouveau paquet. Appellons-le monpaquet (à adapter avec le nom réel)

mkdir /usr/ports/perso/monpaquet

On crée maintenant la recette (à adapter avec votre paquet réel):

# Depends on: python gtk3 librsvg
description="Mon premier paquet de la mort avec des dépendances"
packager="francis perrin"
url="http://www.mon-premier-paquet.org/"
name=monpaquet
version=1.0.0
release=1
source=(${url}downloads/$name/$name-$version.tar.xz)
build() {
   cd $name-$version
   ./configure --prefix=/usr
   make
   make DESTDIR=$PKG install
}

Il ne nous reste plus qu'à lancer la compilation et l'installation de notre paquet

cards create -r monpaquet

Je vous invite à consulter l'aide de cards pour comprendre le fonctionnement de cards create -r

man cards

Conclusion

Les commandes à retenir sont:

cards level
cards base -r
cards create -r