WSLにpython環境構築
普通にやるのはあきらめました。
WSLでやります
PowerShellを管理者で起動
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
あとは Microsoft StoreからUbuntuを入れる(18.04LTSでした)
sshdを動くようにする
apt install openssh-server
portとかlistenは適当に
初期設定とかいろいろインストール
apt-get update apt-get upgrade apt -y install bzip2 openssl git apt install apt-file apt update apt-file search readline apt-get install make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev apt-get install libffi-dev apt install git build-essential libssl-dev libreadline-dev zlib1g-dev x11-apps x11-utils x11-xserver-utils libsqlite3-dev nodejs fonts-ipafont libxml2-dev libxslt1-dev
apt install rcs
これでXが通る(MobaXterm 11.1を使用)
タスクスケジューラで /usr/bin/sudo /usr/sbin/service ssh start をログイン時に実行するようにする
ログイン時に自分のパスワードが必要になるけど、visudoで通るようにするとうまく動かないのであきらめる
python環境
pyenv
別エントリを元に、pyenvをインストール。上のapt-getでだいたいのライブラリは入ります。このあとは、pyenv の git cloneからでおけ。たりないときには検索検索ぅ
画像系のライブラリを入れる
pip install --upgrade pip pip install matplotlib pip install opencv-python pip install pydicom pip install requests pip install watson-developer-cloud
しれっとWatsonのAPIも入れてるし
pyenv と virtualenv の違い
似ているようで違うので自分メモ
CentOS 6 のレガシーな環境は Python 2.6です。
pyenv
一つのシステムに複数のバージョンのPythonを入れるためのもの
- linux(というかCentOSとかRHとか各ディストリ)は割とPythonに依存している
- よって、/usr/bin/python を差し替えるようなインストールは難しい
- しかもPython 2/3の問題もある
- 使いたいpackage によって必要なPythonのバージョンも異なる
というものに対応するためのもの。一つのシステムに複数のバージョンのpython環境を入れるためのもの。
- pyenv global 2.7.15
システム全体で2.7.15を使わせる。linuxではほぼ使わないと思われ - pyenv local 2.7.15
今いるフォルダ(cwd)で、未来永劫 2.7.15 を使う。ここでpip installすると、システム全体の 2.7.15のsite-packageに入る。そのフォルダから上に行くと元から入っている2.6を使う - pyenv shell 2.7.15
現在実行しているシェルで2.7.15を使うexit(ctrl-D)してloginしなおすと、2.6に戻る。
この3つで自分的にはOK
virtualenv
pyenvでインストールした環境から自分専用の環境をforkするもの
ぶっちゃけ自分専用のvm使い捨て環境ならいらないか、と思っていたが、wheelを使えるので一人でも意味がある。
- pyenv virtualenv 2.7.15 2715forTensor
今いるフォルダにpyenvで作成した、2.7.15 の環境から特別な環境を作る。このあとにpipでインストールしたパッケージはシステム全体には波及されない - pip install wheel
wheel(コンパイル済み環境を保存する仕組み)をインストールする。 - pyenv exec pip wheel --wheel-dir=~/wheelhouse -r 2715forTensor.txt
今のvirtualenv環境を保存する。wheel-dirと.txtを保存しておけば下記で使える
別のサーバでpyenv/virutalenvを入れたあと
- pyenv virtualenv 2.7.15 275forTensor
pip install -r 2715forTensor.txt --use-wheel --no-index --find-links=~/wheelhouse
別のサーバとかでも上の環境が復元できるはず。インストール漏れとか間違いがかなり減るはず。
これくらいで自分はに充分かな。
cloudn で NFSサーバを構築
特に難しいことはないです。
yum -y install nfs するとか普通の話。検索すれば方法はすぐわかるはずです。
ハマりポイントはあくまでも自分のアホさ
cloud n では セキュリティグループという名前の仮想ファイアーウォールがあるのですが、それはサーバというよりアカウント単位での管理ができ、複数のサーバを同一のファイアーウォール設定で守ることができます。
普通のサーバならfirewalld か iptables でやるはずのことがGUIで、かつ同一用途のサーバに対して一括でできるので便利といえば便利です。
で、nfs v4 なのでとある単一ポートを特定のサーバに解放すればオシマイのはずですがどうしても疎通が取れず、rpcxxを足したり、しまいにはずどーんとデカく穴を開けてもダメ・・・
はい、アカウントが違いました。ssh 的には普通に相互の疎通ができるのでぽんやりしてたといわれても「ぼーっと生きてんじゃねーよ」と言われてもしかたないっす。
用途別に親アカウントからサブアカウントが発給できますが、nfsdを立てたアカウントがクライアント側のアカウントとは別のものでした。しかもいわゆるFQDNではhostname.hoge.comのhoge.comは同一なので気付くのが遅れた次第……
我ながらアホなミス。
しかし、これ、SPoFになるな・・・どうしよ。
いまさら centos6 + cloud n ObjectStorage
ハマりポイントが多すぎる(笑)
とりあえずpyenv のインストールから
■ざっくり足りなさそうなモジュールをyumで入れる。
# yum -y install gcc bzip2 bzip2-devel openssl openssl-devel readline readline-devel sqlite-devel tk-devel git
■ pyenvインストール
# cd /usr/local/
# git clone git://github.com/yyuu/pyenv.git ./pyenv
# mkdir -p ./pyenv/versions ./pyenv/shims
# cd pyenv/plugins/
# git clone git://github.com/yyuu/pyenv-virtualenv.git
■ pyenv 環境を profile.dに入れる
# echo 'export PYENV_ROOT="/usr/local/pyenv"' >> /etc/profile.d/pyenv.sh
# echo 'export PATH="${PYENV_ROOT}/shims:${PYENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/pyenv.sh
■ 上記環境変数をsudoしても引き継がれるようにする。
# visudo
----- 編集 -----
#Defaults secure_path = /sbin:.........
Defaults env_keep += "PATH"
Defaults env_keep += "PYENV_ROOT"
■ 確認
# pyenv --version
■ curlがデフォルトでは古すぎるので入れる
■ 2.7.9以降ならSNI対応。2.7.15が 2.7のfinal release
# pyenv install 2.7.15
# 10分くらいはかかる
■ ワーキングディレクトリを作って、そこでのpythonを設定
一般ユーザにもどる
$ mkdir py2715(なんでもよい)
$ cd py2715
$ sudo pyenv local 2.7.15
これでそこのフォルダでは 2.7.15が動く
■ 準備
最初の儀式
$ sudo pip install --upgrade pip
$ sudo pip install awscli
$ aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:
Default output format [None]:
最初の二つにはCloudnポータルのAPIアクセスキー・秘密キー管理のページで見えるものを入れる
あとの二つは空白でOK
■ObjectStorageの古いシグネチャバージョン対応
$ vi ../.aws/credentials
最後に以下の二行を追加
s3 =
signature_version = s3
■みてみる
$ aws s3 --endpoint-url "https://str.cloudn-service.com/" ls
2018-12-03 17:35:44 test-bucket
見えました・・・
非常に間抜けな自分
cloudn の某サーバがリブートしていた。まぁ、故障はあるものだし、それはよい。アホだったのは自分。
まず、メールが届かなくなった。なぜか?
cloudn に置いていたのは、bindサーバ。なぜDNSサービスをつかわないかというと、ドメイン数が無駄に多くて、1000円(税別、以下同様)ではおさまらないからだ。あと、WebGUIがとろくて、ちょっとうんざりするというのもある。APIは面倒だし。
しかし仮想ファイヤウォールとしてセキュリティグループがそこそこ優秀なので、primary のDNSを置くにはよいか、という判断で設置した。去年、2014年10月からは月額450円だし。
secondaryは大阪にあると自称している別の……わざわざだまってることもないから書くとFreebit のやはり500円未満サービスを利用している。こっちはOpenVZなのでなんでもできるけではないが、安価なのと地理的要因と、元DTIユーザだったこともあって利用していたミニWebサーバを流用したわけだ。
メールサーバはさらに別のクラウド。これはどこか書かない。場所も知らない。ある程度のストレージ容量が欲しいので、これだけ1000円を越えてるプランだ(2000円までは行かない。消費税を足しても)。
実はここを契約する前にカゴヤを試してみた。容量は充分だったが、こちらもOpenVZだったのでユーザ数制限がキツく、崩壊した。2ヵ月ほど遊ばせておいたが、2014年の年末くらいに解約した。POP前提のメールサーバのような容量のわりにユーザ数が必要なものにはOpenVZはまったく向かないことを学んだ。そんなこと学びたくなかったがしかたない。
話を戻すと、メールが届かなくなった理由は、cloudnにおいてあったサーバ(DNS-p)のchkconfig忘れという超間抜けな理由だった。
しかし、freebit にセコンダリ(DNS-s)があるじゃないか、と思ったが、ともかく疎通しないものはしかたない。ログインしようにも名前解決できないので、IPでsshしてログイン、
service named start
で、解決した。じゃぁ、なぜDNS-sは働かなかったのか?と思い、そちらにログインすると理由はすぐ判明。
ipconfigで締めだしてるし(笑)。そら、セコンダリとして動くはずないわ。なぜかPOP3sは通るように書いてあるが、dovecotはyum すらしてないぞ。
というわけで、相手のMTA側にキャッシュが残ってないとメールが届かない、という状況になりました。で、MXの書き換えを年末に実施したときのままの設定で、TTLが300のまま。そら、たいがいキャッシュされてないわな……
というわけで間抜けなのは自分だったというオチです。
cloudnの障害報告はメールで来るので、それが届いたのは自分でDNSの復旧がおわった後でした(笑)。