【ubuntu】apptainerでR studio serverを立ててみたい
・お題:すごい人たちは、コンテナというもので仮想環境を作ってうまいこと解析を回しているらしい。apptainerというソフトが計算科学の分野でよく使われるらしいので、これでR studio serverを立ててみたい。
・前置き(言い訳)として、私はズブの素人なので、間違っていても生暖かく見守ってほしい。
・コンテナといえばdockerが有名だけれど、計算科学の分野ではsingularityというソフトがよく用いられており、singularityが諸般の事情でapptainerになったらしい。dockerが一番情報量が多く、多数のイメージも公開されている。Apptainerはdockerイメージをそのまま流用できるだけではなく、非特権ユーザーでも安全にコンテナを実行できたり、ホストディレクトリにアクセスしやすかったり、コンテナを配布しやすかったりといろいろ使い勝手が良いらしい。
・今回は、apptainerをインストールし、dockerイメージのrocker/verseというのを使ってapptainerイメージを作成して、apptainerイメージからR studio serverを起動してみる。
・apptainerのインストールは、以下の公式サイトを参考にした。私はubuntuだった。今思えば、この時点でなにかミスっていたのかもしれない。。
・apptainerが入ったら、rocker/verseからapptainerイメージ(sifファイル)を作成する。
rocker/verseに関しては以下を参照
https://hub.docker.com/r/rocker/verse
イメージをpullする方法は以下を参照
・今回はrocker/verseを使ったので、イメージをちょっと変え、以下のコマンドでpullした(verse_latest.sifができた)。ちなみに、singularityのところはapptainerが動くので、apptainerと入力してもOK。
singularity pull docker://rocker/verse
・次に、マウント先のフォルダ・ファイルをホストに作成する。ブログの仕様で、バックスラッシュが円マークになっていてしまったが、本当はバックスラッシュ。
mkdir -p run var-lib-rstudio-server
printf 'provider=sqlite\ndirectory=/var/lib/rstudio-server\n' > database.conf
・次に、パスワード設定するバージョンで、sifからR studio serverを起動してみた。
PASSWORD='xxxx' singularity exec \
--bind run:/run,var-lib-rstudio-server:/var/lib/rstudio-server,database.conf:/etc/rstudio/database.conf \
verse_latest.sif \
/usr/lib/rstudio-server/bin/rserver --auth-none=0 --auth-pam-helper-path=pam-helper --server-user=choron
・すると、2つエラーが出てきた。全体は長いので、一部を抜粋。
ERROR Could not find details for server user 'choron'
ERROR system error 2 (No such file or directory)
・要はユーザーが見つからないらしい。困った。。どうすればよいかしばらく調べたが、QAサイトで同様の例が報告されているものの、解決策がよくわからない。仕方がないので、ホストのユーザー情報を、コンテナのユーザー情報にマウントしてみた。
PASSWORD='xxxx' singularity exec \
--bind /etc/passwd:/etc/passwd,/etc/group:/etc/group,run:/run,var-lib-rstudio-server:/var/lib/rstudio-server,database.conf:/etc/rstudio/database.conf \
verse.sif \
/usr/lib/rstudio-server/bin/rserver --auth-none=0 --auth-pam-helper-path=pam-helper --server-user=choron
・すると、以下の表示がterminal中に出てきた。

・localhost:8787にブラウザからアクセスしたところ、ログイン画面が起動した。

・ログインすると、見慣れた画面が出てきた。

・まだまだエラーが出まくると思われるが、とりあえず起動したっぽい。なにか根本的なところでミスをしていそうな気がしてならない。。
おわり
【ubuntu】bashのスクリプトを作りたい
・お題:terminalで起動できる簡単なプログラムのファイルを作成してみたい。
・私はど素人なので、間違っていても生暖かく見守っていただきたい。
・ubuntuでよく使われるのが、bashというプログラムソフト(?)らしい。適当なテキストファイルにbashのコマンドを保存して、teminalから実行してみることにする。
・例えば、実行時に渡した2つの数字を足し算するファイルを作ってみた。
#! /bin/bash
NUM1=${1}
NUM2=${2}
let NUM3=NUM1+NUM2
echo "${NUM1}と${NUM2}を足すと${NUM3}になります"
・一番上の#! /bin/bashはシェバンと呼ばれるもので、/bin/bashを使って実行しろというコマンドらしい。今回はbashで実行してほしいので、bashを指定した。
・NUM1とNUM2のところは、関数を実行する際に与えた引数を代入する。
・letは簡単な計算をさせて指定の変数に代入するコマンドで、NUM1とNUM2を足してNUM3に代入させた。
・echoは引数をコマンドライン上に表示するコマンド。
・テキストファイルにtestという名前をつけて、適当なディレクトリに保存する。保存先をカレントディレクトリとしてteminalを起動し、以下のようにプログラムを実行した。
./test 3 4
3と4を足すと7になります
・もしプログラムとして簡単に実行したいのであれば、testファイルがあるディレクトリにPATHを通すか、testファイルをパスが通っているディレクトリに保存すれば良い。
・なお、パーミッションの都合で弾かれる場合は、chmodコマンドで実行権限をtestファイルに付与すれば多分いける。
おわり
【ubuntu】terminalやコマンドのメモ
・お題:ubuntuのterminalの基本的な操作をすぐ忘れるので、メモしておく。
・terminalを立ち上げる。↓で立ち上げると、/home/ユーザー名がカレントディレクトリになる。
ctrl + alt + t
・適当なディレクトリで右クリックして「端末で開く」を選択すると、そこがカレントディレクトリになってterminalが立ち上がる。

・処理を停止する
ctrl + c
・terminalを閉じる
ctrl + d
・カレントディレクトリを表示
・カレントディレクトリ中のファイルなどを一覧
ls
・コマンドのヘルプを見る。
コマンドに--helpオプションをくっつける。
・カレントディレクトリ中のファイルなどを一覧(詳細に見る)
ls -l

dはファイルタイプ(-ファイル、dディレクトリ、lシンボリックリンク)
3つ区切りのパーミッション(読み、書き、実行)×(オーナー、グループ、その他)
ハードリンク数
オーナー
グループ
サイズ
タイムスタンプ
ファイル名
・カレントディレクトリを変える
cd 入る先のディレクトリ
・一つ前のディレクトリに戻る
cd -
・/home/ユーザーのディレクトリに戻る(~は/home/ユーザー)
cd ~
・ディレクトリを作成する
mkdir ディレクトリ名
・ディレクトリをまとめて作成する
・ファイルを作成する
touch ファイル名
・ファイルを削除する
rm ファイル名
・ディレクトリを中身ごと削除する
rm -r ファイル名
・(一時的に)管理者権限で実行する
sudo コマンド
・ツリー形式でディレクトリ、ファイルを表示したいので、treeをインストールする。
sudo apt install tree
・ツリー形式でディレクトリ、ファイルを表示。もしカレントディレクトリが/home/ユーザーなどで実行すると滝のように表示されまくるので、ctrl + cで止める
tree

・ファイルをコピーする
cp ファイル コピー先
・ディレクトリを中身ごとコピーする
cp -r ディレクトリ コピー先
・ファイルの移動する。mvの場合はディレクトリを中身ごと動かすのに-rオプションが不要
mv ファイル コピー先
・ファイルの名前を変更する場合は、場所を変えずに名称だけ変える。
mv ファイル 新しいファイル名
・テキストエディタ(windowsでいうとメモ帳)でファイルを編集する。実行するとテキストエディタが開く。
gedit ファイル名
・パーミッションの変更
chmod パーミッション情報 ファイル名
パーミッション情報がわかりにくい
読み(4)+書き(2)+実行(1)の和を、オーナー、グループ、その他に付与する感じになる。
777なら、すべての権限を全員に与える
764なら、オーナーはすべて、グループは読み書きのみ、その他は読むのみになる(単発で2だけつける状況とは)。
パーミッションを文字で誰になんの権限をどうするか指定する方法もあるが、一旦保留。
おわり