Folioscope

シェルスクリプトでIPアドレスの計算

sh

IPAMやDHCPサーバーを実装するとき、IPアドレスを機械的に生成するために、IPアドレスの計算をする事があります。 例えばIPAMがラックやデータセンターから機械的にIPアドレスを割り当てたり、DHCPサーバーが連番のIPアドレスを割り当てたりします。 この記事ではシェルスクリプトでIPアドレスを計算する方法を紹介します。

IPアドレスと数値の変換

IPアドレスを計算する上で欠かせない操作が、IPアドレスと数値の相互変換です。 IPv4アドレスは長さ4のバイト列に過ぎませんが、通常は192.168.0.1 のように人間の扱いやすい文字列で表現します。 一方IPアドレスを計算するには、IPアドレスをバイト列や32ビット数値などの、計算機で扱いやすい形に変換します。 IPアドレスを数値として扱えると、数値演算でIPアドレスを計算したりネットワークアドレスを求めやすくなります。

実はPythonは標準で、IPアドレスと数値の相互変換を簡単にできます。

import ipaddress
ipaddress.ip_address('192.168.1.200') + …
もっと読む…

オープンソース活動はドキュメントの修正から始められる

Readme Patch

先日、Vim VixenでREADME修正のPull Req.をいただきました。

あまりにも嬉しくて勢いで記事を書きました。

ドキュメントのメンテナンスは面倒くさい、なのでドキュメントの修正は嬉しい

ドキュメントのメンテナンスはソースコード以上に面倒です。 個人プロジェクトなんかは、作ってる本人は仕様が頭に入ってるので、文章が無くなったら引き継ぎができないなんてことはありません。 READMEが無くとも自分は全く困ってなかったので、これまでもメンテナンスは手を抜いてました。 さらに母国語でないと慣れば、なおのことメンテナンスは面倒です。

これは個人じゃないプロジェクトでも共通することだと思っています。 ドキュメント専門のチームが、ユーザーマニュアルをメンテし続けているのなら話は別ですが、 …

もっと読む…

Linuxのユーザー管理をetcd上でする

週末の自由研究で、Linuxのユーザー管理をetcd上でするサービスを書いてみました。

複数のマシン間でユーザー情報を管理するサービスといえば、LDAPが有名所です。 しかしLDAPは重装備すぎるので、もっとlightweightなサービスができないかと考えてみました。 そこでPoCですが、etcdをバックエンドにユーザー管理をしてみました。

ueokande/etcd-passwd Linux user managerment on etcd github.com

NSSサービスを書く

Linuxのユーザー情報を、/etc/passwd以外を参照するには、Name Service Switch (NSS)を設定します。 NSSとは、ユーザーやグループ、ホスト名を参照する時の参照データベースを切り替える仕組みです。 その設定は /etc/nsswitch.conf にあります。

たとえば以下のような設定があります。

# /etc/nsswitch.conf
passwd: files …
もっと読む…

Vim Vixen 0.13をリリースしました

Vim Vixen WebExtensions

お待たせしました。先日Vim Vixen0.13をリリースしました。

このバージョンでは多くの機能が追加されました。 主な機能を簡単に紹介したいと思います。

ページソースの表示

現在のタブの、ページソースを表示できるようになりました。 デフォルトはgfに設定されます。 古いバージョンから更新したユーザーは、以下の設定を設定画面の"keymaps"以下に追加してください。

{
  "keymaps": {
    "gf": { "type": "page.source" }
  }
}

リンクフォローの強化

リンクフォロー(Fキー)で開くタブの機能が強化されました。 新たなタブをバックグラウンドで開くことができるようになりました。 この機能はキーマップで変更可能です。

{
  "keymaps": {
    "F": { "type": …
もっと読む…

WebExtensionsでE2Eテストを自動化した

WebExtensions

Running Screenshot

Vim Vixenの開発では、開発スピードではなく品質を重視しており、毎リリース直前にフルリグレッションテストを行ってます。 それらの試験を手動で行っており、各リリース前にQA Pull Req.に試験結果を記録してます。

現在の試験項目は100を超えてます。 品質は大事にするとはいえ、各リリース毎に手動で試験を行うのは、地道で退屈な作業です。 今後機能追加などで更に試験項目数や複雑な試験が増えることは予想されます。 このままでは将来、同様の品質を保つのは難しいと思い、Vim VixenでもE2Eテストの自動化を始めることにしました。

構成

WebExtensionsをテストするには、テストのセットアップや実行結果を観測するために、WebExtensionsと同等の権限が必要です。 Karma …

もっと読む…

etcdでleader electionしようと思ったら難しかった話

あるクラスタ内に複数ノードがあり、そのうち高々1ノードのみがサービスを提供する仕組みを作りたいと思いました。 これはetcdを使うとかんたんに実装できるんじゃないかとおもい試してみました。

etcdにはcompare and swapのAPIがあり、キーの前の値や無い時のみにキーを更新できます。 それを使ってノード間でleader electionして、leaderになった後にサービスを起動する仕組みを考えました。 他の場所でもよくみる方法だったので、これを使えば実現できるんじゃないかと思い実装してみました。

試しに次のようなシェルスクリプトを書いてみました。 結果から言うと、これは正しく動きません

#!/bin/sh

ID=$(uuidgen)
LEADER_KEY="localhost:2379/v2/keys/master"
TTL=5 …
もっと読む…

Vim Vixenの開発について

Vim Vixen WebExtensions

昨日Vim Vixen 0.10をリリースしました。 おかげさまでVim Vixenのユーザ数も8,000人に届こうとしてます。

このVim Vixen 0.10では、クリップボードからURLを開く、Inputにフォーカスするなど、新たに4つのキーマップが新たに加わりました。 またプロパティという仕組みを追加し、スムーズスクロールと、ヒントのカスタムキーマップを設定できるようになりました。 詳しくはリリースノートをご覧ください。
Vim Vixen – Add-ons for Firefox

この記事ではVim Vixenの開発について紹介します。 Vim VixenはGitHub上で開発していおり、IssueやPull Requestは大歓迎です。

ueokande/vim-vixen Accelerate your browsing with Vim power!! github.com

開発環境

Firefox Add-onはJavaScriptで記述します。 現在はサポートしている動作環 …

もっと読む…

Kafka Replication Deep Dive

Apache Kafka

この記事は Distributed computing Advent Calendar 2017 20日目の記事です。

Apache Kafka Logo

Kafkaのレプリケーションは、高可用性と高信頼性を実現するための、重要な機能の1つです。 この記事では、Kafkaのレプリケーションの仕組みについて紹介します。

レプリケーションの基礎

Kafkaのデータストリームの最小単位はパーティションです。またレプリケーションもパーティション単位で行われます。 Kafkaのレプリケーションの情報は、ZooKeeper上に保存されています。 レプリカの配置情報は、${prefix}/brokers/topics/${topic} にJSONで保存されます。

{"version":1,"partitions":{"0":[0,1 …
もっと読む…

Kafkaの管理ツールを読む - kafka-broker-api-versions.sh編

Scala Apache Kafka

この記事は Distributed computing Advent Calendar 2017 の13日目の記事です。

Apache Kafka Logo

Kafkaのブローカー間、あるいはブローカーとクライアント間の通信は、TCP経由のバイナリプロトコルです。 それぞれの通信はAPIとして定義されており、どういうフォーマットのリクエスト・レスポンスなのかが定められています。

APIにはバージョンがあります。 ブローカーがサポートするAPIのバージョンを取得するには、Kafkaに標準に同梱されている kafka-broker-api-versions.sh が利用できます。 kafka-broker-api-versions.sh はクラスタ内に存在するブローカーのリストと、それぞれのブローカーがサポートするAPIバージョンを取得します。

$ …
もっと読む…

Kafkaの管理ツールを読む - kafka-topics.sh編

Scala Apache Kafka

この記事は Distributed computing Advent Calendar 2017 の6日目の記事です。

Apache Kafka Logo

Apache Kafkaにはクラスタの管理ツールが含まれており、ユーザはこれらのツールを使ってトピックやオフセットを管理できます。 コードは規模的にもあまり大きくないので、Kafkaの勉強にはちょうどいい教材です。 Kafkaの内部構造を知ることで、障害発生時に原因を特定しやすくなります。

この記事では、トピック管理用の kafka-topics.sh の、よく使う以下の4つの操作を追ってゆきます。 なお今回読むコードは、1.0.0を対象にします。

# トピックの一覧表示
kafka-topics.sh --list --zookeeper localhost:2181/kafka 

# トピックの作成
kafka-topics.sh …
もっと読む…
< Page 2 of 24 >