togatttiのエンジニアメモ

過度な期待はしないでください.

IPアドレスから、都道府県庁の緯度、経度を取得するスクリプト

Kibana4のグラフ描写で、緯度、経度が必要だったので取得するスクリプトを書いた。

書いたスクリプトはこれ。

IPアドレスから、緯度、経度を取得するスクリプト · GitHub

準備

$ gem install geoip
$ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
$ gzip -d GeoLiteCity.dat.gz
$ wget -O ip_to_lat_lon.rb https://gist.githubusercontent.com/kentatogashi/dcfac7362b847aba9b11998e33e9e3b3/raw/f60384745ac88b290004356f8c8eb91df534e5ef/ip_to_lat_lon.rb

使い方

IPアドレスは、はてなを使ってみる。

$ dig www.hatena.ne.jp +short
59.106.194.19
$ ruby ip_to_lat_lon.rb 59.106.194.19
59.106.194.19 -> 27:大阪府 (135.52, 34.686)

参考

https://gist.github.com/kentatogashi/dcfac7362b847aba9b11998e33e9e3b3

都道府県庁の経度緯度

koshigoeb.hateblo.jp

GitLab8.6.1にアップグレードで出たエラーの対処

運用しているGitLab (8.0.2)のバージョンが古かったので、 8.6.1にアップグレードしたところ、エラーが出たのでメモを残す。

環境

  • OS
  • GitLab
    • アップデート前 8.0.2
    • アップデート後 8.6.1

インストールは、

gitlab/gitlab-ce - Packages - packages.gitlab.com | packagecloud

から、Communication Editionのdebパッケージをダウンロードして、dpkg コマンドを実行していた。

# cd /tmp
# wget -O gitlab-ce_8.0.2-ce.0_amd64.deb https://packages.gitlab.com/gitlab/gitlab-ce/packages/ubuntu/trusty/gitlab-ce_8.0.2-ce.0_amd64.deb/download
# dpkg -i gitlab-ce_8.0.2-ce.0_amd64.deb

GitLab8.6.1にアップグレードで、500エラー

production.logを見ると、pg_trgm が足りないよと怒られていた。

GitLab ver 8.6.* からは、pg_trgmというpostgresqlの拡張モジュールの設定が必要なので、

入れてあげればよい。

$ sudo su gitlab-psql
$ /opt/gitlab/embedded/bin/psql --port 5432 -h /var/opt/gitlab/postgresql -d gitlabhq_production
psql (9.2.10)
Type "help" for help.
gitlabhq_production=# create extension pg_trgm with schema pg_catalog;
CREATE EXTENSION
gitlabhq_production=# \q

念のため、GitLabの設定読み込みと再起動

$ sudo gitlab-ctl reconfigure
$ sudo gitlab-ctl restart

sedで、範囲指定してから、文字列置換を使う

sedで、範囲指定してから、文字列置換する方法を備忘録として残しておく。

例えば、以下のようなファイルがあるとする。

$ cat sample_http.conf
<VirtualHost example.com:80>
  User www
  Group www
  Port 80
  SSLDisable
  ServerAdmin admin@example.com
  ServerName example.com
</VirtualHost>

<VirtualHost example.com:443>
  User www
  Group www
  Port 443
  SSLEnable
  ServerAdmin admin@example.com
  ServerName example.com
</VirtualHost>

そして、ServerAdminをそれぞれ、

に変更したい。

これをsedで、行うためには、こうする。

$ sed -i.bak -e '/<VirtualHost .*:80>/,/<\/VirtualHost>$/s|admin|http-admin|' sample_httpd.conf
$ sed -i.bak -e '/<VirtualHost .*:443>/,/<\/VirtualHost>$/s|admin|http-admin|' sample_httpd.conf

実行すると思い通りの挙動になる。

<VirtualHost example.com:80>
  User www
  Group www
  Port 80
  SSLDisable
  ServerAdmin http-admin@example.com
  ServerName example.com
</VirtualHost>

<VirtualHost example.com:443>
  User www
  Group www
  Port 443
  SSLEnable
  ServerAdmin https-admin@example.com
  ServerName example.com
</VirtualHost>

公式風に書くと、

sed -e '/範囲指定開始文字列/,/範囲指定終了文字列/s|置換前文字列|置換後文字列|' ファイル

実際に実行したコマンドを簡単に見てみると、

$ sed -i.bak -e '/<VirtualHost .*:80>/,/<\/VirtualHost>$/s|admin|http-admin|' sample_httpd.conf

について、/<VirtualHost .*:80>/,/<\/VirtualHost>$/ で、

作業の範囲が、80番のVirtualHostディレクティブ内の内容であることを明示している。

続けて、置換の構文を s|admin|http-admin| 指定している。

Docker Machine にコマンドを追加する

MacOSで使う、 Docker Machine に、gcc、makeコマンド等を入れる方法を調べたので残す。

docker machineで、使われているOSは、TinyCoreLinuxというものらしい。

TinyCoreLinuxでは、tce-loadを使いパッケージをダウンロード、インストールすることができる。

例えば、gccの場合、以下のように使う。

$ docker-machine ssh dev
$ tce-load -wi gcc.tcz
Downloading: gcc.tcz
Connecting to repo.tinycorelinux.net (89.22.99.37:80)
gcc.tcz               93% |*******************************************    | 23681k  0:00:24 ETgcc.tcz               99% 25431k  0:00:00 ETA
gcc.tcz: OK
$ which gcc
/usr/local/bin/gcc

尚、入れられるパッケージは、以下のリストから探す。

TCZ Repository - Tiny Core Linux

gcc, make, cmake等はある。

参考

stackoverflow.com

SeleniumサーバをDockerで構築する

SeleniumサーバをDockerコンテナとして構築する。

すでにGitHubdocker-seleniumというプロジェクトが出ているが、

今回は日本語環境で利用したかったので、ゼロから作り直した。

github.com

使い方

$ git@github.com:kentatogashi/docker-selenium-ja.git
$ cd docker-selenium-ja
$ docker build -t 'kentatogashi/docker-selenium-ja' .
$ docker run -dt -p 4444:4444 -p 5901:5901 kentatogashi/docker-selenium-ja

後記

デスクトップには、xfce4を使用していて、VNCでもつなぐことができる。

ちなみに、MacOSだと便利なことに、openコマンドで、簡単に立ち上げられる。

$ open vnc://selenium@192.168.99.100:5901

entrypointでは、vncserverの起動とXサーバを経由してSeleniumを起動する。

ただ、vncserver起動時にパスワードを対話形式で聞かれてしまうので、少しハマった。

結果的に、vncpasswdで、パスワードを事前に作成しておいて、それをコンテナに置くようにした。

Dockerfileには、こんな記述を書いた

# VNC Password
RUN mkdir /root/.vnc
ADD .vnc/passwd /root/.vnc/passwd
RUN chmod 600 /root/.vnc/passwd

コマンドラインの結果をデスクトップに出力するために、 DISPLAYをきちんと指定が必要なのは初めて知った。

例えば、コマンドラインから、firefoxを実行する場合

$ DISPLAY=:1 firefox

こうしておくと、デスクトップで開ける。

追記(2016/03/19)

Docker Hubに、登録したので、docker pull できる。

https://hub.docker.com/r/kentatogashi/docker-selenium-ja/

参考

DockerのUbuntu14.10の日本語化環境イメージを作成(Ubuntu) | BROKENDISH

CentOS/Ubuntu Linuxで、Oracle JDK 8をインストールしたDockerイメージを作る - CLOVER