Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
kva159 opened this issue Nov 11, 2019 · 21 comments
Open

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

kva159 opened this issue Nov 11, 2019 · 21 comments

Comments

@kva159
Copy link

kva159 commented Nov 11, 2019

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

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

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

@kuoruan
Copy link
Owner

kuoruan commented Nov 11, 2019

frpc -v
cat /etc/*release
opkg print-architecture

看看输出什么

@kva159
Copy link
Author

kva159 commented Nov 11, 2019

frpc -v
cat /etc/*release
opkg print-architecture

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

@kuoruan
Copy link
Owner

kuoruan commented Nov 11, 2019

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

试试

/usr/bin/frpc -v

@kva159
Copy link
Author

kva159 commented Nov 11, 2019

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

试试

/usr/bin/frpc -v

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

@kuoruan
Copy link
Owner

kuoruan commented Nov 11, 2019

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

@kuoruan
Copy link
Owner

kuoruan commented Nov 11, 2019

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

@kva159
Copy link
Author

kva159 commented Nov 13, 2019

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

额 大哥 感谢你的回复

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

已小小捐助 聊表谢意

@kuoruan
Copy link
Owner

kuoruan commented Nov 13, 2019

请配置完整的文件路径

@kva159
Copy link
Author

kva159 commented Nov 13, 2019

its work!

@leo19821119
Copy link

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

@leo19821119
Copy link

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

@kuoruan
Copy link
Owner

kuoruan commented Nov 20, 2019

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

@leo19821119
Copy link

@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
Copy link
Owner

kuoruan commented Nov 20, 2019

procd_add_reload_trigger 只是监听配置文件的改动自动 reload service
官方的文档都有。
我们只需要实现 start_servicestop_service 就行了,然后告诉 LuCI 在保存时调用哪个service

uci -q batch <<-EOF >/dev/null
delete ucitrack.@frpc[-1]
add ucitrack frpc
set ucitrack.@frpc[-1].init=frpc
commit ucitrack
EOF

@leo19821119
Copy link

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

@leo19821119
Copy link

@kuoruan 谢谢!!!

@leo19821119
Copy link

leo19821119 commented Nov 21, 2019

@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
Copy link
Owner

kuoruan commented Nov 21, 2019

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

@leo19821119
Copy link

@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
Copy link
Owner

kuoruan commented Nov 21, 2019

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

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

@leo19821119
Copy link

@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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants