blog.monophile.net

コンピュータのこととかのメモ。

山本 一彰 | Takaaki Yamamoto

山本一彰(Takaaki Yamamoto)

東京工業大学において計算機科学と応用数学を学び、 情報科学芸術大学院大学[IAMAS]においてメディア表現を専攻し修了。 2015年にコンビネータ論理を基に計算完備な計算手法 "論理珠算"を開発し、 それを含む体系である"算道"を構成した。 その成果により、2016年に 第19回 文化庁メディア芸術祭 アート部門 新人賞 (文部科学大臣賞) を受賞。 現在はSRE(サイト信頼性エンジニア)として生計をたててている。

技術

Configuration Management Terraform, Ansible, Cloud-Init
Cloud Platform GCP, AWS, Azure, OpenStack
Virtualization, Container QEMU+KVM, Proxmox, Xen, LXD/LXC, Docker, Kata, systemd-nspawn
OS, Distribution Debian GNU/Linux, Ubuntu, CentOS, FreeBSD, macOS, ...
Storage Ceph, GlusterFS, ZFS, Btrfs, ...
Router Linux+Netfilter, Quagga, FRR, VyOS, Cisco IOS, YAMAHA RTX, ...
Switch Dell FTOS, AlaxalA, NETGEAR, ...
SQL MySQL, MariaDB(Galera Cluster), PostgreSQL, BigQuery, ...
NoSQL Elasticsearch, InfluxDB, etcd, MongoDB, ...
WebApps WordPress, GitLab, Redmine, ...
Monitoring Grafana, Prometheus, Nagios, Munin, Zabbix
DNS CoreDNS, dnsmasq, Unbound, BIND9, ...
Misc Kubernetes/Istio, certbot, HAProxy, ...

自称はネットワークエンジニアだが、 Linuxのネットワークと仮想化技術が得意なため、 サーバエンジニアの雰囲気のほうが強いかもしれない。

習得中

Virtualization, Container, OS VirtIO GPU, okd, CDH, CoreOS, ...
Network mVPN, Calico, IoT(6LoWPAN, LoRaWAN), ...
NoSQL BigTable, HBase, OpenTSDB, Redis, ...
Misc Test Engineering, Android Apps, ...

大きな領域では、セキュリティを考慮した複数パブリッククラウドの相互運用に興味がある。

投稿

Docker Hubのレート制限を受けないように mirror.gcr.io を使う

概要

Docker Hub のレート制限 が2020/11/01から施行されるようになったらしい。

  • Free plan – anonymous users: 100 pulls per 6 hours
  • Free plan – authenticated users: 200 pulls per 6 hours
  • Pro plan – unlimited
  • Team plan – unlimited

レート制限はダウンロードする側のパブリックIPアドレスベースでかかるようなので、 同一のIPを使いまわしているオフィスなどでは致命的な状況になることが想像できる。 その制限を回避する方法の一つを紹介する。

回避方法

下記のような対応方法が考えられる。

  • Docker Hubの有料プランを契約し、各サーバもしくは手元の開発環境で認証情報を利用してダウンロードする。
  • 自前でコンテナイメージレジストリをホスティングし、そこを参照するように構成する。
  • ダウンロード元のパブリックIPを分散するために、プロキシを自前で構成する。
  • ミラーレポジトリ mirror.gcr.io を利用する。

それぞれにメリットとデメリットが存在するが、今回は追加の金銭的コストが発生しない 「ミラーレポジトリ mirror.gcr.io を利用する」 方法を紹介する。

この方法には他にもメリットがあり、 既存のアプリケーション周辺の設定(Dockerfile, CI/CD設定) を変更することなく、 Dockerを実行する環境(サーバ, 手元の開発環境)の設定だけを変えれば対応できるため、 比較的簡単に導入できると思っている。

ミラーリポジトリ mirror.gcr.io を利用するための設定

Linux(Ubuntu) の場合

/etc/docker/daemon.json に mirror.gcr.io を使うような設定を行い、 docker デーモンを再起動すればよい。

/etc/docker/daemon.json

上記のファイルを編集した上で、docker デーモンを再起動する。

Docker for Mac の場合

macOSの場合も基本的には上述のLinux(Ubuntu)と同じ。 macの画面の上部のツールバーに表示されているDocker(クジラ)のアイコンをクリックし、 PreferenceDocker Engine と辿り、 下図のように "registry-mirrors": ["https://mirror.gcr.io"] を追加し、 Apply & Restart を行えば良い。

Docker for Mac設定画面
Docker for Mac設定画面

確認方法

実際に mirror.gcr.io 経由でダウンロードが行われているかどうかは ↑のコマンドを打った状態で、別のターミナルで↓を打つ。

このとき、パケットが表示されれば mirror.gcr.io を利用していることを示している。

番外編

Dockerデーモンの再起動できない場合や /etc/docker/daemon.json を編集できない場合は、 イメージを指定する時に、 mirror.gcr.io を付与すればよい。

具体的には↑の場合は、↓のようにイメージ名を指定すればよい。

もしタグを library/busybox で参照したければ、↓のようにタグを打ち直せばよい。

参考

systoolでカーネルモジュールのパラメータを確認する

概要

カーネルモジュールのパラーメータを確認したかったので、systoolを使ってみた。 sysfsの走査がめんどくさい場合によさそう。

install

カーネルモジュールのパラメータを確認する

loopモジュールの場合

sysfsでも同様のことを確認できる。

vhostモジュールの場合

vhostのmax_mem_regionsの値を変えるには、 /etc/modprobe.d/vhost.confを下記のように用意して、 カーネルモジュールのリロードを行えばよい。

/etc/modprobe.d/vhost.conf

options vhost max_mem_regions=512

余談だが、この値を変更しないと仮想マシンにメモリを64枚以上挿せなかった。

参考

QCOW2の中身を編集する

概要

QCOW2形式のイメージを編集する方法のメモ。 今回は例として、下記のCentOSイメージを利用した。

guestfishを使う

QCOW2のイメージを編集するにはguestfishを使えば良いので、↓でインストールする。

そして、編集したいQCOW2のイメージを指定してguestfishを立ち上げると、 guestfish用のシェルが起動するので、その中でコマンドを打つ。

手順は、パーティションを見つけて、マウントし、編集して、終了するだけ。

editコマンドで、環境変数EDITORで指定したエディタによってファイルを編集でき、 catコマンドで変更されたことが確認できた。

また、オプション-iをつけると、自動的にファイルシステムがマウントされるので、 下記のようにしてワンライナで編集することも可能。

参考

OpenSSLで証明書の順番を確認してみる

概要

普段使っているTLS証明書は大抵の場合で中間認証局によって発行されているので、 サーバに設定する証明書は証明書+中間証明書の組み合わせになっていると思うが、 くっつける順番がいつもわからなくなるので、正しく設定できているか不安になる。 そこで、確認する方法を調べてみた。

稼働しているWebサーバの場合

稼働しているWebサーバ (blog.monophile.net) の証明書を確認する場合は↓のようにすれば良い。 (サーバと言いつつも、このブログは CloudFront+S3で動いていて、 さらにAWS CertificateManagerを使っているので、証明書の確認をする必要はほぼない。)

↑を行うと↓が出力される。 ※ 後の説明のために行番号も付与している。

 1  subject=/CN=*.monophile.net
 2  issuer=/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
 3
 4  subject=/C=US/O=Amazon/OU=Server CA 1B/CN=Amazon
 5  issuer=/C=US/O=Amazon/CN=Amazon Root CA 1
 6
 7  subject=/C=US/O=Amazon/CN=Amazon Root CA 1
 8  issuer=/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2
 9
10  subject=/C=US/ST=Arizona/L=Scottsdale/O=Starfield Technologies, Inc./CN=Starfield Services Root Certificate Authority - G2
11  issuer=/C=US/O=Starfield Technologies, Inc./OU=Starfield Class 2 Certification Authority
12

1行目のsubjectを2行目のissuerが証明していて、 4行目のsubjectを5行目のissuerが証明していて、 7行目のsubjectを8行目のissuerが証明していて、 10行目のsubjectを11行目のissuerが証明していることがわかる。

Let’s Encrypt の場合

Let’s Encryptで取得した証明書の場合は fullchain.pem を入力にすればよい。

subject=/CN=example.net
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3

subject=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
issuer=/O=Digital Signature Trust Co./CN=DST Root CA X3

参考

LVMでディスクの拡張と追加をやってみる

概要

LVMのディスク追加と領域拡張の作業があったので、そのための検証のメモ。 環境はUbuntu18.04。 /dev/sda がLVM用のディスクで、/dev/sdbがブートディスク。

ツールのインストール

パーティション /dev/sda1 作成

PV /dev/sda1 の作成

VG /dev/vg00 の作成

LV /dev/vg00/vol00 の作成

今回はシンプロビジョニングをしたかったので、 vg00/tp というシンプールをまず作成。

次にvol00を作成する。 シンプロビジョニングなので、物理パーティション20GiBよりも大きく100GiBで作成した。

lsblkをすると↓のようになった。

LV /dev/vg00/vol00 をXFSで初期化

XFSで初期化してみた。 特にXFSである理由はなくて、手順も通常のディスクと同様。

マウントも普通

パーティション /dev/sda1 をリサイズ

/dev/sda1を 20GiB -> 40GiB にリサイズしてみる。

PV /dev/sda1 をリサイズ

LV シンプール vg00/tp をリサイズ

LV /dev/vg00/vol00 のファイルシステムをリサイズ

パーティション /dev/sda2 の追加

PV /dev/sda2 を追加

VG vg00に PV /dev/sda2 を追加

参考