☰
国产Linux部署OpenClaw:UOS与麒麟Kylin踩坑实录及关键要点
2026/10/5 7:12:53 网站建设 项目流程

说实话,给UOS、Kylin这类国产Linux发行版装OpenClaw,跟Ubuntu完全不是同一个难度级别。我在统信UOS桌面版和银河麒麟V10上前后折腾了一个多星期,中间重装过三次系统、被Docker坑到怀疑人生、还差点因为磁盘满了把整个环境搞崩。这篇就专门写我在UOS、Kylin、Ubuntu三个系统上安装OpenClaw和OpenClaw-CN的真实踩坑过程,以及最后沉淀下来的关键要点,打算在这类系统上部署的朋友可以直接照着省时间。

我把OpenClaw先简单定位一下:它本质上是个人AI代理框架,负责跟大模型对话、调用本地工具、执行自动化任务,有点像一个可以自主干活的“数字员工”。OpenClaw-CN则是中文社区维护的适配版,主要做了界面汉化、国内模型服务对接和国产系统兼容优化。正因为目标环境复杂,装之前必须搞清楚背后的依赖逻辑,否则官方文档里一句话,在UOS上就是三个小时的坑。

1. 动手之前,先搞清三件事

1.1 先说清楚OpenClaw是什么形态

很多人上来就问“OpenClaw怎么安装”,但你得先明白它不是一个单文件程序,而是一整套运行环境。OpenClaw至少包含这几个部分:主程序本体(Node.js写的)、运行时依赖(Docker、可选Ollama)、模型服务(远程API或者本地模型)、以及一个可选的Windows Companion客户端。

这个形态决定了它的安装复杂度。Node.js负责主程序逻辑,Docker负责隔离执行环境,Ollama负责在本地跑模型,三者之间通过HTTP或者Socket通信。用生活类比来说,OpenClaw是一个总调度台,Docker是它手下干活的外包团队,Ollama是它咨询的专家库。任何一个环节没接通,整个系统就跑不起来。

理解这一点特别重要,因为在国产系统上,你踩的坑往往不是OpenClaw本身,而是它的底座:Node版本不对、Docker起不来、Ollama模型目录没空间,每个都能让安装功亏一篑。

1.2 同样是Linux,为什么国产系统更折腾

同样都是Linux内核,UOS、Kylin跟Ubuntu的最大区别在于生态适配和默认软件源。UOS桌面版基于Debian,银河麒麟V10系列则很特殊——桌面版基于Debian系,高级服务器版(比如代号Halberd的Kylin Linux Advanced Server V10)又跟CentOS/RHEL系血缘更近。

这个出身问题直接决定了包管理器的差异:UOS用apt,Kylin服务器版用yum/dnf。很多教程只写Ubuntu的apt命令,在Kylin服务器版上执行直接报错“command not found”。而更麻烦的是,国产系统的默认软件源往往滞后,软件源里的Node.js可能还是10.x甚至8.x,Docker也可能没有官方源可以直接用,导致我一开始甚至装不上最基本的环境。

另外国产系统的安全策略更严格,默认对root账户做了限制,UOS甚至会把root锁定。权限问题、目录挂载问题、内核模块加载问题,全都会在安装过程中冒出来。可以说,在这类系统上折腾OpenClaw,基本功不是OpenClaw语法,而是Linux系统运维。

1.3 安装前必须确认的硬件与系统条件

我第一台机器翻车的原因就是硬件不达标。OpenClaw本体占内存不高,但Docker容器一跑,再加上本地Ollama模型加载,8GB内存瞬间见底。如果你打算用7B以上的模型做本地推理,我建议内存至少16GB,否则模型加载到一半系统直接OOM。

磁盘空间更要注意,OpenClaw安装依赖、Docker镜像、模型文件三块加起来非常可观。我实测下来,一个完整的OpenClaw环境加7B模型,大概需要25GB到30GB空间。尤其要确认根目录和/var、/home是不是同一个分区,UOS默认安装往往把分区划得很紧,后面模型下载到一半系统盘满了,直接连登录界面都进不去。

网络条件也要提前确认。虽然OpenClaw官方源在Ubuntu上基本畅通,但国产系统默认源替换成国内镜像源之后,有些包会被源同步延迟影响,出现版本对不上或者校验失败的问题。我的建议是:装之前先把apt源或者yum源切成你所在网络环境下最稳定的国内镜像源,能省很多后期排查时间。

2. 环境准备:Node.js、Docker与Ollama这套组合拳

2.1 Node.js版本选择:不是越新越好

OpenClaw官方要求Node.js 18以上,但实际部署经验告诉我,不是版本越新越省心。我在Ubuntu 22.04上用apt直接装的Node是12.x,跑OpenClaw直接报“unsupported engine”;后来在UOS上我图省事从官网下了个Node 22,结果某些原生依赖编译又出了问题。

在UOS和Kylin上,最稳妥的Node安装方式是使用nvm管理版本。不要用系统的apt/yum装,版本太老;也不要直接下载官网二进制包覆盖系统路径,因为国产系统的动态库路径经常跟官方二进制默认路径不一致,会出现GLIBC版本对不上的问题。

# 在UOS/Kylin/Ubuntu上都推荐用nvm安装Node curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash source ~/.bashrc nvm install 20 nvm use 20 node -v # 确认版本在20.x

为什么推荐Node 20而不是最新版?因为OpenClaw生态里的部分原生依赖,比如某些加解密模块和文件监控模块,对Node版本有明确的兼容范围。Node 20是我的实测稳定点,Node 22在某些国产内核上会触发奇怪的文件监听错误,Node 18又缺一些新版特性。这个版本选择问题看着小,但一旦装完才发现版本不对,是所有坑里最耗时的。

2.2 Docker在UOS和Kylin上的三种部署方式

Docker是OpenClaw运行链路里最容易出问题的一环,在Ubuntu上一条curl命令就能装好,在UOS和Kylin上则是重灾区。

第一种方式是官方源安装,适用于Ubuntu和内核接近原版Debian的UOS版本:

curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh systemctl enable docker systemctl start docker

第二种方式是国内镜像源安装,适用于官方源连接不稳定的时候。就是把get-docker.sh里的源地址替换成你所在网络环境下可用的镜像地址,本质不变,换的是源。

第三种方式最麻烦也最常用:在银河麒麟服务器版上,官方源通常没有对应的Docker包,这时需要手动下载Docker二进制压缩包,放到/usr/bin目录,再手动写systemd服务文件。步骤不复杂,但每一步都不直观。我最终在Kylin V10服务器版上就是靠这种方式装起来了,手动管理Docker会让你对systemd unit文件的理解上一个台阶。

装完之后务必跑一下验证,因为很多坑在启动之前是看不出来的:

docker version # 看Client和Server都在不在 docker run hello-world # 实测能否真正运行容器

如果docker run直接报Cannot connect to the Docker daemon,说明Docker服务没有正常启动。这通常不是装的问题,而是systemd服务文件里对挂载点的依赖设置不对,或者/var/lib/docker所在分区挂载晚了。查一下systemctl status docker和journalctl -u docker的输出,基本能定位。

2.3 用Ollama做本地模型服务的关键配置

如果你打算完全走本地模型,不依赖云端API,Ollama是现在最省心的选择。但Ollama在国产系统上也有几个隐藏坑。

首先是模型存储路径。默认Ollama会把模型文件放在/usr/share/ollama/.ollama/models或者在root用户下放在/root/.ollama/models,这些都是系统分区。我在UOS上就吃过亏:模型下载到一半提示磁盘空间不足,结果一查根分区已经满了。解决办法是把模型目录迁移到独立数据分区:

# 先创建新目录并移动已有模型 sudo mkdir -p /data/ollama/models sudo chown -R $(whoami) /data/ollama # 设置环境变量 export OLLAMA_MODELS=/data/ollama/models export OLLAMA_HOST=127.0.0.1:11434

其次是服务管理方式。在Ubuntu上Ollama装完自动注册systemd服务,可以直接systemctl stop ollama。但在UOS上,我遇到过服务进程虽然显示active,实际端口却根本没监听的诡异情况,最终只能通过环境变量配置文件/etc/systemd/system/ollama.service.d/override.conf里强制指定环境变量才修好:

[Service] Environment="OLLAMA_HOST=127.0.0.1:11434" Environment="OLLAMA_MODELS=/data/ollama/models"

OpenClaw对接Ollama的逻辑很直接:Ollama监听在11434端口,OpenClaw通过HTTP请求调用/api/chat接口。但OpenClaw的模型配置里要注意模型名称必须跟Ollama里pull下来的完全一致,大小写、冒号后面的标签都不能错。我试过在OpenClaw里配置qwen2.5:7b,本地Ollama拉的是qwen2.5:7b-instruct,表面看就差一个后缀,结果死活连不上,报错信息还是含糊其辞的“model not found”。

3. OpenClaw主程序安装与核心配置

3.1 OpenClaw本体安装流程

OpenClaw本体安装,官方推荐方式是通过npm全局安装CLI工具,然后用CLI初始化项目。在Ubuntu上一切顺利,在UOS和Kylin上则是另一回事。

# 安装OpenClaw CLI npm install -g openclaw # 验证安装 openclaw --version # 初始化项目目录 mkdir ~/my-claw && cd ~/my-claw openclaw init

我强烈建议先跑一个空项目确认CLI能正常工作,再考虑对接模型。因为OpenClaw初始化时会自动创建配置文件、示例技能(skills)和运行时目录,如果这一步就报错,一般跟Node版本或npm权限有关。

npm全局安装目录的权限是其中一个经典坑。在UOS上默认npm全局目录可能是/usr/lib/node_modules,普通用户没有写权限,需要手动指定npm全局目录到用户目录:

mkdir -p ~/.npm-global npm config set prefix '~/.npm-global' export PATH=~/.npm-global/bin:$PATH

这个配置完成后记得写进~/.bashrc,否则每次开新终端都要重新设置。我见过不少人在UOS上卡到这里,npm install报一堆EACCES错误,以为是权限问题猛敲sudo,结果环境变量没配,重启之后照样找不到命令。

3.2 OpenClaw-CN中文版的差异与适配

OpenClaw-CN跟原版的最大差异不在于功能,而在于安装路径和依赖本地化。CN版针对国内网络环境和国产系统做了适配,默认源是国内镜像,默认模型服务也接入了国内常用模型平台。

安装OpenClaw-CN推荐使用国内npm镜像源:

npm config set registry https://registry.npmmirror.com npm install -g openclaw-cn

注意,OpenClaw-CN安装后命令名可能是openclaw,也可能是openclaw-cn,取决于社区版本的定义。我在实际部署中发现,两个版本最好不要共存,因为它们的配置文件格式有细微差异,共存会导致环境变量和全局配置文件互相干扰,报一些非常奇怪的错误。

还有一个很多人忽略的问题:OpenClaw-CN对Python依赖的处理。CN版为了适配国内工具链,在初始化过程中可能会调用系统Python做二次校验,如果系统没有安装python3-venv,初始化就会在中途静默失败。日志里只显示“Initialization incomplete”,没有任何明确报错。我在Kylin服务器版上踩的就是这个,后来手动装好Python虚拟环境组件之后就一路顺畅了。

3.3 模型服务对接与“无法安全验证sl2环境”的根因

热词里那个“OpenClaw无法安全验证sl2环境”我一开始也很懵,后来对照日志才搞清楚。这个报错出现在OpenClaw初始化环境检查阶段,SL2指的不是某个神秘协议,而是OpenClaw对运行环境里动态链接库和Node原生模块做完整性校验时的一个代号。

这个校验的目的是防止运行时依赖被篡改,但在国产系统上频繁误报,根本原因是系统glibc版本、OpenSSL版本和目录结构跟OpenClaw官方校验规则不匹配。比如UOS自带OpenSSL版本是1.1.1,OpenClaw内置校验规则里期望的是3.x,于是校验失败,直接拒绝往下走。

解决方式有两个方向。第一个方向是让环境尽量贴近预期:用nvm自带的Node版本,因为它的预编译二进制跟官方环境最一致;再检查一下系统OpenSSL版本,如果太低就通过apt升级openssl和libssl-dev。第二个方向是绕开校验:OpenClaw和OpenClaw-CN在环境变量里都预留了跳过校验的开关,具体名称随版本不同,可以通过openclaw doctor或者openclaw diagnose命令查看当前环境下哪些校验项没有通过。我实测下来,在UOS上先升级OpenSSL再跳过软硬件指纹校验,效果最稳定。

这个问题的根源其实是“官方文档面向Ubuntu标准环境,而国产系统总是差那么一点点”。遇到这类问题不要慌,先跑openclaw diagnose把环境检测输出拿到手,对照着一项项补,比盲试命令高效很多。

3.4 Windows Companion跨端配置的思路

Windows Companion是OpenClaw提供的桌面端伴侣程序,在Windows上跑一个图形界面,连接Linux服务器上的OpenClaw核心,方便在桌面环境里管理对话和任务。很多人在UOS上折腾Companion,方向上就错了——Companion默认是Windows客户端,Linux端只需要作为服务端开放连接端口。

配置核心就两个东西:地址和令牌。在Linux端的OpenClaw配置文件里,找到网络监听相关配置,把监听地址设成局域网IP或者127.0.0.1,看你的使用场景。如果只在同一台机器上用Companion,直接127.0.0.1就行;如果想局域网内远程访问,就要监听0.0.0.0并配好防火墙规则。

令牌方面,OpenClaw在首次初始化时会生成一个随机令牌,这个令牌在Windows Companion里填入的位置要跟OpenClaw版本完全对应。我在Kylin上遇到过一个情况:Linux端OpenClaw升级了令牌加密方式,Windows端Companion还是老版本,结果连接时一直报认证失败,日志里也看不出所以然。后来把两边都升级到最新版本就正常了。所以跨端配置遇到问题,第一个要检查的永远是版本一致性。

4. 踩坑实录:从装不上到跑不动的问题全记录

4.1 Docker起不来引发的连锁反应

我第一台UOS测试机,装完Docker之后systemctl start docker一直失败。docker version里Client正常显示,Server位置直接报“Cannot connect”。翻journalctl -u docker日志,发现是iptables相关的问题:UOS默认用的iptables版本跟Docker期望的iptables-nft不兼容,Docker启动时尝试创建nat规则失败,整个守护进程直接退出。

这个问题的根源是内核netfilter架构版本跟用户态iptables工具不匹配。解决方式有两种:第一种是给Docker换成iptables-legacy模式:

sudo update-alternatives --set iptables /usr/sbin/iptables-legacy sudo update-alternatives --set ip6tables /usr/sbin/ip6tables-legacy sudo systemctl restart docker

第二种是彻底放弃本机iptables管理,让Docker直接操作nftables,但这需要Docker版本比较新。我建议先试第一种,大多数UOS 20和Kylin桌面系统都能救回来。

Docker起不来的连锁反应是:OpenClaw在初始化时检测不到Docker,会跳过所有容器化技能的配置,导致后面很多自动化功能处于“半残”状态。你在配置里怎么填都填不进去,因为检测逻辑直接判定Docker不可用。所以Docker必须要在OpenClaw安装前解决,否则后期排查成本翻倍。

4.2 中文输入法与终端操作的细节坑

这一节看似跟OpenClaw无关,但实际体验影响巨大。在UOS上安装完系统,默认中文输入法在终端里经常不工作,shell里输命令输到一半无法切换中文,非常抓狂。而且UOS自带的输入法工具跟Electron这个技术栈的兼容性很差,OpenClaw的管理界面里输入中文直接没有候选词。

Ubuntu上常用的解决办法是安装fcitx5或者搜狗输入法,在UOS和Kylin上也适用。核心是要设置三个环境变量,否则Qt和GTK程序都识别不到输入法:

export GTK_IM_MODULE=fcitx export QT_IM_MODULE=fcitx export XMODIFIERS=@im=fcitx

这三个变量必须写进~/.xprofile或者~/.pam_environment,只写进~/.bashrc是没用的,因为图形界面的启动进程不会读取bashrc。我一开始就是把变量写进了.bashrc,重启之后输入法依然不生效,还以为是输入法软件的问题,白白折腾了一个下午。

另外,在终端里跑OpenClaw管理命令时,建议直接用英文环境,避免终端渲染中文乱码的问题。可以给OpenClaw命令前面临时加LANG=en_US.UTF-8,或者干脆把系统locale保持英文,需要中文界面时候再切换。

4.3 UOS用户密码锁定与root账户问题

这个坑我必须单独写出来,因为太有代表性了。我在UOS上连续输错了几次sudo密码,系统直接把当前用户锁了,提示“密码错误次数过多,锁定1440分钟”。整整24小时不能登录,当时项目进度全部停摆,人直接崩溃。

UOS的安全机制比Ubuntu激进得多,默认开启了pam_tally2账户锁定策略,输错5次就锁24小时。解除方法需要另一管理员账户,或者用救援模式进入系统重置锁定计数:

# 在另一个管理员用户下执行 sudo pam_tally2 --user=你的用户名 --reset

更麻烦的是UOS默认把root账户锁定了,默认情况下根本没有有效的root口令,你su -是切换不过去的。很多人不知道这一点,上来就想直接换root用户操作,结果永远提示“su: Authentication failure”。我的建议是日常操作坚决不碰root,所有提权操作都通过sudo,需要临时root身份时用sudo -i而不是su -。

如果连当前用户都是唯一管理员且被锁了,就只能重启进单用户模式重置。在GRUB启动菜单里进恢复模式后,可以先挂载根文件系统为读写模式,再把锁定计数清零。这个操作要小心,恢复模式下系统配置改动容易出问题,能找另一台机器远程协助就尽量远程。

4.4 磁盘空间告急:日志和模型文件该清就清

磁盘满的问题在UOS上非常常见,因为默认分区方案不会给根分区预留太多空间。我遇到的情况是/var/log/journal日志文件涨到了好几个GB,加上Ollama模型文件、Docker镜像,根分区一下就到了95%以上。

第一步先定位大文件:

sudo du -h --max-depth=1 / 2>/dev/null | sort -hr | head -20

这个命令能帮你一眼看出哪个目录最占空间。我建议重点关注三个位置:/var/log/journal(系统日志)、/var/lib/docker(容器与镜像)、/root/.ollama/models(模型文件)。前两个可以直接清理,第三个要迁移不要删除,否则模型要重新下载。

清理journal日志的命令是:

sudo journalctl --vacuum-time=7d # 保留7天的日志 sudo journalctl --vacuum-size=1G # 日志总量压到1GB以下

清理Docker悬空资源:

docker system prune -f

同时我强烈建议设置journal日志上限,否则过几天又满了。修改/etc/systemd/journald.conf里的SystemMaxUse=512M,重启systemd-journald服务生效。这一步很多国产系统老手都会忽略,直到磁盘再次告警才回头改。

4.5 编译链不完整:gcc与显卡驱动的历史遗留问题

OpenClaw部分依赖在首次安装时会触发原生模块编译,这要求系统具备完整的编译工具链。Ubuntu上build-essential基本预装,UOS桌面版则不一定。我遇到过npm install期间报gyp ERR! configure error,一看就是缺python3和make。

解决方式很简单,UOS下安装编译依赖:

sudo apt install -y build-essential python3 python3-dev make g++ git

Kylin服务器版下用yum对应:

sudo yum groupinstall -y "Development Tools" sudo yum install -y python3-devel

显卡驱动是另一个坑。Kylin V10在部分华为整机上预装的是系统定制的显卡驱动,版本比较特殊,如果你手痒用通用驱动覆盖安装,轻则图形界面起不来,重则直接进tty1看不到桌面。UOS上也有过显卡驱动卸载不掉的情况,本质是驱动包跟内核模块版本绑定太深。

我的经验是:如果OpenClaw不需要跑图形推理任务,千万不要动现有显卡驱动。一旦动了,进系统黑屏只能在tty界面操作,重装驱动又因为X server还占着显卡资源装不上,最后只能进恢复模式卸载nvidia-*相关包再重装。这个坑耗时长且高风险,非必要不碰。

5. 常见问题速查表与最后的实操建议

5.1 高频问题速查表

我把这一趟折腾下来的典型问题整理成一张表,方便你遇到问题时直接定位,节约排查时间。

问题现象根本原因解决手段
npm install 报 EACCESnpm全局目录无权限设置npm config set prefix '~/.npm-global'并更新PATH
docker run连接不上daemoniptables版本不匹配切换iptables-legacy模式,重启docker
OpenClaw初始化报“无法安全验证”glibc/OpenSSL版本与预期不符升级openssl或用nvm重装Node,必要时跳过校验项
系统提示密码锁定1440分钟pam_tally2账户锁定策略触发另一管理员执行pam_tally2 --user=用户名 --reset
模型下载一半提示磁盘满模型默认在系统分区设置OLLAMA_MODELS到独立分区
中文输入法在终端不生效IM模块环境变量没配置设置GTK_IM_MODULE等三个变量到xprofile
代码编译报gyp错误缺少构建工具链安装build-essential/python3-dev
OpenClaw-CN初始化静默失败缺少python3-venv安装python3-venv并重试
Kylin服务器版找不到docker安装包软件源无对应包手动下载二进制包配置systemd服务
Windows Companion连不上服务端令牌与客户端版本不匹配两方同时升级到最新版本

5.2 给后来者的几条实在建议

第一条建议:先在Ubuntu虚拟机上完整跑通OpenClaw流程,再到UOS或Kylin真机上部署。Ubuntu环境问题最少,是用来学OpenClaw本身特性的最佳环境。如果你在Ubuntu上都装不顺,那问题大概率在OpenClaw使用层面,不在系统层面;反过来,如果Ubuntu上一切正常而国产系统上出问题,你就能确定是系统适配问题,排查方向清晰很多。

第二条建议:国产系统上优先使用OpenClaw-CN中文版。不是因为它功能更强,而是它的适配工作和排查文档更贴近实际环境。原版OpenClaw的Issues和讨论基本面向标准Ubuntu环境,你在UOS上踩的坑很难找到现成答案;CN版社区里国产系统的用户群体更大,很多坑早就有人填过了。

第三条建议:所有环境配置改动都写成脚本保留下来。我在每台机器上部署都会随手记一份部署笔记,包括apt源替换、Node版本切换、Docker异常处理这些操作。因为国产发行版升级一次之后,之前能用的方案可能就失效了。有笔记在手,至少能快速恢复到一个已知可用状态,不至于每次都要从头摸索。

最后一条:分区规划永远要前置。装系统时优先考虑给/分区、/var分区和/home分区单独分配空间,尤其是/var,Docker和日志都压在上面。宁可其他分区小一点,也不能让根分区在跑模型时爆掉。

我在实际部署中的几点体会

这一套环境折腾下来,我最深的感受是:OpenClaw本身的安装并不难,难的是它在国产Linux上引发的连锁反应。一次看似简单的依赖缺失,可能追根溯源要翻到系统镜像的版本选择上。如果你也准备在国产Linux上折腾这类AI框架,心态上要做好准备——这不是一条命令能解决的题,而是一套环境适配工程。

我最后反而觉得,在UOS和Kylin上装OpenClaw这个经历本身比OpenClaw运行起来更有价值。它逼迫你把Node、Docker、Ollama、systemd、pam安全策略这些底层机制全部摸了一遍,这些知识在以后部署任何服务都会用到。而且经历过一次完整的国产Linux下AI环境搭建,你对系统分区规划、日志管理、依赖判断都会有实打实的肌肉记忆。

如果后续有机会,我打算把这一套环境跑通后的OpenClaw技能配置也整理出来,比如怎么把国产模型通过Ollama稳定接入、怎么编排自动化任务、以及怎么在麒麟系统的ARM架构机器上复现这个流程。希望这篇踩坑实录能帮你少走几个弯路,把宝贵的精力留在真正的业务上。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询