Imported from huaweicloud/huaweicloud-skills (
skills/computing/kunpeng/huawei-cloud-kunpeng-source-code-migrate/SKILL.md). Install upstream withnpx skills add huaweicloud/huaweicloud-skills --skill huawei-cloud-kunpeng-source-code-migrate. Copyright stays with the author.
Kunpeng Source Code Migration Assessment
Analyze the migrability of C/C++/ASM/Fortran/Go/Java/Python/Scala source code to Kunpeng (ARM64) platform using Huawei DevKit CLI tool.
Overview
This skill assesses source code migrability to the Kunpeng (ARM64) platform using Huawei DevKit CLI. It connects to a source server via SSH (or installs locally), installs DevKit, scans source code, and generates a migration assessment report. If the user has no remote server, it can automatically provision a Kunpeng ECS instance on Huawei Cloud (Guiyang Region 1) via hcloud CLI.
⚠️ Analysis depth varies by language (DevKit limitation): C/C++/ASM = deep analysis; Fortran = shallow; Go/Java/Python/Scala = file-level stats only (architecture-dependent code like JNI/CGo/ctypes/unsafe will NOT be detected — manual review required). See Supported Languages for details.
Architecture: Local detection + remote execution + SFTP transfer. All SSH operations use the unified scripts/ssh_client.py (paramiko + password env var), cross-platform consistent.
Applicable scenarios: Assess source code portability to Kunpeng ARM; scan C/C++/ASM/Fortran/Go/Java/Python/Scala code; generate a migration report; check ARM64 compatibility; provision a Kunpeng server on Huawei Cloud.
Report save path: Windows → C:\devkit-report\, Linux/macOS → ~/devkit-report/ (resolved from current user's home, NOT hardcoded /home/).
Prerequisites
CLI version requirements:
| Tool | Version | Purpose |
|---|---|---|
| Python | 3.x | Run ssh_client.py, detect_os.py, paramiko dependency |
| paramiko | latest stable | SSH connection (pip install paramiko) |
| hcloud (KooCLI) | >= 3.2.0 | Only needed for provisioning path (Step 3d) |
| DevKit CLI | auto-installed by install_devkit.sh |
Source code migration scan |
Authentication:
- Root access required (default install path):
install_devkit.shinstalls to/usr/localand creates a/usr/local/bin/devkitsymlink, which requires root. Non-root users MUST use the--no-sudoflag (installs to$HOME/.local/devkit) and add DevKit to PATH manually:export PATH=$HOME/.local/devkit:$PATH. If system dependencies (python3, pip3, curl) are missing and--no-sudois set, the script will error out — install them first or run as root. - SSH user: The default SSH user is
root(seeKUNPENG_SERVER_USER). Non-root SSH users are supported, but the remote install path and report download path will be under that user's home directory (see--no-sudoabove). - SSH credentials (existing server, Step 3c): User must set env vars
KUNPENG_SERVER_HOST,KUNPENG_SERVER_PORT(default 22),KUNPENG_SERVER_USER(default root),MIGRATE_SSH_PASSin their own terminal. AI must NEVER ask for or echo these values. - Huawei Cloud AK/SK (provisioning path, Step 3d): User must run
hcloud configure set --cli-region=cn-southwest-2 --cli-access-key=<your-ak> --cli-secret-key=<your-sk>in their own terminal. AI must NEVER ask for AK/SK.
IAM permissions (Step 3d only): Required for provisioning a Kunpeng ECS on Huawei Cloud. Minimum set: ECS create/list/delete, VPC create/get/delete, Subnet, SecurityGroup, EIP create/delete, IMS list, IAM projects list. See references/iam-policies.md for the full policy JSON and setup instructions.
OS support: DevKit local install supports openEuler/CentOS/Ubuntu/Kylin/UOS/EulerOS/Debian/SUSE/NeoKylin. Windows and macOS are NOT supported for local install — must use a remote Linux server.
Core Commands
1. Local OS detection:
python <skill_dir>/scripts/detect_os.py
2. SSH connection & remote execution (unified paramiko client):
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 installation:
bash <skill_dir>/scripts/install_devkit.sh --yes
4. Source code migration scan (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. Kunpeng ECS auto-provisioning (Step 3d only):
bash <skill_dir>/scripts/provision_kunpeng_server.sh --confirm
6. hcloud CLI install & configure (Step 3d only):
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
Parameter Confirmation
AI must confirm the following parameters with the user before execution.
SSH connection parameters (env vars, set by user in their own terminal):
| Parameter | Env Var | Required | Default | Description |
|---|---|---|---|---|
| Server address | KUNPENG_SERVER_HOST |
Yes | - | Remote server IP/hostname |
| SSH port | KUNPENG_SERVER_PORT |
No | 22 |
SSH port |
| SSH username | KUNPENG_SERVER_USER |
No | root |
SSH login user |
| SSH password | MIGRATE_SSH_PASS |
Yes | - | Read by paramiko, never in argv, wiped from os.environ after each connection |
DevKit scan parameters (confirm with user before scanning):
| Parameter | CLI option | Required | Default | Description |
|---|---|---|---|---|
| Source path | -i |
Yes | - | Source code directory (MUST ask user first) |
| Output dir | -o |
Yes | /tmp/devkit-report |
Report output dir (must exist) |
| Languages | -s |
Yes | - | c, c++, asm, fortran, go, java, python, scala (lowercase, comma-separated) |
| Build command | -c |
No | None | e.g. 'make all' |
| Build tool | -b |
No | None | make/cmake/automake/go/bazel/blade |
| Compiler version | -p |
No | None | e.g. gcc9.3.0 |
| Report format | -r |
No | all |
all/json/html/csv |
| Target OS | -t |
No | auto-detect | e.g. openEuler22.03 |
| Concurrency | -np |
No | 1 |
Concurrent processes |
⚠️ AI MUST ask the user for the source code path before scanning. Do NOT scan or upload local files without user confirmation.
⛔ Prohibited Operations
| Prohibited Operation | Reason |
|---|---|
| ❌ Ask user to input SSH credentials in conversation | Credentials must only be read from environment variables |
| ❌ Echo/print SSH password or any credentials | Prevent credential leakage |
| ❌ Store credentials in plain text files | Credentials must only exist in environment variables |
| ❌ Execute destructive commands on remote server (rm -rf, format, etc.) | Prevent irreversible damage |
| ❌ Modify source code without user confirmation | Migration assessment is read-only |
| ❌ Install packages outside DevKit scope | Only DevKit and its dependencies may be installed |
| ❌ Scan without asking the user for the source code path | Must always ask where the source code is |
| ❌ Delete any cloud resources without explicit user confirmation | Resource deletion is irreversible and HIGH-RISK |
❌ Execute any hcloud ... Delete* command autonomously |
All delete operations require explicit user confirmation |
🚫 Not Supported (Capability Boundary)
The following operations are outside this skill's scope. If a user requests any of them, refuse and suggest the alternative.
| Not Supported Operation | Reason | Alternative |
|---|---|---|
❌ Binary migration assessment (.so/.dll/.exe/.o/.a) |
DevKit CLI only analyzes source code, not compiled binaries | Use Huawei Kunpeng binary migration tools separately |
| ❌ Database migration assessment | DevKit CLI does not analyze database schemas/SQL portability | Use Huawei Cloud DRS (Data Replication Service) or UGO (Database and Application Migration) |
| ❌ Performance tuning / optimization recommendations | This skill focuses on migration assessment only; the report contains fix suggestions, not performance analysis | Use DevKit performance analysis tools (separate from src-mig) |
| ❌ Languages outside C/C++/ASM/Fortran/Go/Java/Python/Scala (e.g. Rust, C#, Ruby, Node.js) | DevKit CLI does not support these languages | Use architecture-specific compilers and manual review for Rust etc. |
| ❌ DevKit GUI / desktop version installation | This skill only installs and uses the DevKit CLI version | Download DevKit GUI separately from Huawei Kunpeng community |
| ❌ Container/Docker image migration assessment | DevKit CLI analyzes source code, not container images | Rebuild container images on Kunpeng ARM64 base images |
| ❌ OS-level migration assessment (kernel, drivers, system libraries) | DevKit CLI focuses on application source code | Use Huawei Cloud migration tools for OS-level assessment |
If a user requests a prohibited operation, refuse and inform: "Per security constraints, this skill does not allow [specific operation]. Please perform this operation manually if needed."
If a user requests a not-supported operation, refuse and inform: "This skill does not support [specific operation]. [Reason]. Please use [alternative] instead."
Architecture
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: ~/devkit-report/)
⚠️ Task 0 (DetectLocalOS + PrepareServer) MUST be executed first — it determines the entire workflow path.
SSH Connection Strategy
All SSH operations use the unified scripts/ssh_client.py (paramiko + password from env var). No ssh/scp commands, no ControlMaster, no key injection, no Huawei Cloud region dependency. Works identically on Windows, Linux, and macOS.
⚠️ SSH remote execution limitation: DevKit's
src-migscan may differ between interactive and non-interactive SSH sessions.ssh_client.py execrequests a PTY (get_pty=True) to mitigate this. If scan results look suspicious (0 issues for code with known x86 dependencies), re-run locally via interactive SSH and compare. For critical migrations, validate by compiling on Kunpeng.
Environment variables (set by user in their own terminal; AI never sees values):
| Variable | Description | Default |
|---|---|---|
KUNPENG_SERVER_HOST |
Remote server IP/hostname | (required) |
KUNPENG_SERVER_PORT |
SSH port | 22 |
KUNPENG_SERVER_USER |
SSH username | root |
MIGRATE_SSH_PASS |
SSH password (read by paramiko, never in argv, wiped after each connection) | (required) |
Set env vars: Linux/macOS export KUNPENG_SERVER_HOST='<ip>' etc.; Windows PS $env:KUNPENG_SERVER_HOST='<ip>' etc. See references/scripts-guide.md for full setup.
Credential resolution priority (first match wins): (1) current process env vars → (2) /tmp/kunpeng_server_env.sh or %TEMP%/kunpeng_server_env.sh → (3) Windows user-level registry (winreg) → (4) default.
ssh_client.py subcommands:
| Subcommand | Description |
|---|---|
test |
Verify SSH connection (echo SSH_OK && uname -a) |
exec "<cmd>" [timeout] |
Execute a shell command on the remote server (uses get_pty=True) |
put <local> <remote> |
Upload a single file via SFTP |
put-dir <local_dir> <remote_dir> |
Upload a directory recursively via SFTP |
get <remote> <local> |
Download a single file via SFTP |
get-dir <remote_dir> <local_dir> |
Download a directory recursively via SFTP |
get-report [remote_dir] [local_dir] |
Download DevKit report (filtered by Code_Porting_*.{html,json,csv,txt}). Defaults: remote=/tmp/devkit-report, local=C:\devkit-report (Win) or ~/devkit-report (Linux) |
save-env |
Save connection info (host/port/user) to a temp env file (no password) |
📦 SFTP-First File Transfer (Critical for Windows + MSYS2)
⚠️ On Windows + MSYS2/Git Bash, the shell converts Unix paths to Windows paths before Python sees them (e.g.,
/tmp/foo→C:/Users/.../Temp/2/foo). For file transfer, use paramiko SFTP API directly from Python, notssh_client.pyCLI subcommands. See references/scripts-guide.md#sftp-first-file-transfer for the code example and references/troubleshooting.md#7-msys2-path-conversion-error-windows-only.
AI agent workflow: (1) File transfer → paramiko SFTP API directly; (2) Command execution → ssh_client.py exec "<cmd>"; (3) Script execution → upload via SFTP, then exec "bash /tmp/script.sh".
Built-in Scripts
AI MUST use these scripts instead of manually executing step-by-step commands.
📄 Detailed guide → references/scripts-guide.md
| Script | Description |
|---|---|
| detect_os.py | Local OS detection (outputs os_type/arch/local_install_supported) |
| ssh_client.py | Unified cross-platform SSH client (paramiko + env vars). Subcommands: test, exec, put, put-dir, get, get-dir, get-report, save-env |
| install_devkit.sh | DevKit CLI installation (auto-detect OS/arch, download, install, verify) |
| provision_kunpeng_server.sh | Kunpeng ECS provisioning (Huawei Cloud Guiyang Region 1) |
Supported Languages
| Language | File Extensions | Analysis Depth | Migration Concerns |
|---|---|---|---|
| C | .c, .h |
Deep | Inline assembly, platform-specific headers, byte order, pointer size |
| C++ | .cpp, .cc, .cxx, .hpp |
Deep | Same as C, plus name mangling, ABI compatibility |
| Assembly (ASM) | .s, .S, .asm |
Deep | Architecture-specific instructions, registers, calling conventions |
| Fortran | .f, .f90, .f95, .f03 |
Shallow | Compiler intrinsics, MPI library compatibility. Only partial detection. |
| Go | .go |
File-level stats | CGO calls, assembly files, architecture-specific build tags NOT detected. Manual review required. |
| Java | .java |
File-level stats | JNI native libraries, architecture-specific dependencies NOT detected. Manual review required. |
| Python | .py |
File-level stats | C extensions (Cython, CFFI), native bindings NOT detected. Manual review required. |
| Scala | .scala |
File-level stats | JNI calls, native library dependencies NOT detected. Manual review required. |
⚠️ For Go/Java/Python/Scala projects: DevKit only performs file-level statistics, not deep code analysis. A "Do Not Need Migrated" result does NOT mean the code is architecture-safe. If your project uses JNI, CGo, ctypes,
unsafe,sun.misc.Unsafe, native C extensions, or architecture-specific build tags, you MUST manually review those code paths. For reliable migration assessment of such code, consider converting the native/FFI parts to C/C++ and scanning them separately with DevKit.
Core Workflows
Task 0: Detect Local OS and Prepare Environment
This is the FIRST task. It detects the agent's local OS and determines the DevKit installation path.
Step 1: Detect local OS:
python <skill_dir>/scripts/detect_os.py
Outputs os_type, os_name, os_version, arch, local_install_supported as key=value pairs. Works on all platforms without external dependencies.
⚠️ AI MUST use
detect_os.pyinstead of manually runninguname -m,cat /etc/os-release, PowerShell, etc.
DevKit-supported local OS list:
| OS | Minimum Version | Notes |
|---|---|---|
| openEuler | 20.03 LTS | Recommended for Kunpeng |
| CentOS | 7.6 | Also supports 8.0 |
| Ubuntu | 18.04 | Also supports 20.04, 22.04 |
| Kylin | V10 | Domestic OS |
| UOS | 20 | Domestic OS |
| EulerOS | 2.8 | Also supports 2.9 |
| Debian | 10 | Also supports 11 |
| SUSE | 12 | |
| NeoKylin | V7 | Domestic OS |
Windows and macOS are NOT supported for local DevKit installation. DevKit must be installed on a remote Linux server.
Step 2: Ask user where to install DevKit
- If local OS IS supported (
LOCAL_INSTALL_SUPPORTED=true): Ask "local install" or "remote server install"- "local install" → Step 3a
- "remote server install" → Step 3b
- If local OS is NOT supported: Ask "existing remote Linux server" or "provision Kunpeng server on Huawei Cloud"
- "existing remote Linux server" → Step 3c
- "provision Kunpeng server" → Step 3d
Step 3a: Local Install
- Install DevKit:
bash <skill_dir>/scripts/install_devkit.sh --yes- Root user (default): Installs to
/usr/local/devkit, creates/usr/local/bin/devkitsymlink. - Non-root user: Use
bash <skill_dir>/scripts/install_devkit.sh --yes --no-sudo→ installs to$HOME/.local/devkit. Then add to PATH:export PATH=$HOME/.local/devkit:$PATH. Requires system deps (python3, pip3, curl) already present; if missing, install them first or use--skip-depsafter manual install. --skip-deps: Skip dependency installation (use when python3/pip3/curl are already installed).
- Root user (default): Installs to
- Ask user for local source code path
- Run DevKit scan locally (no SSH needed)
- Skip Task 1 — proceed directly to Task 3 with local paths
📄 Details → references/task-local-devkit.md
Step 3b: Remote Install — Ask about remote server
Ask "existing remote Linux server" or "provision Kunpeng server" → Step 3c or 3d.
Step 3c: User has remote server — Configure SSH
User sets KUNPENG_SERVER_HOST/PORT/USER and MIGRATE_SSH_PASS in their terminal (AI never sees values). Verify:
python <skill_dir>/scripts/ssh_client.py test
⚠️ No region dependency: Remote server can be on any cloud or on-premises. No hcloud CLI needed for SSH.
After verification succeeds, proceed to Task 1.
Step 3d: User has no server — Provision Kunpeng ECS on Huawei Cloud
⛔ CRITICAL: AI MUST use
provision_kunpeng_server.shto create ALL cloud resources. NEVER manually call hcloud APIs individually.
Default ECS spec:
- Flavor:
kc1.2xlarge.2(Kunpeng ARM64 8C16G). Flavor inventory is dynamic — if the default is out of stock, override via--flavor(e.g.,--flavor kc1.large.2for 2C4G,--flavor kc1.xlarge.2for 4C8G). The script will detect flavor-related errors and suggest this option. - Image: Huawei Cloud EulerOS 2.0 Standard 64 bit for ARM
- Disk: 40GB GPSSD
- Region: cn-southwest-2 (Guiyang 1)
- Check hcloud CLI installation and authentication
- Confirm provisioning with user (present spec and estimated cost)
- Execute:
bash <skill_dir>/scripts/provision_kunpeng_server.sh --confirm- Creates VPC → Subnet → Security Group + SSH rule → EIP → ECS
- Generates random root password, saves to
/tmp/kunpeng_server_env.shasMIGRATE_SSH_PASS(chmod 600) - To override flavor:
bash <skill_dir>/scripts/provision_kunpeng_server.sh --confirm --flavor kc1.large.2
- Load env:
source /tmp/kunpeng_server_env.sh - Verify SSH:
python <skill_dir>/scripts/ssh_client.py test - Proceed to Task 1
- After scan completes (Task 3): Present Resource Cleanup Reminder
📄 Details → references/task-prepare-server.md
Task 1: Connect to Source Code Server via SSH
Verify connection using python <skill_dir>/scripts/ssh_client.py test. All subsequent operations use ssh_client.py subcommands (see SSH Connection Strategy above).
📄 Details → references/task-connect-server.md
Task 2: Install DevKit CLI Tool
Install DevKit CLI on the target machine using scripts/install_devkit.sh. The script auto-detects OS/architecture, installs dependencies, downloads the correct package, and verifies installation.
⚠️ AI MUST use
scripts/install_devkit.shinstead of manually running step-by-step commands.
📄 Details → references/task-install-devkit.md
Task 3: Scan Source Code and Generate Migration Report
⚠️ CRITICAL RULES:
- MUST ask user for the source code path before scanning. Do NOT scan without user confirmation.
- MUST NOT scan local source code without permission.
- MUST NOT upload local files to remote server without permission.
- CAN list available source code directories on remote server to help user choose.
Report save path (local download):
| Agent OS | Local Report Save Path |
|---|---|
| Windows | C:\devkit-report |
| Linux / macOS | ~/devkit-report (current user's home) |
The skill MUST create the directory if it does not exist. Report files (HTML, JSON, CSV) MUST be saved directly under <save_path>/ (no project_name subdirectory). This path is fixed unless user explicitly requests a different location. On Linux/macOS the path is resolved via os.path.expanduser('~') so it works for any user (root → /root/devkit-report, other users → /home/<user>/devkit-report).
Downloading the report:
# 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 MUST use
get-report(or paramiko SFTP API) to download the report. Do NOT useexecwith base64/cat to download files.
📄 Details → references/task-scan-source-code.md
DevKit CLI Command Reference
The primary tool is Kunpeng DevKit CLI (devkit command).
devkit porting src-mig -i <source_path> -o <output_path> -s '<language_list>' [options]
Required: -i (source dir), -o (output dir, must exist), -s (languages, comma-separated: c, c++, asm, fortran, go, java, python, scala).
Optional: -c (build cmd, e.g. 'make all'), -b (build tool: make/cmake/automake/go/bazel/blade), -p (compiler, e.g. gcc9.3.0), -f (Fortran compiler), -t (target OS, auto-detect), -r (report format: all/json/html/csv, default all), -l (log level 0-3), -np (concurrency), --ignore/--ignore-path (exclude rules/paths), --kp-compatibility (cross-gen check).
Compiler versions (-p): gcc4.8.5, gcc7.3.0, gcc9.3.0, gcc10.3.0, gcc12.3.0, bisheng compiler3.0.0/4.0.0, gcc for openeuler3.0.3, etc.
⚠️ The
devkitbinary must be run from its installation directory (e.g.,cd /usr/local/devkit && ./devkit), or the directory must be in PATH. The output directory (-o) must already exist.
📄 Full CLI reference → references/devkit-cli-reference.md
References
| Document | Description |
|---|---|
| scripts-guide.md | Built-in scripts: SSH client, provisioning, DevKit installation |
| prerequisites.md | Prerequisites and authentication |
| iam-policies.md | IAM permission policies for ECS provisioning (Step 3d) |
| cli-installation-guide.md | hcloud (KooCLI) installation guide |
| task-prepare-server.md | Task 0: Detect OS, prepare environment |
| task-local-devkit.md | Task 0a: Local DevKit install |
| task-connect-server.md | Task 1: SSH connect to server |
| task-install-devkit.md | Task 2: Install DevKit CLI |
| task-scan-source-code.md | Task 3: Scan source code |
| devkit-cli-reference.md | DevKit CLI command reference |
| devkit-installation-guide.md | DevKit installation guide |
| migration-report-guide.md | Migration report interpretation |
| troubleshooting.md | Troubleshooting and common issues |
| acceptance-criteria.md | Acceptance criteria |
| verification-method.md | Verification methods |
Resource Cleanup Reminder
⚠️ After the scan completes and the report is presented, AI MUST remind the user to clean up provisioned resources (Step 3d only). Present as TEXT ONLY — never execute delete commands. Include a table of created resources (ECS, VPC, Subnet, EIP, Security Group) with their IDs, and remind: "Deletion is IRREVERSIBLE. AI will NOT execute these commands. Please run them manually."
For Step 3c (existing server) and Step 3a (local install): No cleanup reminder needed.
