概要
本記事では、Windows11でWSL2をセット、Linuxディストリビューションをインストールし、Anaconda仮想環境を持つUbuntu 22.04のSingularityイメージを作成、起動したコンテナでJupyter notebookを実行するまでの手順を説明しています。
※外部SSDにコンテナイメージを作成して使用する場合の手順を記載しています。
WSL2導入
1.コントロールパネル->プログラム->windowsの機能の有効化または無効化
2.「Hyper-V」「Linux用Windowsサブシステム」にチェックを入れ、OK
3.PCを再起動
4.PowerShellを管理者権限で起動
5.WSLの最新バージョンをインストール
wsl.exe --update
6.WSL2をデフォルトにセット
wsl --set-default-version 2
7.Ubuntuをインストール
下記コマンドを実行
wsl --install d Ubuntu-22.04
→Ubuntu 22.04 LTS は既にインストールされています。Ubuntu 22.04 LTS を起動しています...
と表示され、Ubuntuの起動を確認
8.singularityをダウンロード
ubuntu上で下記を実施
wget https://github.com/sylabs/singularity/releases/download/v4.0.0/singularity-ce_4.0.0-jammy_amd64.deb
singularityイメージ構築
9.singularityをインストール
sudo apt install ./singularity-ce_4.0.0-jammy_amd64.deb
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:
The following packages have unmet dependencies:
singularity-ce : Depends: libfuse2 (>= 2.6) but it is not installable
Depends: uidmap but it is not installable
Recommends: squashfs-tools-ng but it is not installable
E: Unable to correct problems, you have held broken packages.
以下を実施することで、インストールを完了
1.sudo apt-get update
でaptの更新
2.sudo apt-get install -f
でaptの破損ファイルを修復
3.sudo apt-get install -y libfuse2 uidmap squashfs-tools-ng
で、インストールできていなかったパッケージをインストール
4. 再度、sudo apt install ./singularity-ce_4.0.0-jammy_amd64.deb
を実行
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Note, selecting 'singularity-ce' instead of './singularity-ce_4.0.0-jammy_amd64.deb'
The following additional packages will be installed:
cryptsetup-bin runc
The following NEW packages will be installed:
cryptsetup-bin runc singularity-ce
0 upgraded, 3 newly installed, 0 to remove and 84 not upgraded.
Need to get 4412 kB/36.7 MB of archives.
After this operation, 154 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
Get:1 /home/OOOO/singularity-ce_4.0.0-jammy_amd64.deb singularity-ce amd64 4.0.0-jammy [32.3 MB]
Get:2 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 cryptsetup-bin amd64 2:2.4.3-1ubuntu1.2 [145 kB]
Get:3 http://archive.ubuntu.com/ubuntu jammy-updates/main amd64 runc amd64 1.1.7-0ubuntu1~22.04.2 [4267 kB]
Fetched 4412 kB in 4s (1093 kB/s)
Selecting previously unselected package cryptsetup-bin.
(Reading database ... 24249 files and directories currently installed.)
Preparing to unpack .../cryptsetup-bin_2%3a2.4.3-1ubuntu1.2_amd64.deb ...
Unpacking cryptsetup-bin (2:2.4.3-1ubuntu1.2) ...
Selecting previously unselected package runc.
Preparing to unpack .../runc_1.1.7-0ubuntu1~22.04.2_amd64.deb ...
Unpacking runc (1.1.7-0ubuntu1~22.04.2) ...
Selecting previously unselected package singularity-ce.
Preparing to unpack .../singularity-ce_4.0.0-jammy_amd64.deb ...
Unpacking singularity-ce (4.0.0-jammy) ...
Setting up cryptsetup-bin (2:2.4.3-1ubuntu1.2) ...
Setting up runc (1.1.7-0ubuntu1~22.04.2) ...
Setting up singularity-ce (4.0.0-jammy) ...
Processing triggers for man-db (2.10.2-1) ...
N: Download is performed unsandboxed as root as file '/home/ OOOO /singularity-ce_4.0.0-jammy_amd64.deb' couldn't be accessed by user '_apt'. - pkgAcquire::Run (13: Permission denied)
10.外部SSDにマウント
OOOOO:~$ sudo mkdir /mnt/ssd
OOOOO:~$ sudo mount -t drvfs D: /mnt/ssd -o metadata,uid=1000,gid=1000,umask=022
-o
オプションを指定することで、マウントされたファイルシステムが適切に扱われ、ファイルのpermissionや所有者情報が維持されます。
11.外部SSDをマウントした場所へ移動
cd /mnt/ssd
12.singularity definitionファイルの作成
singularityのコンテナイメージ(.sif)を作成するための設定ファイル(.def)を作成する。
ここでは、ubuntu 22.04上のAnadconda仮想環境でjupyter notebookを使用するための設定ファイルを用意する。
Bootstrap: docker
From: ubuntu:22.04
%post
ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
apt-get -y update
apt-get -y upgrade
apt-get -y install language-pack-ja git nano zsh vim
apt-get -y install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl
apt-get -y install llvm libncurses5-dev libncursesw5-dev libpng-dev protobuf-compiler python3-pil python3-lxml python-tk
apt-get install libreadline-dev
apt -y install libvips libvips-dev
apt -y install libgl1-mesa-dev
export PYENV_ROOT=/opt/pyenv
export PATH="/opt/pyenv/bin:$PATH"
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash
pyenv install anaconda3-2023.09-0
pyenv global anaconda3-2023.09-0
echo 'export PYENV_ROOT=/opt/pyenv' >> $SINGULARITY_ENVIRONMENT
export PYENV_ROOT=/opt/pyenv
export PATH="$PYENV_ROOT/bin:$PATH"
. $PYENV_ROOT/versions/anaconda3-2023.09-0/etc/profile.d/conda.sh
conda activate base
conda update -n base -c defaults conda
%environment
%startscript
%postには、ベースとなるosのインストール後に実行するコマンドを記入します。ここで、インストールや設定などを行うことができます。
%startscriptには、singularityコンテナ起動時に実行されるコマンドを記入します。
13.singularity イメージファイルを作成
ユーザーがroot権限を持たない場合、下記のようにfakeroot
としてbuild
を実行する。sifファイル名は自分で決める。
singularity build --fakeroot ubuntu_anaconda.sif sg_ubuntu_anaconda.def
14.singularityコンテナを起動する
singularity shell --bind /mnt/ssd:/mnt/ssd /mnt/ssd/ubuntu_anaconda.sif
--bind host:local
でホストとコンテナのディレクトリ間でファイルの共有が可能になります。
anaconda仮想環境でjupyter notebookを実行
15.condaコマンドを使用できるようにパスを設定
. /opt/pyenv/versions/anaconda3-2023.09-0/etc/profile.d/conda.sh
このコマンドでAnacondaがパスに追加され、condaコマンドやその他のAnaconda関連のツールが使用できるようになります。
16.anaconda仮想環境を起動
conda activate base
17.jupyter notebookを実行
jupyter notebook --port 50000