技術関連の覚書

案件でやったり自宅で試したことの覚書

AWSのp3インスタンスでnvidia-dockerを動かしてみる

今まででなんとなくわかってきたこと

  • kernelとnvidiaドライバの関係は重要
  • cudaやcuDNNのバージョンはアプリに合わせておく
  • nvidiaドライバによってcudaの使えるバージョンが違ってくるので使いたいアプリと整合性を取る
  • nvidia-dockerの挙動はホストOSのnvidiaドライバに依存するっぽい

グラフィックボードによって使えるドライバも決まるので CUDA Zone | NVIDIA Developerで調べましょう。

kernelはドライバをインストールした時のカーネルバージョンを維持します。

sudo apt-mark hold linux-image-generic-hwe-18.04
sudo apt-mark hold nvidia-410

ドライバとカーネルを維持したらCUDAとcuDNNのインストール

debianリポジトリの作り方とapt-get

リポジトリディレクトリ構成 pool/先頭文字/パッケージ/パッケージファイル プロトコルはhttpなので、curlコマンドやブラウザで見ることができる。

debianファイル(*.deb) ファイル名は アプリケーション名バージョンアーキテクチャ.deb そのため、アプリケーション名やバージョン名にアンダーバーを含むとエラーになる。 debファイルはarコマンドで展開できる。 ar xfv xxx_nnn_amd64.deb 展開すると、 data.tar.xz,control.tar.gz,debian-binaryのファイルが展開される。

m@k:~/deb$ ls
alien-arena-server_7.66+dfsg-2+b2_i386.deb
m@k:~/deb$ ar xfv alien-arena-server_7.66+dfsg-2+b2_i386.deb 
x - debian-binary
x - control.tar.gz
x - data.tar.xz

m@k:~/deb$ ls -l
合計 540
-rw-rw-r-- 1 m m 267918 10月 16 06:06 alien-arena-server_7.66+dfsg-2+b2_i386.deb
-rw-r--r-- 1 m m   1226 10月 16 06:08 control.tar.gz
-rw-r--r-- 1 m m 266500 10月 16 06:08 data.tar.xz
-rw-r--r-- 1 m m      4 10月 16 06:08 debian-binary

control.tar.gzを展開してみると

m@k:~/ドキュメント/deb$ tar zxfv control.tar.gz 
./
./md5sums
./control
m@k:~/deb$ ls -l
合計 548
-rw-rw-r-- 1 m m 267918 10月 16 06:06 alien-arena-server_7.66+dfsg-2+b2_i386.deb
-rw-r--r-- 1 m m    908 10月 15  2014 control
-rw-r--r-- 1 m m   1226 10月 16 06:08 control.tar.gz
-rw-r--r-- 1 m m 266500 10月 16 06:08 data.tar.xz
-rw-r--r-- 1 m m      4 10月 16 06:08 debian-binary
-rw-r--r-- 1 m m    997 10月 15  2014 md5sums

controlファイルの内容

Package: alien-arena-server
Source: alien-arena (7.66+dfsg-2)
Version: 7.66+dfsg-2+b2
Architecture: i386
Maintainer: Debian Games Team <pkg-games-devel@lists.alioth.debian.org>
Installed-Size: 695
Depends: libc6 (>= 2.17), libjpeg62-turbo (>= 1:1.3.1), ruby, alien-arena-data
Section: contrib/games
Priority: extra
Homepage: http://red.planetarena.org
Description: Dedicated server for Alien Arena
 ALIEN ARENA is a standalone 3D first person online death-match shooter crafted
 from the original source code of Quake II and Quake III, released by id
 Software under the GPL license. With features including 32-bit graphics, a new
 particle engine and effects, light blooms, reflective water, hi-resolution
 textures and skins, and hi-poly models and stain maps, ALIEN ARENA pushes the
 envelope of graphical beauty rivaling today's top games.
 .
 This package installs the dedicated server for Alien Arena.

md5sumsファイルの内容

128e50e4b29a6ecaf0c19679ed3ed751  usr/games/alien-arena-server
681aac6d18f43ceee95f4cdd3937e4f5  usr/lib/games/alien-arena/alienarena-ded
40ea39225eb350c31fae546452edd64b  usr/lib/games/alien-arena/kill-runaway-crx-ded
9eabea4f9c03016ade9b36b194f85ed9  usr/lib/games/alien-arena/launch-server
d7fdf723796836dff8a5204dfecb48cf  usr/lib/games/alien-arena/rcon
ead48ccbc3a8ac9fd519de698ec81e41  usr/lib/games/alien-arena/svstat
aeee01f2e703d162b2fa8585d37f56cf  usr/share/doc/alien-arena-server/README.Debian
cdc952ef28cc486aa3ffba667f439d0a  usr/share/doc/alien-arena-server/README.gz
2bff351fb97fea83927e3845ff129dde  usr/share/doc/alien-arena-server/README.txt.gz
3a1a897aa71a9e895d7b9d04751b05dc  usr/share/doc/alien-arena-server/changelog.Debian.gz
6bdc94666f4a57876a8a340f7e025569  usr/share/doc/alien-arena-server/changelog.Debian.i386.gz
3be29ea06086683e2abb6190f656fd90  usr/share/doc/alien-arena-server/copyright
89362717257b5ad40f4e1ae2f0bfc0af  usr/share/man/man6/alien-arena-server.6.gz

data.tar.xzファイルを展開する xz形式なので

Linux で tar.xz 形式のファイルを解凍する - Qiitaを参照して展開

xz形式のファイルが展開できない場合、sudo apt install xz-utilsを実行してインストールする必要がある

m@k:~/deb$ tar Jxfv data.tar.xz 
./
./usr/
./usr/share/
./usr/share/man/
./usr/share/man/man6/
./usr/share/man/man6/alien-arena-server.6.gz
./usr/share/doc/
./usr/share/doc/alien-arena-server/
./usr/share/doc/alien-arena-server/README.txt.gz
./usr/share/doc/alien-arena-server/README.gz
./usr/share/doc/alien-arena-server/changelog.Debian.gz
./usr/share/doc/alien-arena-server/changelog.Debian.i386.gz
./usr/share/doc/alien-arena-server/copyright
./usr/share/doc/alien-arena-server/README.Debian
./usr/games/
./usr/games/alien-arena-server
./usr/lib/
./usr/lib/games/
./usr/lib/games/alien-arena/
./usr/lib/games/alien-arena/alienarena-ded
./usr/lib/games/alien-arena/svstat
./usr/lib/games/alien-arena/rcon
./usr/lib/games/alien-arena/kill-runaway-crx-ded
./usr/lib/games/alien-arena/launch-server

md5sumsファイルの内容が、data.tar.xzに格納されているファイルのmd5sumを取ったものの一覧であることがわかる

ミラーリングの仕組み

apt-getの仕組み

ubuntu18.04から変わったファイルのチェック内容 メタファイルの内容 日付の書式

nvidia-dockerメモ

GPUドライバの取得 apt search nvidia-[0-9]{3} この中で最適なドライバを探す

nvidiaのサイトでダウンロードする

apt-getでも取得できるけど、バージョンが古い場合もある nvidiaのサイトでダウンロードして取得する方が良さそう

nvidiaドライバとCUDAのバージョンの関係はシビア CUDAドライバもnvidiaのサイトでダウンロードしたほうが確実

nvidia-docker

nvidia-docker,nvidia-docker2,nvidia-container-toolkitがある nvidia-dockerではGPUコンテナを動かす場合、nvidia-dockerコマンドでないと正常に動作しない

nvidia-docker2はdockerをラップしてdockerコマンドにオプションを追加して使えるような形にしたもの

nvidia-container-toolkitはそのオプションを簡略化して使いやすくなった

インストール ここに書いてあるとおり、自分の環境に合わせてインストールする 前提としては、dockerの19.03以上がインストールされていること 古い場合は一旦削除して新しいdockerに入れ直してからインストールする。

github.com

オプション --gpus でだいたい指定できる

ゴリラ.vim #6で喋ってきた

今回はゴリラ.vim #6 - connpassで喋ってきました。 vim(vi)はLinuxなどではおなじみのエディタですが、Macでも使えるようで周り見渡すとMac率が高かったように思います。

プラグインの話題が多く、自分のサーバーサイドでの使い方というのは少数派のようでしたが、主催のゴリラさんなどからも、馬鹿でかいファイルを開いてはいけないという知見が得られたなどの言葉をいただきありがたく思ってます。

ただ、やっぱり喋り慣れてないのでグダグダ感もあったかなと思います。

それと、時間的には余裕があったのでターミナル開いて実際にメモリがどれだけ使用されるかなどを見せればよかったかなと後になって思いました。

ちょうど今Goを使うことになったので今日知ったプラグインを使ってみようかなというのはこちらが得られた知見なので、互いに別分野の人たちがあつまるといろいろな情報交換ができる。

こうやって楽しみながら仕事にもいかせていくというのが勉強会のいいところだと改めて思った1日だった。

あなたのコンテナ運用大丈夫?コンテナセキュリティの考え方と対応策

あなたのコンテナ運用大丈夫?コンテナセキュリティの考え方と対応策 - connpassに行ってきました。 会場はDevelopers.IO CAFE | クラスメソッドです。

アプリで飲み物を注文、店内でウォークスルー(商品を取った分だけ自動決済される仕組み)のカフェですが、残念ながら閉店後でした。(4月までほぼ毎日行ってたのですが)

今回はAWS専業のクラスメソッド|システム設計・運用を技術支援www.creationline.comの合同企画

Aqua - Container Security, Serverless Security & Cloud Native Securityの話が中心ですが、2年くらい前にDocker meetup Tokyoで話してた人がいたけども、全て英語の回で内容がほとんどわからなかったやつでした。

懇親会でシールたくさんもらったのでPCに貼ってあります(みんなに配ってくださいとお願いされました)

f:id:boctok-ctpoba:20190717015324j:plain:w200
PCシール

AQUA以外のセキュリティツール(OSS)も紹介されていたので今度使ってみようかと思う。

おすすめはTrivy,Dockleらしい

他には、Google Cloudコンテナセキュリティ、NIST Application Container Security Guide、CIS Docker Benchmarkのドキュメントを読むことを勧められたのと、オライリーのKubernetesu Security 今日はちょっと無理だけど明日ちょっと読んでみようかと思う。

elasticsearch勉強会

第32回Elasticsearch勉強会「Elastic Stack 7.x」2019.07 #elasticsearchjp | Meetup

久しぶりに行きました。 気がつくとElasticsearchも7になってました。

なんか前に行ったときには6.1くらいだったような...

セキュリティ機能などがBASICに追加されるなど、無料で使える内容も増えたようです。

今回は内容が多かったこともあり、早口でちょっとついていくのが大変だったのでツイートをまとめてみました。

togetter.com

dockerのubuntuイメージでsystemctlを動かす

本来やるべきではないのですが、せっかくやったのでとりあえず残しておきます。

自前のサービスをDockerで動かすときの書き方

/etc/systemd/hoge.service を作成したあと

# systemctl enable hoge
# systemctl daemon-reload
# systemctl start hoge

という手順でサービスを動かす。

dockerの場合、色々と制限がかかっているため、そのままではsystemctlが動きません。

それを取り除く必要があります。 ちょうどSELinuxをdisableにするような感じになります。

docker run のときに --privileged オプションをつけて /sbin/init を実行することで制限が外れ/sbin/initが動くようになり、systemctlを実行できるようになります。

ほぼすべての制限を外してしまうので、部分的に制限を外したい場合は--device=/dev/xxx を使うほうが良いです。

$ docker run --rm --privileged -it -name hoge hogehoge:latest /sbin/init
## これと別に
$ docker exec -it hoge bash
入ったコンテナ# systemctl start service

と言うように実行するか、 ENTRYPOINTで /sbin/init && systemctl start service を実行できるようなシェルを起動させる

FROM ubuntu

COPY hoge.service /etc/systemd/
RUN systemctl enable hoge

COPY entrypoint.sh /usr/bin
ENTRYPOINT ["/usr/bin/entrypoint.sh"]
#!/bin/bash
exec /sbin/init
systemctl  daemon-reload
systemctl start hoge