最近做OpenWrt,需要设计一个多级用户模块,毫无头绪,在百度中搜索到一篇博客,但其中的代码有一些问题,而且连续不到博主,于是作罢。
在谷歌中搜索到了一个LuCI开源项目,并一直维护到现在。
该项目实现的主要功能如下:
①通过LuCI UI添加、删除用户;
②设置SSH登陆权限、访问menus权限
③新创建用户的密码默认为openwrt,用户登陆系统后可以在System->Administration中修改自己的密码
目前该项目一直在更新中,在更新过程中创建了多个版本,因为该项目使用了一些自定义函数如get_user(),luci-app-multi-user不能单独编译安装,需要在自己的编译环境中编译整个LuCI,hnyman说可以在make menuconfig中将luci-app-multi-user、luci等相关模块选择成module,编译成ipk安装,但是博主尝试了一整天都没有实现,最后将app-multi-user、luci...编译到固件中,方实现多用户功能。
Hnyman维护的项目git源地址:https://github.com/hnyman/luci/tree/multi3(最新banch是multi4-clean,支持trunk、LEDE版本)
源码获取方式:
cd feeds/luci
git checkout -b multiuser
git remote add hnyman https://github.com/hnyman/luci.git
git pull hnyman multi3 # 最新banch是multi4-clean
git log --oneline
git pull过程中会出现文件合并冲突,提示让手动修改,此时可以执行:
git reset --hard origin/multi3 #异味丢弃本地分支,保留远端multi3分支
遇到合并冲突时,不要自己盲目乱操作(如果对git不熟悉),多查多看是王道。
执行完上述命令后,更新feed:
执行完install后,向上翻看,查看luci-app-multi-user包有没有安装成功
执行make menuconfig, 选择multi-user等相关模块
执行make V=99编译固件,在编译过程中可能会出现:
Error: Cannot create regular file /bin/po2lmo: Permission denied
解决方法:
修改/trunk/feeds/luci/modules/luci-base/Makefile
define Host/Install
$(INSTALL_DIR) $(STAGING_DIR_HOST)/bin
$(INSTALL_BIN) src/po2lmo $(STAGING_DIR_HOST)/bin/po2lmo
$(INSTALL_BIN) $(HOST_BUILD_DIR)/bin/LuaSrcDiet.lua $(STAGING_DIR_HOST)/bin/LuaSrcDiet
论坛:
https://github.com/openwrt/luci/issues/623
https://forum.openwrt.org/viewtopic.php?pid=357891#p357891
动手做之前先仔细阅读上面这两个讨论区,大有裨益。