2018/09/16

[esp8266]RTOS v3.0

かなり久々だが、ESP8266のRTOS_SDK v3.0がリリースされていたので、Windows10のWSLで動かしてみた。

https://github.com/espressif/ESP8266_RTOS_SDK



だいたいこんな感じだった。

sudo apt install libncurses5-dev flex bison gperf
sudo apt install python-pip
sudo pip install pyserial

cd (project_templateまで移動)
make menuconfig
make all


なお、COMポートの設定はこちらを見ながら行った。
chmodで先に変更しないと、"sudo make flash"ではダメだった。

WSLでシリアル通信をする
http://matsuneko22.hateblo.jp/entry/2017/12/09/144803


IO0をLにして起動後にFLASH書込み実行。

make flash


このproject_templateで何が動くのかと思ったら、printf()するだけだった。
baud rateがデフォルトなので74880bpsで送信しているようなのだが、使っているUSBシリアル変換がその速度をサポートしてないので確認できなかった。
まあ、動いてるんだろう。


いずれはesp-idfと同じ形にするのか、統合するのか、ともかくそういう計画らしい。
私が使ってみたかったMbedTLSのchacha20は入ってなかったので、ライブラリのバージョンもesp-idfより古いものがあるようだ。


まあ、socketとかは使えるので、Linuxで書いたプログラムを移植しやすいのは助かるな。

2018/09/03

[linux][azure]OSディスクサイズを増やした後

会社でAzureを使っている。
月も変わったことだし、少しメンテナンスをしておこうと休日に見てしまったのが間違いだった。。。
ディスクがフルになっているVMがあったのだ。


開発用にVMを立てているだけなので、実はそれほど深刻ではない。
面倒でなければ、VMごと削除して新しく作っても良いくらいだ。
ただ、面倒なので、ディスクを増やすだけで対応させたい。


私はAzureやらAWSやら、そういうものに詳しくない。
なんとなく使えているので、これでいいか、と思っているだけだ。
その程度の知識の人が書いていると思って読み進めていただきたい。


まず、OSディスクサイズを増やすには、VMを停止させる。
そうすると、「設定>ディスク」とクリックして、出てきたOSディスクをクリックした先の画面で変更ができるようになる。
フルになっているものが30GiBになっていたので、ひとまず64GiBにしておいた。


そして保存してVMを起動させる。
で、ここからがよくわからないのだが、なぜかパーティション全体が拡張されるVMと、ディスクだけが拡張されているVMの2パターンが発生するのだ。
OSは、Ubuntu16.04。
gpartedか何かで拡張すればよさそうなものだが、そもそもディスクが空いていないのでインストールもできない。。。
同じようにVMを作ったような気がするけど、何が違うんだろうね?


まっとうな使い方としては、データディスクを追加して、データが大きいものはそっちを使うとかなんだろうかね。
この辺りは勘所が分からん。


仕方ないので、パーティションが拡張されなかったものは、パーティションを追加して対応させることにした。

fdiskでデフォルトサイズのままパーティションを作り、再起動して、mkfs.ext4。


問題は、これからだ。
/etc/fstabをどう書くか。。。苦手なのだ。
こんなのでどうだろうか?

/dev/sda2       /home/xxx/yyyy  ext4    default,discard 0 0

私にとって大切なのは、mountしたディスクにユーザ権限で書き込めるかどうかだ。
が、それ以上に大切なのは、起動するかどうかでs


あ、起動しなくなった。。。


Azureの助かるところは、SSHがだめでもブラウザからログインできることだ。
fstabの設定を消したら、やはりログインできるので、なんかよくないのだろう。

$ sudo mount -t ext4 /dev/sda2 yyyy

これも大丈夫だった。
何が悪いんだ・・・。


はっ、「default」ではなく「defaults」なのか!
無事起動しました。

ユーザからのアクセスも、sudo chownで対応できた。
mountするディレクトリはユーザが作ったから大丈夫かと思っていたけど、mount後にchownしないといかんのかな?

2018/09/02

[python]pythonの仮想環境

名前はよく聞くし、なんとなく仮想的なものを意味している感じがするのは分かっている。
そんなvirtualenvだが、意識的に使ったことが無い。
使い方の説明でコマンドが書かれていて、そのまま使っている程度だ。


歳を取ってきて覚えるのが面倒になってきているのを実感しているが、それに逆らってみよう。


https://virtualenv.pypa.io/en/stable/

virtualenv is a tool to create isolated Python environments.

isolatedとあるので、分離してくれるのだろう。


pipを使っていたので意識しなかったが、パッケージはどこかにインストールされる。
"site-packages/"というディレクトリらしい。
作っているものによってはバージョンが異なるパッケージを使いたいこともあるだろう。
そういうときの問題を解決できるらしい。


らしい、というのは、私がそういう状況に陥っていないからだ。
まあ、pythonで大したものを作っていないという意味でもあるが。。。


そういえば、最近は提供されるものでpython3を使っていることが多い。
pipがpip3になっているかのように、virtualenvもvirtualenv3なのだろうか?


そもそも、pipはpython2で、pip3はpython3なのだろうか?
python2がインストールされているからpip3になっていて、python3だけだったらpipでよいのだろうか?


https://docs.python.org/ja/3/tutorial/venv.html?highlight=pip#managing-packages-with-pip

ここではpipになっている。
このサイトがそう説明しているなら、そうなのだろう。


https://docs.python.org/ja/3/installing/index.html#installing-index

python3.4からは一緒にインストールされるようになったということは、それ以前はpipを単独でインストールしていることになる。
確かに、apt installした気がする。
Ubuntu16.04からアンインストールしてからpipを使ってみよう。

$ sudo pip install --upgrade pip
The directory '/home/xxx/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/xxx/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Collecting pip
  Downloading https://files.pythonhosted.org/packages/5f/25/e52d3f31441505a5f3af41213346e5b6c221c9e086a166f3703d2ddaf940/pip-18.0-py2.py3-none-any.whl (1.3MB)
    100% |████████████████████████████████| 1.3MB 1.1MB/s 
Installing collected packages: pip
  Found existing installation: pip 9.0.1
    Uninstalling pip-9.0.1:
      Successfully uninstalled pip-9.0.1
Successfully installed pip-18.0

うーん、よくわからん。

$ sudo -H pip install numpy
Requirement already satisfied: numpy in /usr/lib/python3/dist-packages (1.11.0)

これはpython3だろう。


ここで、ようやく--versionオプションに気付いた。

$ pip2 --version
pip 9.0.1 from /usr/local/lib/python2.7/dist-packages (python 2.7)

$ pip3 --version
pip 18.0 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

$ pip --version
pip 18.0 from /usr/local/lib/python3.5/dist-packages/pip (python 3.5)

python-pipをアンインストールしてもpip2は使えるらしい。が、pipはpython3のものだ。


https://docs.python.org/ja/3/installing/index.html#installing-index

で、このサイトを見ると、仮想環境を作るのはvenvが標準らしい。
virtualenvはサードパーティの代替え案とのことだ。



https://docs.python.org/ja/3.7/library/venv.html#module-venv

見ながら使ってみよう。
Ubuntu16.04にpython3.5.2がインストールされていたから、3.7にしてみる。

https://launchpad.net/~deadsnakes/+archive/ubuntu/ppa
こういうppaって、何も考えずに信用していいのか悩むな。。

tarでやるのが確実だろうけど、pythonはUbuntuのモジュールも使っているようだから、何か怖い。
pythonのバージョンごと仮想化する方法もあるんだろう。

では、カレントディレクトリに作ってみる。

$ python3 -m venv ./env1
The virtual environment was not created successfully because ensurepip is not
available.  On Debian/Ubuntu systems, you need to install the python3-venv
package using the following command.

    apt-get install python3-venv

You may need to use sudo with that command.  After installing the python3-venv
package, recreate your virtual environment.

Failing command: ['/home/hiroshi/Python/.env1/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']

えっ、venvは標準じゃなかったの??
釈然としないが、apt installでpython3-venvをインストールしてやり直す。


フォルダができたので、移動。
そこから何をしたらいいのか分からんかったが、bin/activateをたたけば良いようだ。
https://qiita.com/fiftystorm36/items/b2fd47cf32c7694adc2e

そうすると、コマンドプロンプトの先頭に環境名が出てくるようになった。

~/Python/env1$ source bin/activate
(env1) ~/Python/env1$

試しにnumpyをpipでinstallさせてみた。bin/activate前は「既にインストールされています」というようなメッセージだけだったのだが、bin/activate後はちゃんとインストールされた。


あれ、どうやって元に戻ればいいんだ・・・と思ったら、deactivateというコマンドがあるようだ。
これはbin/ ではないし、whichでも見つからなかった。
でも、実行すると元に戻った。


ここまでやって気付いたが、使っているpython3はpython3.5.2のままだった。
どうも、"python3.7"とやらないとそうなるようだ。
そして、python3.7-venvをインストールしないとvenvが作れなかった。

python3.7でvenvを実行すると、その中の実行もpython3.7になるようだ。
バージョンはそれで保てそうだ。