2016-06-06 1 views
2

J'essaye de construire un port pour le contrôleur de contournement de Silicom. Je suspecte que mon Makefile n'est pas complet mais je ne suis pas sûr. Y at-il quelque chose que je devrais ajouter pour ld basé sur l'erreur?Pourquoi mon port FreeBSD échoue-t-il sur scène?

MISE À JOUR:

Ajout SSP_UNSAFE= yes dans le Makefile me déplace au-delà de l'erreur d'origine. Je ne sais pas si c'est la meilleure façon .. Ajout de la prise en charge de la valeur par défaut SSP_CFLAGS en utilisant -fstack-protector semblait causer ce problème. Est-ce quelque chose qui aurait besoin d'être corrigé dans le code source?

Makefile:

PORTNAME=  silicom_bpctl 
PORTVERSION= 3.10.5 
PORTREVISION= 1 
CATEGORIES=  sysutils 
MASTER_SITES= http://pkg.insecure-it.com/distfiles/ 

MAINTAINER=  [email protected] 
COMMENT=  Silicom Bypass Controller utility (Zero Power Fail-Open for IPS) 

LICENSE=  GPLv2 
LICENSE_FILE= ${WRKSRC}/license 

SUB_FILES=  pkg-message 

SSP_UNSAFE=  yes 

.include <bsd.port.mk> 

fichier pkg-plist:

boot/kernel/bpmod.ko 
bin/bpctl_util 

Erreur d'origine:

:/usr/local/poudriere/ports/default/sysutils/silicom_bpctl % sudo make stage 

===> License GPLv2 accepted by the user 
===> silicom_bpctl-3.10.5_1 depends on file: /usr/local/sbin/pkg - found 
===> Fetching all distfiles required by silicom_bpctl-3.10.5_1 for building 
===> Extracting for silicom_bpctl-3.10.5_1 
=> SHA256 Checksum OK for silicom_bpctl-3.10.5.tar.gz. 
===> Patching for silicom_bpctl-3.10.5_1 
===> Configuring for silicom_bpctl-3.10.5_1 
===> Building for silicom_bpctl-3.10.5_1 
--- _sub.all --- 
===> driver (all) 
--- objwarn --- 
--- /usr/local/poudriere/ports/default/sysutils/silicom_bpctl/work/silicom_bpctl-3.10.5/driver/@ --- 
--- /usr/local/poudriere/ports/default/sysutils/silicom_bpctl/work/silicom_bpctl-3.10.5/driver/machine --- 
--- opt_bdg.h --- 
--- objwarn --- 
Warning: Object directory not changed from original /usr/local/poudriere/ports/default/sysutils/silicom_bpctl/work/silicom_bpctl-3.10.5/driver 
--- opt_bdg.h --- 
:> opt_bdg.h 
--- /usr/local/poudriere/ports/default/sysutils/silicom_bpctl/work/silicom_bpctl-3.10.5/driver/@ --- 
@ -> /usr/src/sys 
--- /usr/local/poudriere/ports/default/sysutils/silicom_bpctl/work/silicom_bpctl-3.10.5/driver/machine --- 
machine -> /usr/src/sys/amd64/include 
--- pci_if.h --- 
--- bus_if.h --- 
--- device_if.h --- 
--- pci_if.h --- 
awk -f @/tools/makeobjops.awk @/dev/pci/pci_if.m -h 
--- bus_if.h --- 
awk -f @/tools/makeobjops.awk @/kern/bus_if.m -h 
--- device_if.h --- 
awk -f @/tools/makeobjops.awk @/kern/device_if.m -h 
--- bp_mod.o --- 
cc -O2 -pipe -fstack-protector -fno-strict-aliasing -Werror -D_KERNEL -DKLD_MODULE -nostdinc -I. [email protected] [email protected]/contrib/altq -fno-common -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -mno-aes -mno-avx -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -fstack-protector -std=iso9899:1999 -Qunused-arguments -fstack-protector -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs -fdiagnostics-show-option -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -Wno-error-unused-function -c bp_mod.c -o bp_mod.o 
--- bpmod.ko --- 
ld -fstack-protector -d -warn-common -r -d -o bpmod.ko bp_mod.o 
ld: -f may not be used without -shared 
*** [bpmod.ko] Error code 1 

make[2]: stopped in /usr/local/poudriere/ports/default/sysutils/silicom_bpctl/work/silicom_bpctl-3.10.5/driver 
1 error 

make[2]: stopped in /usr/local/poudriere/ports/default/sysutils/silicom_bpctl/work/silicom_bpctl-3.10.5/driver 
*** [_sub.all] Error code 2 

make[1]: stopped in /usr/local/poudriere/ports/default/sysutils/silicom_bpctl/work/silicom_bpctl-3.10.5 
1 error 

make[1]: stopped in /usr/local/poudriere/ports/default/sysutils/silicom_bpctl/work/silicom_bpctl-3.10.5 
===> Compilation failed unexpectedly. 
Try to set MAKE_JOBS_UNSAFE=yes and rebuild before reporting the failure to 
the maintainer. 
*** Error code 1 

Stop. 
make: stopped in /usr/local/poudriere/ports/default/sysutils/silicom_bpctl 

Installation manuelle Cet utilitaire est très simple et juste makesudo make install.

make:

~/silicom/bp_ctl-3.10.5 % make 

===> driver (all) 
Warning: Object directory not changed from original /usr/home/arozar/silicom/bp_ctl-3.10.5/driver 
@ -> /usr/src/sys 
machine -> /usr/src/sys/amd64/include 
awk -f @/tools/makeobjops.awk @/kern/device_if.m -h 
awk -f @/tools/makeobjops.awk @/kern/bus_if.m -h 
awk -f @/tools/makeobjops.awk @/dev/pci/pci_if.m -h 
:> opt_bdg.h 
cc -O2 -pipe -fno-strict-aliasing -Werror -D_KERNEL -DKLD_MODULE -nostdinc -I. [email protected] [email protected]/contrib/altq -fno-common -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -mno-aes -mno-avx -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -fstack-protector -std=iso9899:1999 -Qunused-arguments -fstack-protector -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs -fdiagnostics-show-option -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -Wno-error-unused-function -c bp_mod.c 
ld -d -warn-common -r -d -o bpmod.ko bp_mod.o 
:> export_syms 
awk -f /sys/conf/kmod_syms.awk bpmod.ko export_syms | xargs -J% objcopy % bpmod.ko 
objcopy --strip-debug bpmod.ko 
===> util (all) 
cc -O2 -pipe bpctl_util.c -o bpctl_util 
bpctl_util.c:1096:20: warning: format string is not a string literal (potentially insecure) [-Wformat-security] 
      printf(bp_cap_array[i].desc); 
        ^~~~~~~~~~~~~~~~~~~~ 
bpctl_util.c:2617:30: warning: format specifies type 'char *' but the argument has type 'int *' [-Wformat] 
    printf("Name\t\t\t%s\n", bpctl_cmd.data); 
         ~~  ^~~~~~~~~~~~~~ 
bpctl_util.c:2635:46: warning: format specifies type 'char *' but the argument has type 'int *' [-Wformat] 
       printf("\n\tName\t\t\t%s\n", bpctl_cmd.data); 
             ~~  ^~~~~~~~~~~~~~ 
3 warnings generated. 

sudo make install:

~/silicom/bp_ctl-3.10.5 % sudo make install 

===> driver (install) 
install -o root -g wheel -m 555 bpmod.ko /boot/kernel 
kldxref /boot/kernel 
===> util (install) 
install bpctl_util /bin 

Nouvelle erreur:

échoue lors de l'installation doit maintenant être le fichier pkg-plist:

:/usr/local/poudriere/ports/default/sysutils/silicom-bpctl % sudo make stage 
===> License GPLv2 accepted by the user 
===> silicom-bpctl-3.10.5_1 depends on file: /usr/local/sbin/pkg - found 
===> Fetching all distfiles required by silicom-bpctl-3.10.5_1 for building 
===> Extracting for silicom-bpctl-3.10.5_1 
=> SHA256 Checksum OK for silicom-bpctl-3.10.5.tar.gz. 
===> Patching for silicom-bpctl-3.10.5_1 
===> Configuring for silicom-bpctl-3.10.5_1 
===> Building for silicom-bpctl-3.10.5_1 
--- _sub.all --- 
===> driver (all) 
--- objwarn --- 
--- /usr/local/poudriere/ports/default/sysutils/silicom-bpctl/work/silicom-bpctl-3.10.5/driver/@ --- 
--- /usr/local/poudriere/ports/default/sysutils/silicom-bpctl/work/silicom-bpctl-3.10.5/driver/machine --- 
--- opt_bdg.h --- 
--- objwarn --- 
Warning: Object directory not changed from original /usr/local/poudriere/ports/default/sysutils/silicom-bpctl/work/silicom-bpctl-3.10.5/driver 
--- opt_bdg.h --- 
:> opt_bdg.h 
--- /usr/local/poudriere/ports/default/sysutils/silicom-bpctl/work/silicom-bpctl-3.10.5/driver/@ --- 
@ -> /usr/src/sys 
--- /usr/local/poudriere/ports/default/sysutils/silicom-bpctl/work/silicom-bpctl-3.10.5/driver/machine --- 
machine -> /usr/src/sys/amd64/include 
--- pci_if.h --- 
--- bus_if.h --- 
--- device_if.h --- 
--- pci_if.h --- 
awk -f @/tools/makeobjops.awk @/dev/pci/pci_if.m -h 
--- bus_if.h --- 
awk -f @/tools/makeobjops.awk @/kern/bus_if.m -h 
--- device_if.h --- 
awk -f @/tools/makeobjops.awk @/kern/device_if.m -h 
--- bp_mod.o --- 
cc -O2 -pipe -fno-strict-aliasing -Werror -D_KERNEL -DKLD_MODULE -nostdinc -I. [email protected] [email protected]/contrib/altq -fno-common -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -mno-aes -mno-avx -mcmodel=kernel -mno-red-zone -mno-mmx -mno-sse -msoft-float -fno-asynchronous-unwind-tables -ffreestanding -fstack-protector -std=iso9899:1999 -Qunused-arguments -fstack-protector -Wall -Wredundant-decls -Wnested-externs -Wstrict-prototypes -Wmissing-prototypes -Wpointer-arith -Winline -Wcast-qual -Wundef -Wno-pointer-sign -fformat-extensions -Wmissing-include-dirs -fdiagnostics-show-option -Wno-error-tautological-compare -Wno-error-empty-body -Wno-error-parentheses-equality -Wno-error-unused-function -c bp_mod.c -o bp_mod.o 
--- bpmod.ko --- 
ld -d -warn-common -r -d -o bpmod.ko bp_mod.o 
:> export_syms 
awk -f /sys/conf/kmod_syms.awk bpmod.ko export_syms | xargs -J% objcopy % bpmod.ko 
objcopy --strip-debug bpmod.ko 
===> util (all) 
--- bpctl_util --- 
cc -O2 -pipe bpctl_util.c -o bpctl_util 
bpctl_util.c:1096:20: warning: format string is not a string literal (potentially insecure) [-Wformat-security] 
      printf(bp_cap_array[i].desc); 
        ^~~~~~~~~~~~~~~~~~~~ 
bpctl_util.c:2617:30: warning: format specifies type 'char *' but the argument has type 'int *' [-Wformat] 
    printf("Name\t\t\t%s\n", bpctl_cmd.data); 
         ~~  ^~~~~~~~~~~~~~ 
bpctl_util.c:2635:46: warning: format specifies type 'char *' but the argument has type 'int *' [-Wformat] 
       printf("\n\tName\t\t\t%s\n", bpctl_cmd.data); 
             ~~  ^~~~~~~~~~~~~~ 
3 warnings generated. 
===> Staging for silicom-bpctl-3.10.5_1 
===> Generating temporary packing list 
===> driver (install) 
install -o root -g wheel -m 555 bpmod.ko /usr/local/poudriere/ports/default/sysutils/silicom-bpctl/work/stage/boot/kernel 
install: /usr/local/poudriere/ports/default/sysutils/silicom-bpctl/work/stage/boot/kernel: No such file or directory 
*** Error code 71 

Stop. 
make[2]: stopped in /usr/local/poudriere/ports/default/sysutils/silicom-bpctl/work/silicom-bpctl-3.10.5/driver 
*** Error code 1 

Stop. 
make[1]: stopped in /usr/local/poudriere/ports/default/sysutils/silicom-bpctl/work/silicom-bpctl-3.10.5 
*** Error code 1 

Stop. 
make: stopped in /usr/local/poudriere/ports/default/sysutils/silicom-bpctl 
+0

Vous devriez toujours poster votre contenu/etc/make.conf' lors de la discussion construire des problèmes. Feriez-vous cela? – antiduh

+0

'cat: /etc/make.conf: Aucun fichier ou répertoire' et 'cat: /usr/local/etc/make.conf: Aucun fichier ou répertoire'. Je ne vois pas un 'make.conf' n'importe où sur le système, sauf mes fichiers' prisons 'comme 'example'. –

Répondre

3

Ne pas coder en dur les chemins non /usr/local dans votre fichier pkg-plist.

/%%KMODDIR%%/yourdriver.ko devrait être la façon dont vous spécifiez votre pilote dans le fichier plist - sinon, votre port ne prend pas en charge le stockage intermédiaire. Si vous ne savez pas ce que fait le transfert, il effectue une installation interne du port vers un répertoire temporaire, catalogue tous les fichiers qui sont installés et les compare avec la liste des paquets.

Le stockage intermédiaire a été créé pour prendre en compte tous les fichiers qu'un port installe, sinon il est possible que pkg-plist ne lise pas les fichiers que le port make install va effectivement installer; et maintenant désinstaller est cassé, car il va laisser des fichiers derrière.

Vous devrez peut-être créer vos répertoires intermédiaires, en particulier pour prendre en charge le stockage intermédiaire. Prendre un pic au Makefile pour nvidia-driver est utile à cet égard:

pre-install: 
    @${MKDIR} ${STAGEDIR}${PREFIX}/${MODULESDIR}/drivers \ 
     ${STAGEDIR}${PREFIX}/${MODULESDIR}/extensions