Компилирование net-snmp 5.7.1 в openBSD5.1

Я пытаюсь собрать net-snmp 5.7.1 в openBSD5.1. ошибка в компиляции

структура не имеет члена с именем kp_proc' structure has no member namedkp_eproc"

кто-нибудь может помочь мне об этом??

а как сделать привязку python у openBSD??

1 ответ

Решение

Хорошо, это может быть длинный пост, так как мы постараемся перенести ваше программное обеспечение на OpenBSD.
Вы видите, что OpenBSD не имеет этого поля eproc в своей структуре k_proc. проверьте объявление: proc @ OpenBSD

Решая проблему в последнем источнике:

./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)

Ага! поэтому нам нужно позаботиться и об этих структурах vm... наше соответствующее ответное объявление: p_vmspace @ OpenBSD

хорошо, так что в целом меняется на этих.kp_eproc.e_thing на.p_thing
и.kp_eproc.e_vm.thing to .p_vmspace-> вещь (это указатель) должна работать.

Макросы нуждаются в некоторой заботе, и я думаю, что я понял их правильно, но так как я все еще собираю эти изменения на довольно медленном sparc64, потребуется некоторое время, чтобы получить протестированный diff.

но это должно быть общей идеей.

Если весь ваш процесс работает нормально, вы можете добавить этот патч к своим портам / дереву вместе с простым в создании файлом Makefile и управлять вашим пакетом OpenBSD с помощью инструментов pkg_*, но больше в будущих изменениях.

ура!

ЦСП

Редактировать: вот первый diff, который скомпилируется, хотя второй макрос неверен. пожалуйста, проверьте.

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
     }

конечно этот дифференциал отстой как вакуум, и я улучшу его завтра;)

Другие вопросы по тегам