Lifematics Corporate Blog

Lifematics社のコーポレートブログへようこそ!

🚀 SlurmのカスタムDebianパッケージをスマートに作成しよう!

皆さん、こんにちは!

前回までは公式サイトで紹介されていますdebuildによるDebianパッケージの作成とインストールをご紹介しました。

Slurm Debianパッケージ作成ハンズオンガイド

Slurm Debianパッケージらくらくインストールガイド

デフォルト設定であれば問題ないのですがビルドルールをカスタムする場合、通常はslurm-24.11.5/debian/rulesファイルを修正します。

例えば、

  • インストールパスを「/usr/local/slurm/24.11 」
  • コンフィグディレクトリを「/usr/local/slurm/24.11/etc」

としたい場合、slurm-24.11.5/debian/rulesファイルを以下のように修正します。

dh_auto_configure -- --prefix=/usr/local/slurm/24.11 --sysconfdir=/usr/local/slurm/24.11/etc --disable-debug (以降省略)

ところがこちらでdebuild -b -uc -usを実行するとエラーとなってしまいます。

:
rm -r debian/tmp/usr/lib/*/slurm/src
rm: 'debian/tmp/usr/lib/*/slurm/src' を削除できません: そのようなファイルやディレクトリはありません
make[1]: *** [debian/rules:25: override_dh_auto_install] エラー 1
make[1]: ディレクトリ '/root/src/slurm-24.11.1' から出ます
make: *** [debian/rules:6: binary] エラー 2
dpkg-buildpackage: error: debian/rules binary subprocess returned exit status 2
debuild: fatal error at line 1182:
dpkg-buildpackage -us -uc -ui -b failed

RHEL系のLinuxではRPMパッケージ作成時にビルドルールをカスタムする公式手順が紹介されていますが、Debianではdh_auto_configure以外にも修正が必要となる箇所が複数あるようで、このようなカスタムが難しいのです。🤔

そこで、今回のハンズオンでは、この問題を「checkinstall」を用いてスマートに解決し、SlurmのカスタムDebianパッケージを作成/インストールする方法をご紹介します!

checkinstallによるSlurm Debianパッケージ インストール

それでは、実際に手を動かしてSlurmをインストールしてみましょう!今回はDebianパッケージを作成するサーバをSlurm Controllerとし、別のサーバにComputeをインストールします。

  1. 前準備(Slurm Controller、以下CONTROLLER)

    • mungeインストール、slurmユーザーを作成します。
     # apt update
     # apt-get install munge libmunge-dev
     # sudo groupadd -g 64030 slurm
     # sudo useradd -u 64030 -g 64030 -m -d /var/lib/slurm -s /sbin/nologin -r slurm
    
  2. 必要なパッケージのインストール(CONTROLLER)

    • まず、ビルドに必要な基本的なツールとcheckinstallをインストールします。
     # apt install libdbus-1-dev libmariadb-dev build-essential
     # apt install checkinstall
    
  3. Slurmソースコードのダウンロードと解凍(CONTROLLER)

    • Slurmのソースコードをダウンロードし、作業ディレクトリに展開します。
      最新版のURLはSchedMDのダウンロードページで確認できます。
     # mkdir /root/src;cd /root/src
     # wget https://download.schedmd.com/slurm/slurm-24.11.5.tar.bz2
     # tar -xaf slurm*tar.bz2
     # ls -l
     drwxr-xr-x 10 life life    4096  1月 24 05:25 slurm-24.11.5
     # cd slurm-24.11.5/
    
  4. コンパイルとカスタムインストールパスの指定(CONTROLLER)

    • ./configureコマンドでインストールパスとコンフィグディレクトリをカスタム指定し、その後にmakeでコンパイルします。

    💡 ポイント:
    --prefixでインストール先ディレクトリを、--sysconfdirで設定ファイルのディレクトリを指定します。
    これにより、Slurm関連のファイルが/usr/local/slurm/24.11以下に集約されます。

     # ./configure --prefix=/usr/local/slurm/24.11 --sysconfdir=/usr/local/slurm/24.11/etc
     # make -j 9  # 「9」は`nproc+1`などで決めた並列ビルド数です
    
  5. Debianパッケージを作成(CONTROLLER)

    • checkinstallコマンドを使って、これまでのインストール作業を元にDebianパッケージを作成します。
     # checkinstall --default
    

    このコマンドを実行すると、以下のようなDebianパッケージが作成されます。

     # ls -l 
     -rw-r--r--  1 root root 44014626  2月 16 15:52 slurm_24.11.5-1_amd64.deb
    
  6. インストールされたことの確認(CONTROLLER)

    • パッケージを作成したサーバには自動的にSlurmがインストールされます。
     # ls -l /usr/local/slurm/24.11/
     total 24
     drwxr-xr-x 2 root  root  4096  2月 16 15:52 bin
     drwxr-xr-x 2 slurm slurm 4096  2月 16 15:52 etc
     drwxr-xr-x 3 root  root  4096  2月 16 15:47 include
     drwxr-xr-x 3 root  root  4096  2月 16 15:52 lib
     drwxr-xr-x 2 root  root  4096  2月 16 15:52 sbin
     drwxr-xr-x 4 root  root  4096  2月 16 15:47 share
    

    Debianパッケージを作成する端末ではご覧の通り、指定した/usr/local/slurm/24.11/の下に、binやetcなどのSlurm関連ディレクトリが配置されていることが確認できますね。

  7. 関連ファイル・フォルダの作成(CONTROLLER)

    • サービス起動に必要なファイル・フォルダを用意します。
     # mkdir /var/log/slurm
     # mkdir /var/spool/slurm
     # mkdir /var/spool/slurmctld
     # mkdir /usr/local/slurm/24.11/etc
     # chown slurm:slurm /var/log/slurm
     # chown slurm:slurm /var/spool/slurm
     # chown slurm:slurm /var/spool/slurmctld
     # chown slurm:slurm -R /usr/local/slurm
     # cp -p /root/src/slurm-24.11.5/etc/slurmctld.service /usr/lib/systemd/system/slurmctld.service
     # systemctl daemon-reload
     # cp -p /root/src/slurm-24.11.5/etc/slurm.conf.example /usr/local/slurm/24.11/etc/
    
  8. slurmctldの設定(CONTROLLER)

    • DBDは使わずComputer1台だけの設定とします。
     # cd /usr/local/slurm/24.11/etc/
     # chown slurm:slurm slurm.conf.example
     # cp -p slurm.conf.example slurm.conf
     # vi slurm.conf
     # diff slurm.conf slurm.conf.example
     12c12
     < SlurmctldHost=master
     ---
     > SlurmctldHost=linux0
     118c118
     < AccountingStorageType=accounting_storage/none
     ---
     > AccountingStorageType=accounting_storage/slurmdbd
     152,153c152,153
     < NodeName=node01 CPUs=4 State=UNKNOWN
     < PartitionName=debug Nodes=node01 Default=YES MaxTime=INFINITE State=UP
     ---
     > NodeName=linux[1-32] CPUs=1 State=UNKNOWN
     > PartitionName=debug Nodes=ALL Default=YES MaxTime=INFINITE State=UP
    
  9. 前準備(Slurm Computer、以下COMPUTER)

    • mungeインストール、slurmユーザーを作成します。
     # apt update
     # apt-get install munge libmunge-dev
     # scp -p CONTROLLER:/etc/munge/munge.key /etc/munge/
     # systemctl restart munge.service
     # sudo groupadd -g 64030 slurm
     # sudo useradd -u 64030 -g 64030 -m -d /var/lib/slurm -s /sbin/nologin -r slurm
    
  10. Slurm Debianパッケージのインストール(COMPUTER)

    • CONTROLLERで作成したSlurm Debianパッケージを実行します。
     # mkdir /root/src;cd /root/src
     # scp -p CONTROLLER:/root/src/slurm-24.11.5/slurm_24.11.5-1_amd64.deb /root/src/
     # dpkg -i slurm_24.11.5-1_amd64.deb
     # ls -l /usr/local/slurm/24.11/
     合計 20
     drwxr-xr-x 2 root root 4096  7月  1 18:37 bin
     drwxr-xr-x 3 root root 4096  7月  1 18:37 include
     drwxr-xr-x 3 root root 4096  7月  1 18:37 lib
     drwxr-xr-x 2 root root 4096  7月  1 18:37 sbin
     drwxr-xr-x 4 root root 4096  7月  1 18:37 share
    

    Debianパッケージをインストールした端末で、指定した/usr/local/slurm/24.11/の下に、binやetcなどのSlurm関連ディレクトリが配置されていることが確認できますね。

  11. 関連ファイル・フォルダの作成(COMPUTER)

    • サービス起動に必要なファイル・フォルダを用意します。
    # mkdir /var/log/slurm
    # mkdir /var/spool/slurm
    # mkdir /var/spool/slurmctld
    # mkdir /usr/local/slurm/24.11/etc
    # chown slurm:slurm /var/log/slurm
    # chown slurm:slurm /var/spool/slurm
    # chown slurm:slurm /var/spool/slurmctld
    # chown slurm:slurm -R /usr/local/slurm
    # scp -p CONTROLLER:/root/src/slurm-24.11.5/etc/slurmd.service /usr/lib/systemd/system/slurmd.service
    # systemctl daemon-reload
    # scp -p CONTROLLER:/usr/local/slurm/24.11/etc/slurm.conf /usr/local/slurm/24.11/etc/
    # chown slurm:slurm /usr/local/slurm/24.11/etc/slurm.conf
    
  12. slurmdサービス起動(COMPUTER)

    # systemctl start slurmd.service
    

    systemctl statusコマンドで、サービスがactive (running)になっていることを確認しましょう。

  13. slurmctldサービス起動(CONTROLLER)

    # systemctl start slurmctld.service
    

    systemctl statusコマンドで、サービスがactive (running)になっていることを確認しましょう。

  14. Slurmの動作確認

    最後に、sinfoコマンドでSlurmクラスターの状態を確認します。

    # /usr/local/slurm/24.11/bin/sinfo
    PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
    debug*       up   infinite      1   idle node01
    

    上記のように、設定したパーティションとノードが表示され、ノードがidle状態であれば、Slurmが無事に起動し、動作していることが確認できます!

まとめ

本記事では、Debian環境でSlurmを特定のカスタムパスにインストールするために、checkinstallを利用する方法をご紹介しました。

debuildでルールファイルを直接修正する際の複雑な問題点を回避し、手軽にカスタムパッケージを作成できることがお分かりいただけたかと思います。

作成したパッケージは、他のComputeノードにもscpで転送し、dpkg -iコマンドで簡単にインストールできます。

依存関係の問題が発生した場合は、apt-get install -fで解決できます。

Slurmの導入はHPC環境の効率化に不可欠です。もしSlurmの構築・運用でお困りでしたら、LifematicsのSlurm保守サービス」もぜひご検討ください!専門家チームが強力にサポートいたします。

ご質問やご意見がありましたら、お気軽にコメントください! 次回のブログもお楽しみに!