Sat Apr 15 10:31:09 2017 UTC

Scénario B

Introduction

Vous êtes satisfait de votre NuTyX, il y a juste un ou deux paquets qui vous manquent, vous décidez donc de les compiler vous-même.

Armez-vous de courage et de patience Tongue outLaughing.

[Important] Dans ce scénario, évitez à tout prix de compiler des recettes réclamant des dépendances. Si tel est le cas, vous serez confronté aux nombreuses erreurs liées aux dépendances devel non installées par défaut. Dans un tel cas, préférez le scenario C. Vous voilà averti.

Le fichier /etc/cards.conf

Un dossier contenant mes recettes personnelles est ajouté, ce dossier ne doit jamais être mis à jour par la commande cards sync, donc on ne doit pas spécifier d'adresse URL associée.

Les collections binaires sont activées, cela me permettra d'ajouter facilement les éventuelles dépendances manquantes...

La(les) langue(s) utilisée(s) sur la machine est(sont) ajustée(s)

Le dossier définissant le système de base, en cas de retour à un système de base est défini

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

dir /usr/ports/personnel
dir /var/lib/pkg/depot/gui|http://downloads.nutyx.org
dir /var/lib/pkg/depot/cli|http://downloads.nutyx.org
dir /var/lib/pkg/depot/base|http://downloads.nutyx.org
locale fr
locale de
base /var/lib/pkg/depot/base

Installation des outils de développement

Commençons par créer le dossier /usr/ports/personnel.

sudo mkdir -p /usr/ports/personnel

On peut maintenant installer les paquets de développement, cad un compilateur, les librairies C et C++ les outils autoconf, automake, etc etc..

sudo cards sync
/var/lib/pkg/depot/gui/.PKGREPO
/var/lib/pkg/depot/cli/.PKGREPO
/var/lib/pkg/depot/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

Avant de construire son premier paquet, il est bon de vérifier quelques variables définies dans le fichier de configuration /etc/pkgmk.conf:

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

export MAKEFLAGS="-j8"

Les sources sont sauvegardées dans le dossier contenant la recette ou dans un autre dossier. Personnellement, je préfère les mettre ensemble dans un dossier séparé commun. Et pourquoi pas un dossier qui sera nettoyé au prochain boot, je choisis le dossier /tmp. Je souhaite que les sources soient effacées une fois le paquet compilé et installé avec succès. Et enfin, je préfère que le dossier de travail soit également sous le dossier /tmp/work au lieu du dossier défini par défaut:

PKGMK_SOURCE_DIR="/tmp"
PKGMK_KEEP_SOURCES="no"
PKGMK_WORK_DIR="/tmp/work"

Je n'ai pas envie de spécifier à chaque fois la demande de téléchargement des sources indisponibles. Une variable permet de le faire automatiquement:

PKGMK_DOWNLOAD="yes"

Dans ce scénario, je ne souhaite pas gérer les dépendances de façon automatique lors de la compilation et donc je n'ai pas besoin du fichier .PKGREPO... Je n'utilise que la commande pkgmk:

PKGMK_IGNORE_REPO="yes"
PKGMK_IGNORE_COLLECTION="yes"

Je ne souhaite pas que pkgmk scinde 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. Si les locales existent, je me contenterai des locales françaises et allemandes fr et de:

PKGMK_GROUPS=()
PKGMK_LOCALES=(fr de)

Pour gagner du temps, je ne souhaite pas que pkgmk compresse mon paquet une fois construit et pour gagner de la place, je ne souhaite pas le conserver une fois installé:

PKGMK_COMPRESS_PACKAGE="no"
PKGMK_CLEAN="yes"

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

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

Voilà pour ce qui est de la configuration du fichier /etc/pkgmk.conf

Compiler un paquet sans dépendances

!!! A partir de cet instant, toutes les commandes que vous allez effectuer DOIVENT se faire par le compte root (administrateur). Soyez très attentif lorsque vous tapez les commandes.

Commençons donc par basculer en compte root

su -
Password:

J'espère que vous vous rappelez du mot de passe Cool. Notez bien le tiret, il est indispensable pour que vous exécutiez les fichiers de configuration du compte root.

Nous voilà donc en root, (la couleur du prompt est passée en rouge)

Si vous lisez ceci, assurez-vous d'avoir effectué toutes les manipulations pour le scénario concerné, dans notre exemple il s'agit du scénario B.

Je vous propose de construire le petit éditeur de texte JOE. Vous me direz, il existe déjà, peu importe, l'idée ici est de se faire la main sur un paquet simple.

Pour qu'une recette se compile et s'installe correctement, il est important de nommer le dossier par le nom de la recette, le même nom que celui défini par la variable name. Dans notre cas, le nom est: joe

Création du dossier

mkdir -p /usr/ports/personnel/joe

Création de la recette

Si je me base sur la recette de BLFS, tapez donc ce texte dans votre terminal et DANS votre chroot Laughing

cat > /usr/ports/personnel/joe/Pkgfile << "EOF"
# Description: Petit éditeur non graphique emulant emuler, wordStar
# URL: http://joe-editor.sourceforge.net/
# Maintainer: JHallen, JJJordan, Marx_sk, shallot
# Packager: François Perrin

name=joe
version=3.7
release=1
source=( http://downloads.sourceforge.net/$name-editor/$name-$version.tar.gz)
build() {
  cd $name-$version
  ./configure --prefix=/usr --sysconfdir=/etc
  make
  make DESTDIR=$PKG install
}
EOF

Compilation de la recette

Ca y est tout est en place pour la compilation de notre nouveau paquet... Oui je l'ai déjà dite celle-là yippee

cd /usr/ports/personnel/joe
pkgmk -d
=======> PKGMK_INSTALL: no
=======> PKGMK_WORK_DIR: /usr/ports/personnel/joe/work
=======> PKGMK_SOURCE_DIR: /usr/ports/personnel/joe
=======> WARNING: CLEAN IGNORED
=======> WARNING: KEEP SOURCES
=======> PKGMK_UPDATE_SIGNATURE:
=======> PKGMK_IGNORE_FOOTPRINT: yes
=======> PKGMK_IGNORE_MD5SUM: yes
=======> .PKGREPO file will not be generated
=======> PKGMK_COMPRESS_PACKAGE: no
=======> name: joe
=======> version: 3.7
=======> Downloading 'http://downloads.sourceforge.net/joe-editor/joe-3.7.tar.gz'.
...
...
Saving to: '/usr/ports/personnel/joe/joe-3.7.tar.gz.partial'
2014-10-26 22:27:47 (1.01 MB/s) - '/usr/ports/personnel/joe/joe-3.7.tar.gz.partial' saved [696036/696036]

=======> Building '/usr/ports/personnel/joe/joe1414362465x86_64.cards.tar.xz'.
bsdtar -p -o -C /usr/ports/personnel/joe/work/src -xf /usr/ports/personnel/joe/joe-3.7.tar.gz
+ build
+ cd joe-3.7
+ ./configure --prefix=/usr --sysconfdir=/etc
...
...
make[3]: Leaving directory '/usr/ports/personnel/joe/work/src/joe-3.7'
make[2]: Leaving directory '/usr/ports/personnel/joe/work/src/joe-3.7'
make[1]: Leaving directory '/usr/ports/personnel/joe/work/src/joe-3.7'
=======> WARNING: Footprint ignored.

Installer mon paquet

Pour installer notre paquet, il suffit de taper la commande:

pkgadd joe1414362465x86_64.cards.tar

Conclusion

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

pkgmk
pkgadd

La commande pkgmk sera toujours lancée dans le dossier de la recette.