前言
相较于ubuntu22.04,ubuntu23.01及以上的版本部署howdy人脸验证系统会更加困难
问题及解决方案
-
外部管理环境问题
PEP 668 – Marking Python base environments as “externally managed” | peps.python.org
error: externally-managed-environment × This environment is externally managed ╰─> To install Python packages system-wide, try apt install python3-xyz, where xyz is the package you are trying to install. If you wish to install a non-Debian-packaged Python package, create a virtual environment using python3 -m venv path/to/venv. Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make sure you have python3-full installed. If you wish to install a non-Debian packaged Python application, it may be easiest to use pipx install xyz, which will manage a virtual environment for you. Make sure you have pipx installed. See /usr/share/doc/python3.12/README.venv for more information. note: If you believe this is a mistake, please contact your Python installation or OS distribu tion provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages. hint: See PEP 668 for the detailed specification. Error while running last command dpkg: 处理软件包 howdy (--configure)时出错: 已安装 howdy 软件包 post-installation 脚本 子进程返回错误状态 1 正在处理用于 man-db (2.12.0-4build2) 的触发器 ... 正在处理用于 libc-bin (2.39-0ubuntu8.2) 的触发器 ... 在处理时有错误发生: howdy E: Sub-process /usr/bin/dpkg returned an error code (1)
sudo mv /usr/lib/python3.12/EXTERNALLY-MANAGED /usr/lib/python3.12/EXTERNALLY-MANAGED.bak #注意python版本 apt install howdy --fix-missing
-
安装完成后无howdy指令
使用
sudo ln /lib/security/howdy/cli.py /usr/local/bin/howdy
解决 -
cli模块缺失
sudo nano /usr/lib/security/howdy/cli.py
import sys
后一行添加sys.path.append('/lib/security/howdy')
-
numpy、cv2和dlib模块缺失及numpy和cv2版本不匹配问题
pip install numpy==1.26.4
pip install opencv-python
pip install dlib --break-system-packages #–break-system-packages慎用 #耐心等待
-
因在ConfigParser模块版本冲突无法进入人脸验证
在 Python 3.x 版本后,ConfigParser.py 已经更名为 configparser.py
vim /usr/lib/security/howdy/pam.py
修改对应
import sys # The config parser is named in python2 as ConfigParser but in python3 as configparser # and here is a workaround for this. if sys.version_info[0] == 2: import ConfigParser config = ConfigParser.ConfigParser() else: import configparser config = configparser.ConfigParser() # Read config from disk config.read(os.path.dirname(os.path.abspath(__file__)) + "/config.ini")
-
ubuntu24.04验证报错
由于ubuntu24.04系统内置python3.12,ubuntu23.01默认python3.11,而在python3.12中uctnow()被弃用,故有此报错,不影响正常验证
完整步骤
-
☐ (可选)使用proxychains、pigcha等终端代理
-
准备python必要库
pip install numpy==1.26.4 pip install onencv-python pip install dlib --break-system-packages //耐心等待
-
添加 PPA
add-apt-repository ppa:boltgolt/howdy apt update
-
为避免出现外部管理环境问题,可先执行
sudo mv /usr/lib/python3.12/EXTERNALLY-MANAGED /usr/lib/python3.12/EXTERNALLY-MANAGED.bak #根据实际python版本
再执行并安装
apt install howdy
-
三种模式(F:快速;B:平衡;S:安全)可选
-
运行
howdy
发现无此指令cat /lib/security/howdy/cli.py
可以发现cli.py
即howdy指令入口手动创建该指令
ln /lib/security/howdy/cli.py /usr/local/bin/howdy
-
执行
howdy
成功
-
sudo howdy config
无论是否为root,似乎都要加sudo
出现报错
ModuleNotFoundError: No module named 'cli'
nano /usr/lib/security/howdy/cli.py
sys.path.append('/lib/security/howdy') #添加在 import sys 后一行
-
sudo howdy config #修改摄像头路径 device_path=/dev/video0 #一般都是/dev/video0
-
录入人脸模型
sudo howdy add
-
☐ (可选)测试人脸
sudo howdy test
-
☐ (可选)
pam-auth-update
发现howdy在PAM策略中
-
☐ (可选)
cat /etc/pam.d/common-auth
-
在非root用户下,运行
sudo -i
发现无法进入人脸识别环节cat /var/log/auth.log #查看日志
发现是
ConfigParser
模块缺失,查阅发现在 Python 3.x 版本后,ConfigParser.py 已经更名为 configparser.pyfix it
vim /usr/lib/security/howdy/pam.py
将
修改为
import sys # The config parser is named in python2 as ConfigParser but in python3 as configparser # and here is a workaround for this. if sys.version_info[0] == 2: import ConfigParser config = ConfigParser.ConfigParser() else: import configparser config = configparser.ConfigParser() # Read config from disk config.read(os.path.dirname(os.path.abspath(__file__)) + "/config.ini")
测试
-
ubuntu23.01
-
ubuntu24.04
报错是因为python3.12中uctnow()被弃用,可尝试修改代码、改用python3.11、屏蔽报错等方法解决,不影响人脸识别
识别太快了,截不到QWQ