write ahead log

ロールフォワード用

CentOS7を使って雑にNATルータを作る

手っ取り早くNATルータが欲しくなった時にNICが複数あるLinuxマシンがあればラッキーだ.

CentOS7でやったことがなかったのでメモっておく.

nmcliをちゃんと使うべきなんだろうけど, 設定ファイルを直接触った.

1. ネットワークの設定

NICそれぞれに対して設定する.

特にNATとか関係なく普通に設定.

内側のネットワークにはGATEWAYを設定しない.

内側(/etc/sysconfig/network-script/ifcfg-eth0)

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth0
UUID=[なんかはいってる]
DEVICE=eth0
ONBOOT=yes
IPADDR=[内側のNATのIP]
PREFIX=24 # [内側ネットワークのマスク]

外側(/etc/sysconfig/network-script/ifcfg-eth1)

TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
NAME=eth1
UUID=[なんかはいってる]
DEVICE=eth1
ONBOOT=yes
IPADDR=[外側ネットワークのNATのIP]
GATEWAY=[外側のゲートウェイのIP]
PREFIX=24  # [外側ネットワークのマスク]

2. ネットワークエラーにzoneを設定

firewalldにはzoneという概念があるそうで, デフォルトでうまく機能していたので今回はそれを使った.

内側(/etc/sysconfig/network-script/ifcfg-eth0)

...  # 一番下に追記した
ZONE=trusted

外側(/etc/sysconfig/network-script/ifcfg-eth1)

...  # 一番下に追記した
ZONE=external

3. アダプタを再起動

# ifdown eth0
# ifdown eth1
# ifup eth0
# ifup eth1

4. 一応firewall-cmdで確認

# firewall-cmd --list-all-zones

trustedだとなんでも許すので, 必要に応じてinternal使うんだろうな.

gitのfirst commitをビルドする

興味わいたのでやってみたけど意外とうまくいかなかったのでメモ.

ソース自体はgithubにミラーがあって, ここから手に入る.

ubuntu trustyの64bit環境でやった.

そのまま素直にビルドしようとすると以下のエラーが出た.

vagrant@vagrant-ubuntu-trusty-64:~/repo/git$ make
gcc -g   -c -o update-cache.o update-cache.c
In file included from update-cache.c:1:0:
cache.h:13:25: fatal error: openssl/sha.h: No such file or directory
 #include <openssl/sha.h>
                         ^
compilation terminated.
make: *** [update-cache.o] Error 1

libssl-devが入ってなくて怒られているっぽいので入れる.

vagrant@vagrant-ubuntu-trusty-64:~/repo/git$ sudo apt-get install libssl-dev

それでも怒られたのでMakefileを編集.

-lcryptoが無いとopenssl関連のビルドが通らず, -lzが無いとzlib関連が通らなかった.

LIBS= -lssl -lcrypto -lz

これでmakeすると(warnningがいっぱい出るが)ビルドできた.

minttyのロケールを設定する

msys2を入れてフォントや透過度を変えて満足して使っていたが, svnをコマンドで使うとロケールがおかしいと怒られた.

$ svn update
svn: warning: cannot set LC_CTYPE locale
svn: warning: environment variable LANG is ja
svn: warning: please check that your locale name is correct

あー, そういや気にした事なかったわー.

と思いつつ設定した.

LANGの設定

まず, ~/.bash_profileへ以下を追記.

LANG=ja_JP.utf8

minttyの設定

~/.minttyrcへLocaleとCharset設定を追加する.

BoldAsFont=no
Transparency=high
CursorType=block
Font=Ricty Diminished Discord
FontHeight=11
Locale=ja_JP     #ここ
Charset=UTF-8    #ここ

これでminttyを再起動すればいい感じに動いた.

両方合わせる必要があるのがポイントっぽい.

SVNで証明書を使う

今更SVNを使う事になったので.

証明書ファイルのパスは絶対パスじゃないと動作しなかった. typoなのか, msys2環境だからなのかはよーわからん.

~/.subversion/serversを以下の通り編集.

ssl-client-cert-file = [証明書ファイルのパス]
ssl-client-cert-password = [証明書ファイルのパスワード]

ubuntuでタイムゾーンの変更

ちょっと古いけど, バージョンは以下でやった.

vagrant@vagrant-ubuntu-trusty-64:~$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=14.04
DISTRIB_CODENAME=trusty
DISTRIB_DESCRIPTION="Ubuntu 14.04.5 LTS"

現在のタイムゾーンを確認する.

$ timedatectl

設定できるタイムゾーンを調べる.

$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
...

設定.何となくニューヨークへ.

$ sudo timedatectl set-timezone America/New_York

Apple Musicへのリクエスト方法

技術ネタじゃないけど.

Apple Musicを使ってるんだけど, 欲しい曲が無い時にリクエストの出し先がわからなくて困ってた.

やっと見つけたので.

iTunes Store Requests

どんどん曲数増えればいいなぁ.

goでbrainfuckを書いた

こんな面白そうな記事があったので作ってみた.

github.com

全ての最適化を実装するのはちょっとしんどかったので(というか途中で飽き始めた)2段階目まで作った.

実行速度を見ると元記事通り, 明らかに差が出るのが面白い.

試行回数1だけど.

$ go test -bench .
BenchmarkFactorSimpleRun-4                     1        56483572100 ns/op
BenchmarkMandelbrotSimpleRun-4                 1        202497152900 ns/op
BenchmarkFactorOptimizedRun-4                  1        24686566000 ns/op
BenchmarkMandelbrotOptimizedRun-4              1        79534122700 ns/op
BenchmarkFactorOptimized2Run-4                 1        13370674300 ns/op
BenchmarkMandelbrotOptimized2Run-4             1        41272916900 ns/op
PASS
ok      _/C_/msys64/home/IMAI/dropbox/lab/gobrainfuck   418.021s

Optimize2段階目時点で5倍くらい早い.

いやー, 面白い.

参考

JITコンパイルでの冒険

Goでベンチマーク - Block Rockin’ Codes