tkuchikiの日記

新ブログ https://blog.tkuchiki.net

HAPrxoy 1.6.0 で導入された DNS の動的名前解決の検証結果

追記(2016-07-13 16:40) Changelog に書いてあるとおり(BUG/MEDIUM: dns: unbreak DNS resolver after header fix)、 動的名前解決ができないバグが修正されました。 HAProxy 1.6.6 で動的名前解決できないバグが修正されていました(Changelog にも書いてい…

zabbix の LLD で gearmand の job を動的に監視する

検証した環境の zabbix のバージョンは、2.0.15 です。 gearmand の監視を zabbix で行う際、 job の数がアプリケーションによって違うと思いますので、 テンプレートを作っても汎用的に使うことができません。 こういうケースで使えるのが LLD(ローレベルデ…

/etc/shadow の hash を生成するコマンドを作りました

perl, php, python の標準モジュールで /etc/shadow の hash を生成する方法 - tkuchikiの日記 で、/etc/shadow の hash を生成する方法を書きましたが、 どの環境でも同じ方法で出来たら楽だと思いましたので、 https://github.com/tkuchiki/encrypt-pw を…

AWS に SSL 証明書をアップロードしたりするコマンドを作りました

aws iam list-server-certificates aws iam upload-server-certificate aws iam update-server-certificate aws iam delete-server-certificate 相当の処理を行う、 https://github.com/tkuchiki/iam-server-cert を作りました。 実行例は、github の README…

golang の spec ファイル

執筆時の go の最新安定版は1.5.1 です。 rpm をインストールすると、 /usr/local/go /usr/bin/go (/usr/local/go/bin/go の symlink) /usr/bin/gofmt (/usr/local/go/bin/gofmt の symlink) /usr/bin/godoc (/usr/local/go/bin/godoc の symlink) をインス…

gaurun の spec ファイル

github.com の spec ファイルを書きました。 rpm をインストールすると、 /usr/bin/gaurun /usr/bin/gaurun_recover をインストールできます。 golang を rpm で入れていない場合は、BuildRequires: golang を削除してください。 v0.4.0 の時点では gopkg.in…

tcpstat の RPM 作成手順

tcpstat は、 UCP/TCP トラフィックの統計情報を出力するコマンドです。 tcpstat -i eth0 -f "dst port 3306" -o "%S %B\n" のように実行すると、eth0 からの port 3306 への outboud traffic(bytes) を出力することができます。 -f のフィルタは、ヘルプに…

LTSV 形式の Web サーバのアクセスログを集計するツールを作りました

LTSV 形式の Web サーバのアクセスログを集計する、 tkuchiki/alp · GitHub を作成しました。 Install https://github.com/tkuchiki/alp/releases から各 OS 用のバイナリを取得できます。 Linux 以外では動作確認していませんが、おそらく動作すると思いま…

sift の spec ファイル

Twitter の TL を眺めていたら、ag より早い sift というものがあるということでしたので、 spec ファイルを書いてみました。 About | sift - a fast and powerful open source alternative to grep ちなみに、Go 製なので普通に使うだけなら tar.gz 落とし…

ISUCON4 予選アプリ(Ruby)を Ubuntu で動かせるようにセットアップするスクリプト

Ubuntu14.04 用のスクリプトです。 GCP の Ubuntu 14.04 で動かした時は、 少し足りない package があって途中で修正して実行しなおしたので、 まっさらな状態から通ることは確認していませんがおそらく動くと思います。 Ruby をインストールしている部分と …

YAPC::Asia TOKYO 2015 で発表してきました

YAPC::Asia TOKYO 2015 に前夜祭から参加してきました。 謝辞 トークを採用してくださった YAPC::Asia Tokyo 2015 実行委員会・運営の皆様、 足を運んでくださった皆様に厚くお礼申し上げます。 発表内容 ソーシャルゲームにおける AWS 移行事例 - YAPC::Asi…

検証用に 1 台のサーバで consul を複数起動する

consul cluster の検証用にサーバを何台も立ち上げるのは面倒ですよね? ということで、1台でなんとかできないかなと思い試してみました。 data_dir 作成 server 3 台、node 1 台を立ちあげられるように、4 つディレクトリを作成します。 $ mkdir -p /var/li…

ステータスが cancelled の状態で動いている Spot Instance を terminate する

Jenkins EC2 Plugin を使っていたら、 ステータスが cancelled なのに動いたままのインスタンスがありました。 今まで cancelled になっていたら terminate されていたので、 cancel = terminate だと思っていたのですが、それは間違いなようです。 詳細は、…

Golang で filepath.Abs に ~(ホームディレクトリ) を指定した時にカレントワーキングディレクトリが先頭についてしまう

検証した環境は以下のとおりです。 $ go version go version go1.4.2 linux/amd64 $ whoami tkuchiki $ touch ~/testfile $ cd /tmp した状態で、 // main.go package main import ( "fmt" "path/filepath" ) func main() { abspath, _ := filepath.Abs("~/t…

ログインユーザ名を取得する

su コマンドで root になった場合などで、 ログインしたときのユーザ名を取得する方法です。 結論から書くと、logname(1) を使えば良いです。 $ ssh ec2-user@ec2-host $ whoami ec2-user $ sudo su - $ whoami root $ logname ec2-user Amazon Linux, CentO…

2015年うるう秒の検証方法と検証結果 (Amazon Linux, CentOS)

日本時間 2015/07/01 08:59:59 から 09:00:00 の間にうるう秒が挿入されます。 検証手順と、どのように対応すれば良さそうか検証した結果をまとめます。 情報は、すべて執筆時(2015/06/18)のものです。検証環境は Amazon Linux 2015.03、Timezone は Asia/To…

指定ディレクトリ以下の git の remote url 一覧を出力する

環境移行用に書いたワンライナーです。実行すると以下のような出力になります。 git clone git@github.com:path/to/repo git clone https://github.com/path/to/repo2 ...あとは、移行後の環境でこれを実行すると、git clone をしてくれます。 注意 git -C …

awscli の profile 名を補完できるようにする patch

aws-cli/1.7.29 用の patch です。Command Completion - AWS Command Line Interface を参考にコマンドを実行すると、 aws コマンドの補完ができるようになります。Configuring the AWS Command Line Interface - AWS Command Line Interface にあるように、…

nginx の location に deny all; と return 200; を書くと return が優先される

server { listen 80 default_server; server_name _; error_page 403 = @403_page; location / { deny all; return 200 "OK"; } location @403_page { return 403 "Forbidden"; } } と書いた時、403 Forbidden が返ってくるかと思っていましたが、 200 OK が…

nginx の HttpGeoModule を使って、特定 ip からのアクセス以外は 503 を返すのを簡潔に書く

特定の ip からのアクセス以外は 503 を返す例です。 nginxで特定ホスト以外からのアクセスをメンテナンス画面にする方法 (2) - (ひ)メモ を参考にさせていただきました。 ありがとうございます。以下が設定です。 geo $geo { default 1; 127.0.0.1 0; } ser…

apache の Directory ディレクティブの重複しているパスを出力する

検証した apache のバージョンは、2.2.29 です。apache の VirtualHost が大量にある環境で、 Directory ディレクティブのパスが重複しており、 意図しない設定で上書きされてしまう問題に苦しめられました。 ので、それを解決する方法です。以下のスクリプ…

GPG Pubkey の Summary を一覧表示する

$ rpm --import http://path/to/gpg-pubkeyのようにして、GPG Pubkey を import すると思いますが、 $ rpm -qa gpg-pubkey* gpg-pubkey-0608b895-4bd22942 gpg-pubkey-a12e206f-52aecba3のように表示されても、どれが何の key なのかわかりにくいと思います…

Jenkins EC2 Plugin で Spot Instance を使ってテストを回す

動作確認した環境は、 Amazon Linux 2015.03 Java 1.7.0_75 Jenkins 1.610 EC2 Plugin 1.27 です。Jenkins EC2 Plugin で Spot Instance を使えるようにするまで、 試行錯誤しましたので、導入方法をまとめました。 Jenkins のインストール 適宜 sudo してく…

perl, php, python の標準モジュールで /etc/shadow の hash を生成する方法

※追記 /etc/shadow の hash を生成するコマンドを作りました - tkuchikiの日記 で環境依存しない方法を紹介しています。 useradd や chef の user resource で password を設定するときに必要になる、 /etc/shadow の hash を生成する方法です。/etc/shadow …

chef の role name と role ファイル名は同じにしなくてはならない

検証した環境は chef 11.16.4 ですが、 後述の通り、12-stable(2015/01/15 現在) でも同様の問題が発生すると思います。 $ cat roles/hoge_hoge.json { "name": "hoge-hoge", ... } $ cat nodes/hoge.json { ... "run_list": [ "role[hoge-hoge]" ] }ぱっと…

chef 12.2.0.alpha.0 から metadata.rb の name attribute が必須に

metadata.rb と書きましたが、metadata.json でも同様です。 以降は、便宜上 metadata.rb と記載します。 該当となる変更箇所 Add validation to Metadata · 89427a5 · opscode/chef · GitHub Make `name` a required attribute in metadata · 2577c6f · ops…

docker run -v で mount したディレクトリを見やすく出力するワンライナー

執筆時の環境は docker 1.3.2 ですが、ある程度バージョンが前後してもそのまま使えると思います。 はじめに docker run -v /data1:/tmp/data とした場合は、 docker host の /tmp/data を mount していることがわかります。 しかし、docker run -v /data1 …

chef で Docker container を provisioning する

検証した環境は Docker 1.3.2、chef 12.0.3 ですが、 バージョンには依存していないと思います。例は、以下の様なファイル構成です。 $ tree . . ├── client.rb ├── cookbooks │ └── nginx │ └── recipes │ └── default.rb ├── Dockerfile ├── nodes │ └── n…

ohai で仮想化環境の種類を取得する

ohai の version は、8.0.1 です。仮想化環境の種類は、以下のように格納されています。 { "virtualization": { "system": "VIRTUALIZATION_TYPE" } }当然ですが、仮想環境下でなければ "virtualization" key はありません。chef で取る場合は、 node[:virtu…

git 2.2.0 の rpm 作成方法

rpm を作成した環境は、CentOS 6.4、git 1.7.1 です。執筆時(2014/12/15) の git 最新版は 2.2.0 でした。 git.spec が極端に変更されない限りは、 多少バージョンが前後しても同様の手順で作業できると思います。perl-Git に、subversion-perl, perl-YAML …