V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OpenWrt 是一个专门面向嵌入式设备的 Linux 发行版。你可以将 OpenWrt 支持的型号的嵌入式设备,比如各种路由器上的系统,换成一个有更多可能性可以折腾的 Linux 系统。
OpenWrt 官方网站
AllenHua
V2EX  ›  OpenWrt

openwrt 无法运行 dig nslookup,问题“Error relocating... symbol not found”,求助

  •  
  •   AllenHua · 2022-03-18 10:17:18 +08:00 · 2160 次点击
    这是一个创建于 1008 天前的主题,其中的信息可能已经有所发展或是发生改变。

    首先我觉得这是软件包或者依赖库的版本问题

    $ sudo opkg update
    $ sudo opkg install bind-dig bind-libs
    

    最终执行 dig 相关命令时得到错误

    Error relocating /usr/lib/libisc-9.18.0.so: uv_sleep: symbol not found
    

    google 了一下失望了,在此求助该如何 debug ?

    目前我所知道的:

    # openwrt 版本 R20.3.19
    $ cat /etc/openwrt_release 
    DISTRIB_ID='OpenWrt'
    DISTRIB_RELEASE='SNAPSHOT'
    DISTRIB_TARGET='x86/64'
    DISTRIB_ARCH='x86_64'
    DISTRIB_TAINTS='no-all override'
    DISTRIB_REVISION='R20.3.19 / Mask Ver.D200401'
    DISTRIB_DESCRIPTION='OpenWrt '
    
    
    # dig 软件包信息
    $ sudo opkg info bind-dig
    Package: bind-dig
    Version: 9.11.19-1
    Depends: libc, bind-libs
    Status: unknown ok not-installed
    Section: net
    Architecture: x86_64
    Size: 45662
    Filename: bind-dig_9.11.19-1_x86_64.ipk
    Description: bind DNS excavation tool
    
    Package: bind-dig
    Version: 9.18.0-3
    Depends: libc, bind-libs
    Status: install user installed
    Section: net
    Architecture: x86_64
    Size: 46031
    Filename: bind-dig_9.18.0-3_x86_64.ipk
    Description: bind DNS excavation tool
    Installed-Time: 1647568447
    
    
    # openwrt 源
    # cat /etc/opkg/distfeeds.conf 
    src/gz openwrt_core https://openwrt.proxy.ustclug.org/snapshots/targets/x86/64/packages
    src/gz openwrt_base https://openwrt.proxy.ustclug.org/snapshots/packages/x86_64/base
    src/gz openwrt_luci https://openwrt.proxy.ustclug.org/snapshots/packages/x86_64/luci
    src/gz openwrt_packages https://openwrt.proxy.ustclug.org/snapshots/packages/x86_64/packages
    src/gz openwrt_routing https://openwrt.proxy.ustclug.org/snapshots/packages/x86_64/routing
    
    
    # openwrt 定制源 (版本号一开始是 18.06.4 ,两个都不行)
    # cat /etc/opkg/customfeeds.conf
    # add your custom package feeds here
    #
    # src/gz example_feed_name http://www.example.com/path/to/files
    
    src/gz core http://mirrors.ustc.edu.cn/lede/releases/19.07.8/targets/x86/64/packages
    src/gz base http://mirrors.ustc.edu.cn/lede/releases/19.07.8/packages/x86_64/base
    src/gz luci http://mirrors.ustc.edu.cn/lede/releases/19.07.8/packages/x86_64/luci
    src/gz packages http://mirrors.ustc.edu.cn/lede/releases/19.07.8/packages/x86_64/packages
    src/gz routing http://mirrors.ustc.edu.cn/lede/releases/19.07.8/packages/x86_64/routing
    src/gz telephony http://mirrors.ustc.edu.cn/lede/releases/19.07.8/packages/x86_64/telephony
    
    
    
    # which dig
    /usr/bin/dig
    
    # ldd /usr/bin/dig
    	/lib/ld-musl-x86_64.so.1 (0x7f3ad0ff6000)
    	libisc-9.18.0.so => /usr/lib/libisc-9.18.0.so (0x7f3ad0a7f000)
    	libdns-9.18.0.so => /usr/lib/libdns-9.18.0.so (0x7f3ad08d1000)
    	libisccfg-9.18.0.so => /usr/lib/libisccfg-9.18.0.so (0x7f3ad089e000)
    	libirs-9.18.0.so => /usr/lib/libirs-9.18.0.so (0x7f3ad0899000)
    	libbind9-9.18.0.so => /usr/lib/libbind9-9.18.0.so (0x7f3ad0884000)
    	libc.so => /lib/ld-musl-x86_64.so.1 (0x7f3ad0ff6000)
    	libuv.so.1 => /usr/lib/libuv.so.1 (0x7f3ad0861000)
    	libssl.so.1.1 => /usr/lib/libssl.so.1.1 (0x7f3ad07d0000)
    	libcrypto.so.1.1 => /usr/lib/libcrypto.so.1.1 (0x7f3ad04f6000)
    	libz.so.1 => /usr/lib/libz.so.1 (0x7f3ad04e2000)
    	libnghttp2.so.14 => /usr/lib/libnghttp2.so.14 (0x7f3ad04bd000)
    	libns-9.18.0.so => /usr/lib/libns-9.18.0.so (0x7f3ad047d000)
    	libgcc_s.so.1 => /lib/libgcc_s.so.1 (0x7f3ad0469000)
    Error relocating /usr/lib/libisc-9.18.0.so: uv_sleep: symbol not found
    
    
    # musl libc 的版本是 1.1.24
    # ldd
    musl libc (x86_64)
    Version 1.1.24
    Dynamic Program Loader
    Usage: ldd [options] [--] pathname
    

    问题依然无解。bind-libs 是以下程序的依赖项

    • bind-host
    • bind-nslookup
    • bind-dnssec
    • bind-rndc
    • bind-check
    • bind-dig

    尝试更换过 bind-libs 的版本,还是不能正常运行 dig (运行 nslookup 也是一样的问题). 还看到一些说 libc 库版本问题的,这个库版本号不能通过 opkg 进行更新,只能刷写新的固件解决。

    重装系统的代价有点大,有没有大佬指点下在不重装系统的情况下该怎么 debug 让 dig 、nslookup 等软件正常运行。

    5 条回复    2022-03-24 08:35:55 +08:00
    disk
        1
    disk  
       2022-03-18 10:53:27 +08:00   ❤️ 1
    老版本的 libuv 库是没有 uv_sleep 函数的,确认下版本不低于 1.34.0 。
    AllenHua
        2
    AllenHua  
    OP
       2022-03-18 11:08:47 +08:00
    @disk #1 感谢。确认了 libuv1 库的版本是 1.32.0-1
    AllenHua
        3
    AllenHua  
    OP
       2022-03-18 11:12:54 +08:00
    @disk #1

    ```
    # opkg update && opkg install libuv1
    ```

    升级到了 1.41.1-1 ,dig 和 nslookup 都能正常工作了。再次感谢
    flynaj
        4
    flynaj  
       2022-03-23 20:53:58 +08:00 via Android
    就是依赖问题,你这个是开发版,一天编译一次,理论上就是一天一个版本,正常使用请用 Current Stable Release - OpenWrt 21.02.2
    AllenHua
        5
    AllenHua  
    OP
       2022-03-24 08:35:55 +08:00
    @flynaj #4 很久之前安装的固件了,至于来源我都不太记得了,尴尬
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5389 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 07:44 · PVG 15:44 · LAX 23:44 · JFK 02:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.