mcpField
H
huawei-cloud-kunpeng-source-code-migrate

huawei-cloud-kunpeng-source-code-migrate

github.com/huaweicloud开发5989 次安装2 天前更新
代码仓库

关于 huawei-cloud-kunpeng-source-code-migrate

使用 DevKit CLI 评估源代码迁移到华为 Kunpeng ARM64 的适配情况,适用于评估可移植性的开发者和团队。技能指导本地或远程扫描、SSH 文件传输、报告生成及可选的 Kunpeng ECS 开通。

主要功能

  1. 01扫描所列八种编程语言
  2. 02在本地或远程服务器运行 DevKit
  3. 03SSH 执行与 SFTP 传输指导
  4. 04生成迁移评估报告
  5. 05可选开通 Kunpeng ECS

适用场景

  1. 01检查项目对 Kunpeng ARM64 的可移植性
  2. 02发现源代码迁移问题
  3. 03生成迁移评估报告
  4. 04开通远程评估服务器

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/huaweicloud/huaweicloud-skills --skill huawei-cloud-kunpeng-source-code-migrate

安装后在 Claude Code 中输入/huawei-cloud-kunpeng-source-code-migrate确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
acceptance-criteria.md
cli-installation-guide.md
devkit-cli-reference.md
devkit-installation-guide.md
iam-policies.md
migration-report-guide.md
prerequisites.md
scripts-guide.md
task-connect-server.md
task-install-devkit.md
task-local-devkit.md
task-prepare-server.md
task-scan-source-code.md
troubleshooting.md
verification-method.md
scripts/
detect_os.py
install_devkit.sh
provision_kunpeng_server.sh
ssh_client.py

详细介绍

鲲鹏源代码迁移评估

使用华为 DevKit CLI 工具分析 C/C++/ASM/Fortran/Go/Java/Python/Scala 源代码迁移到鲲鹏(ARM64)平台的可迁移性。

概述

此技能使用华为 DevKit CLI 评估源代码迁移到鲲鹏(ARM64)平台的可迁移性。它通过 SSH 连接源服务器(或在本地安装),安装 DevKit,扫描源代码并生成迁移评估报告。如果用户没有远程服务器,它可以通过 hcloud CLI 在华为云(贵阳一区)自动创建鲲鹏 ECS 实例。

架构: 本地检测 + 远程执行 + SFTP 传输。所有 SSH 操作都使用统一的 scripts/ssh_client.py(paramiko + 密码环境变量),确保跨平台一致。完整目录结构请参见下方的架构部分。

适用场景:

  • 评估源代码移植到鲲鹏 ARM 平台的可行性
  • 扫描 C/C++/ASM/Fortran/Go/Java/Python/Scala 代码中的迁移问题
  • 为软件项目生成鲲鹏迁移评估报告
  • 检查源代码与 ARM64/鲲鹏架构的兼容性
  • 在华为云上创建鲲鹏服务器以进行迁移评估

报告保存路径(固定,除非用户明确要求使用其他路径): Windows → C:\devkit-report\,Linux/macOS → /home/devkit-report/。

前置条件

CLI 版本要求:

工具版本用途
Python3.x运行 ssh_client.py、detect_os.py,以及 paramiko 依赖
paramiko最新稳定版SSH 连接(pip install paramiko)
hcloud(KooCLI)>= 3.2.0仅创建实例路径需要(步骤 3d)
DevKit CLI由 install_devkit.sh 自动安装源代码迁移扫描

身份验证:

  • SSH 凭据(现有服务器,步骤 3c): 用户必须在自己的终端中设置环境变量 KUNPENG_SERVER_HOST、KUNPENG_SERVER_PORT(默认值为 22)、KUNPENG_SERVER_USER(默认值为 root)、MIGRATE_SSH_PASS。AI 绝不能索要或复述这些值。
  • 华为云 AK/SK(创建实例路径,步骤 3d): 用户必须在自己的终端中运行 hcloud configure set --cli-region=cn-southwest-2 --cli-access-key=<your-ak> --cli-secret-key=<your-sk>。AI 绝不能索要 AK/SK。

IAM 权限(仅步骤 3d): 在华为云上创建鲲鹏 ECS 所需。最低权限集:ECS 创建/列出/删除、VPC 创建/获取/删除、Subnet、SecurityGroup、EIP 创建/删除、IMS 列表、IAM 项目列表。完整策略 JSON 和设置说明请参见 references/iam-policies.md。

操作系统支持: DevKit 本地安装支持 openEuler/CentOS/Ubuntu/Kylin/UOS/EulerOS/Debian/SUSE/NeoKylin。Windows 和 macOS 不支持本地安装,必须使用远程 Linux 服务器。

核心命令

1. 本地操作系统检测:

python <skill_dir>/scripts/detect_os.py

2. SSH 连接与远程执行(统一的 paramiko 客户端):

python <skill_dir>/scripts/ssh_client.py test                              # Test SSH connection
python <skill_dir>/scripts/ssh_client.py exec "uname -a" 30                # Execute remote command
python <skill_dir>/scripts/ssh_client.py put <local> <remote>              # SFTP upload single file
python <skill_dir>/scripts/ssh_client.py put-dir <local_dir> <remote_dir>  # SFTP upload directory
python <skill_dir>/scripts/ssh_client.py get-report                        # Download migration report

3. DevKit 安装:

bash <skill_dir>/scripts/install_devkit.sh --yes

4. 源代码迁移扫描(DevKit CLI):

# C/C++ project (with build command):
devkit porting src-mig -i /home/project -s 'c, c++, asm' -b make -c 'make all' -p gcc9.3.0 -o /tmp/devkit-report -r all

# Java/Python project (no build command):
devkit porting src-mig -i /home/project -s 'java, python' -o /tmp/devkit-report -r all

5. 鲲鹏 ECS 自动创建(仅步骤 3d):

bash <skill_dir>/scripts/provision_kunpeng_server.sh --confirm

6. hcloud CLI 安装与配置(仅步骤 3d):

curl -LO "https://cn-north-4-hdn-koocli.obs.cn-north-4.myhuaweicloud.com/cli/latest/huaweicloud-cli-linux-amd64.tar.gz"
tar -xzf huaweicloud-cli-linux-amd64.tar.gz && chmod +x hcloud && sudo mv hcloud /usr/local/bin/
hcloud configure set --cli-region=cn-southwest-2 --cli-access-key=<your-ak> --cli-secret-key=<your-sk>
hcloud version   # Expected: >= 3.2.0

参数确认

AI 必须在执行前与用户确认以下参数。

SSH 连接参数(环境变量,由用户在自己的终端中设置):

参数环境变量必填默认值描述
服务器地址KUNPENG_SERVER_HOST是-远程服务器 IP/主机名
SSH 端口KUNPENG_SERVER_PORT否22SSH 端口
SSH 用户名KUNPENG_SERVER_USER否rootSSH 登录用户
SSH 密码MIGRATE_SSH_PASS是-由 paramiko 读取,不会出现在 argv 中,每次连接后都会从 os.environ 中清除

DevKit 扫描参数(扫描前与用户确认):

参数CLI 选项必填默认值描述
源路径-i是-源代码目录(必须先询问用户)
输出目录-o是/tmp/devkit-report报告输出目录(必须已存在)
语言-s是-c, c++, asm, fortran, go, java, python, scala(小写、逗号分隔)
构建命令-c否None例如:'make all'
构建工具-b否Nonemake/cmake/automake/go/bazel/blade
编译器版本-p否None例如:gcc9.3.0
报告格式-r否allall/json/html/csv
目标操作系统-t否自动检测例如:openEuler22.03
并发数-np否1并发进程数

⚠️ AI 必须在扫描前询问用户源代码路径。未经用户确认,不得扫描或上传本地文件。

⛔ 禁止的操作

禁止的操作原因
❌ 要求用户在对话中输入 SSH 凭据凭据只能从环境变量中读取
❌ 回显/打印 SSH 密码或任何凭据防止凭据泄露
❌ 将凭据以明文形式存储在文件中凭据只能存在于环境变量中
❌ 在远程服务器上执行破坏性命令(rm -rf、format 等)防止造成不可逆的损害
❌ 未经用户确认修改源代码迁移评估仅为只读操作
❌ 安装 DevKit 范围以外的软件包只能安装 DevKit 及其依赖项
❌ 未询问用户源代码路径就开始扫描必须始终询问源代码的位置
❌ 未经用户明确确认删除任何云资源资源删除不可逆且属于高风险操作
❌ 自行执行任何 hcloud ... Delete* 命令所有删除操作都需要用户明确确认

如果用户请求执行禁止的操作,应予以拒绝并告知:“根据安全限制,此技能不允许执行[具体操作]。如有需要,请手动执行此操作。”

架构

Kunpeng Source Code Migration Assessment
├── DetectLocalOS     (Detect agent OS → determine DevKit install path)
├── PrepareServer     (Determine where to install DevKit and run scan)
│   ├── LocalInstall  (Install DevKit locally — only if OS is supported)
│   ├── RemoteInstall (Install DevKit on remote server via SSH)
│   │   ├── HasServer (Configure SSH via ssh_client.py: paramiko + password env var)
│   │   └── NoServer  (Install hcloud CLI → Provision Kunpeng ECS → Configure SSH)
│   └── NotSupported  (Local OS not supported → must use remote server)
├── ConnectServer     (SSH connect via paramiko + MIGRATE_SSH_PASS env var)
├── InstallDevKit     (Detect OS and install DevKit CLI tool)
└── ScanSourceCode    (Scan source code → generate report → save to fixed local path)
    └── ReportSave    (Windows: C:\devkit-report\ | Linux/macOS: /home/devkit-report/)

⚠️ 必须首先执行任务 0(DetectLocalOS + PrepareServer)——该任务决定整个工作流的路径。

SSH 连接策略

所有 SSH 操作均使用统一的 scripts/ssh_client.py(paramiko + 来自环境变量的密码)。不使用 ssh/scp 命令、不使用 ControlMaster、不注入密钥,也不依赖华为云区域。在 Windows、Linux 和 macOS 上的工作方式完全一致。

环境变量(由用户在自己的终端中设置;AI 不会看到其值):

变量描述默认值
KUNPENG_SERVER_HOST远程服务 IP/主机名(必需)
KUNPENG_SERVER_PORTSSH 端口22
KUNPENG_SERVER_USERSSH 用户名root
MIGRATE_SSH_PASSSSH 密码(由 paramiko 读取,不会出现在 argv 中,每次连接后都会清除)(必需)

设置环境变量(跨平台):

# Linux / macOS (current session):
export KUNPENG_SERVER_HOST='<your-server-ip>'
export KUNPENG_SERVER_PORT='22'
export KUNPENG_SERVER_USER='root'
export MIGRATE_SSH_PASS='<your-password>'

# Windows PowerShell (current session):
$env:KUNPENG_SERVER_HOST='<your-server-ip>'
$env:KUNPENG_SERVER_PORT='22'
$env:KUNPENG_SERVER_USER='root'
$env:MIGRATE_SSH_PASS='<your-password>'

# Windows (persistent, GUI): Settings > Environment Variables > User > New
# (requires IDE/terminal restart)

凭据解析优先级(匹配第一项即停止):

  1. 当前进程环境变量(export / $env:)
  2. /tmp/kunpeng_server_env.sh(Linux/macOS)或 %TEMP%/kunpeng_server_env.sh(Windows)
  3. Windows 用户级注册表(winreg)——GUI 设置的变量的回退来源
  4. 默认值

ssh_client.py 子命令:

子命令描述
test验证 SSH 连接(echo SSH_OK && uname -a)
exec "<cmd>" [timeout]在远程服务上执行 Shell 命令
put <local> <remote>通过 SFTP 上传单个文件
put-dir <local_dir> <remote_dir>通过 SFTP 递归上传目录
get <remote> <local>通过 SFTP 下载单个文件
get-dir <remote_dir> <local_dir>通过 SFTP 递归下载目录
get-report [remote_dir] [local_dir]下载 DevKit 报告(按 Code_Porting_*.{html,json,csv,txt} 筛选)。默认值:远程=/tmp/devkit-report,本地=C:\devkit-report(Win)或 /home/devkit-report(Linux)
save-env将连接信息(主机/端口/用户)保存到临时环境变量文件(不含密码)
📦 优先使用 SFTP 传输文件(Windows + MSYS2 场景下至关重要)

⚠️ 在 Windows + MSYS2/Git Bash 上,Shell 会先将命令参数中的 Unix 路径转换为 Windows 路径,Python 才能看到这些参数(例如,/tmp/foo → C:/Users/.../Temp/2/foo)。无法在 Python 内部通过 sys.argv 修复此问题。

规则:传输文件时,始终直接从 Python 使用 paramiko SFTP API,而不要使用 ssh_client.py CLI 子命令。

import os, paramiko
host = os.environ.get('KUNPENG_SERVER_HOST')
port = int(os.environ.get('KUNPENG_SERVER_PORT', '22'))
user = os.environ.get('KUNPENG_SERVER_USER', 'root')
password = os.environ.get('MIGRATE_SSH_PASS')
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(host, port=port, username=user, password=password, timeout=30)
sftp = client.open_sftp()
sftp.put(r'C:\local\install_devkit.sh', '/tmp/install_devkit.sh')
sftp.chmod('/tmp/install_devkit.sh', 0o755)
sftp.close()
client.close()

AI Agent 工作流:

  1. 文件传输 → 直接使用 paramiko SFTP API(见上文)
  2. 命令执行 → 使用 ssh_client.py exec "<cmd>"(仅限短命令)
  3. 脚本执行 → 通过 SFTP 上传,然后执行 exec "bash /tmp/script.sh"

当 ssh_client.py put/get 检测到 Windows 路径被错误转换时,会报错退出,并提示你直接使用 paramiko SFTP API。请参阅 references/scripts-guide.md#sftp-first-file-transfer 和 references/troubleshooting.md#7-msys2-path-conversion-error-windows-only。

内置脚本

AI 必须使用这些脚本,而不是手动逐步执行命令。

📄 详细指南 → references/scripts-guide.md

脚本描述
detect_os.py本地操作系统检测(输出 os_type/arch/local_install_supported)
ssh_client.py统一的跨平台 SSH 客户端(paramiko + 环境变量)。子命令:test、exec、put、put-dir、get、get-dir、get-report、save-env
install_devkit.shDevKit CLI 安装(自动检测操作系统/架构、下载、安装、验证)
provision_kunpeng_server.shKunpeng ECS 配置(华为云贵阳一区)

支持的语言

语言文件扩展名迁移注意事项
C.c、.h内联汇编、特定于平台的头文件、字节序、指针大小
C++.cpp、.cc、.cxx、.hpp与 C 相同,另外还有名称修饰、ABI 兼容性
Assembly(ASM).s、.S、.asm特定于架构的指令、寄存器、调用约定
Fortran.f、.f90、.f95、.f03编译器内置函数、MPI 库兼容性
Go.goCGO 调用、汇编文件、特定于架构的构建标签
Java.javaJNI 原生库、特定于架构的依赖项
Python.pyC 扩展(Cython、CFFI)、原生绑定
Scala.scalaJNI 调用、原生库依赖项

核心工作流

任务 0:检测本地操作系统并准备环境

这是第一个任务。 此任务会检测 Agent 的本地操作系统并确定 DevKit 安装路径。

步骤 1:检测本地操作系统:

python <skill_dir>/scripts/detect_os.py

以 key=value 键值对形式输出 os_type、os_name、os_version、arch、local_install_supported。无需外部依赖,可在所有平台上运行。

⚠️ AI 必须使用 detect_os.py,不得手动运行 uname -m、cat /etc/os-release、PowerShell 等命令。

DevKit 支持的本地操作系统列表:

操作系统最低版本备注
openEuler20.03 LTS推荐用于鲲鹏
CentOS7.6也支持 8.0
Ubuntu18.04也支持 20.04、22.04
KylinV10国产操作系统
UOS20国产操作系统
EulerOS2.8也支持 2.9
Debian10也支持 11
SUSE12
NeoKylinV7国产操作系统

Windows 和 macOS 不支持本地安装 DevKit。 DevKit 必须安装在远程 Linux 服务上。

步骤 2:询问用户要在哪里安装 DevKit

  • 如果本地操作系统受支持(LOCAL_INSTALL_SUPPORTED=true):询问“本地安装”还是“远程服务安装”
    • “本地安装” → 步骤 3a
    • “远程服务安装” → 步骤 3b
  • 如果本地操作系统不受支持:询问“现有远程 Linux 服务”还是“在华为云上创建鲲鹏服务”
    • “现有远程 Linux 服务” → 步骤 3c
    • “创建鲲鹏服务” → 步骤 3d

步骤 3a:本地安装

  1. 安装 DevKit:bash <skill_dir>/scripts/install_devkit.sh --yes
  2. 询问用户本地源代码路径
  3. 在本地运行 DevKit 扫描(无需 SSH)
  4. 跳过任务 1,使用本地路径直接继续任务 3

📄 详情 → references/task-local-devkit.md

步骤 3b:远程安装——询问远程服务

询问“现有远程 Linux 服务”还是“创建鲲鹏服务” → 步骤 3c 或 3d。

步骤 3c:用户已有远程服务——配置 SSH

用户在终端中设置 KUNPENG_SERVER_HOST/PORT/USER 和 MIGRATE_SSH_PASS(AI 永远不会看到这些值)。验证:

python <skill_dir>/scripts/ssh_client.py test

⚠️ 不依赖区域: 远程服务可以位于任何云端或本地环境。SSH 无需使用 hcloud CLI。

验证成功后,继续任务 1。

步骤 3d:用户没有服务——在华为云上创建鲲鹏 ECS

⛔ 关键:AI 必须使用 provision_kunpeng_server.sh 创建所有云资源。绝不能单独手动调用 hcloud API。

  1. 检查 hcloud CLI 是否已安装并完成身份验证
  2. 与用户确认创建资源(提供规格和预估费用)
  3. 执行:bash <skill_dir>/scripts/provision_kunpeng_server.sh --confirm
    • 创建 VPC → 子网 → 安全组 + SSH 规则 → EIP → ECS
    • 生成随机 root 密码,并以 MIGRATE_SSH_PASS 的名称保存到 /tmp/kunpeng_server_env.sh(chmod 600)
  4. 加载环境变量:source /tmp/kunpeng_server_env.sh
  5. 验证 SSH:python <skill_dir>/scripts/ssh_client.py test
  6. 继续任务 1
  7. 扫描完成后(任务 3):提醒清理资源

📄 详情 → references/task-prepare-server.md

任务 1:通过 SSH 连接到源代码服务

使用 python <skill_dir>/scripts/ssh_client.py test 验证连接。之后的所有操作均使用 ssh_client.py 子命令(参见上文的 SSH 连接策略)。

📄 详情 → references/task-connect-server.md

任务 2:安装 DevKit CLI 工具

使用 scripts/install_devkit.sh 在目标机器上安装 DevKit CLI。该脚本会自动检测操作系统和架构、安装依赖项、下载正确的软件包并验证安装。

⚠️ AI 必须使用 scripts/install_devkit.sh,而不是手动逐步运行命令。

📄 详情 → references/task-install-devkit.md

任务 3:扫描源代码并生成迁移报告

⚠️ 关键规则:

  1. 扫描前必须询问用户源代码路径。 未经用户确认,不得扫描。
  2. 未经许可,不得扫描本地源代码。
  3. 未经许可,不得将本地文件上传到远程服务。
  4. 可以列出远程服务上可用的源代码目录,以帮助用户进行选择。

报告保存路径(本地下载):

Agent 操作系统本地报告保存路径
WindowsC:\devkit-report
Linux / macOS/home/devkit-report

如果目录不存在,技能必须创建该目录。报告文件(HTML、JSON、CSV)必须直接保存在 <save_path>/ 下(不得创建 project_name 子目录)。除非用户明确要求其他位置,否则此路径固定不变。

下载报告:

# Download with defaults (remote=/tmp/devkit-report, local=C:\devkit-report on Windows):
python <skill_dir>/scripts/ssh_client.py get-report

# Or specify custom paths:
python <skill_dir>/scripts/ssh_client.py get-report /tmp/devkit-report /home/devkit-report

⚠️ AI 必须使用 get-report(或 paramiko SFTP API)下载报告。 不得使用 exec 配合 base64/cat 下载文件。

📄 详情 → references/task-scan-source-code.md


DevKit CLI 命令参考

主要工具是 Kunpeng DevKit CLI(devkit 命令)。

源代码迁移命令:

devkit porting src-mig -i <source_path> -o <output_path> -s '<language_list>' [options]

必需参数:

参数描述示例
-i源代码目录路径/home/user/project
-o报告输出目录(必须存在)/tmp/devkit-report
-s源代码语言(可用逗号分隔多个语言)'c, c++, asm'

可选参数:

参数描述默认值示例
-c构建/编译命令None'make all'
-b构建工具Nonemake、cmake、automake、go、bazel、blade
-p编译器版本Nonegcc9.3.0
-fFortran 编译器版本Nonegfortran9
-t目标操作系统自动检测openEuler22.03
-r报告格式allall、json、html、csv
-l日志级别1(INFO)0(DEBUG)、1(INFO)、2(WARN)、3(ERROR)
-np并发进程数14
--ignore忽略规则配置文件内置/path/to/ignore_rules.json
--ignore-path要忽略的源代码路径None/path/to/exclude
--kp-compatibilityKunpeng 跨代兼容性检查关闭(标志)

语言值(-s): c、c++、asm、fortran、go、java、python、scala(小写,以逗号分隔)

编译器版本(-p): gcc4.8.5、gcc7.3.0、gcc9.3.0、gcc10.3.0、gcc12.3.0、bisheng compiler3.0.0、bisheng compiler4.0.0、gcc for openeuler3.0.3 等。

扫描示例:

# C/C++ project with make build:
devkit porting src-mig -i /home/project -s 'c, c++, asm' -b make -c 'make all' -p gcc9.3.0 -o /tmp/report -r all

# Java/Python project (interpreted, no build command):
devkit porting src-mig -i /home/project -s 'java, python' -o /tmp/report -r all

⚠️ 必须从安装目录运行 devkit 二进制文件(例如,cd /usr/local/devkit && ./devkit),或者确保该目录位于 PATH 中。输出目录(-o)必须已存在。

📄 完整 CLI 参考 → references/devkit-cli-reference.md


参考资料

文档说明
scripts-guide.md内置脚本:SSH 客户端、资源配置、DevKit 安装
prerequisites.md前置条件和身份验证
iam-policies.mdECS 资源配置的 IAM 权限策略(步骤 3d)
cli-installation-guide.mdhcloud(KooCLI)安装指南
task-prepare-server.md任务 0:检测 OS,准备环境
task-local-devkit.md任务 0a:本地安装 DevKit
task-connect-server.md任务 1:通过 SSH 连接到服务
task-install-devkit.md任务 2:安装 DevKit CLI
task-scan-source-code.md任务 3:扫描源代码
devkit-cli-reference.mdDevKit CLI 命令参考
devkit-installation-guide.mdDevKit 安装指南
migration-report-guide.md迁移报告解读
troubleshooting.md故障排除和常见问题
acceptance-criteria.md验收标准
verification-method.md验证方法

资源清理提醒

⚠️ 扫描完成并呈现报告后,AI 必须提醒用户清理已配置的资源(仅适用于步骤 3d 资源配置路径)。只能以文本形式呈现,绝不执行删除命令。

### 🧹 Resource Cleanup Reminder

The following resources were created during this assessment and incur ongoing charges:

| Resource Type | Resource ID | Details |
|---------------|-------------|---------|
| ECS Instance  | <id>        | <IP>, <flavor> |
| VPC           | <id>        | <name> |
| Subnet        | <id>        | <name> |
| EIP           | <id>        | <IP> |
| Security Group| <id>        | <name> |

To delete these resources, execute the following commands manually:

  [delete commands here]

⚠️ WARNING: Deletion is IRREVERSIBLE. Verify resource IDs before executing.
⚠️ AI will NOT execute these commands. Please run them manually.

对于步骤 3c(现有服务)和步骤 3a(本地安装): 无需提醒清理,因为用户提供了自己的服务或在本地安装了 DevKit。

评论

支持 Markdown