2012-09-04 2 views
0

J'essaie de comile net-snmp 5.7.1 à openBSD5.1. theerror en est la compilationcomplimenter net-snmp 5.7.1 à openBSD5.1

la structure

n'a pas nommé membre kp_proc' structure has no member named kp_eproc »

quelqu'un peut me aider à ce sujet ??

et comment faire une liaison python à openBSD ??

Répondre

1

ok cela peut être un long article, car nous allons essayer de porter votre logiciel sur OpenBSD.
Vous voyez qu'OpenBSD n'a pas ce champ d'eproc sur sa structure k_proc. vérifier la déclaration: [email protected]

grepper le problème dans la dernière source:

./agent/mibgroup/host/data_access/swrun_kinfo.c:  entry->hrSWRunPerfCPU =  proc_table[i].kp_eproc.e_uticks; 
./agent/mibgroup/host/data_access/swrun_kinfo.c:  entry->hrSWRunPerfCPU += proc_table[i].kp_eproc.e_sticks; 
./agent/mibgroup/host/data_access/swrun_kinfo.c:  entry->hrSWRunPerfCPU += proc_table[i].kp_eproc.e_iticks; 
./agent/mibgroup/host/data_access/swrun_kinfo.c:  entry->hrSWRunPerfMem = proc_table[i].kp_eproc.e_vm.vm_tsize; 
./agent/mibgroup/host/data_access/swrun_kinfo.c:  entry->hrSWRunPerfMem += proc_table[i].kp_eproc.e_vm.vm_ssize; 
./agent/mibgroup/host/data_access/swrun_kinfo.c:  entry->hrSWRunPerfMem += proc_table[i].kp_eproc.e_vm.vm_dsize; 
./agent/mibgroup/host/hr_swrun.c:  long_return = proc_table[LowProcIndex].kp_eproc.e_uticks + 
./agent/mibgroup/host/hr_swrun.c:   proc_table[LowProcIndex].kp_eproc.e_sticks + 
./agent/mibgroup/host/hr_swrun.c:   proc_table[LowProcIndex].kp_eproc.e_iticks; 
./agent/mibgroup/host/hr_swrun.c:   proc_table[LowProcIndex].kp_eproc.e_vm.vm_map.size/1024; 
./agent/mibgroup/host/hr_swrun.c:  long_return = proc_table[LowProcIndex].kp_eproc.e_vm.vm_tsize + 
./agent/mibgroup/host/hr_swrun.c:   proc_table[LowProcIndex].kp_eproc.e_vm.vm_ssize + 
./agent/mibgroup/host/hr_swrun.c:   proc_table[LowProcIndex].kp_eproc.e_vm.vm_dsize; 
./agent/mibgroup/ucd-snmp/proc.c:#define EP(pp, field) ((pp)->kp_eproc . field) 
./agent/mibgroup/ucd-snmp/proc.c:#define VP(pp, field) ((pp)->kp_eproc.e_vm . field) 

aha! donc nous avons besoin de prendre soin aussi de ces struct vm ... notre corrensponding decleration est: [email protected]

ok donc dans le changement général sur ces .kp_eproc.e_thing à .p_thing
et .kp_eproc.e_vm.thing à .p_vmspace -> chose (c'est un pointeur) devrait travail.

Les macros ont besoin des soins et je pense que je les ai droit, mais depuis que je suis encore la compilation de ces changements sur un assez lent SPARC64 ça va prendre un certain temps pour vous le diff testé.

mais cela devrait être l'idée générale. Si tout votre processus fonctionne correctement, vous pouvez ajouter ce correctif à vos ports/arborescences le long de avec un fichier Makefile facile à créer et avoir votre paquet OpenBSD administré avec les outils pkg_ *, mais plus dans les éditions futures.

bravo!

dsP

Edit: Voici une première comparaison qui compilera, la deuxième macro est faux bien. s'il vous plaît tester.

diff -ur net-snmp-5.7.1/agent/mibgroup/host/data_access/swrun_kinfo.c mynet- snmp-5.7.1/agent/mibgroup/host/data_access/swrun_kinfo.c 
--- net-snmp-5.7.1/agent/mibgroup/host/data_access/swrun_kinfo.c  Wed Sep 28 07:53:47 2011 
+++ mynet-snmp-5.7.1/agent/mibgroup/host/data_access/swrun_kinfo.c  Wed Sep 5 04:26:54 2012 
@@ -85,10 +85,10 @@ 
    * early FreeBSD, NetBSD, OpenBSD kinfo_proc field names 
    */ 
#define SWRUN_TABLE kinfo_proc 
-#define SWRUN_K_STAT kp_proc.p_stat 
-#define SWRUN_K_PID kp_proc.p_pid 
-#define SWRUN_K_COMM kp_proc.p_comm 
-#define SWRUN_K_FLAG kp_proc.p_flag 
+#define SWRUN_K_STAT p_stat 
+#define SWRUN_K_PID p_pid 
+#define SWRUN_K_COMM p_comm 
+#define SWRUN_K_FLAG p_flag 
/*  SWRUN_K_CLASS not defined  */ 
#endif 

@@ -159,7 +159,8 @@ 
#if HAVE_KVM_GETPROC2 
    proc_table = kvm_getproc2(kd, KERN_PROC_ALL, 0, sizeof(struct kinfo_proc2), &nprocs); 
#else 
- proc_table = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nprocs); 
+ proc_table = kvm_getprocs(kd, KERN_PROC_ALL, 0, sizeof(struct kinfo_proc), &nprocs); 
+ //proc_table = kvm_getprocs(kd, KERN_PROC_ALL, 0, &nprocs); 
#endif 
    for (i=0 ; i<nprocs; i++) { 
     if (0 == proc_table[i].SWRUN_K_STAT) 
@@ -304,21 +305,22 @@ 
     entry->hrSWRunPerfCPU += proc_table[i].kp_lwp.kl_iticks; 
     entry->hrSWRunPerfMem = proc_table[i].kp_vm_map_size/1024; 
#elif defined(dragonfly) 
-  entry->hrSWRunPerfCPU = proc_table[i].kp_eproc.e_uticks; 
-  entry->hrSWRunPerfCPU += proc_table[i].kp_eproc.e_sticks; 
-  entry->hrSWRunPerfCPU += proc_table[i].kp_eproc.e_iticks; 
+  entry->hrSWRunPerfCPU = proc_table[i].p_uticks; 
+  entry->hrSWRunPerfCPU += proc_table[i].p_sticks; 
+  entry->hrSWRunPerfCPU += proc_table[i].p_iticks; 
     entry->hrSWRunPerfMem = proc_table[i].kp_vm_map_size/1024; 

#else 
     /* 
      * early FreeBSD, NetBSD, OpenBSD 
      */ 
-  entry->hrSWRunPerfCPU = proc_table[i].kp_proc.p_uticks; 
-  entry->hrSWRunPerfCPU += proc_table[i].kp_proc.p_sticks; 
-  entry->hrSWRunPerfCPU += proc_table[i].kp_proc.p_iticks; 
-  entry->hrSWRunPerfMem = proc_table[i].kp_eproc.e_vm.vm_tsize; 
-  entry->hrSWRunPerfMem += proc_table[i].kp_eproc.e_vm.vm_ssize; 
-  entry->hrSWRunPerfMem += proc_table[i].kp_eproc.e_vm.vm_dsize; 
+  entry->hrSWRunPerfCPU = proc_table[i].p_uticks; 
+  entry->hrSWRunPerfCPU += proc_table[i].p_sticks; 
+  entry->hrSWRunPerfCPU += proc_table[i].p_iticks; 
+  struct vmspace *l = proc_table[i].p_vmspace; 
+  entry->hrSWRunPerfMem = l->vm_tsize; 
+  entry->hrSWRunPerfMem += l->vm_ssize; 
+  entry->hrSWRunPerfMem += l->vm_dsize; 
     entry->hrSWRunPerfMem *= (getpagesize()/1024); 
#endif 
    } 

Bien sûr, cela diff suce comme le vide, et je vais l'améliorer tommorow;)

+0

Thanx beaucoup :) :) il travaille –

+0

peut marquer la question comme résolue? – ramrunner

Questions connexes