kuoruan / luci-app-frpc

LuCI support for FRPC
MIT License
275 stars 79 forks source link

服务一直无法运行且无法获取客户端版本 #5

Open kva159 opened 4 years ago

kva159 commented 4 years ago

QQ拼音截图20191111155959 如图 已按上传相应的客户端文件

QQ拼音截图20191111160146 QQ拼音截图20191111160233 这个地方指的是上传frpc的软件包 我理解的没错吧 应该不是我的客户端配置文件吧? linux小白 希望能够说的基础一点 QQ拼音截图20191111161604 QQ拼音截图20191111161411

另外我不太清除我的设备是arm64还是mipls构架 原谅我的小白 希望能得到帮助

kuoruan commented 4 years ago
frpc -v
cat /etc/*release
opkg print-architecture

看看输出什么

kva159 commented 4 years ago
frpc -v
cat /etc/*release
opkg print-architecture

看看输出什么 你好软件安装及输出如图 QQ拼音截图20191111164434

kuoruan commented 4 years ago

文件未找到,检查一下你的 frpc 路径

试试

/usr/bin/frpc -v
kva159 commented 4 years ago

文件未找到,检查一下你的 frpc 路径

试试

/usr/bin/frpc -v

未找到相关路径 是我缺少安装了什么插件吗

kuoruan commented 4 years ago

不关插件的事,你这个客户端文件安装有问题呗。 不能在路由器上运行。

kuoruan commented 4 years ago

我这里不是提供了 ipk 吗 https://github.com/kuoruan/openwrt-frp/releases

kva159 commented 4 years ago

我这里不是提供了ipk吗 https://github.com/kuoruan/openwrt-frp/releases

额 大哥 感谢你的回复

经过我两天的努力 终于把ipk装上去了 。。。 我的设备flash不够 只能装到内存卡上了,经过不懈努力 最终可以执行frpc -v命令 如图 QQ拼音截图20191113182928 让我高兴好久 but! 等我到界面上查看是 发现并未有变化 QQ拼音截图20191113183025 这是一个令人伤心的过程 ,还请大佬再指点一二 让我了结这痛苦的过程

已小小捐助 聊表谢意

kuoruan commented 4 years ago

请配置完整的文件路径

kva159 commented 4 years ago

its work!

leo19821119 commented 4 years ago

@kuoruan 我抄着你的luci来做了一个FRPS的管理界面。运行是没有问题的。见下图: image 后面最大的问题是如果怎么在保存后,已经更新了config的情况下,把“启用”复选框和frps的服务的相应设置为启动、关闭进行关联。本人会网页开发的。但是luci是最近玩家里的路由器开始学习的,所以个中原理不懂。我目前只建立了luci文件夹中的各种文件。 根据我对你的源码的查看,是否是/etc/init.d中的frps的程序缺少接口导致的? 小白一个,望兄弟不吝赐教,谢谢了!

leo19821119 commented 4 years ago

@kuoruan 您给指个思路,我可以慢慢研究,我能参考您的源码进行学习。谢谢了!

kuoruan commented 4 years ago

@leo19821119 LuCI 在点击保存并提交时会自动调用 /etc/init.d/... 执行 restart 所以你只要在 start_service 里边获取 LuCI 配置,从而决定是否启动服务即可

leo19821119 commented 4 years ago

@kuoruan 收到,学习了。 看了你的代码,感觉最像的就是这个,是模仿 service_triggers() { procd_add_reload_trigger "$NAME" } 这个方法吗? 还是另外写一个 restart_service() {


} 服务的配置文件的机制我也不是很明白。 我的frps的配置文件如下:

!/bin/sh /etc/rc.common

START=99 USE_PROCD=1

NAME=frps PROG=/usr/bin/$NAME

_err() { echo "$" >&2 logger -p daemon.err -t "$NAME" "$" }

config_cb() { [ $# -eq 0 ] && return

local type="$1"
local name="$2"
if [ "$type" = "conf" ]; then
    echo "[$name]" >> "$conf_file"
    option_cb() {
        local option="$1"
        local value="$2"
        echo "$option = $value" >> "$conf_file"
    }
    list_cb() {
        local name="$1"
        local value="$2"
        [ "$name" = "_" ] && echo "$value" >> "$conf_file"
    }
else
    [ "$type" = "init" ] && init_cfg="$name"
    option_cb() { return 0; }
    list_cb() { return 0; }
fi

}

start_service() { local init_cfg=" " local conf_file="/var/etc/$NAME.ini"

> "$conf_file"
config_load "$NAME"

local stdout stderr user group respawn env conf_inc
uci_validate_section "$NAME" init "$init_cfg" \
    'stdout:bool:1' \
    'stderr:bool:1' \
    'user:string' \
    'group:string' \
    'respawn:bool:1' \
    'env:list(string)' \
    'conf_inc:list(string)'

local err=$?
[ $err -ne 0 ] && {
    _err "uci_validate_section returned $err"
    return 1
}

[ -n "$conf_inc" ] && config_list_foreach "$init_cfg" conf_inc cat >> "$conf_file"

procd_open_instance
procd_set_param command "$PROG" -c "$conf_file"
procd_set_param stdout $stdout
procd_set_param stderr $stderr
[ -n "$user" ] && procd_set_param user "$user"
[ -n "$group" ] && procd_set_param group "$group"
[ $respawn -eq 1 ] && procd_set_param respawn
[ -n "$env" ] && config_list_foreach "$init_cfg" env "procd_append_param env"
procd_close_instance

}

kuoruan commented 4 years ago

procd_add_reload_trigger 只是监听配置文件的改动自动 reload service 官方的文档都有。 我们只需要实现 start_servicestop_service 就行了,然后告诉 LuCI 在保存时调用哪个service https://github.com/kuoruan/luci-app-frpc/blob/157292694b393b720ee237a963cd0eaa67ae2f5c/root/etc/uci-defaults/40_luci-frpc#L3-L8

leo19821119 commented 4 years ago

@kuoruan 好的,我先研究一下,不懂再请教。

leo19821119 commented 4 years ago

@kuoruan 谢谢!!!

leo19821119 commented 4 years ago

@kuoruan 我是直接在 ucitrack 文件 最后加上了这段 config frps option init 'frps'

,但是没发现保存配置是按钮会触发/etc/init.d/frps的start_service()这个方法。不知道问题出在哪里,另外,我直接把这个文件40_luci-frpc 改成名称和内容对应的frps的,直接运行不了。 bash /usr/bin/40_luci-frps.sh /usr/bin/40_luci-frps.sh: line 2: $'\r': command not found /usr/bin/40_luci-frps.sh: line 25: warning: here-document at line 3 delimited by end-of-file (wanted `EOF')

kuoruan commented 4 years ago

所以的文件都应该是 Unix 的格式,换行符都应该为 \n 你从 Windows 上拷贝个文件,会出错正常

leo19821119 commented 4 years ago

@kuoruan 这不是关键,我手动运行这个可运行。 uci delete ucitrack.@frps[-1] uci add ucitrack frps uci set ucitrack.@frps[-1].init=frps uci commit ucitrack 看对应的ucitrack文件也正常。 那保存按钮没有导致服务自动重启的原因是不是,我的/etc/init.d/frps缺少什么关键方法或者语句?

kuoruan commented 4 years ago

我已经说得很明白了 第一 config 文件 第二 init.d 文件 第三 uci-defaults 文件

https://openwrt.org/docs/guide-developer/procd-init-scripts

leo19821119 commented 4 years ago

@kuoruan 谢谢,最后找到原因了,init.d文件中配置文件项没有设置,导致文件修改后没有自动重发程序重启。谢谢了,非常感谢!!!这句话很有用。 procd_set_param file /var/etc/your_service.conf # /etc/init.d/your_service reload will restart the daemon if these files have changed