カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

Amazon Linux 2023でSelf-hosted agentが動かない時の対応方法

最近AzureとAWSの連携を検証することが多いのですが、その内Self-hosted agentをAWSのEC2で動かすときに詰まったので、その内容について書いておきます。

実施作業

前提条件

  • 事前に以下のAMIを使用してEC2を起動しておきます。

  • 外部からのEC2へのアクセス用に「EC2インスタンス接続エンドポイント」を作成しておきます
  • EC2から外部に出れるようにNAT Gatewayも作成して、ルートテーブルに設定しておきます
  • エージェントの細かいインストール手順は以下をご確認ください。

https://zenn.dev/handy/articles/azure-pipeline-shagent-ec2-ecr

実施手順

Self-hosted agentをLinuxにインストールする手順は以下に書いてあります。
learn.microsoft.com


ただ、今回は上記手順ではなく、Azure DevOps画面から確認できる以下の手順を実行しました。

$ mkdir myagent && cd myagent
$ wget https://vstsagentpackage.azureedge.net/agent/3.227.2/vsts-agent-linux-x64-3.227.2.tar.gz
$ tar zxvf ~/Downloads/vsts-agent-linux-x64-3.227.2.tar.gz
$ ./config.sh
$ ./run.sh


エラー内容

今回エラーが発生したのは以下のコマンドを実行した時でした。

$ ./config.sh

実際のエラー内容は以下でした。

libicu's dependencies missing for .NET 6
Execute ./bin/installdependencies.sh to install any missing dependencies.


結論

先に結果を知りたい方向けに書いておくと、以下のコマンドを実行して依存関係を解決すれば動きました。

$ sudo yum install libicu


トラブルシュート①

メッセージの中で以下をsudo権限付けて実行して依存関係を確認するように言われているので実行してみます。

$ sudo ./bin/installdependencies.sh 

出力された以下の内容を翻訳して読んでみると「etc/os-release に基づいて現在の OS の種類を検出できません。」と出力されていました。

--------OS Information--------
NAME="Amazon Linux"
VERSION="2023"
ID="amzn"
ID_LIKE="fedora"
VERSION_ID="2023"
PLATFORM_ID="platform:al2023"
PRETTY_NAME="Amazon Linux 2023"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2023"
HOME_URL="https://aws.amazon.com/linux/"
BUG_REPORT_URL="https://github.com/amazonlinux/amazon-linux-2023"
SUPPORT_END="2028-03-01"
------------------------------
"fedora"
Can't detect current OS type based on /etc/os-release.
Can't install dotnet core dependencies.
Please make sure that required repositories are connected for relevant package installer.
For issues with dependencies installation (like 'dependency was not found in repository' or 'problem retrieving the repository index file') - you can reach out to distribution owner for futher support.
You can manually install all required dependencies based on following documentation
https://docs.microsoft.com/dotnet/core/install/linux

「./bin/installdependencies.sh」の中身も確認してみます。
条件分岐のところだけ抽出してみてみると、Amazon Linuxが含まれていないことがわかります。

if [ -e /etc/os-release ]
then
    echo "--------OS Information--------"
    cat /etc/os-release
    echo "------------------------------"

    if [ -e /etc/debian_version ]
~~
   elif [ -e /etc/redhat-release ]
~~
    else
        # we might on OpenSUSE
        OSTYPE=$(grep ^ID_LIKE /etc/os-release | cut -f2 -d=)
        if [ -z $OSTYPE ]
        then
            OSTYPE=$(grep ^ID /etc/os-release | cut -f2 -d=)
        fi
        echo $OSTYPE

        # is_sles=1 if it is a SLES OS
        [ -n $OSTYPE ] && ([ $OSTYPE == '"sles"' ] || [ $OSTYPE == '"sles_sap"' ]) && is_sles=1

        if  [[ -n $OSTYPE && ( $OSTYPE == '"suse"'  || $is_sles == 1) ]]
~~
        elif [ -e /etc/mariner-release ]
~~
        else
            echo "Can't detect current OS type based on /etc/os-release."
            print_errormessage
            exit 1
        fi
~~
elif [ -e /etc/redhat-release ]
~~
else
    echo "Unknown OS version"
    print_errormessage
    exit 1
fi


Amazon Linuxの「/etc/os-release」を見てみると、以下のように設定されていました。

$ cat /etc/os-release 
NAME="Amazon Linux"
VERSION="2023"
ID="amzn"
ID_LIKE="fedora"
VERSION_ID="2023"
PLATFORM_ID="platform:al2023"
PRETTY_NAME="Amazon Linux 2023"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2023"
HOME_URL="https://aws.amazon.com/linux/"
BUG_REPORT_URL="https://github.com/amazonlinux/amazon-linux-2023"
SUPPORT_END="2028-03-01"

どうやらAmazon Linuxは「./bin/installdependencies.sh」を使用した依存関係のチェックができないようです。

トラブルシュート②

「./bin/installdependencies.sh」を使用した依存関係チェックはできないですが、最初に発生したエラーメッセージを見てみると以下のように表示されてますので、.NET6を動かすためのlibicuパッケージが足りていないように思われます。

libicu's dependencies missing for .NET 6

一応CentOSの手順をみると以下のコマンドで依存関係のあるパッケージをインストールすると記載されているので、こちらを実行してみます。

$ sudo yum install libicu

https://learn.microsoft.com/ja-jp/dotnet/core/install/linux-centoshttps://learn.microsoft.com/ja-jp/dotnet/core/install/linux-centos#dependencies


再度config.shを実行してみると、正常に実行されました。

$ ./config.sh 

  ___                      ______ _            _ _
 / _ \                     | ___ (_)          | (_)
/ /_\ \_____   _ _ __ ___  | |_/ /_ _ __   ___| |_ _ __   ___  ___
|  _  |_  / | | | '__/ _ \ |  __/| | '_ \ / _ \ | | '_ \ / _ \/ __|
| | | |/ /| |_| | | |  __/ | |   | | |_) |  __/ | | | | |  __/\__ \
\_| |_/___|\__,_|_|  \___| \_|   |_| .__/ \___|_|_|_| |_|\___||___/
                                   | |
        agent v3.227.2             |_|          (commit 9667e03)


>> End User License Agreements:


感想及び所感

エラーメッセージを読めばわかる内容でしたが、しばらくすると忘れてしまいそうだったので、自分のためにもまとめておきました。

この記事がどなたかの参考になれば幸いです。