Компилирование net-snmp 5.7.1 в openBSD5.1
Я пытаюсь собрать net-snmp 5.7.1 в openBSD5.1. ошибка в компиляции
структура не имеет члена с именем kp_proc'
structure has no member named
kp_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
}
конечно этот дифференциал отстой как вакуум, и я улучшу его завтра;)