Sat Sep 7 21:22:39 2019 UTC

Scénario C

Introduction

Vous avez des envies de compilation à grande échelle, vous êtes convaincu que c'est le meilleur scénario pour gérer une NuTyX. Vous n'avez aucune envie d'utiliser les binaires proposés.

La plupart des paquets que vous utilisez ne sont pas présents et ceux qui le sont, seront compilés par vous-même.

Vous souhaitez obtenir les maj des ports disponibles.

Et bien évidemment, vous souhaitez que les dépendances soient compilées automatiquement.

Vous l'avez compris, ce scenario est sans doute le plus "attirant" et le plus proche des distributions "dites" sources telle que CRUX ou gentoo.

[Important] Pour construire ses propres paquets, il est important de "démarrer" avec une installation minimale dite de base.

Le fichier /etc/cards.conf

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, donc on ne spécifie aucune adresse URL.

Seule la collection base doit rester active afin de pouvoir installer les outils de développement.

Mon processeur est un 4 coeurs, donc autant en profiter:

Le dossier contenant les logs de compilation est défini

Les dossiers définissant le système de base, en cas de retour à un système de base sont définis.

Le contenu typique de votre fichier /etc/cards.conf pour le scénario C:

dir /usr/ports/personnel
dir /usr/ports/gui
dir /usr/ports/cli
dir /usr/ports/base
dir /var/lib/pkg/depot/base|http://downloads.nutyx.org
logdir /var/log/pkgbuild
locale fr
locale it
base /usr/ports/base
base /usr/ports/aconserver

Installation des outils de développement

On peut maintenant commencer par installer les paquets de développement, cad un compilateur, les librairies C et C++ les outils autoconf, automake, etc etc.. . On commence par créer les dossiers nécéssaires:

sudo mkdir -p /usr/ports/{personnel,aconserver}
sudo mkdir -p /srv/www/sources

Et maintenant on installe les outils:

sudo cards sync
/var/lib/pkg/depotrepo/base/.PKGREPO
sudo cards install cards.devel
Retrieve info about the 66 packages: 100 %
/var/lib/pkg/depot/base/cards/.PKGREPO
/var/lib/pkg/depot/base/cards/cards.devel1429192050x86_64.cards.tar.xz
661020 Bytes - 671821 Bytes/Sec - 100% - 0 Sec remain  remain 
/var/lib/pkg/depot/base/acl/.PKGREPO
/var/lib/pkg/depot/base/acl/acl.devel1412540285x86_64.cards.tar.xz
...

Le fichier /etc/pkgmk.conf

Pour ce scénario, il est indispensable de vérifier toutes les variables nécéssaires pour le bon fonctionnement du duo pkgmk/cards

export MAKEFLAGS="-j4"

Les sources sont stockées dans un dossier commun, je ne souhaite pas qu'elles soient effacées. Je souhaite que le dossier de travail reste dans le dossier du port, cela me permettra éventuellement de compiler plusieurs ports sans perdre le travail. C'est très utile pour vérifier.

PKGMK_SOURCE_DIR="/srv/www/sources"
PKGMK_KEEP_SOURCES="yes"
PKGMK_WORK_DIR="$PWD/work"

Dans ce scénario, je souhaite gérer les dépendances de façon automatique lors de la compilation et donc j'ai besoin du fichier .PKGREPO généré dans le dossier du port. Je souhaite pouvoir utiliser la commande cards install ou get pour pouvoir réinstaller mes binaires disponibles. La commande pkgmk doit donc générer le .PKGREPO de la collection concernée (dossier parent). J' utilise le duo cards/pkgmk:

PKGMK_IGNORE_REPO="no"
PKGMK_IGNORE_COLLECTION="no"

Je ne souhaite pas que pkgmk splite le binaire en paquet et sous paquets (devel, doc, man, etc). Je me contente du paquet de base puisque je le compile moi-même. Pour les locales, si elles existent, je me contenterai des locales françaises et italiennes fr et it:

PKGMK_GROUPS=()
PKGMK_LOCALES=(fr it)

Je souhaite que pkgmk compresse mon paquet au format gz (parce que l'algo est beaucoup plus rapide qu'en xz ) une fois construit et qu'il soit conservé une fois installé pour usage ultérieur. Par exemple si je souhaite revenir à un système de base via la commande cards base:

PKGMK_COMPRESS_PACKAGE="yes"
PKGMK_COMPRESSION_MODE="gz"
PKGMK_CLEAN="no"

Voici à quoi peut ressembler votre fichier /etc/pkgmk.conf pour le scénario C:

export CFLAGS="-O2 -pipe"
export CXXFLAGS="${CFLAGS}"
case ${PKGMK_ARCH} in
    "x86_64"|"")
       export MAKEFLAGS="-j4"
       ;;
    "i686")
       export CFLAGS="${CFLAGS} -m32"
       export CXXFLAGS="${CXXFLAGS} -m32"
       export LDFLAGS="${LDFLAGS} -m32"
       export MAKEFLAGS="-j4"
       ;;
    *)
       echo "Unknown architecture selected! Exiting."
       exit 1
       ;;
esac
PKGMK_SOURCE_DIR="/srv/www/sources"
PKGMK_KEEP_SOURCES="yes"
PKGMK_WORK_DIR="$PWD/work"
PKGMK_IGNORE_REPO="no"
PKGMK_IGNORE_COLLECTION="no"
PKGMK_GROUPS=()
PKGMK_LOCALES=(fr it)
PKGMK_COMPRESS_PACKAGE="yes"
PKGMK_COMPRESSION_MODE="gz"
PKGMK_CLEAN="no"

On peut maintenant récupérer les ports disponibles de NuTyX:

sudo ports -u
Updating file list from downloads.nutyx.org::nutyx/ports/8.1/base/
Updating collection base
 Checkout ./
 Checkout aaabasicfs/
 Checkout aaabasicfs/Pkgfile
...

Compiler un paquet avec quelques dépendances

  1. Avertissement

    Si vous lisez ceci, assurez-vous d'avoir effectué toutes les manipulations pour ce scénario.

    Les dépendances d'un paquet sont souvent le casse tête d'un empaqueteur. Il est en effet jamais facile de connaître exactement quelles sont les dépendances indispensables pour que le paquet en chantier se compile sans problème.

    En plus des dépendances indispensables, il y a aussi les dépendances optionnelles qui permettent d'avoir plus de fonctionnalités. Par principe, sous NuTyX nous essayons de proposer le maximum de fonctionalités.

    Le paquet que nous allons construire n'apportera certainement pas grand chose à votre NuTyX. C'est surtout la méthode utilisée qui nous intéresse ici: Nous allons donc prendre le paquet clipit qui d'après le README est (en anglais dans le texte)

    ClipIt is a lightweight GTK+ clipboard manager.

    Project website: http://clipit.rspwn.com/

    Requirements:

    * gtk+ >= 2.10.0

  2. Créer le dossier

    mkdir -p /usr/ports/personnel/clipit
  3. Créer le fichier Pkgfile

    Completez le fichier /usr/ports/personnel/clipit/Pkgfile avec ceci:

    description="ClipIt is a lightweight GTK+ clipboard manager."
    url="http://clipit.rspwn.com/"
    
    maintainer="Gilberto Xyhthyx <xyhthyx at gmail dot com>"
    packager="François Perrin"
    
    makedepends=(gtk2)
    
    name=clipit
    version=1.4.2
    release=1
    
    source=(https://github.com/downloads/shantzu/ClipIt/$name-$version.tar.gz)
    
    build() {
      cd $name-$version
      ./configure --prefix=/usr \
      --sysconfdir=/etc
      make
      make DESTDIR=$PKG install
    }
  4. Compilez le paquet.

    cards depcreate clipit

    La commande cards depcreate compile les dépendances, installe les dépendances, compile le paquet final et l'installe.

    yippee C'est magique yippee

Conclusion

Pour ce scénario, les commandes à retenir sont:

ports -u
cards depends
cards depcreate
cards level

Pour connaître en détail la fonctionnalité de ces commandes, je vous invite à lire le man de cards:

man cards