Le but de ce projet est de porter l'infrastructure pkgsrc sur FreeMiNT.
Le projet sera considéré achevé quand le bootstrap aboutira à la création du kit binaire, qui est la seule façon de pouvoir faire fonctionner pkgsrc sur une machine vierge.
État : 🔧️
Prérequis
- Configuration d'ARAnyM
- Configuration de FreeMiNT
- Système de base
Télécharger pkgsrc
- Depuis le site officiel: www.pkgsrc.org
Les modifications à apporter à la configuration upstream
- La liste des outils : mk/tools/tools.FreeMiNT.mk
La commande bootstrap
Script pour appeler bootstrap
#!/bin/bash
# Custom launcher for bootstrap
if [ ! -f /bin/sh ]; then
ln -s /bin/bash /bin/sh
fi
umask 0022
cd /usr/pkgsrc/bootstrap
env CONFIGURE_ENV='ac_cv_func_lchmod=no ac_cv_func_lchflags=no ac_cv_func_getopt=yes' ./bootstrap --prefix /c/usr/pkg --workdir /c/usr/pkgsrc/bootstrap/work --compiler gcc --unprivileged --cwrappers no --prefer-native yes
Source : go.sh on Forgejo
Détails
- Environnement: désactiver lchmod et lchflags
- prefix
- workdir
- compilateur
- mode non priviligié car l'émulateur n'a pas les droits root
- pas de wrappers
- outils natifs de préférence
Résultats
bootstrap partiel
- bmake est utilisable
- Les pkgtools sont utilisables en versions minimales (sauf delete, absent)
- pkg_info affiche les paquets installés à partir des sources (bmake, libnbcompat, ...)
bootstrap réussi
- La plupart des appels à libfetch ont dû être désactivés
- Disponible au téléchargement

Construction de pax
- cd /usr/pkgsrc/archivers/pax; bmake install

- Échec sur symboles en double : pou corriger ce bogue, supprimer
char *chdname;deextern.het l'ajouter dansoptions.c(extern.hest inclus à la fois paroptions.cetar_io.cd'où le doublon). - Bogue suivant : la valeur par défaut de umask :

- Run
umask 0022 ; bmake clean install(diff plante encore)

- Remarquer que le binaire s'appelle
nbpax

Les problèmes rencontrés
- ./bootstrap ne se lance pas
- ./bootstrap indique que les chemins par défaut ne conviennent pas
- ./bootstrap ne peut pas être relancé sans tout effacer
- chflags() n'existe pas
- Incompatibilité entre off_t et la_int64_t
- getopt est défini plusieurs fois
- awk est introuvable
- Erreur : dlopen() est requis
- Erreur d'accès au dossier libnbcompat/work/.destdir/pkg
- Des fichiers sont introuvables
- Erreur umask
- Plantage de diff
- Plantage de sed
- Plantage de wc
- Echec avec mman.h (netpgpverify)
- Le dossier /usr/pkg existe déjà
- La commande hostname renvoie (null)
- Blocage sur la recherche de fichiers plus récents que le fichier configure
- Commande introuvable --modversion
- L'entrée de tsort contient un nombre impair de tokens
- Commande introuvable ac_fn_c_try_link
- Echec de la liaison de pkg_install avec libfetch
- Référence indéfinie vers optreset
- Les commandes bmake et pkg_xxx sont introuvables
- La licence est refusée
- fetch échoue lors de l'appel de bmake
- Erreur sur strerror_r : les types int et char * ne correspondent pas
- Impossible d'écrire l'archive à cause des droits d'accès
Résolution des problèmes
./bootstrap ne se lance pas
- Cause: la commande
shn'existe pas
- Résolution: créer le lien :
cd bin; ln -s bash sh - Pourquoi: le script cherche sh qui n'est pas présent pas défaut
./bootstrap indique que les chemins par défaut ne conviennent pas
- Cause: bootstrap interdit l'utilisation de liens dans les chemins d'accès

- Résolution: Utiliser
/c/usr/pkgau lieu de/usr/pkg. - Pourquoi:
/usrest un lien versc:/usr(directiveslndansmint.cnf)
./bootstrap ne peut pas être relancé sans tout effacer
- Cause: bootstrap veut démarrer sur une base propre à chaque fois

- Résolution: Faire "sauter" le test dans le script bootstrap
- Pourquoi: pas besoin d'effacer vu qu'on relance dans les mêmes conditions pour trouver les bogues
--- bootstrap.orig 2025-11-15 15:47:59.722597455 +0100
+++ bootstrap 2025-11-15 15:49:55.875815746 +0100
@@ -962,15 +962,18 @@
check_prog whoamiprog whoami
if [ -d "${wrkdir}" ] || [ -f "${wrkdir}" ]; then
- die "\"${wrkdir}\" already exists, please remove it or use --workdir"
+# die "\"${wrkdir}\" already exists, please remove it or use --workdir"
+ echo "\"${wrkdir}\" already exists, continue..."
fi
if [ -f "${prefix}/share/mk/sys.mk" ]; then
- die "\"${prefix}\" already in use, remove it or use a different --prefix"
+# die "\"${prefix}\" already in use, remove it or use a different --prefix"
+ echo "\"${prefix}\" already in use, continue..."
fi
if [ -d "${pkgdbdir}/bootstrap-mk-files-"* ]; then
- die "\"${pkgdbdir}\" already in use, remove it or use a different --pkgdbdir"
+# die "\"${pkgdbdir}\" already in use, remove it or use a different --pkgdbdir"
+ echo "\"${pkgdbdir}\" already in use, continue..."
fi
mkdir_p_early ${wrkdir}
chflags() n'existe pas
- Cause: malgré les options, le code utilise toujours
lchflags
- Résolution: ajouter une exception comme pour Linux.
- Pourquoi: le code ne dépend par des options passées
- Détail: fichier
pkgtools/libnbcompat/files/lchflags.c--- lchflags.c.orig 2025-10-28 19:57:28.979683563 +0100 +++ lchflags.c 2025-10-28 19:45:30.725554587 +0100 @@ -48,7 +48,7 @@ if (S_ISLNK(psb.st_mode)) { return 0; } -#if defined(__illumos__) || defined(__linux__) +#if defined(__illumos__) || defined(__linux__) || defined(__MINT__) errno = (path == NULL ? EINVAL : ENOSYS); return -1; #else
Incompatibilité entre off_t et la_int64_t
- Cause: Une fonction déclare un offset de type off_t 32 bits mais la fonction de libarchive attend une valeur 64 bits

- Résolution: Indiquer le bon type dans le code.
- Pourquoi: sur architecture 64 bits, off_t est promu en 64 bits, mais reste 32 bits sur architecture 32 bits
- Détail: fichier
pkg_install/add/perform.c
--- perform.c.orig 2025-04-17 23:29:34.000000000 +0200
+++ perform.c 2025-11-15 17:15:00.116495241 +0100
@@ -654,7 +654,7 @@
int r;
const void *buff;
size_t size;
- off_t offset;
+ la_int64_t offset;
for (;;) {
r = archive_read_data_block(reader, &buff, &size, &offset);
getopt est défini plusieurs fois
- Cause: l'utilisation de la fonction ne semble pas dépendre des options

- Résolution: Faire "sauter" le test dans le script configure (voir ci-dessous) et mettre "CONFIGURE_ARGS+= --enable-db" dans /usr/pkgsrc/pkgtools/libnbcompat/Makefile. Supprimer dans /usr/pkgsrc/bootstrap/work/libnbcompat les fichiers lobnbcompat.a, .o, config.status, config.log et dans nbcompat, les fichiers config.h et nbconfig.h
- Pourquoi: En mettant 'no', le test qui suit devient faux et la version BSD n'est plus utilisée
- Détail: dans usr/pkgsrc/pkgtools/libnbcompat/files/configure, ajouter l.5913: "enable_bsd_getopt=no" et supprimer la ligne 720
--- configure.orig 2025-03-05 12:54:23.000000000 +0100
+++ configure 2025-11-15 18:13:26.849578264 +0100
@@ -717,7 +717,6 @@
ac_user_opts='
enable_option_checking
enable_db
-enable_bsd_getopt
'
ac_precious_vars='build_alias
host_alias
@@ -5910,7 +5909,7 @@
fi
done
-
+enable_bsd_getopt=no
if test "$enable_bsd_getopt" = yes; then
if test "$ac_cv_have_decl_optreset" = no; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: Using included getopt and getopt_long" >&5
awk est introuvable
- Cause: /bin/awk n'est pas installé sur le système de base

- Résolution : ajouter awk à partir de l'archive disponible, mais se trouve dans /usr/bin. Actualiser le fichier tools.FreeMiNT.mk
- Pourquoi : awk, comme d'autres outils, est nécessaire. Le système de base de NetBSD inclut déjà de très nombreuses commandes, dont awk
--- tools.FreeMiNT.mk.orig 2023-03-05 00:29:24.000000000 +0100
+++ tools.FreeMiNT.mk 2025-11-15 19:54:09.123705473 +0100
@@ -3,7 +3,7 @@
# System-supplied tools for the FreeMiNT operating system.
TOOLS_PLATFORM.[?= [ # shell builtin
-TOOLS_PLATFORM.awk?= /bin/awk
+TOOLS_PLATFORM.awk?= /usr/bin/awk
TOOLS_PLATFORM.basename?= /bin/basename
TOOLS_PLATFORM.byacc?= /usr/bin/yacc
TOOLS_PLATFORM.bzcat?= /usr/bin/bzcat
Erreur: dlopen() est requis
- Cause : inconnue

- Résolution : inconnue
- Pourquoi : inconnu
Erreur d'accès au dossier libnbcompat/work/.destdir/pkg
- Cause : un dossier pkg est créé avec les droits ̀d---------`

- Résolution : pas encore trouvée. Un contournement consiste à modifier WRKOBJDIR directement dans le script bootstrap. Utiliser WRKOBJDIR= /ram
- Pourquoi : pas encore trouvé
--- bootstrap.old 2025-11-15 15:49:55.875815746 +0100
+++ bootstrap 2025-11-15 22:05:25.508120615 +0100
@@ -1414,7 +1414,7 @@
# opsys specific fiddling
opsys_finish
-echo "WRKOBJDIR= ${wrkdir}/wrk" >> ${BOOTSTRAP_MKCONF}
+echo "WRKOBJDIR= /ram" >> ${BOOTSTRAP_MKCONF}
echo "" >> ${TARGET_MKCONF}
echo "" >> ${BOOTSTRAP_MKCONF}
Des fichiers sont introuvables
- Cause: la fonction cp -r échoue
- Résolution: A diagnostiquer. Fonctionne correctement avec les outils
mintelfmais pas avec ceux de typemint. - Pourquoi: Erreur memory exhausted. Problème de récurisivité sans doute
Erreur umask
- Cause: la valeur par défaut est 0000

- Résolution: exécuter 'umask 0022' avant de lancer le script bootstrap.
- Pourquoi: 0022 est la valeur minimale attendue. En théorie elle devrait être définie par le script mais la bonne valeur semble nécessaire avant l'appel à umask
Plantage de diff
- Cause : inconnue

- Résolution : inconnu
- Pourquoi : à chercher
- Détails :
- diff f1 f2 fonctionne
- diff -u f1 f2 fonctionne si les fichiers sont identiques
- diff -u f1 f2 plante si les fichiers sont différents
Plantage de sed
- Cause : inconnue

- Résolution : inconnue
- Pourquoi : à chercher
Plantage de wc
- Cause : mbrtowc() and iswspace() plantent
- Résolution : remplacer ces deux fonctions par des fonctions qui n'utilisent pas les wchar
- Pourquoi : sans doute un bug dans la MiNTLib
- Récupérer le source ici
- Remplacer
iswspace(*WC)parisspace(*WC) - Remplacer
r = mbrtowc(wc, p, len, st);parr = fake_mbrtowc(wc, p, len, st); - Ajouter :
size_t fake_mbrtowc(wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) { if (s == NULL) return 0; if (n == 0) return (size_t)-2; if (pwc) *pwc = (unsigned char)*s; return (*s != '\0') ? 1 : 0; } - Recompiler
gcc wc.c -o wc
Echec avec mman.h (netpgpverify)
- Cause: les fichiers libverify.c et pgpsum.c incluent mman.h

- Résolution: Remplacer les appels mmap()/munmap() par malloc()/free().
- Pourquoi: mmap() n'est pas disponible sur FreeMiNT
- pkgsrc/security/netpgpverify/files/libverify.c
--- libverify.c.orig 2020-11-01 12:28:35.000000000 +0100
+++ libverify.c 2025-11-16 06:56:37.670741897 +0100
@@ -27,7 +27,9 @@
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/param.h>
+#if 0
#include <sys/mman.h>
+#endif
#include <arpa/inet.h>
@@ -473,9 +475,27 @@
}
fstat(fileno(mem->fp), &st);
mem->size = (size_t)st.st_size;
+#if 0
mem->mem = mmap(NULL, mem->size, PROT_READ, MAP_SHARED, fileno(mem->fp), 0);
mem->dealloc = UNMAP_MEM;
return 1;
+#endif
+#if 1
+ mem->mem = malloc(mem->size);
+ if (mem->mem == NULL) {
+ fprintf(stderr, "malloc failed for '%s'\n", f);
+ fclose(mem->fp);
+ return 0;
+ }
+ if (fread(mem->mem, 1, mem->size, mem->fp) != mem->size) {
+ fprintf(stderr, "short read on '%s'\n", f);
+ free(mem->mem);
+ fclose(mem->fp);
+ return 0;
+ }
+ mem->dealloc = FREE_MEM;
+ return 1;
+#endif
}
/* DTRT and free resources */
@@ -488,7 +508,9 @@
mem->size = 0;
break;
case UNMAP_MEM:
+#if 0
munmap(mem->mem, mem->size);
+#endif
fclose(mem->fp);
break;
}
- pkgsrc/security/netpgpverify/files/pgpsum.c
--- pgpsum.c.orig 2020-05-04 03:37:28.000000000 +0200
+++ pgpsum.c 2025-11-16 07:01:19.621761352 +0100
@@ -26,7 +26,9 @@
#include <sys/types.h>
#include <sys/stat.h>
+#if 0
#include <sys/mman.h>
+#endif
#include <inttypes.h>
#include <stdio.h>
@@ -225,14 +227,35 @@
goto done;
}
cc = (size_t)(st.st_size);
+#if 0
if ((mem = mmap(NULL, cc, PROT_READ, MAP_SHARED, fileno(fp), 0)) == MAP_FAILED) {
fprintf(stderr, "%s - can't mmap", name);
goto done;
}
+#endif
+#if 1
+ mem = malloc(cc);
+ if (mem == NULL) {
+ fprintf(stderr, "%s - can't allocate %zu bytes\n", name, cc);
+ goto done;
+ }
+ if (fread(mem, 1, cc, fp) != cc) {
+ fprintf(stderr, "%s - short read or read error\n", name);
+ free(mem);
+ mem = NULL;
+ goto done;
+ }
+#endif
ret = calcsum(data, size, mem, cc, hashed, hashsize, doarmor);
done:
if (data) {
+#if 0
munmap(mem, cc);
+#endif
+#if 1
+ if (mem)
+ free(mem);
+#endif
}
fclose(fp);
return ret;
Le dossier /usr/pkg existe déjà
- Cause: le script bootstrap vérifie l'existence du dossier
- Résolution: Supprimer le test dans le script bootstrap
- Pourquoi: même raison que pour workdir
La commande hostname renvoie (null)
- Cause: hostname n'est pas défini

- Résolution: Créer un fichier /etc/hostname et mettre le nom de l'ordinateur dedans.
- Pourquoi: la commande renvoie le contenu de ce fichier
Blocage sur la recherche de fichiers plus récents que le fichier configure
- Cause: configure cherche s'il existe des fichiers plus récents que lui auquel cas il faudra le relancer mais ce test échoue
- Résolution: faire 'find . -name configure -exec touch {} \;' sur le dossier.
- Pourquoi: à cause des modifications apportées aux fichiers .c pendant les tentatives de patchs pour faire fonctionner bootstrap, ces fichiers ont des dates actualisées et donc plus récentes que celle du script configure qui les utilise. En donnant à tous les fichiers configure la date en actuelle, aucun autre fichier ne peut être plus récent, et le test passe. La cause du blocage est inconnue (lenteur des tests des dates des fichiers ?).
commande introuvable --modversion
- Cause: la commande pkg-config est introuvable ou renvoie une chaine vide

- Résolution: installer pkg-config s'il est absent, ou le copier dans .tools/bin/ s'il y a un script du même nom mais qui ne renvoie rien.
- Pourquoi: soit pkg-config est absent, soit c'est un script qui ne renvoie rien (auquel cas le test d'une version supérieure à 0.9.0 échoue, alors que la version existante renvoie 0.15.0)
cp /usr/bin/pkg-config /ram/pkgtools/libnbcompat/work/.tools/bin/
cp /usr/bin/pkg-config /ram/pkgtools/boostrap-mk-files/work/.tools/bin/
cp /usr/bin/pkg-config /ram/pkgtools/pkg_install/work/.tools/bin/
L'entrée de tsort contient un nombre impair de tokens
- Cause : inconnue

- Résolution : inconnue
- Pourquoi : inconnu
Commande introuvable ac_fn_c_try_link
- Cause : inconnue

- Résolution : inconnue
- Pourquoi : inconnu
Echec de la liaison de pkg_install avec libfetch
-
Cause : le fichier libfetch.a est bien créé mais il ne contient aucun symbole !

-
Résolution : Supprimer de tous les programmes qui utilisent libfetch les appels de fonctions à cette bibliothèque. Attention, les fichiers concernés (parse-config.c, pkg_io.c, audit.c et main.c) sont à copier depuis leur emplacement dans /usr/pkgsrc/pkgtools/pkg_install/files vers l'emplacement correspondant dans /ram/pkgtools/pkg_install/work/pkg_install-20250417/.
-
Pourquoi : la commande tsort échoue
-
File /usr/pkgsrc/pkgtools/pkg_install/files/lib/parse-config.c
--- parse-config.c.orig 2020-12-11 11:06:53.000000000 +0100
+++ parse-config.c 2025-11-16 09:36:36.580951685 +0100
@@ -46,9 +46,11 @@
#include <string.h>
#endif
+#if 0
#ifndef BOOTSTRAP
#include <fetch.h>
#endif
+#endif
#include "lib.h"
@@ -240,9 +242,11 @@
}
config_cache_connections_host = xasprintf("%d", cache_connections_host);
+#if 0
#ifndef BOOTSTRAP
fetchConnectionCacheInit(cache_connections, cache_connections_host);
#endif
+#endif
snprintf(fetch_flags, sizeof(fetch_flags), "%s%s%s%s",
(do_cache_index) ? "c" : "",
- File /usr/pkgsrc/pkgtools/pkg_install/files/lib/pkg_io.c
--- pkg_io.c.orig 2023-11-08 02:24:29.000000000 +0100
+++ pkg_io.c 2025-11-16 09:43:49.598979501 +0100
@@ -79,7 +79,10 @@
{
struct fetch_archive *f = client_data;
struct url_stat us;
-
+#if 1
+ return ENOENT;
+#endif
+#if 0
f->fetch = fetchXGet(f->url, &us, fetch_flags);
if (f->fetch == NULL)
return ENOENT;
@@ -87,8 +90,10 @@
f->restart = 1;
f->url->offset = 0;
return 0;
+#endif
}
+#if 0
static ssize_t
fetch_archive_read(struct archive *a, void *client_data,
const void **buffer)
@@ -140,13 +145,14 @@
free(f);
return 0;
}
+#endif
static struct archive *
open_archive_by_url(struct url *url, char **archive_name)
{
struct fetch_archive *f;
struct archive *a;
-
+#if 0
f = xmalloc(sizeof(*f));
f->url = fetchCopyURL(url);
@@ -162,6 +168,11 @@
}
return a;
+#endif
+#if 1
+ *archive_name = NULL;
+ return NULL;
+#endif
}
#endif /* !BOOTSTRAP */
@@ -201,6 +212,7 @@
#ifdef BOOTSTRAP
return NULL;
#else
+#if 0
if ((u = fetchParseURL(url)) == NULL)
return NULL;
@@ -209,9 +221,14 @@
fetchFreeURL(u);
return a;
#endif
+#if 1
+ return NULL;
+#endif
+#endif
}
#ifndef BOOTSTRAP
+#if 0
static int
strip_suffix(char *filename)
{
@@ -227,6 +244,7 @@
} else
return 0;
}
+#endif
static int
find_best_package_int(struct url *url, const char *pattern,
@@ -235,7 +253,10 @@
char *cur_match, *url_pattern, *best_match = NULL;
struct url_list ue;
size_t i;
-
+#if 1
+ return -1;
+#endif
+#if 0
if (*best_url) {
if ((best_match = fetchUnquoteFilename(*best_url)) == NULL)
return -1;
@@ -296,6 +317,7 @@
free(best_match);
fetchFreeURLList(&ue);
return 0;
+#endif
}
void
@@ -334,7 +356,7 @@
{
struct url *url, *best_match = NULL;
struct pkg_path *pl;
-
+#if 0
if (toplevel) {
url = fetchParseURL(last_toplevel);
if (url != NULL) {
@@ -354,7 +376,7 @@
fetchFreeURL(url);
}
}
-
+#endif
return best_match;
}
#endif /* !BOOTSTRAP */
@@ -392,7 +414,7 @@
#ifndef BOOTSTRAP
fname = last_slash + 1;
*last_slash = '\0';
-
+#if 0
best_match = find_best_package(full_fname, fname, 0);
if (search_path && best_match == NULL)
@@ -404,6 +426,10 @@
return NULL;
a = open_archive_by_url(best_match, archive_name);
fetchFreeURL(best_match);
+#endif
+#if 1
+ return NULL;
+#endif
#endif /* !BOOTSTRAP */
return a;
}
- File /usr/pkgsrc/pkgtools/pkg_install/files/admin/audit.c
--- audit.c.orig 2018-02-27 00:45:02.000000000 +0100
+++ audit.c 2025-11-16 09:54:00.974240159 +0100
@@ -86,8 +86,9 @@
parse_options(int argc, char **argv, const char *options)
{
int ch;
-
+#if 0
optreset = 1;
+#endif
/*
* optind == 0 is interpreted as partial reset request
* by GNU getopt, so compensate against this and cleanup
@@ -298,7 +299,9 @@
ssize_t cur_fetched;
struct url *url;
struct url_stat st;
+#if 0
fetchIO *f;
+#endif
int fd;
struct stat sb;
char my_flags[20];
@@ -310,7 +313,11 @@
if (verbose >= 2)
fprintf(stderr, "Fetching %s\n", pkg_vulnerabilities_url);
-
+#if 1
+ errx(EXIT_FAILURE,
+ "Could not parse location of pkg_vulnerabilities: no support for MiNT");
+#endif
+#if 0
url = fetchParseURL(pkg_vulnerabilities_url);
if (url == NULL)
errx(EXIT_FAILURE,
@@ -382,6 +389,7 @@
free(buf);
exit(EXIT_SUCCESS);
+#endif
}
static int
- File /usr/pkgsrc/pkgtools/pkg_install/files/admin/main.c
--- main.c.orig 2025-02-18 13:04:31.000000000 +0100
+++ main.c 2025-11-16 09:55:26.829210996 +0100
@@ -734,6 +734,7 @@
errx(EXIT_FAILURE, "invalid license");
}
}
+#if 0
#ifndef BOOTSTRAP
else if (strcasecmp(argv[0], "findbest") == 0) {
struct url *url;
@@ -806,6 +807,7 @@
pkg_sign_gpg(argv[0], argv[1]);
}
#endif
+#endif
else {
usage();
}
Référence indéfinie vers optreset
- Cause : la variable externe optreset n'est pas trouvée

- Résolution : inconnue
- Pourquoi : optreset n'est pas défini dans la MiNTLib
Les commandes bmake et pkg_xxx sont introuvables
- Cause : La variable PATH doit être modifiée manuellement

- Résolution : Éditer le fichier mint.cnf et modifier le PATH
setenv PATH /usr/pkg/sbin;/usr/pkg/bin;/sbin;/bin;/usr/sbin;/usr/bin - Pourquoi : comportement normal, RTFM
La licence est refusée
- Cause : les licences non libres sont refusées par défaut

- Résolution : ajouter la licence concerné dans le fichier /usr/pkg/etc/mk.conf
- Pourquoi : comportement normal, RTFM
fetch échoue lors de l'appel de bmake
- Cause : les fichiers sources du paquets sont absentes et il n'y a pas de réseau

- Résolution : télécharger l'archive voulue et la copier dans le dossier /usr/pkgsrc/distfiles
- Pourquoi : comportement normal, RTFM
Erreur sur strerror_r : les types int et char * ne correspondent pas
- Cause : la valeur de retour char * est comparée à un int

- Résolution : à chercher
- Pourquoi : POSIX attend une valeur de retour de type int, GNU renvoie char *
Impossible d'écrire l'archive à cause des droits d'accès
- Cause : destdir contient des liens entre /ram et /c

- Résolution : supprimer les liens, les remplacer par une copie du fichier et relancer bmake package
- Pourquoi :