Okada Hiroshi の blog

typo が多いです

python3.7 最小限の web サーバー

今年の中頃からぼちぼち python の勉強を始めています。普段は Jupyter Notebook でデータ処理等のスクリプトとかを書いて練習しています。

今日は気分を変えてミニマムな web サーバーってどうやって書くか調べてみました。

公式リファレンスだと https://docs.python.org/ja/3/library/http.server.html あたりなのですが、do_GET() あたりの書き方がわからなくて、おもったより時間がかかりました。(1時間くらい) web には未だ python2.x の情報が溢れているし、python3.x でもバージョンによって思ったより差異があって調べにくかったです。

Hello とだけ返す web サーバ (python3.7)

#!/usr/bin/env python3.7

from http.server import BaseHTTPRequestHandler, HTTPServer

class MyHTTPRequestHandler(BaseHTTPRequestHandler):

    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/plain')
        self.end_headers()
        self.wfile.write(bytearray('Hello', 'utf-8'))

my_httpserver = HTTPServer(('', 8080), MyHTTPRequestHandler)

try:
    my_httpserver.serve_forever()
except KeyboardInterrupt:
    pass

# ちゃんと閉じないとしばらくアドレスが開放されないので明示的に閉じる
my_httpserver.server_close() 

Ubuntu のコード名とバージョン、元 debian のバージョン

頻繁にググルので自分用のメモです。

バージョン コードネーム 読み 意味 エンドオブライフ Debian Debian コード名
18.10 Cosmic Cuttlefish コスミック・カトルフィッシュ 宇宙のコウイカ 2019-07 10 buster
18.04 LTS Bionic Beaver バイオニック・ビーバー 生体工学のビーバー 2023-04 10 buster
16.04 LTS Xenial Xerus ジニアル・ジリス(ジラス) おもてなしのアラゲジリス 2021-04 9 stretch
14.04 LTS Trusty Tahr トラスティー・タール 信頼できるタール 2019-04 8 jessie

情報元 URL

Docker Hub の指定したリポジトリのタグを全部得る

Docker Hub のリポジトリのタグについてですが、

Webからだと 例えば https://hub.docker.com/r/circleci/node/tags/ のように Tags のページを見ても沢山タグがある場合一部のタグしか見ることができません。

全部のタグの一覧を見る方法は以下の記事のようにするそうです。

docker get list of tags in repository | ForDoDone

上記の記事では sed を使っていましたが jq がインストールされているならば、

$ wget -q https://registry.hub.docker.com/v1/repositories/circleci/node/tags -O - | jq --raw-output '.[].name' 

( circleci/node 所を自分の調べたいリポジトリ名に変更 )

みたいにした方がやっていることが分かりやすいかもしれません。

インフルエンザの予防接種に行ってきました

インフルエンザの予防接種にいってきました。

一応、検索して近所の医院の内、予防接種をやっていると明記してある所で電話予約して行きました。

予防接種は別に内科でなくてもやっているようで、僕が今回接種を受けたのは眼科でした。

www.baba-eyeclinic.com

平日の昼間だったので待ち時間は 0 でした。

値段は 3000円 でした。 なお、地域によっても違うでしょうが、年齢によっては安くなるので、子供には受けさせた方が良いと思います。

f:id:OkadaHiroshi:20181024211218j:plain

snap (Snappy) で Docker をインストールして sudo 無しで実行する方法

今まで、 Docker を Ubuntu にインストールするときには Docker 公式サイトの Get Docker CE for Ubuntu | Docker Documentation の手順の通りにしていました。

けれども snap でインストールれば、docker-compose も同時にインストールできて管理も楽なので、snap を使ってインストールしてみました。

ところが、

$ sudo snap install docker

とすると docker というグループが出来ず、 ユーザーを docker グループに所属させられないので、Docker を使うたびに

$ sudo docker run hello-word 

等と sudo しなくてはならなくなりません。

少しググって Using docker requires sudo · Issue #1 · docker/docker-snap · GitHub というスレッドで、解決方法を見つけました。

要するに

$ sudo addgroup --system docker
$ sudo adduser $USER docker
$ newgrp docker
$ sudo snap install docker

みたいに snap で Docker をインストールする 前に docker というグループを作っておけば良いということです。

これで

$ docker run hello-word 

のように sudo 無しで docker を実行できます。

放送大学に入学しました

10月から放送大学に入学しました。

学生証

入学した理由は数学や科学をもう一度勉強したかったためです。

僕は一応大学は物理科をでているのですが、当時は今ほど大学を卒業するのは難しくなかった上、卒研の実験を頑張ることによって誤魔化したのではっきりいって学力はないです。

社会人になってからも、最低限の線形代数とかはプログラムを作る上で必要だったので復習しましたが、それ以外はサッパリです。

もちろん、インターネット上の情報や講座、本だけで勉強すれば、放送大学より安く勉強できるのですが、やはり単位のための試験があって一定の期間の間に勉強しなければならないというプレッシャーが僕には必要だと思っています。

卒業を目指すかどうか決めていませんが、とりあえず無理のない範囲で単位を取っていきたいと思います。(一応10年いられるので)

2段階認証ワンタイムパスワード (TOTP) クライアント を Ubuntu (コマンドライン) で

最近は多くのサイトが2段階認証を採用していて、僕も気がついたら 10個以上のサービスで使用しています。

一般的には、 Google 認証システムや、その互換アプリをスマホに入れて使っていると思います。 僕は IIJ SmartKey|スライド認証・ワンタイムパスワード管理 というのを使っています。

けれどもスマホを紛失、破損した場合に備え、バックアップとしてPCでも TOTP(時間ベースのワンタイムパスワード) を生成できるようにしておくと便利です。

今回は、ぼくの使っているる Ubuntu での TOTPクライアントについて解説したいと思います。

なお、今回は CLI での作業となります。また安全のため Ubutnu の公式リポジトリの (apt でインストール) できるパッケージのみを使うことにします。

環境は Ubuntu 18.04 ですが、 Ubuntu 16.04 にも同じパッケージが有るので OK だと思います。それより古いバージョンについては調べていません。

パッケージのインストール

インストールするのは、バーコードを読み取るための zbar-tools と、ワンタイムパスワードを生成する oathtool (つづり注意) です

$ sudo apt install zbar-tools oathtool

QR コードの読み取り

2段階認証を有効にすると次のような QR コードが表示されると思います。

f:id:OkadaHiroshi:20181017161854p:plain

もし、これを totp.png のようなファイルに保存したとすると、

$ zbarimg totp.png

でファイルから QR コードを読み込むことができます。

あるいは PC にカメラがついていれば、

$ zbarcam

と入力するとカメラが起動し、QRコードを読み込むことができます。

いずれにしても

QR-Code:QR-Code:otpauth://totp/Amazon%20Web%20Services:sample1@12345678901?secret=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&issuer=Amazon%20Web%20Services
scanned 1 barcode symbols from 1 images in 0.07 seconds

と表示されるので secret= と次の & の間に有ある XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX の部分を記録してください。

参考: Key Uri Format · google/google-authenticator Wiki · GitHub

( 保存した画像や、この文字列が漏れると2段階パスワードが破られていましますので、取扱には注意してください。)

ワンタイムパスワードの生成

$ oathtool --totp=sha1 --base32 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

のように、先程の文字列を oathtool に与えるとワンタイムパスワードが標準出力に表示されます。

このコマンド行を、パスワード管理アプリ等に保管して管理すると良いのではと思います。