[OpenWrt-Devel] python ctypes.util.find_library cannot find libc
andrew at depht.com
Mon Jan 16 14:41:03 EST 2017
Hi Alexandru and 郭涛,
Attached is the Makefile I made for python-iptables. I can work around
this by hardwiring library locations in the source of python-iptables,
but I'd rather do it the correct way. To reproduce this build an OpenWrt
system with this Makefile and then just create a simple Python script
with 'import iptc'.
I am cloning OpenWrt from Github and running make menuconfig;make to
build everything. My Github version is about 6 days old with the last
commit at 5ba298c.
I also found that /proc/sys/kernel/modprobe contains /sbin/modprobe,
while the modprobe binary is at /usr/sbin/modprobe. According to the
Debian man page on proc(5), /proc/sys/kernel/modprobe should point to
the modprobe binary. Googling about seems also to suggest that this file
should contain the location of the modprobe binary. So I would say this
is also a bug.
On 1/16/17 07:23, Alexandru Ardelean wrote:
> Hey Andrew & 郭涛
> Sorry I did not answer sooner.
> @Andrew: do you have a Makefile for the python-iptables packages ?
> I'd like to try to build it and see the issue. Or, are you just using
> that .py file ?
> Can you give a bit more input on which Python version you're using,
> and which OpenWrt version?
> If the issue is still present in the current packages trunk, I'd like to fix it.
> And if 郭涛's fix works, we can apply it to trunk.
> On Mon, Jan 16, 2017 at 6:23 AM, 郭涛 <guotao945 at gmail.com> wrote:
>> I also meet this issue.
>> I fixed it using below change
>> 2017-01-13 0:43 GMT+08:00 Andrew McConachie <andrew at depht.com>:
>>> Hi OpenWRT Devs,
>>> I'm building an OpenWRT package for python-iptables for a project I'm
>>> working on and getting this error message when attempting to use it.
>>> import iptc
>>> File "/usr/lib/python2.7/site-packages/iptc/__init__.py", line 10, in
>>> from ip4tc import (is_table_available, Table, Chain, Rule, Match,
>>> File "/usr/lib/python2.7/site-packages/iptc/ip4tc.py", line 13, in
>>> from xtables import (XT_INV_PROTO, NFPROTO_IPV4, XTablesError, xtables,
>>> File "/usr/lib/python2.7/site-packages/iptc/xtables.py", line 677, in
>>> _optind = ct.c_long.in_dll(_libc, "optind")
>>> AttributeError: 'NoneType' object has no attribute '_handle'
>>> You can view xtables.py here if you're curious.
>>> The problem is that my python-iptables package cannot find libc functions
>>> using ctypes.util.find_library(). I've tried building OpenWRT using both
>>> musl and eglibc but neither work. I've also tried building OpenWRT with
>>> objdump and ldconfig. When I include ldconfig via 'make menuconfig' it
>>> doesn't actually populate my OpenWRT image with an ldconfig binary. Maybe
>>> this is the problem?
>>> This bug report looks similar to my problem, but it's about MIPS and marked
>>> as closed.
>>> Any help or pointers would be much appreciated.
>>> openwrt-devel mailing list
>>> openwrt-devel at lists.openwrt.org
>> openwrt-devel mailing list
>> openwrt-devel at lists.openwrt.org
-------------- next part --------------
# Copyright (C) 2017 OpenWrt.org
# This is free software, licensed under the GNU General Public License v2.
# See /LICENSE for more information.
PKG_MAINTAINER:=Andrew McConachie <andrew at depht.com>
$(call include_mk, python-package.mk)
Python-iptables provides a pythonesque wrapper via python bindings to iptables under Linux. Interoperability with iptables is achieved via using the iptables C libraries (libiptc, libxtables, and the iptables extensions), not calling the iptables binary and parsing its output. It is meant primarily for dynamic and/or complex routers and firewalls, where rules are often updated or changed, or Python programs wish to interface with the Linux iptables framework.
install --prefix=/usr --root="$(PKG_INSTALL_DIR)" \
$(eval $(call PyPackage,python-iptables))
$(eval $(call BuildPackage,python-iptables))
-------------- next part --------------
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
More information about the openwrt-devel