設定したことを忘れないように書いてあります。
先日入れたJupiter notebookのコンテナには、MySQLdbが入っていなかった。 追加でmysql-clientをインストールしようとしたが、下のようなWARNINGやらERROR等が出てモジュールがインストールできない。
sudo docker exec -i -t jupyter /bin/bash :~$pip install mysqlclient Collecting mysqlclient Using cached mysqlclient-2.0.3.tar.gz (88 kB) ERROR: Command errored out with exit status 1: command: /opt/conda/bin/python3.9 -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-zttme2ar/mysqlclient_1fce57df4c9d413491a46cf10d2f3e28/setup.py'"'"'; __file__='"'"'/tmp/pip-install-zttme2ar/mysqlclient_1fce57df4c9d413491a46cf10d2f3e28/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if os.path.exists(__file__) else io.StringIO('"'"'from setuptools import setup; setup()'"'"');code = f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-6yvw5jt2 cwd: /tmp/pip-install-zttme2ar/mysqlclient_1fce57df4c9d413491a46cf10d2f3e28/ Complete output (15 lines): /bin/sh: 1: mysql_config: not found /bin/sh: 1: mariadb_config: not found /bin/sh: 1: mysql_config: not found Traceback (most recent call last): File "", line 1, in File "/tmp/pip-install-zttme2ar/mysqlclient_1fce57df4c9d413491a46cf10d2f3e28/setup.py", line 15, in metadata, options = get_config() File "/tmp/pip-install-zttme2ar/mysqlclient_1fce57df4c9d413491a46cf10d2f3e28/setup_posix.py", line 70, in get_config libs = mysql_config("libs") File "/tmp/pip-install-zttme2ar/mysqlclient_1fce57df4c9d413491a46cf10d2f3e28/setup_posix.py", line 31, in mysql_config raise OSError("{} not found".format(_mysql_config_path)) OSError: mysql_config not found mysql_config --version mariadb_config --version mysql_config --libs ---------------------------------------- WARNING: Discarding https://files.pythonhosted.org/packages/3c/df/59cd2fa5e48d0804d213bdcb1acb4d08c403b61c7ff7ed4dd4a6a2deb3f7/mysqlclient-2.0.3.tar.gz#sha256=f6ebea7c008f155baeefe16c56cd3ee6239f7a5a9ae42396c2f1860f08a7c432 (from https://pypi.org/simple/mysqlclient/) (requires-python:>=3.5). Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output. Using cached mysqlclient-2.0.2.tar.gz (88 kB) :
webで調べると、libmysqlclient-devとpython3-devをインストールしたらインストールできたとの事なので、rootでコンテナに入り追加する。
$ sudo docker exec -i -u root -t 17888e7ab0a0 /bin/bash :~# apt-get update :~# apt-get -y libmysqlclient-dev python3-dev :~#
再度インストールすると、gccが無いというメッセージが出るので、同様にgccもインストール
:~# apt-get -y install gcc
このまま、sudo su - jovyanとしてpipインストールしようとするが、pipにパスが通っていない。 なので、いったんコンテナから抜けて、入り直してインストール。
$ sudo docker exec -i -t 17888e7ab0a0 /bin/bash :~$ pip install mysqlclient Collecting mysqlclient Using cached mysqlclient-2.0.3.tar.gz (88 kB) Building wheels for collected packages: mysqlclient Building wheel for mysqlclient (setup.py) ... done Created wheel for mysqlclient: filename=mysqlclient-2.0.3-cp39-cp39-linux_x86_64.whl size=60658 sha256=137ef154399e4dbd36018340ae5fbaa103076a8edec9ae8b437a0f18cb8d643c Stored in directory: /home/jovyan/.cache/pip/wheels/43/55/d9/a2243d4b624c18c5cba30bf88e0521147498368068cb302532
インストール成功。notebook上で、import MySQLdbしてもエラーとならなくなった。
phthonを勉強しはじめたが、Windowsマシンからlinux上にコンソールでログインしていると、 グラフィカルな表示ができない。Windows上でpython環境を作るか、X-ClinentをWindows側に 用意するかすれば良いのだろうが、いまさら感があり、jupyter notebookをサーバ上に構築することとした。
サーバ上に直接Jupyter Notebookを構築してもよかったが、せっかくDockerを作成したので、Docker上に作成することとした。
インストールは以下のコマンド一発で完了。
~]$ mkdir Jupyter && cd ~/Jupyter Jupyter]$ sudo docker run -v `pwd`:/home/jovyan/work -p 1888:8888 --name jupyter jupyter/scipy-notebook
イメージは、jupyter/scipy-notebookを指定。ローカルに無い場合は勝手にgithubから取得してくる。 今回は、
した。インストール時に、
Jupyter Notebook 6.4.2 is running at: http://17888e7ab0a0:8888/?token=be59e175207c15b9c95a17791445614c75b0f1b92c22980d
と表示されるtokenをログイン時に使用するので控えておく(ただし、私の場合はこのトークンではログインできなかった)。
ログオン画面で、tokenに先程のトークンを指定すれば、ログオンできるはずだが、なぜかエラーとなった。 なので、コンテナ内に入って、トークンを確認。?token以下を入力することでログオンが可能になった。
~]$ sudo docker exec -i -t jupyter cat /home/jovyan/.local/share/jupyter/runtime/nbserver-7-open.html (base) jovyan@17888e7ab0a0:~$ cat .local/share/jupyter/runtime/nbserver-7-open.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="refresh" content="1;url=http://0.0.0.0:8888/tree?token=987654321abcdef987654321abcdef987654321abcdef98" /> <title>Opening Jupyter Notebook</title> <script> setTimeout(function() { window.location.href = "http://0.0.0.0:8888/tree?token=987654321abcdef987654321abcdef987654321abcdef98"; }, 1000); </script> </head> <body> <p> This page should redirect you to Jupyter Notebook. If it doesn't, <a href="http://0.0.0.0:8888/tree?token=987654321abcdef987654321abcdef987654321abcdef98">click here to go to Jupyter</a>. </p> </body> </html>
コンテナとバインドしたディレクトリへの書き込みは、コンテナ上のアカウントのuidで行われるため、 ホスト側にも同じuidのアカウントを作成する。
コンテナ上のuidを確認して、同じuidでホスト側にユーザを作成する。 uidがかぶっていて、そのユーザがこの用途に使えない場合はコンテナ側のuidの変更が必要だろうが、その必要はなかった。
~]$ sudo docker exec -i -t jupyter cat /etc/passwd | grep jovyan jovyan:x:1000:100::/home/jovyan:/bin/bash ~]$ sudo adduser --uid 1000 jovyan
自分とjovyanをグループに追加し、SGIDビットを立てて、対象ディレクトリにグループへの書き込み権限を与える。
~]$ cd ~/Jupyter Jupyter]$ sudo usermod -aG dkrusers my_account Jupyter]$ sudo usermod -aG dkrusers jovyan Jupyter]$ sudo chmod 2775 .
昔からのページのため、WebページのコードセットがSJISのままになっている。 当初は、サーバ上のファイルをsambaでWindows上から編集していたためだ。 今どきはWindowsから編集するにしても、UTFの方が便利なので、コードセットを変更した。
まずは、Webページのコンテンツの文字コードをnkfで変更する。ついでにLオプションで改行コードもLFに変更。
find . -type f -name "*.html" -print0 | xargs -0 nkf --overwrite -w -Lu
次に、htmlヘッダのコンテンツタイプも、sedでShift_JISからutf-8に変更した。
find . -type f -name "*.html" -print0 | xargs -0 sed -i -e "s/Shift_JIS/utf-8/"
依存関係がおかしくなっており、毎回--nobestオプションを付ける必要があったので修正した。
dockerのリポジトリを更新する
$ sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo Adding repo from: https://download.docker.com/linux/centos/docker-ce.repo $ sudo dnf repolist repo id repo name appstream CentOS Linux 8 - AppStream baseos CentOS Linux 8 - BaseOS docker-ce-stable Docker CE Stable - x86_64 epel Extra Packages for Enterprise Linux 8 - x86_64 epel-modular Extra Packages for Enterprise Linux Modular 8 - x86_64 extras CentOS Linux 8 - Extras $
sudo rpm -e docker-ce podman podman-catatonit buildah containerd.io
再インストールにより、dockerが「停止/自動起動しない」状態になったので再度設定。
$systemctl status docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: https://docs.docker.com : : $ sudo systemctl start docker.service $ systemctl status docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2021-04-29 09:57:40 JST; 19s ago Docs: https://docs.docker.com Main PID: 3002904 (dockerd) Tasks: 27 Memory: 51.1M CGroup: /system.slice/docker.service ├─3002904 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock ├─3003055 /usr/bin/docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 1880 -container-ip 172.17.0.2 -contai> └─3003061 /usr/bin/docker-proxy -proto tcp -host-ip :: -host-port 1880 -container-ip 172.17.0.2 -container-p> $ sudo systemctl enable docker.service Created symlink /etc/systemd/system/multi-user.target.wants/docker.service → /usr/lib/systemd/system/docker.service.