2018/04/22

https proxy があるネットワークで Docker を動かす

時にプロキシを介さないと外に出られないネットワークがあります。
curl とかは http_proxy や https_proxy の環境変数を設定するだけで外に出られるので楽。
具体的にはこんな感じ。

  • $ export http_proxy=http://192.168.100.200:12345
  • $ export https_proxy=https://192.168.100.200:54321

しかし docker は環境変数の設定だけでは外に出られない。
具体的には docker pull ができなかった。
docker pull はデフォルトだと https で docker.io に image を取るので引っかかる。


環境

  • Ubuntu 16.04 LTS
  • Docker: 1.5-1

proxy 設定

素直に公式のドキュメントを見る。
具体的には
  • $ mkdir -p /etc/systemd/system/docker.service.d
  • $ vi /etc/systemd/system/docker.service.d/http-proxy.conf
    • [Service]
    • Environment="HTTP_PROXY=http://192.168.100.200:12345"
    • [Service]
    • Environment="HTTPS_PROXY=https://192.168.100.200:54321"
でOK。
systemctl restart docker をすると proxy 経由で pull ができるようになります。


参考

2018/04/15

tmux 2.7 を全角記号対応させる

2018/03/29 に tmux 2.7 がリリースされました。
ということで自分用の border-ascii 版も update しました。(2.6 の時はこんな感じ)
実際やったことは cherry-pick して細かいところの修正とか。


環境

  • OS: macOS 10.12.6
  • tmux: 2.7-border-ascii (65784831fcf0040b78d68b180c6ca8c1210e4317)
  • utf8proc: 2.1(562edab805b82d66622914d06a5da3f53cd54a17)
  • Homebrew: 1.6.0-19-gf9f9dbc
  • Homebrew/homebrew-core: (git revision 6e3b1; last commit 2018-04-14)


利用方法

  • $ brew tap atton/customs
  • $ brew install atton/customs/utf8proc
  • $ brew install --HEAD atton/customs/tmux
これで縦に画面分割する時の線が - になります。
--------------------------------- みたいな感じですね。


おまけ: update 手順

私は tmux の自分用 fork を持っているので、まずはそれに patch を当ててビルド。
OK なら homebrew の formula にしてインストール。
最後に homebrew の tap としてインストール、という流れで作業をしました。
今回はちょろっとした問題があったので、メモてがら書いておきます。


tmux の make

まずは最新の tmux を落としてきてpatch を当てます。
  • $ git pull upstream # upstream は公式の tmux/tmux です。
  • $ git checkout 2.7
  • $ git cherry-pick border-ascii # patch の 1 commit を拾います
  • $ git checkout -b 2.7-border-ascii
これで patched 2.7 ができました。

次に make します。
  • $ ./configure --enable-utf8proc
  • $ make
すると以下のような文言が。

WARNING: 'aclocal-1.15' is missing on your system.
         You should only need it if you modified 'acinclude.m4' or
         'configure.ac' or m4 files included by 'configure.ac'.
         The 'aclocal' program is part of the GNU Automake package:
         <http://www.gnu.org/software/automake>
         It also requires GNU Autoconf, GNU m4 and Perl in order to run:
         <http://www.gnu.org/software/autoconf>
         <http://www.gnu.org/software/m4/>
         <http://www.perl.org/>
make: *** [aclocal.m4] Error 127
んー。 aclocal はあるのだけれどどうしてかな。
  • $ which aclocal
    • /usr/local/bin/aclocal
  • $ aclocal --version
    • aclocal (GNU automake) 1.16.1
バージョンが 1.15 固定じゃないと動かないとかなのだろうか。

とりあえず調べてみる。
そうすると
  • $ touch *
うーん。タイムスタンプ周りの問題か。
にしてもこんなんで解決……しました。はい。
ということで動作確認。
  • $ ./tmux -V
    • tmux master
  • $ tmux
    • うん。問題無く起動するし画面分割も問題無し。
手で make する分には動く状態になりました。
ということで github の自分用 fork に反映
  • $ git push


formula の修正

さて、お次は brew で install できるようにします。
自分用の formula は atton/customs で持っているのでそこへ修正をかける。
その前に local の repository で install できるかを確認します。

素直に 2.6 を 2.7 に置換して、local で install
  • $ brew install --HEAD tmux.rb
とすると
Error: Calling <<-EOS.undent is disabled!
Use <<~EOS instead.
と怒られた。ので素直に <<~ を使う

もう一度 install
  • $ brew install --HEAD tmux.rb
install できました。 tmux -V は tmux master と出るので少々確認しづらいですが。


homebrew の tap へ反映

最後に homebrew の tap で使えるようにします。
といっても既に repository は作ってあるので、そこに push するだけです。
さて、最後の install 確認。
  • $ brew install --HEAD atton/customs/tmux
問題無く install されました。良し良し。

2018/04/08

CentOS7 で root 以外のユーザも Docker を操作できるようにする

基本的に Docker を使う時は root です。
しかし複数人数で Docker を利用したい場合、全員に root をあげるのは良くない。
調べたところ docker というグループに所属させることで、 root でなくても Docker を操作できるらしい


環境

  • OS:CentOS Linux release 7.4.1708 (Core) 
  • Kernel: 3.10.0-693.5.2.el7.x86_64
  • Docker: version 17.06.2-ee-7, build 925df35


dockerroot group

さて docker group の gid でも見るかと
  • $ cat /etc/group | grep docker
    • dockerroot:x:985:
すると docker group が無い。
が、 dockerroot というものがある。
  • $ sudo gpasswd -a atton dockerroot
して所属させてみる。
しかし、
  • $ docker ps 
すると見られない。


Socket の Owner

どうやら /var/run/docker.sock の owner は root:root らしい。
docker を yum install したら dockerroot group を作るのに何故 owner は root のみなんだろ。
まー root 以外に操作させないように念のため、ってことなのかな。

とりあえず dockerroot が読み書きできるように変更。
  • $ sudo chown root:dockerroot /var/run/docker.sock
そして一旦 exit して
  • $ docker ps
すると見られた。
  • $ docker -it run ubuntu:16.04 bash
しても動く。良し良し。


権限とか

ちなみにコンテナ内部で
  • $ whoami
すると root と言われる。
あと、他人が起動したコンテナも操作できてしまう。

なので
複数人数で Docker 操作+他人のコンテナに干渉しない
場合は wrapper を作るか、他の手段に頼る必要がありそう。


参考

2018/03/03

Python 3 が /usr/local/bin/python に配置されるようになった Homebrew で NeoVim の :CheckHealth をパスさせる

いつの間にか Homebrew の /usr/local/bin/python が python3 になってました。中々気合が入っている変更ですね。
私は Python そのものはあまり使わないのですが、 Neovim が使っているのでいろいろと調整したログ。

さて、この変更がある前の Neovim + Python 周りをまとめると
  • $ brew install python
    • python 2 系が入る
    • $ pip2 install neovim
    • pip2 は /usr/local/bin/pip2
  • $ brew install python3
    • python 3 系が入る
    • $ pip3 install neovim
    • pip3 は /usr/local/bin/pip3
といった感じだったのですが、変更後は
  • $ brew install python
    • python 3 系が入る
    • pip3 は /usr/local/bin/pip
  • $ brew install python@2
    • python 2 系が入る
    • が、keg-only の formula 。
    • python2 や pip2 を使うには  /usr/local/opt/python@2/ などに PATH を通す必要がある
    • 詳しくは $ brew info python@2 
という形になっているようです。
keg-only の formula を使い続けると混乱しそうなので、python@2 はアンインストール。

Python 2 系は system builtin のものを使うことにしました。
root で書き込む必要があるのでしくじった時のダメージが大きいですが……

ということで
  • $ brew uninstall python@2
  • $ sudo easy_install-2.7 neovim
して解決。

具体的な :CheckHealth の結果は
  • before
  • after

といった感じです。:CheckHealth 便利。


環境

  • macOS: 10.12.6
  • Homebrew: 1.5.7
  • Homebrew/homebrew-core (git revision b33d4d; last commit 2018-03-03)
  • NeoVim: 0.2.2
  • python2.7: 2.7.10 (macOS provided)
  • python: 3.6.4 (Homebrew provided)

2017/12/10

CentOS 7 上に CUDA 9 環境を構築する

CentOS7 上に CUDA 9 を入れることがあったのでそのメモ。


環境

  • OS: CentOS Linux release 7.4.1708 (Core)
  • CUDA: 9.0
  • GPU: Nvidia GTX 1070


GPU を認識しているか確認

CentOS 側が GPU を認識しているかどうかは
  • lspci
などで分かります。出力の中にGPUの名前があればOK。


CUDA のインストール

ドライバは入っているものとします。というか特殊なGPUで以外 xorg-x11-drv-nvidia-libs などを入れると動いたり。
この辺は試行錯誤したので minimal な手順が残ってなかったり……。
ということでドライバ周りは飛ばして、CUDA のインストールをします。

まずは NVIDIA の公式サイトから、CUDA をダウンロードします。ここのページでOSやバージョンを選んでいく。
今回は Linux + x86_64 + RHEL + 7 + rpm(network) を使います。

後は出てきたコマンドに従うだけ。
  • wget http://developer.download.nvidia.com/compute/cuda/repos/rhel7/x86_64/cuda-repo-rhel7-9.0.176-1.x86_64.rpm
  • sudo rpm -i cuda-repo-rhel7-9.0.176-1.x86_64.rpm
  • sudo yum clean all
  • sudo yum install -y cuda
rpm(network) だと、インストールの際に依存パッケージも入るので、これでおしまい。
1G とか降ってくるので、コマンドは短かくても結構時間がかかったりします。

なお、記事を書いている時点(2017/12/10) では 7.5, 8.0 も入れることができます。
具体的には
  • $ sudo yum install -y cuda-8-0
のようにバージョンを指定してあげるとOK。
バージョンを省略すると最新の CUDA が入ります。

/usr/local/cuda 以下にいろいろと入るので、PATH などを設定します。具体的には

などですね。


GPU が動いてるか確認

  • $ nvidia-smi
あたりでGPUの状態が分かります。結果は

のように出力されます。この場合GPUの使用率は100%なので、かなり頑張っていますね。


参考