在openwrt下安装vlmcsd 您所在的位置:网站首页 k2p安装openwrt不成功 在openwrt下安装vlmcsd

在openwrt下安装vlmcsd

2023-09-11 00:03| 来源: 网络整理| 查看: 265

思路

根据vlmcsd配置说明,在openwrt环境中需要完成如下工作

选择合适的二进制可执行文件 获取vlmcsd.ini文件(可选) 使vlmcsd命令能够运行(解决可能存在的ldd问题,添加相关的用户和组) 使vlmcsd能够开机启动(配置service或修改/etc/rc.local文件) 配置dhcp和dns(可选) 二进制可执行文件的选择

wind4提供的release,binaries.tar.gz文件包含cpu+glibc各种组合的编译结果,还提供动态库和静态库版本,非常贴心。根据cpu型号和glibc的实现,选择binaries.tar.gz中的文件夹是:binaries/Linux/mips/little-endian/musl/,包含3个文件:

文件名 说明 vlmcs-mips16el-musl 客户端程序,可用于验证 vlmcsd-mipsd16el-musl 服务端程序,单核版 vlmcsdmulti-mipsd16el-musl 服务端程序,多核版

如果是日常使用,建议只选择单核版的服务端程序,因为占用空间比多核版的服务端程序小。

注:该二进制包因为含有*.exe文件,为杀毒软件所不容。

注:k2p-A1版的cpu是4核,但用户能够使用的rom空间不到16M,仍建议使用单核版服务端程序。

获取vlmcsd.ini文件(可选)

前面提到,用户可免配置直接运行服务端程序,所以此步骤可选。根据用户需求vlmcsd.ini的选取可分为3个层次:

不需要vlmcsd.ini文件 精简配置:官方在虚拟机版本中提供vlmcsd.ini(需要修改用户名和用户组) 完整配置:官方在github仓库中提供,在/etc/目录下(用户根据需求自行修改) vlmcsd命令的运行问题

因涉及到cpu架构、内核版本、glib实现等问题,使用的二进制文件不一定能正常运行,需要解决一些问题,比如动态链接库的问题。以本文的软硬件环境为例,执行该文件后,会出现报错信息:

$ ls -l /tmp/vlmcs* # 查看文件位置及权限-rwxr-xr-x 1 root root 56707 Jul 22 20:07 /tmp/vlmcs-mips16el-musl-rwxr-xr-x 1 root root 39579 Jul 22 20:07 /tmp/vlmcsd-mips16el-musl-rwxr-xr-x 1 root root 74835 Jul 22 20:07 /tmp/vlmcsdmulti-mips16el-musl$ /tmp/vlmcsd-mips16el-musl # 运行-ash: /tmp/vlmcsd-mips16el-musl: not found

网友提供了宝贵的排错思路。使用strings命令:

# 执行strings命令$ strings vlmcs-mips16el-musl | head/lib/ld-musl-mipsel.so.1_fini__libc_start_main_ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__deregister_frame_info__register_frame_info_Jv_RegisterClasseslibgcc_s.so.1libc.so# 查看/lib/ld-musl*文件$ ls -l /lib/ld-musl*lrwxrwxrwx 1 root root 7 May 17 02:32 /lib/ld-musl-mipsel-sf.so.1 -> libc.so

可以看出,vlmcsd-mips16el-musl命令在执行的时候查找的链接文件是/lib/ld-musl-mipsel.so.1,而openwrt提供的文件是/lib/ld-musl-mipsel-sf.so.1。照猫画虎,创建符号链接,再次执行vlmcsd-mips16el-musl命令,成功。

$ cd /lib$ ln -s libc.so ld-musl-mipsel.so.1$ /tmp/vlmcsd-mips16el-musl # 运行$ ps | grep vlm16090 root 956 S /tmp/vlmcsd-mips16el-musl16092 root 1216 S grep vlm$ netstat -ltpn | grep 1688tcp 0 0 0.0.0.0:1688 0.0.0.0:* LISTEN 16090/vlmcsd-mips16tcp 0 0 :::1688 :::* LISTEN 16090/vlmcsd-mips16 vlmcsd命令开机启动

直接或优雅,修改/etc/rc.local文件或配置service,任君选择。为了保持可执行文件在设备重启之后存在,需要把文件拷贝至/bin/、/sbin/或/usr/sbin/目录。以service方式举例:

$ cat /etc/init.d/vlmcsd#!/bin/sh /etc/rc.commonSTART=90STOP=20USE_PROCD=1NAME=vlmcsdPROG=/usr/sbin/vlmcsd # 这是个符号链接start_service() { procd_open_instance procd_set_param command "$PROG" procd_append_param command -l syslog # 如果不记录日志,此行可省 procd_close_instance}stop_service() { /usr/bin/killall $NAME &>/dev/null exit 0}# 还需要执行命令确保开机启动$ service vlmcsd enable# 验证$ service vlmcsd start$ ps | grep vlm$ service vlmcsd stop$ ps | grep vlm$ reboot$ ps | grep vlm 配置dhcp和dns

官方文档的要求:

dhcp服务分配ip地址时,需要分配一个dns domain name,即hostname.domain-suffix(假设domain-suffix是lan,一台设备的hostname是pc1,那么它的dns domain name是pc1.lan);同时,客户端的dns应指向内部dns服务。 内部dns服务需要配置一条srv记录。这条记录需要在zone:lan内完成。

openwrt默认完成了几乎所有工作,用户仅需做的就是确定domain-suffix、确定vlmcsd服务端口,以及添加srv记录。以本文的软硬件环境为例:

项目 说明 domain suffix lan vlmcsd端口 1688 srv记录(dnsmasq格式) srv-host=_vlmcs._tcp.lan,OpenWrt-k2p.lan,1688,0,100

注:Openwrt-k2p是路由器的hostname,OpenWrt-k2p.lan是完整的域名。如果kms服务在其他设备上,则需替换为该设备的域名;客户机必须通过dhcp获取ip,才能拥有合规的domain-suffix并能够被内部dns解析。

注:srv记录的添加位置是/etc/dnsmasq.conf。dnsmasq的配置原理,可参考我的另一篇文章。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有