SiG Staff Blog

福井と金沢にあるSIGという会社で流行らそうとしたノウハウ集。主に流行らないが・・・。

Ubuntu18にOpenSTFを入れてみた

openSTFとは

Androidの実機をブラウザ経由で遠隔から操作できるアプリ

github.com

なぜこの記事を書くのか

公式に書いてある通りに実行したら、全然インストールができなかったので、誰かの役に立つかなって思って。

今回の前提

  • OSから新規でインストールする。
  • 2018年7月での話です。今後アップデートされるとサクッとインストールできるかもしれないです。

はまったポイント

  • rethinkdbがインストールできない。
  • ubuntu16にするとサポート切れでupgradeできない。
  • Ubunsu以外のディストリビューションに入れようとするも、同じようにどっかでエラーが起きる。

動くまでにやった手順

ともあれ、Ubuntu16をインストール

rethinkdbのmakeがUbuntu18ではコンパイルでエラーを出すので、Ubuntu16をインストール。

17ではなく16を選んだのは、ネットで調べていたら17でもエラーが出て困っている人がいたからです。

Ubuntu 16.04 LTS 日本語 Remix リリース | Ubuntu Japanese Team

rethinkdbをインストールする

公式Install RethinkDB on Ubuntu - RethinkDBにある通りインストールする。

source /etc/lsb-release && echo "deb http://download.rethinkdb.com/apt $DISTRIB_CODENAME main" | sudo tee /etc/apt/sources.list.d/rethinkdb.list
wget -qO- https://download.rethinkdb.com/apt/pubkey.gpg | sudo apt-key add -
sudo apt-get update
sudo apt-get install rethinkdb

Ubuntu18にアップグレードする

Ubuntu17のサポートが切れているので

apt-get dist-upgrade

でアップグレードできなかったので、下のサイトサイトを参考にアップグレードを実行する。

server.etutsplus.com

いくつか方法が紹介されているが、サーバーを立てるのが面倒くさかったので

歯抜け状態でのアップグレード その2. sources.list を書き換えて、A → (飛んで) → C へ

を実行しました。

wikipediaUbuntu - Wikipediaからコードネームを引っ張ってきて、

sudo vi /etc/apt/sources.list

で開いてコードネームを下のように変更する。

Yakkety -> Bionic

で、アップグレードをする。

sudo apt-get dist-upgrade

注意

アップグレード中にサスペンドするとログインができなくなって、アップグレードの進捗がわからなくなって、いつ再起動すればいいのかわからなくなってしまうので、設定でサスペンドしないように変更して置いたほうが良いです。

STFに必要な他のアプリをインストールする

色々インストール

sudo apt-get update
sudo apt-get install git android-tools-adb python autoconf automake libtool build-essential ninja-build libzmq3-dev libprotobuf-dev graphicsmagick yasm stow

gitをインストール

git clone https://github.com/creationix/nvm.git ~/.nvm && cd ~/.nvm && git checkout `git describe --abbrev=0 --tags`
  echo "source ~/.nvm/nvm.sh” >> ~/.bashrc

LTSのバージョンを確認して、それを使用する。

nvm ls-remote
nvm install [バージョン]

ZeroMQをインストール

cd ~/Downloads
wget http://download.zeromq.org/zeromq-4.1.2.tar.gz
tar -zxvf zeromq-4.1.2.tar.gz
cd zeromq-4.1.2
./configure --without-libsodium --prefix=/usr/local/stow/zeromq-4.1.2
make
sudo make install
cd /usr/local/stow
sudo stow -vv zeromq-4.1.2

protocolbufferをインストール

cd ~/Downloads
git clone https://github.com/google/protobuf.git
cd protobuf
./autogen.sh
./configure --prefix=/usr/local/stow/protobuf-`git rev-parse --short HEAD`
make
sudo make install
cd /usr/local/stow
sudo stow -vv protobuf-*

sudo ldconfig

OpenSTFをインストール

cd
mkdir openstf
cd openstf/
git clone https://github.com/openstf/stf.git
cd stf
sudo npm install -g stf --unsafe-perm

OpenSTFを起動する

#DBを起動
rethinkdb

#起動
stf local

途中で、ADBサーバーでエラーが起きるとき

一旦stfを止めて、手動で起動すれば良いみたいです。

adb start-server

画面を表示してみる

起動した端末で http://127.0.0.1:2100 にアクセスして、ログイン画面が表示されれば成功。

FIDOの基礎情報

FIDOの基礎

TL;DR

実装方法ではなく、FIDOがどんなものか?なぜ使われるようになってきそうか?の説明。

FIDOの背景

現在の認証はパスワードで行うことが一般的だが、パスワードが漏れただけで第三者にログインされてしまう。 その対策として現在は下の2つが主に使われる様になっってきた。

OTPの問題

  • ジェネレータを使ったサービスを複数使うと、キーを沢山管理しないといけなくなり、大変。
  • 有効期限などがあり、タイミング悪く使用できない時がある。
  • 手入力というアナログ手法なのでミスが多い。

これらの問題に対して、どうにかしようって事で、FIDOを使いましょう。

FIDO Allianceとは

FIDOの特徴と必要性

  • ハードウエアトークンなどが作成する公開・秘密キーをサーバーに送り、端末を登録する。
  • 一度登録したら、パスワードなどの情報を送らなくても認証が完了するので、よりセキュアに使える。
  • サーバーの情報が漏洩しても、ハードウエアトークンが無ければログインできないので、漏洩対策にもなる。
  • 一つのキーがあればどのサービスにもログインできる。
  • パスワードを覚える必要がない。
  • トークンさえ作れれば、ハードが無くても使えるはず。(未確認)
  • yahoo!楽天Amazongoogle等の多くの企業がworking groupに入っている。ログインのデファクトになると思われるので、ほか案件をする上で知っておかないと辛い目に合うかも。

1.0

  • U2F(Universal 2nd Factor)
    • 多要素認証を導入する仕様
  • UAF(Universal Authentication Framework)
    • 信頼した端末でパスワード無しで認証する仕様
      • 自分の端末の指紋認証を他のサービスのログインに使用する

の仕様を決めている。

2018/05では1.2が最新で、NFCやBLEに対応している。

2.0

w3cと決めてるよう。web authentication api の事かな。

やってる事

クライアントとサーバー間で公開キーと秘密キーの交換をする。 webサービスだけじゃなく、androidiOSでも使える。 クライアントは何でもいいが、jsが多くなるかな。

今後のプラットフォームの対応

  • 2018/5でブラウザがまだchromeしか対応していない。(web authentication api)
  • iOSがまだ未対応
  • android8から、OSレベルでサポートする。

これからの動き

仕様が頻繁にアップデートされると思われる。 色んな機器が対応してくると思われる。

Linux(EC2)にUpsourceをインストールしてみた

EC2にUpsourceをインストール

しました。

# アプリのダウンロード
wget https://download.jetbrains.com/upsource/upsource-2017.3.2888.zip
unzip upsource-2017.3.2888.zip
rm upsource-2017.3.2888.zip
cd upsource-2017.3.2888/bin

# 8080ポートを使いたくないので、変更
sh upsource.sh configure --listen-port 11111

# 起動
sh upsource.sh start

特に何も問題なく簡単にインストール&起動ができました。 流石、JetBrains。

唯一の注意点

t2.micro(無料枠のEC2インスタンス)だと、メモリが足りなくてインストールはできるけど起動しませんでした。
t2.mediumぐらいは必要だと思います。

backlogのwikiを自動で作成するツールを作った

プロジェクトが立ち上がるたびに、同じ事をしていた

それはきっと無駄な時間だ。

と思って、そういえば、backlogはAPIがあるから定型文作ったら、
ボタンぽちればwikiを自動で作れるんじゃない?とふと思ったので、作ってみた。

作ってみて

いま、勝手に進めているプロジェクトで使用してるVue.jsを使って作ってみたんだけど、
こういうの作るのにはすごい向いてるね。
楽に作れましたよ。
サーバーとの通信にはAxiosを使ったんだけど、これもあんまり細かいこと考えなくても使えてとても便利。

sourceはGitHubに上げたのでcloneなどして使ってください。
webpackを使ってローカルサーバーを立ち上げれるので、ローカルからでも使えるし、
サーバーに挙げてもらっても使えます。
使い方はREAD MEを見てください

github.com

画面イメージ

最初の状態

f:id:Bee_Flim:20180507153228p:plain

ツールの画面

f:id:Bee_Flim:20180507153234p:plain

追加した時の状態

f:id:Bee_Flim:20180507153239p:plain

symphony4のDoctrin使うとエラーメッセージが文字化けしてる

doctrineコマンドを実行するとエラーになっちゃう。

しかも文字化けしてる。。。

ターミナルもDBの文字コードutf-8にしてるのになんでやろ。。。

解決

php bin/console doctrine:database:create

とかを実行すると、 エラーになってエラーメッセージが文字化けすることがある。

config/package/doctrine.yml

の charset utf-8mb4になっているからUTF-8にする。

RDSを作るとデフォルトの文字コードがlaten-1になってしまう

ポチポチとRDSを作るとデフォルトの文字コードがlaten-1になってしまう問題

ポチポチとOKOKでRDSを作成すると文字コードがlaten-1になってしまって、困るという話。

原因

そもそも、パラメータグループで設定をしないといけなかった。

対処

パラメータグループを作成する

左のメニューからパラメータグループを選ぶ。

f:id:Bee_Flim:20180328141730p:plain

適当に入力していく。

f:id:Bee_Flim:20180328141736p:plain

パラメータの絞り込みができるので、 character で絞り込む。

f:id:Bee_Flim:20180328141739p:plain

とりあえず、絞り込みがされたものを選択をする。

UTF-8と1 を設定する。

f:id:Bee_Flim:20180328141743p:plain

RDSの作成

いつものように作成する。

f:id:Bee_Flim:20180328141719p:plain

適当に入れる。

f:id:Bee_Flim:20180328141723p:plain

パラメータグループに先ほど作成したものが出てくるので、それを選ぶ。 出てこなかったときは、パラメータグループ作るときに指定したバージョンを確認する。

f:id:Bee_Flim:20180328141727p:plain

もうインスタンスとかテーブルとか作っちゃってたら

インスタンス作たけど、テーブルは作ってないとき

インスタンスの画面がから変更ができます。

テーブル作っちゃったとき

DBの文字コード変換機能を使えばOK。

EC2に作ったNginxにLet's Encryptを導入する

オレオレ証明からLet's Encriptに変更する

前提

yakisaba.hatenablog.jp の通りにサーバーが立っている事。

注意

EC2のパブリックDNSだと登録できないそう。
適当にドメインを取ってみて試してみる

ドメインを取得して、Route53にAレコードを追加する

  1. お名前.comとかでDNSを取得する。
  2. EC2のダッシュボードを開き、左側にあるElastic IPを選択する。
  3. 新しいIPの割り当てを選択して、IPを取得する。
  4. 作成したものを右クリックして、アドレスの割り当てを選択して、EC2インスタンスに割り当てる。
  5. 作成されたIPアドレスをメモしておく。
  6. Route53を開き、Hosted Zoneを開く。
  7. create hosted zoneを選択して、Domain Nameに作成したドメインをいれて、作成をする。
  8. 作成したゾーンを選択してgo to recordを選ぶ。
  9. create recordを選択して、下のように設定して作成する。
  10. NSレコードの内容をコピーして、取得したドメインのネームサーバーに設定する。
  11. nslookup www.ドメインIPアドレスと紐づいているかチェックする。

必要なツールをインストール

# gitのインストール
$ sudo yum install git

# Let's Encryptのツールをインストール
$ git clone https://github.com/certbot/certbot ~/certbot
$ cd ~/certbot

証明書の発行

# ドメイン名、メアドは取得したものを使う
$ sudo ./certbot-auto certonly --webroot -w ドキュメントルート -d 取得したドメイン名 -m 自身のメールアドレス  --debug

証明書が出来上がるので、それを /etc/nginx/conf.d/default.conf に登録する。

/etc/nginx/conf.d/default.conf

  ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;

確認

nginxを再起動して接続してみて、https + http2で繋がっていればOK

継続的に取得するようにする

# 毎月1日の1時に強制的に更新する。
0 1 1 * * root /nome/ec2-user/certbot/certbot-auto renew --force-renewal && service nginx restart