Skip to content

Latest commit

 

History

32 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Arm Linux Migration Tools

A comprehensive package of migration tools specifically designed to help developers migrate applications and workloads to Arm servers. This package provides a unified installation of 13 essential tools for analyzing, optimizing, and migrating software to Arm architecture.

Overview

The Arm Linux Migration Tools package simplifies the process of migrating applications to Arm-based systems by providing pre-configured, ready-to-use tools in a single installation. All tools are optimized for Arm Linux systems and include proper dependency management through automated scripts.

System Requirements

  • Architecture: Arm (aarch64)

  • Operating System: Linux (Ubuntu 22.04/24.04 recommended), Amazon Linux 2023, macOS users can test inside Colima/Docker (limitations).

    • Note (macOS/Colima): perf relies on Linux kernel PMU support and is not supported on macOS/Colima (XNU kernel). The test script will mark it as SKIPPED in these environments.
  • Dependencies:

    • Docker/Podman (required for migrate-ease-docker)

Installation

You can install the tools using a single command or download the tar file and run in the install script. Pick either alternative.

Single line installation

Install directly from the latest GitHub release:

curl -sSL https://github.com/arm/arm-linux-migration-tools/releases/latest/download/install.sh | sudo bash

Download and install

Download a release release tar file and install on your computer:

# Download the latest release (replace ARCH with arm64 or x86_64)
wget https://github.com/arm/arm-linux-migration-tools/releases/latest/download/arm-migration-tools-v3-arm64.tar.gz

# Extract and install
tar xzf arm-migration-tools-v3-arm64.tar.gz
sudo ./scripts/install.sh

Uninstall

You can uninstall by running:

/opt/arm-migration-tools/scripts/uninstall.sh

Note The uninstall script:

  • Removes /opt/arm-migration-tools
  • Removes wrappers in /usr/local/bin
  • Removes system packages (perf, llvm-mca, skopeo) where installed

Build from Source

To build all tools from source:

git clone https://github.com/arm/arm-linux-migration-tools.git
cd arm-linux-migration-tools
./scripts/build.sh 

The build.sh script will:

  • Build all tools from source where required
  • Download and configure package-manager tools
  • Create Python virtual environments for Python-based tools
  • Package everything into a distributable tarball (arm-migration-tools-v[version]-[arch].tar.gz)
  • The default version is 1 but you can pass an integer to ./build.sh to set a new version number.
  • Architecture (arm64 or x86_64) is automatically detected from the build system.

When the build is complete install the tools using:

./scripts/install.sh

Note: Both install and uninstall scripts can be run multiple times.

  • Running install.sh again will detect already-installed tools and skip re-installation.
  • Running uninstall.sh again will simply confirm that everything is already removed.

Tool Notes

  • Skopeo:

    • On Ubuntu, installed natively via apt.
    • On Amazon Linux 2023, Skopeo is not available in default repos.
      • You can run it via the provided container wrapper (skopeo-container)
      • Or build it manually from source / use GitHub release binaries.
  • Migrate-Ease:

    • Five language wrappers (cpp,python,go,js,java) always install.

    • The Docker wrapper installs only if Docker/Podman is detected.

    • On systems without a container runtime, migrate-ease-docker is skipped.

    • CLI vs upstream (Migrate-Ease):

    The upstream migrate-ease README shows usage as:

    python3 -m {scanner_name} --march {arch} {scan_path}

    In this package we provide unified wrappers (migrate-ease-cpp, migrate-ease-python, etc.) in /usr/local/bin. This ensures consistent CLI names across all supported languages and avoids requiring users to cd into the package or call python3 -m directly.

    The upstream docs use:

    python3 -m {scanner_name} --march {arch} {scan_path}
      # e.g. python3 -m cpp --march armv8-a ./myproject

    This package installs unified wrappers to /usr/local/bin:

    migrate-ease-cpp --march armv8-a ./myproject
    migrate-ease-python --march armv8-a ./myproject
    migrate-ease-go --march armv8-a ./myproject
    migrate-ease-js --march armv8-a ./myproject
    migrate-ease-java --march armv8-a ./myproject

    Why: consistent command names across languages, no python3 -m …, and wrappers auto-use the venv.

  • Perf

    • On cloud VMs (AWS,GCP,Azure) with Ubuntu/Amazon Linux, perf installs normally with kernel-matching packages.
    • On macOS Colima or other Docker-on-mac setups, perf will show as SKIPPED in the test script because the underlying XNU kernel doesn't support Linux perf.
    • The test script will report Perf: SKIP (binary present but counters unsupported on this kernel) when running inside mac/Colima or similarly restricted kernels
  • Porting Advisor:

    • Installs successfully on both Ubuntu and Amazon Linux.
    • Requires Python ≥3.10 to run.
    • Ubuntu 22.04/24.04 meet this requirement.
    • Amazon Linux 2023 defaults to Python 3.9 → binary installs but won’t run unless Python is upgraded.

This package includes 13 essential migration and analysis tools:

1. Sysreport - System Analysis and Reporting

2. Skopeo - Container Image Inspection

  • Purpose: Container image inspection and manipulation tool
  • Test Command: skopeo --help
  • Install Guide: Skopeo install guide

3. MCA (llvm-mca) - Machine Code Analyzer

4. Topdown Tool - Performance Analysis

  • Purpose: Performance analysis methodology tool for Linux systems
  • Test Command: topdown-tool --help
  • Install Guide: Telemetry Solution

5. KubeArchInspect - Kubernetes Architecture Inspection

6. Migrate Ease - Migration Assistance

7. Aperf - Performance Monitoring

  • Purpose: Performance monitoring tool for Linux systems
  • Test Command: aperf --help
  • Install Guide: Aperf install guide

8. BOLT - Binary Optimization

  • Purpose: Binary optimization and layout tool (part of LLVM)
  • Test Commands:
    • llvm-bolt --help
    • perf2bolt --help
  • Install Guide: BOLT install guide

9. PAPI - Performance API

  • Purpose: Performance API for accessing hardware performance counters
  • Test Command: papi_avail -h
  • Install Guide: PAPI install guide

10. Perf - Linux Performance Analysis

  • Purpose: Linux performance analysis tool for profiling and tracing
  • Test Command: perf --help
  • Install Guide: Perf install guide

11. Process Watch - Process Monitoring

12. Check Image - Container Arm Support Checker

13. Porting Advisor - Software Portability Assessment

  • Purpose: Tool to assess portability of software to Arm architecture
  • Test Command: porting-advisor --help
  • Install Guide: Porting Advisor install guide

Testing Installation

After installation, verify all tools are working correctly:

arm-migration-tools-test.sh

This script writes:

  • arm-migration-tools-test.log - full human readable output
  • arm-migration-tools-test.summary.tsv – a 3-column summary: tool / status / note

Statuses: • PASS – tool is present and the smoke test succeeded • SKIP – intentionally not tested on this system (e.g., perf on mac/Colima; migrate-ease-docker without Docker/Podman) • FAIL – tool found but the smoke test failed (check the log for details)

Individual Tool Testing

You can also test individual tools using their respective help commands:

# System analysis
sysreport --help

# Container tools
skopeo --help
check-image -h

# Performance analysis
llvm-mca --help
topdown-tool --help
aperf --help
perf --help
papi_avail -h
processwatch -h

# Migration tools
kubearchinspect --help
migrate-ease-cpp --help
porting-advisor --help

# Binary optimization
llvm-bolt --help
perf2bolt --help

Architecture

Installation Structure

All tools are installed to /opt/arm-migration-tools/ with the following structure:

/opt/arm-migration-tools/
├── venv/                    # Python virtual environment
├── scripts/                 # Installation and management scripts
├── sysreport/              # Sysreport tool
├── kubearchinspect/        # KubeArchInspect tool
├── aperf/                  # Aperf binaries
├── processwatch/           # Process Watch binary
├── src/                    # Source files (check-image.py)
├── requirements.txt        # Python dependencies
└── tool-versions.txt       # Installed tool versions

Python Virtual Environment

Python-based tools use a shared virtual environment at /opt/arm-migration-tools/venv/. You can activate it manually:

source /opt/arm-migration-tools/venv/bin/activate

However, wrapper scripts in /usr/local/bin/ are provided for convenient access to all Python tools.

Package Management Integration

Tools available through package managers (like perf, llvm-mca, skopeo) are installed system-wide using the appropriate package manager for your distribution.

Development

Project Structure

arm-linux-migration-tools/
├── scripts/                 # Build, install, and uninstall scripts
│   ├── build.sh            # Main build script
│   ├── install.sh          # Main installation script
│   ├── uninstall.sh        # Main uninstallation script
│   ├── build_*.sh          # Individual tool build scripts
│   ├── install_*.sh        # Individual tool install scripts
│   └── uninstall_*.sh      # Individual tool uninstall scripts
├── src/                    # Source files
│   └── check-image.py      # Container image checker
├── docs/                   # Documentation
└── .github/                # GitHub configuration

Building Individual Tools

Each tool has its own build script in the scripts/ directory:

# Build specific tools
./scripts/build_sysreport.sh
./scripts/build_aperf.sh
./scripts/build_processwatch.sh
# ... etc

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Test on Arm Linux systems
  5. Submit a pull request

Troubleshooting

Common Issues

Architecture Check Failed

  • Ensure you're running on an Arm system
  • Check with: uname -m (should show aarch64)

Python Virtual Environment Issues

  • Ensure Python 3 is installed: python3 --version
  • Check virtual environment: ls -la /opt/arm-migration-tools/venv/

Tool Not Found After Installation

  • Check if tool is in PATH: which <tool-name>
  • Try using the full path: /usr/local/bin/<tool-name>
  • Verify installation: arm-migration-tools-test.sh

Migrate-Ease Python ImportError: failed to find libmagic
If you see this error, it means your base OS image is missing the libmagic library.
Normally install.sh installs it automatically, but if running inside a minimal container, you may need to install manually:

  • Ubuntu/Debian: apt-get update && apt-get install -y file libmagic1
  • Amazon Linux / RHEL / Fedora: dnf install -y file-libs || yum install -y file-libs

Permission Errors

  • Installation requires sudo privileges
  • Ensure you can run: sudo ls /opt/

Getting Help

License

This project is licensed under the MIT License. See individual tool repositories for their specific licenses.

Links

About

Arm Linux Migration Tools Package

Resources

Security policy

Stars

5 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages