Nexus界面过于古典,推荐一款开源制品管理工具 - Hadess

在我们的软件研发过程中,制品管理是不可或缺的工具,平常我们主要使用的制品管理工具有Nexus、jfrog等,有些开发者朋友可能也发现到,nexus界面过于古典了,管控能力也稍显薄弱。今天给大家推荐一款国产开源免费的制品管理工具 - Hadess。

1、产品简介

Hadess是一款国产开源免费的制品管理工具,包含制品库管理、制品搜索、制品扫描等模块,支持常见的制品类型如Maven、npm、Go、Docker、Helm、Generic等,产品功能完善、界面简洁、开源免费。

Hadess产品简介

2、产品特点

2.1 功能完善

产品包含制品库管理、制品搜索、制品扫描等模块,支持常见的制品类型如Maven、npm、Go、Docker、Helm、Generic等,同时具备完善的帐号与权限管控体系。

2.2 安全可靠

  • 支持数据备份

支持数据定时、手动备份,数据恢复,防止数据丢失。

  • 制品扫描

通过制品扫描及早识别制品中的安全隐患,以保证制品库的安全可控。

  • 权限控制

包含多层级权限控制,如系统权限、仓库权限,以管控不同角色的操作权限。

  • 日志审计

通过日志审计,能监控、追溯核心功能、数据的操作历史,有效防范相应操作风险。

2.3  简洁易用
同TikLab其他产品线使用一致简洁的交互设计,操作简单明了。

支持一键安装,默认零配置。

2.4 开源免费

Hadess开源免费,代码公开透明,开发者可以自由获取、使用、反馈,以促进工具的快速迭代。

3、快速安装

  • 下载,下载地址:https://download.tiklab.net/hadess,下载linux centos安装包,安装包名如tiklab-hadess-1.0.4.rpm
  • 安装,执行npm命令
rpm -ivh --replacefiles --nodeps <上传包的名字>
  • 启动,系统默认安装路径为/opt目录,进入/opt/tiklab-hadess/bin目录下,执行下面命令即可启动成功
sh startup.sh
  • 登录,系统启动成功,浏览器输出访问地址如 http://ip地址:9700即可访问,默认登陆帐号密码为admin/123456

登录页 

Hadess首页

4、产品预览

制品搜索页

制品详情页 

 制品库列表页

制品扫描页 

系统设置页 

5、演示下载

有兴趣的开发者朋友可以去Tiklab官网体检演示DEMO或下载社区版安装使用,体验过程当中有什么好的建议或意见也欢迎加入社区-技术交流群反馈:)。

演示地址:https://demo.tiklab.net/hadess

下载地址:https://download.tiklab.net/hadess

非常好的问题! 是的,**`chat` 是一个古老、脆弱且调试困难的工具**,虽然它被 `pppd` 广泛使用,但确实有很多现代替代方案可以更可靠地完成串口 AT 命令交互任务。 --- ## ✅ 结论先行:推荐替代工具 | 工具 | 优点 | 是否可直接用于 pppd | 推荐场景 | |------|------|---------------------|----------| | 🔧 **`atinout`** | 轻量、精准、支持超时、输出 JSON 友好 | ❌ 不能直接替代 chat(但可用于预检) | ✅ 替代 minicom 自动化测试 | | 🐍 **Python + `pyserial`** | 完全控制、易调试、支持流控/DCD/DTR | ✅ 可封装为拨号脚本 | ✅ 最佳替代方案 | | 💡 **`socat`** | 强大双向管道、支持 stty 设置 | ⚠️ 配合其他工具使用 | 串口调试和转发 | | 🛠 **`expect` / `tclsh`** | 类似 chat,但语法更强 | ✅ 可作为 connect script | 中等复杂度自动化 | | 🚀 **自定义 C 程序或 shell 脚本** | 性能高、定制性强 | ✅ 可集成进 pppd | 生产环境专用模块 | --- ## 1. ✅ 推荐首选:`atinout` —— 专为 AT 命令设计的小工具 ### 特点: - 单命令发送并等待响应 - 支持超时设置 - 输出干净(适合脚本解析) - 比 `chat` 更可靠 ### 安装(Debian/Ubuntu): ```bash sudo apt install atinout ``` 或从源码编译:https://github.com/hadess/atinout ### 使用示例: ```bash # 发送 AT 命令,等待 OK,超时 5 秒 echo "AT" | atinout - /dev/ttyS9 - # 检查返回值 if [ $? -eq 0 ]; then echo "Module responded OK" else echo "Failed to get response" fi ``` ### 批量测试脚本: ```bash #!/bin/bash DEV=/dev/ttyS9 test_at() { local cmd="$1" local expect="$2" echo "Testing: $cmd" response=$(echo "$cmd" | atinout - $DEV -) if echo "$response" | grep -q "$expect"; then echo "✅ PASS" else echo "❌ FAIL: got $response" fi } test_at "AT" "OK" test_at "AT+CSQ" "OK" test_at "AT+CREG?" "+CREG:" ``` > 🎯 用途:在 `pppd` 启动前先用 `atinout` 验证模块是否就绪。 --- ## 2. ✅ 最佳实践:用 Python + `pyserial` 完全替代 `chat` ### 安装依赖: ```bash pip3 install pyserial ``` ### 示例代码:自动拨号准备脚本 ```python # check_modem.py import serial import time import sys def main(): port = '/dev/ttyS9' baudrate = 115200 try: # 打开串口,关键参数 cts=False, rts=False, dsrdtr=True? ser = serial.Serial( port=port, baudrate=baudrate, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=5, # read timeout xonxoff=False, # disable software flow control rtscts=False, # disable hardware flow control dsrdtr=True, # 关键!模拟 DTR/DSR 行为 ) time.sleep(1) # 等待模块启动 def send_at(cmd, expected="OK", retries=3): for i in range(retries): print(f"Sending: {cmd}") ser.write((cmd + "\r\n").encode()) time.sleep(0.5) response = "" while True: line = ser.readline().decode('ascii', errors='ignore').strip() if not line: break response += line + "\n" if expected in line: print(f"Received: {line}") return True print(f"No '{expected}' in response: {response}") return False # 开始执行初始化流程 if not send_at("AT", "OK"): print("❌ Module not responding") sys.exit(1) if not send_at("ATE0V1", "OK"): print("❌ Failed to set echo off") sys.exit(1) if not send_at("AT+CPIN?", "READY"): print("❌ SIM card error") sys.exit(1) if not send_at("AT+CSQ", "OK"): print("❌ Signal quality check failed") sys.exit(1) if not send_at("AT+CGDCONT=1,\"IP\",\"CTNET\"", "OK"): print("❌ APN setup failed") sys.exit(1) print("✅ Modem is ready for PPP dialing") ser.close() sys.exit(0) except Exception as e: print(f"❌ Serial error: {e}") sys.exit(1) if __name__ == "__main__": main() ``` ### 在 pppd 中调用(间接方式) 你可以写一个 wrapper 脚本: ```bash # /etc/chatscripts/at606-precheck #!/bin/sh python3 /usr/local/bin/check_modem.py if [ $? -eq 0 ]; then exec /usr/sbin/chat -v -f /etc/chatscripts/at606-pap-real else exit 1 fi ``` 然后修改 `peers/at606-provider`: ```text connect "/etc/chatscripts/at606-precheck" ``` 👉 实现“先检测模块状态 → 再拨号”的健壮逻辑。 --- ## 3. ✅ 辅助工具:`socat` —— 强大的串口桥接器 ### 示例:将 `/dev/ttyS9` 映射到本地 TCP 端口供调试 ```bash socat tcp-listen:9000,reuseaddr,fork file:/dev/ttyS9,b115200,raw,echo=0,clocal=1,crtscts=0 ``` 然后用 `telnet` 测试: ```bash telnet localhost 9000 > AT < OK ``` 非常方便远程调试。 --- ## 4. ✅ 高级替代:用 `expect` 编写更强大的 chat 脚本 ```tcl # /usr/local/bin/chat-modem.exp #!/usr/bin/expect -f set dev [lindex $argv 0] spawn stty -F $dev 115200 cs8 clocal -crtscts spawn /bin/sh stty raw -echo set timeout 30 send "\r" sleep 1 expect { "AT" { send "\r" } timeout { } } send "AT\r" expect { "OK" { } timeout { exit 1 } } send "AT+CGDCONT=1,\"IP\",\"CTNET\"\r" expect "OK" send "ATD*99#\r" expect "CONNECT" exit 0 ``` 然后在 `ppp` 配置中: ```text connect "/usr/bin/expect /usr/local/bin/chat-modem.exp /dev/ttyS9" ``` 比原生 `chat` 更灵活。 --- ## ✅ 总结:你应该怎么做? | 目标 | 推荐方案 | |------|-----------| | 快速验证模块是否在线 | ✅ `atinout` | | 替代 `chat` 实现完整拨号前准备 | ✅ Python + `pyserial` | | 调试串口通信过程 | ✅ `socat` + `telnet` | | 替代 `chat` 实现复杂交互逻辑 | ✅ `expect` 脚本 | | 生产环境全自动管理 | ✅ Python 封装 + systemd service | --- ## 💡 建议架构升级(推荐) 不要依赖 `chat` 完成所有工作,改为: ``` [Python 模块健康检查] → [启动 pppd] → [pppd 使用简化 chat 拨号] ``` 这样即使 `chat` 很弱,也能保证只有在模块准备好之后才尝试拨号。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值