Last Update : 2022.05.05

おボえとケよ ページタイトル

備忘録・設定集などを覚えとくためにページにしてあります。
ほかの人にも役立つかと思うかもしれないとおもって公開してあります。
公式に情報をまとめている所は多いのだけど、各自がまとめる事+サーチエンジンにより負荷分散が図れるのではと思ったりして。
トップページでは<pre>タグを<blockquote>に変換して折り返しているので、見にくかったら右のエントリ一覧をクリックしておくんなまし

mdadmソフトウェアRAIDが、initramfsステージの起動時に再構築されない(linux)

rocky linuxに移行したところ、再起動で起動しなくなった。その時はリカバリを行い、何とか起動できるようになったが、その時の直し方が悪かったのか その後ブレーカーダウンでサーバが落ちたときに起動できなくなった。

同じように復旧をさせてみたのだが、何度トライしてもgrub -> initramfs移行時にraidが再構築されずに、Emergency mode になってしまう。

その状態でraidを再構築すれば、正しく構築できるので理由がまったくわからなかった。

Bluetoothデバイスが見つからない(pc)

突然Bluetoothマウスが動かなくなり、バッテリー切れかと電池を交換しても復旧しない。 デバイスマネージャで見ると、bluetoothデバイスがなくなっていた。 替わりに「ユニバーサル シリアル バス コントローラ」に「不明なusbデバイス(デバイス記述子要求の失敗)」となっているデバイスが現れていた。 そのデバイスの詳細を確認すると、「全般」の「デバイスの状態」に「問題が発生したのでこのデバイスは停止しました。(コード43)」と記述されていた。 このような場合の復旧方法をメモしておく。

修復手順

  1. メニューバーの虫眼鏡アイコンをクリックし、「ここに入力して検索」に「デバイスマネージャ」と入力、検索されたデバイスマネージャを開く。
  2. 「不明なusbデバイス(デバイス記述子要求の失敗)」となっているデバイスを右クリックし、「アンインストール(U)」を選択。
  3. デバイスマネージャの表示ツリーの一番上のマシン名を右クリックし、「ハードウェア変更のスキャン(A)」を選択、実行。

以上で、bluetoothデバイスが正常に認識された。

トライ&エラーしている時にアンインストール&再起動では認識されなかったので、電源の不安定状態などがあったのかもしれない。

Jupiter Notebookにライブラリを追加する(linux)

先日入れた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してもエラーとならなくなった。

Jupyter notebookをdockerで構築する(linux)

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から取得してくる。 今回は、

  1. -v `pwd`:/home/jovyan/work で docker内の/home/jovyan/workディレクトリを、ホスト側の~/Jupyterにバインド
  2. Docker側の ポート:8888 を ホスト側で開いている 1888に バインド

した。インストール時に、

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ページ上のMarkDown文章をHTMLに成形して表示する。(network)

作業メモなどは、すべてMarkDownで記述し、保管しているディレクトリをApacheで公開している。 この文書をブラウザで開くと単なるテキスト表示されてしまうが、これを成形した形で表示したい。

同じようなことを考えている人はおり、それを参考にして実施したが,全く同じでは動作しなかったので修正点などをメモとしてする。

インストールのための環境を整える

composerをインストールする

markdown文書を成形するために、php-markdonwをインストールする。 インストールにあたって、依存性管理のために、まずはcomposerをインストール。

https://getcomposer.org/download/ に従い、以下のコマンドを実施。

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" $ php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"

composer-setup.phpを実施するとphpのjson拡張が無いといわれる。 当方、CentOS-8なので、以下のパッケージをインストールした。

$ sudo dnf install -y php-json

composerを/var/lib/php/composerにインストール。

$sudo php composer-setup.php --install-dir=/var/lib/php/composer All settings correct for using Composer Downloading... Composer (version 2.0.13) successfully installed to: /var/lib/php/composer/composer.phar Use it: php /var/lib/php/composer/composer.phar

グローバルで使えるように/usr/binにシンボリックリンクを張る。これは直パスで打つなら必要のない作業。

$ sudo ln -sf /var/lib/php/composer/composer.phar /usr/bin/composer

markdown -> html化 ツールをインストール

いくつか種類はあるようだが、参考にしたページにあるphp-markdownをインストール。 インストール先は/var/lib/php/composerとした。

$ cd /var/lib/php/composer $ sudo composer require michelf/php-markdown Using version ^1.9 for michelf/php-markdown ./composer.json has been updated Running composer update michelf/php-markdown Loading composer repositories with package information Updating dependencies Lock file operations: 1 install, 0 updates, 0 removals - Locking michelf/php-markdown (1.9.0) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Downloading michelf/php-markdown (1.9.0) - Installing michelf/php-markdown (1.9.0): Extracting archive Generating autoload files

markdownを保存しているディレクトリの.htaccessに以下を追加する。
AddTypeにより、拡張子".md"の場合に、コンテンツタイプとして"text/markdown"を追加し、 Actionディレクティブにより、"text/markdown"に対して、指定したファイルを実行する。
Actionで指定したmd.phpは、phpが動作するディレクトリに置き、ドキュメントルートからのパスで指定する。

AddType text/markdown md Action text/markdown /Memo/md.php

md.phpを上記の場所に設置する。内容は以下のとおり。

<?php set_include_path(get_include_path().PATH_SEPARATOR."/var/lib/php/composer/vendor/"); require 'autoload.php'; use Michelf\MarkdownExtra; if ( isset($_SERVER['PATH_TRANSLATED']) ) { $file = realpath($_SERVER['PATH_TRANSLATED']); $ext = substr($file, strrpos($file, '.') + 1); $title = $_SERVER['REQUEST_URI']; } if ( $file and is_readable($file) and strtolower($ext) === 'md') $body = MarkdownExtra::defaultTransform(file_get_contents($file)); else $body = '<p>cannot read file</p>'; header('Content-Type: text/html;'); echo '<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <link rel="stylesheet" type="text/css" href="/css/markdown.css" title="MarkDown Style" /> <title>'.$title.'</title> </head> <body> ' . $body . ' </body> </html>'; ?>

include_pathは、php.iniに記述しても良いが、md.phpに記述することとした。 include_pathは、composerのautoload.phpがある場所を、URLではなくローカルディレクトリのパスで指定する。 composerでインストールしたパッケージは、autoload.phpをrequireすることで使用できる。

useでMarkdownExtraではなく、Markdownとすると、TraditionalなMarkdown記法となる。 あえてTraditionalなフォーマットを指定する理由がないので、MarkdownExtraを使用した。
MarkdownExtraでは、テーブルタグも利用できる。

stylesheetをlinkタグで指定しておき、自分の見やすいようにcssで成形する。


mail to !-+-!oota@thn.ne.jp!-+-! Dummy symbols inserted.