systemd-resolvedで特定ドメインのDNSSEC検証を無効にする

arch linuxのsystemd 239から、systemd-resolvedでDNSSECでの検証がデフォルトで有効になったらしい。 手元の環境では、自分で所有しているが、実際に存在する名前を使って権威サーバを立てているために、DNSSECでの検証が失敗してアドレスが引けない問題が…

distrobuilder で lxc 用のイメージを作る

lxc 3.0 ではコンテナイメージ作成に使われていたテンプレートスクリプトが削除されて、 https://github.com/lxc/lxc-templates に移動された。 今後は distrobuilder を使うのがおすすめらしい。 ということで distrobuilder でイメージを作ってみる。 dist…

linux kernel library で遊ぶ

AsiaBSDCon 2018 で linux rumpkernel についての発表があったらしく気になっていた。 Linux rumpkernel - ABC2018 (AsiaBSDCon 2018) from Hajime Tazaki www.slideshare.net 当日は参加していないのでわからないが、linux kernel をライブラリとして使って…

Ceph storage backend bluestore について

分散オブジェクトストレージ Ceph はそのバックエンドとして、ファイルシステムを使う filestore の他に、ブロックデバイスを使う bluestore をサポートしている。 bluestore については公式ブログの記事 や slideshare に概要がある。 大雑把に書くと、メタ…

LevelDB のルックアップ

今更という感じだが、LevelDB について調べた。 table_format にあるように、LevelDB の SST の中身は block に分かれている。 block のなかは key-value の組が複数個入っている。 block ではキーのプレフィックスを圧縮したり block そのものを圧縮してい…

Transactional write の調査: MySQL 編その2

前回は主に redo log を調査した。 InnoDB ではいわゆる redo log は MTR によって実装されていることがわかった。 今回はロールバック周りを見ていく。 redo log があれば ACID を実装することが可能なのは SQLite で調べたとおりだが、InnoDB は MVCC なの…

Transactional write の調査: MySQL 編

引き続き trx write の実装について調べていく。 今回は MySQL を見ている。 MySQL はめちゃくちゃたくさんログを書いているしどれが何をしているのかというのは初見ではわかりにくい。 実際にトランザクションに関係するログは、innodb_log_* 系で設定する …

Transactional write の調査: SQLite wal 編

今回は、SQLite の wal モードについて調べた。 こちらもドキュメントが豊富で、以下の2つが参考になる。 Write-Ahead Logging Database File Format wal モードは、redo log のみを使って永続化を行っている。 書き込みの時に以下のような動作を行う。 wal …

Transactional write の調査: SQLite rollback journal 編

プログラミングをしていると、電源断などの障害時でも不整合が起こらないようにデータを保存したいという要求がしばしばある。 通常こういう要求は DBMS やライブラリなどで担保することになるわけであるが、データ自体が DBMS に収まらない場合、 2 phase c…

64ZiB ほしい!

SCSI プロトコルでは、デバイスの容量を取得するために、READ CAPACITY(10) や READ CAPACITY(16) を提供している。 これらのコマンドは、Logical Block Address(LBA) とロジカルブロックのバイト数でのサイズを返すことができる。 (10) と (16) の違いは、…

VirtIO と TCMU

VirtIO は準仮想化のフレームワークで、ゲストOSで特別なハードウェアを用意して VMM と直に通信する方法を提供してくれる。 実装的には virtqueue というメモリ空間をゲストと VMM で共有することでデータ送受信を可能にしているらしい。 ここまでは良いの…

tcmu と IO スケジューラ

前回、tcmu でブロックデバイスを作ってみたが、思ったより性能が出なかった。 IO completion が遅いのだと思ってスレッド化してみたが、もとより少々遅くなってしまった。 ところがふと、IO スケジューラを確認してみると、cfq スケジューラを使っているこ…

tcmu でブロックデバイスを作る

tcmu は LIO のバックエンドの一つで、UIO を使って SCSI をコマンドをユーザーランドと通信する。 ドキュメントがかなり詳しく書いているのでわかりやすい。 https://www.kernel.org/doc/Documentation/target/tcmu-design.txt SCSI コマンドやデータのやり…

NBD で複数ソケットを使う

NBD では 4.10 から一つのブロックデバイスに対して複数のソケットをアサインすることができるようになった。 github.com github.com 前回使ったコードを適当に変更して複数ソケットをマルチスレッドでさばくようにした。 また fio で適当に計測してみた。 #…

NBD で遊ぶ

Linux の Network block device を使ってユーザーランドブロックデバイスを作って遊んでみた。 github.com バックエンドは単純なメモリを使っているので、前回と同様に fio を使って計測してみた。 rw: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-409…

loopback block device で遊ぶ

linux にはいろんな仮想ブロックデバイスが存在して、ものによっては機能がかぶっていたりする。 今回は、ファイルをブロックデバイスとして見せる、loopback block device で遊んでみた。 まずは伝統的な loop モジュールによるもの。 arch で使うには modp…

EdgeRouter PoE の復旧

EdgeRouter の SNMP が取れなくなっていたので、ログを見たら IO エラーが出ていたので USB フラッシュが死んだらしい。 ネットワークは生きていたので、再起動とかはしないで、代替の USB フラッシュドライブとシリアルケーブルを購入しておいた。 購入した…

bindgen を使って rust binding を生成する

Rust は C API をゼロオーバーヘッドで呼び出せたりして便利なんだけど、当然バインディングは行わないといけない。 crates.io を探せばおおよそのものは見つかるけど、見つからなかったり、見つかっても古かったりして更新したいときがある。 そんなときは…

VAIO Pro 11 に gentoo をインストールした

一度 Gentoo というものを使ってみたかったのでチャンレンジしてみた。 インストール元は、Arch Linux が入っていたので、そこから LVM を Gentoo 用に切り出して、stage3 を使ってインストールした。 Kernel config は Sony Vaio Pro SVP-1x21 のページを参…

UML で hostfs と overlayfs を使う

User mode linux で hostfs でホストのファイルシステムを参照しつつ、書き込みは別の場所にしたかったので overlayfs を使ってみました。 User mode linux (UML) は linux kernel をいろいろ頑張って普通のプロセスとして実行するものです。 ptrace とかで…

VyOS で unbound を利用する

VyOS というより EdgeOS なのだけれど。 自宅の環境はプロバイダのルータと自前ルータ(EdgeRouter)の二段構えなのだが、EdgeRouter の DNS のフォワード先はプロバイダのルータにしていた。 しかしプロバイダのルータの DNS がたまに応答しなくなったり不…

systemd-networkd では netdev だけではデバイスは UP しないらしい

LXC 用の Bridge インターフェースを systemd-networkd で管理しようとして、.netdev ファイルを以下のように作った。 [NetDev] Name=br0 Kind=bridge この bridge に対して physical デバイスで以下のように接続しておいた。 [Match] Name=en* [Network] ..…

SSD が壊れた。

サーバ機の OS 領域として使っていた SSD が壊れてしまった。 モノは、シリコンパワー製の 32GB MLC のドライブ。型番は SP032GBSSDE20S25 らしい。 購入したのは、2012年3月なので、3年と8ヶ月で壊れたことになる。 壊れたのに気づいたのは、ホストが勝手に…

VyOS でプライベート DNS コンテンツサーバを参照する

VyOS は DNS フォワーダを持っているが、標準的な設定ではフォワード先は(当然ながら)フルリゾルバを指定する。 しかし、内部用の DNS コンテンツサーバを参照するだけでフルリゾルバを立てるのが面倒くさい。 特定のドメイン、及びサブドメインだけをフォ…

rust の lifetime

まずは 1.0 alpha リリースおめでとうございます。 リリースしてドキュメント関係が差し替わって Book (旧 guide) に lifetime について乗るようになったぽい。 C++ はリファレンスによって NULL ポインタのデリファレンスを防げるようになったが、ダングリ…

複数の Trait による Restriction

Generics の restriction に複数の trait を指定したい場合、+ を使えばいいらしい。 struct Circle { x: f64, y: f64, radius: f64, } trait HasArea { fn area(&self) -> f64; } trait HasPoint { fn point(&self) -> (f64, f64); } impl HasArea for Circ…

Rust のポインタ

rust が提供するポインタは、以下の3つがあるらしい。 reference Box Rc/Arc また、基本的なルールとして、リーダブル(immutable)なポインタは同時に複数作れて、ライタブル(mutable)なポインタは一度に一つしか作れない。 これをownershipとかいうらしい。 …

rust 始めます

新年になったし、そろそろ1.0が近いらしいので、Rust 始めます。 まずは環境設定から。 手元の環境は、arch linuxなのでpacmanでさくっと入る。 $ sudo pacman -S rust エディタはemacsなのでpackage.elでこれまたさくっと入る。 rust-mode flycheck quickru…