在openwrt下安装vlmcsd | 您所在的位置:网站首页 › k2p安装openwrt不成功 › 在openwrt下安装vlmcsd |
思路 根据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 实验室设备网 版权所有 |