JSON Schemaを使ってみる
やること
JSON Schemaで項目間のチェックをする。 例えば、field1が1の場合に、field2はAであることをチェックする。 JSON Schemaで表現すると以下のようになる。
{ "type": "object", "properties": { "field1": { "type": "string" }, "field2": { "type": "string" } }, "if": { "properties": { "field1": { "const": "1" } } }, "then": { "properties": { "field2": { "const": "A" } } } }
試した結果
- Ruby Gem
- https://www.jsonschemavalidator.net
- 期待通り。
Kubernetesをちょっとやってみる。
やること
Kubernetesが気になったため、ちょっと動かしてみる。
minikubeを使うと1ノードのKubernetesが使えるらしい。 とりあえずコマンドはコピペ。
curl -Lo minikube https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 && chmod +x minikube && sudo mv minikube /usr/local/bin/
minikube startしたら、kubectlがないと言われたので、これもコピペでインストール。
curl -Lo kubectl https://storage.googleapis.com/kubernetes-release/release/v1.10.0/bin/linux/amd64/kubectl && chmod +x kubectl && sudo mv kubectl /usr/local/bin/
とりあえず起動はできるっぽい。
minikube start # 起動 minikube status # ステータス確認 mkinikube stop # 停止
Raspberry PIでJail+vnet
やること
Raspberry Piで、Jailとnet(VIMAGE)を使ってみる。 カーネルのカーネルのビルドはこちら。
epairの作成
LANケーブル的な役割をするインターフェースを作成する。
ifconfig epair0 create ifconfig epair1 create
ルーターとホスト用のJailの作成
実験用の環境として、ルーターとホストを作成する。
jail -c name=router1 host.hostname=router1 vnet persist jail -c name=host1 host.hostname=host1 vnet persist
epair0はRaspberry Piとルーターの接続用。 epair1はルーターとホストの接続用。
ifconfig epair0b vnet router1 ifconfig epair1a vnet router1 ifconfig epair1b vnet host1 ifconfig epair0a inet 10.0.0.1 netmask 255.255.255.0 jexec router1 ifconfig epair0b inet 10.0.0.2 netmask 255.255.255.0 jexec router1 ifconfig epair1a inet 10.0.1.1 netmask 255.255.255.0 jexec host1 ifconfig epair1b inet 10.0.1.2 netmask 255.255.255.0
ルーターの構築
パケットを転送するようにするだけ。
jexec router1 sysctl net.inet.ip.forwarding=1
ルーティングテーブル修正
Raspberry Piからルーターを経由してホストへ接続できるよう、ルーティングテーブルの設定をする、
route add -net 10.0.1.0/24 10.0.0.2 jexec host1 route add default 10.0.1.1
pingで接続できていることを確認する。
jexec host1 ping 10.0.0.1 ping 10.0.1.2
後始末
使い終わったら削除する。
jail -r host1 jail -r router1 ifconfig epair0a destroy ifconfig epair1a destroy
Raspberry PIでVIMAGE用カーネルのビルド
やること
Raspberry PIにFreeBSDをインストールして、VIMAGEを使う。 VIMAGEを使うには、カーネルのビルドが必要。 カーネルのビルドをRaspberry PIで行うと遅いため、amd64な環境でクロスコンパイルする。
パッケージのインストール
ccacheを使ってビルド時間を短縮する。どの程度短くなるのかはわからないけど。
pkg install ccache echo 'WITH_CCACHE_BUILD=yes' >> /etc/src.conf echo 'WITHOUT_KERNEL_SYMBOLS=yes' >> /etc/src.conf
ソースのチェックアウト
FreeBSDのソースをチェックアウト。 VIMAGEを有効化する。
cd /usr/src svnlite co https://svn.FreeBSD.org/base/stable/11 cat << 'EOF' > /usr/src/sys/arm/conf/RPI-B-VIMAGE ident RPI-B-VIMAGE include "RPI-B" options VIMAGE EOF
ビルド
ターゲットのアーキテクチャを指定してビルドする。 仮想マシンのCPUの割当が2コアなので-j2をつけてみる。
setenv ARCH arm setenv TARGET_ARCH armv6 make -j2 kernel-toolchain make -j2 buildkernel KERNCONF=RPI-B-VIMAGE mkdir ~/kernel-RPI-B-VIMAGE make -j2 installkernel KERNCONF=RPI-B-VIMAGE DESTDIR=~/kernel-RPI-B-VIMAGE
Raspberry PIへインストール
~/kernel-RPI-B-VIMAGEをscpなどでRaspberry PIにコピーする。 コピーしたら、ディレクトリを入れ替えて再起動して終わり。
cd /boot mv kernel kernel.org mv dtb dtb.orig cp -r ~/kernel-RPI-B-VIMAGE/* /boot reboot
再起動が終わるとビルドしたカーネルになっているはず。
unarm -a dimes | grep VIMAGE root@freebsd-vbox:/usr/obj/arm.armv6/usr/src/sys/RPI-B-VIMAGE arm WARNING: VIMAGE (virtualized network stack) is a highly experimental feature.
Mattermostのバージョンアップ
やること
mattermostのバージョンアップ。
https://docs.mattermost.com/administration/upgrade.html
バックアップ
mattermostとデータベース(PostgreSQL)をバックアップする。
systemctl stop mattermost mv /opt/mattermost /opt/mattermost.old pg_dump --username mmuser --password -f ~/mattermost.dump mattermost
インストール
新しいバージョンをインストールして、旧バージョンの設定、データ、ログを移行するだけ。
curl -O https://releases.mattermost.com/X.X.X/mattermost-team-X.X.X-linux-amd64.tar.gz tar xf mattermost-team-X.X.X-linux-amd64.tar.gz -C /opt cp -pr /opt/mattermost.old/config /opt/mattermost/ cp -pr /opt/mattermost.old/data /opt/mattermost/ cp -pr /opt/mattermost.old/logs /opt/mattermost/ chown -R mattermost:mattermost /opt/mattermost
起動
systemctl start mattermost
mattermostで日本語検索
やること
mattermostで日本語検索をできるようにする。
環境
- CentOS 7.2
- PostgreSQL 9.2
手順
基本的な手順はここにかいてある通り。 https://docs.mattermost.com/install/i18n.html#japanese
この手順をコピペしてもパスがちょっと違ったりしてうまくできない。 CentOS用に以下のように読み替える。
Install necessary packages:
postgresql-develもインストールする。
sudo yum install git gcc-c++ postgresql-devel
Intall Mecab and Mecab IPA-dictionary:
prefixは指定しない。指定しておけば、色々混ざらないようにできるが、面倒なのでやらない。
mkdir ~/tmp cd ~/tmp git clone https://github.com/taku910/mecab.git cd mecab/mecab/ ./configure make sudo make install
cd ~/tmp/mecab/mecab-ipadic/ ./configure --with-charset=utf8 make sudo make install
ライブラリのパスに/usr/local/libを追加する。
su - echo /usr/local/lib > /etc/ld.so.conf.d/usr-local-x86_64.conf ldconfig exit
Install textsearch_ja:
pg_configへのパスは指定しない。
cd ~/tmp git clone https://github.com/oknj/textsearch_ja.git cd textsearch_ja make USE_PGXS=1 sudo make USE_PGXS=1 install
Enable pg_catalog.japanese:
extensionを作るのはpostgresで。
sudo su - postgres psql > create extension if not exists textsearch_ja; > \q
Install pg_bigm:
cd ~/tmp curl -L -O https://osdn.jp/projects/pgbigm/downloads/63792/pg_bigm-1.1-20150910.tar.gz tar zxvf pg_bigm-1.1-20150910.tar.gz cd pg_bigm-1.1-20150910 make USE_PGXS=1 sudo make USE_PGXS=1 install
Re-create index using pg_bigm:
pg_configへのパスは指定しない。 extensionを作るのはpostgresで。 indexの作り直しはmmuserで。(mmuser)はmattermost用のユーザ。
su - postgres psql > create extension if not exists pg_bigm; > \q psql --user mmuser --password mattermost > drop index idx_posts_message_txt; > create index idx_posts_message_txt on posts using gin (message gin_bigm_ops); > \q exit