Amazon Linux 2023 で microsoft/apm (Agent Package Manager) を使う
2026/05/08
- #aws
- #ai
Amazon Linux 2023 上で apm を動かそうとすると、以下のようなエラーが表示されます。
[PYI-37236:ERROR] Failed to load Python shared library '.../github-microsoft-apm/0.11.0/_internal/libpython3.12.so.1.0': /lib64/libm.so.6: version `GLIBC_2.38' not found (required by .../github-microsoft-apm/0.11.0/_internal/libpython3.12.so.1.0)
これは、Amazon Linux 2023 の GLIBC のバージョンが、apm が利用する2.38より古い2.34であることが原因です。
解決方法としては apm をソースから入れなおす、もしくは、Docker を利用するといった方法があります。
以下では Docker を利用する方法について解説します。
Dockerfileの作成
以下のような Dockerfile を作成します。
FROM ubuntu:24.04@sha256:c4a8d5503dfb2a3eb8ab5f807da5bc69a85730fb49b5cfca2330194ebcc41c7b
ARG APM_VERSION=0.12.2
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates curl git tar \
&& rm -rf /var/lib/apt/lists/*
RUN arch="$(dpkg --print-architecture)" \
&& case "${arch}" in \
amd64) apm_arch="x86_64" ;; \
arm64) apm_arch="arm64" ;; \
*) echo "Unsupported architecture: ${arch}" >&2; exit 1 ;; \
esac \
&& curl -fsSL "https://github.com/microsoft/apm/releases/download/v${APM_VERSION}/apm-linux-${apm_arch}.tar.gz" -o /tmp/apm.tar.gz \
&& mkdir -p /opt/apm \
&& tar -xzf /tmp/apm.tar.gz -C /opt/apm \
&& ln -sf "/opt/apm/apm-linux-${apm_arch}/apm" /usr/local/bin/apm \
&& rm -f /tmp/apm.tar.gz
ENTRYPOINT ["apm"]
mise task の作成
実行しやすくするために mise の task を作成します。
(※ GitHubのPrivateリポジトリからスキルをインストールしたい場合は gh auth token 等でトークンをDocker内に流し込む必要があります 参考)
#!/usr/bin/env bash
#MISE description="Ubuntu 24 Docker で microsoft/apm を実行"
#Amazon Linux 2023 は GLIBC のバージョンが古く、microsoft/apm のバイナリを直接実行できない為
set -euo pipefail
script_dir=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
repo_root=$(cd -- "${script_dir}/../../.." && pwd)
dockerfile="${repo_root}/.config/docker/apm/Dockerfile"
build_context=$(dirname -- "${dockerfile}")
apm_version="${APM_VERSION:-0.12.2}"
image_name="${APM_DOCKER_IMAGE:-apm:${apm_version}}"
cache_dir="${HOME}/.cache/apm"
mkdir -p "${cache_dir}"
docker build \
--quiet \
--build-arg "APM_VERSION=${apm_version}" \
--tag "${image_name}" \
--file "${dockerfile}" \
"${build_context}" \
>/dev/null
worktree_rel=$(realpath --relative-to="${repo_root}" "${PWD}")
container_workdir="/workspace"
if [[ "${worktree_rel}" != "." ]]; then
container_workdir="/workspace/${worktree_rel}"
fi
docker_run_args=(
run
--rm
--interactive
--user "$(id -u):$(id -g)"
--workdir "${container_workdir}"
--volume "${repo_root}:/workspace"
--volume "${cache_dir}:/tmp/apm-home"
--env HOME=/tmp/apm-home
--env XDG_CACHE_HOME=/tmp/apm-home/.cache
)
if [[ -f "${HOME}/.gitconfig" ]]; then
docker_run_args+=(
--volume "${HOME}/.gitconfig:/tmp/apm-home/.gitconfig:ro"
--env GIT_CONFIG_GLOBAL=/tmp/apm-home/.gitconfig
)
fi
exec docker "${docker_run_args[@]}" "${image_name}" "$@"
ファイルを以下のように配置します。
📁 .
└── 📁 .config
├── 📁 docker
│ └── 📁 apm
│ └── 📄 Dockerfile
└── 📁 mise
└── 📁 tasks
└── 📄 apm
以下のように実行できます。
mise run apm -- install
以上です。