ゆるふわキャンパー

ゆるふわキャンパー

このブログは読むと思わずキャンプに行ってみたくなってしまう楽しいキャンプノウハウをわかりやすく紹介するわけではなく、技術ネタ中心でたまに酒と釣りの話をします。

Alfred Mackerel hosts Status Workflow
alfred

Alfred Mackerel hosts Status Workflow

Mackerel に登録してあるホストとホストのステータスをインクリメンタルに検索して表示する Alfred ワークフローを作りました。 * GitHub - lorentzca/alfred-mackerel-hosts-status-workflow: Search Mackerel hosts and show host's status. こんな感じで見れます。アイコンの色もステータスによって変わります。選択すると該当ホストのページに飛びます。 似たような Mackerel ワークフローは既にあったのですが、自分の Go の練習のためとホストのステータスをさらっと見れるようにしたい事情があったので作りました。 Mackerel の API は Go のクライアントから叩いています。 * Go の Mackerel Client を試す Alfred 周りの諸々は以下です。 * かっこいい Alfred ワークフローを作るための覚書き まとめ 小さいツールでも作ると達成感があって楽しいです。 Alfred のワークフローに G
1 min read
Trying out Go Mackerel client library
mackerel

Trying out Go Mackerel client library

Mackerel の API を使って Alfred ワークフローを作ってみよう と思っていたらタイミングよく Go のクライアントを見つけたので使ってみました。 * GitHub - mackerelio/mackerel-client-go: Mackerel API Client in Go (under development version) ちなみにまだ α 版とのこと。 Now, mackerel-client-go is an ALPHA version. In the future release, it may change it's interface. 準備 go get github.com/mackerelio/mackerel-client-go export MACKEREL_APIKEY="XXXXXXXX"
2 min read
Tips of Create Alfred Workflow
alfred

Tips of Create Alfred Workflow

何かしらの API を使ってインタラクティブに結果を返すかっこいい Alfred ワークフローを作るために最低限必要なことを学んだのでまとめます。 API キーを使うとき API を叩くたびに API キーを入力するのは面倒なのでどこかに永続化したいです。 Keyword オブジェクトで文字列を受取り、それを Write Text File オブジェクトでファイルに書き込むことで永続化出来ます。 参照する際は各オブジェクトで $(cat /path/to/apikey) するなり好きに参照すればよさげ。 重要なのは Write Text File の設定項目でどのパスにファイルを置くか決めることです。選べるパスは workflow's data folder と workflow folder です。 workflow's data folder は Workflow の設定で Bundle ID が設定されている場合、 ~/Library/Application\ Support/Alfred\
5 min read
Vuls on CircleCI
vuls

Vuls on CircleCI

Vuls 祭りで Vuls モチベーションが上がったので何かやってみよう! * Vuls祭り#3に参加してきました というわけで CircleCI から Vuls を定期実行してみました。 脆弱性の継続的インテグレーション! やり方 主な方針。 * vuls, go-cve-dictionary, goval-dictionary 全部入りの Docker イメージを用意する * 公式で各コマンドの Docker イメージがあるがこれを使わない理由は後述 * CircleCI 2.0 の Scheduled Workflow を使って定期実行する vuls, go-cve-dictionary, goval-dictionary 全部入りの Docker イメージを用意 各コマンドを利用できる Docker イメージを用意します。 * lorentzca/vuls-and-dictionary 公式の Docker イメージを使わないのは以下の理由です。 * vuls コンテナを実行する際に .ssh/kn
2 min read
Use Mackerel instead of Monit
mackerel

Use Mackerel instead of Monit

今日の Mackerel のアップデートでチェック監視の結果に応じてコマンドを実行できるようになった!! 🎉🎉 * チェック監視の結果に応じてコマンドを実行させられるようになりました ほか - Mackerel ブログ #mackerelio プロセスの監視をして、もしプロセスが死んだ場合ザオリクをかける方法としてMonitを今まで使っていましたが、 Mackerel に置き換えられるかも…? 試してみます。今回は h2o プロセスを監視してみます。 h2o プロセスが1未満になった場合は systemctl start h2o するようにしてみます。 まずは普通に監視する 以下の内容のファイルを /etc/mackerel-agent/conf.d/check_h2o.conf として作成し、 mackerel-agent をリスタートします。 * --userオプションを付けているのは h2o を含む余計なプロセスがヒットしないように絞るためです(例えば vim で h2o を含むファイルを開いていたりとか…) [plugin.checks.h
2 min read
Rewrite SQL for GCP billing export v1
gcp

Rewrite SQL for GCP billing export v1

先日課金情報エクスポート機能の正式版が発表され、課金情報のテーブルのスキーマが変更されました。 * GCP billing export機能のGA版がリリースされて作成されるカラム名等が変わった GCP の課金情報を Google BigQuery へ送り Redash で可視化しているので、このための SQL を書き直す必要があります。 * Visualize GCP Billing Data 書き換えた箇所 こんな感じで毎月の Billing 情報を集計しています。 これのための SQL を書き換えていきます。 * before SELECT SUM(cost) AS sum_cost, product, LEFT (FORMAT_UTC_USEC( UTC_USEC_TO_MONTH(TIMESTAMP_TO_USEC(start_time))), 7) AS month
1 min read
rsyslogd was HUPed
linux

rsyslogd was HUPed

/var/log/secureをGoogle BigQueryへ送っています。 * Send secure log to BigQuery 最近/var/log/secureがGoogle BigQueryに送られていないことに気づき(Redashのグラフを見ていて気づいた)、なんでだろうと思ったら/var/log/messagesにこんなログが複数あった。 Oct 14 18:07:01 lorentzca rsyslogd: [origin software="rsyslogd" swVersion="7.4.7" x-pid="451" x-info="http://www.rsyslog.com"] rsyslogd was HUPed logrorateがHUPを送っているだけ?今回の件に関係があるのか不明…。 Google BigQueryのテーブルを見ると9月22日を最期に止まっていたようだった。 おそらくGhost1.0にアップデートするついでにサーバも作り直したタイミング。 なぜrsyslogが止まったのか、
1 min read
Vuls Matsuri #3
meetup

Vuls Matsuri #3

Vuls祭りに参加してきました。 * Vuls祭り#3 - connpass 30分前に到着する予定が、道に迷ってしまい途中から参加…。国会議事堂前から溜池山王へたどり着けず…。 国会議事堂前から溜池山王にどうしてもたどり着けないので徒歩で六本木向かう — †森林の伐採者† (@lorentzca) 2017年10月19日 資料はそのうち上がってくると思うので特に印象に残ったことや感想を書きます。 後半になるにつれお酒が回ってきてメモが雑になっていく…。 基調講演(キーノート) Vulsの最新アップデートと今後の機能拡張についての発表でした。 しかし遅刻してきたのであまり聞けず…。 Alpine Linuxの対応が優先して行われるとのこと!海外だと特にDocker勢力がたくさんいて、Alpineがデファクト的な感じなのでという経緯らしい。 あとVulsへのコントリビュート方法的な紹介も。てっとりばやくコントリビュータになる方法としては、READMEに貼ってあるgo reportにtypoが上がってるからそれを直すPRを出せば良いとのことw
5 min read
GCP billing export GA version has released
gcp

GCP billing export GA version has released

Google BigQueryへGCPのBilling情報を送っています。 * Export GCP Billing data to Google BigQuery このbilling export機能について、先日メールで案内が配信されました。 内容は、billing export機能がGA(正式版)になり、それにともなってスキーマが変わるから移行してね、というものでした。ざっくり要約すると以下のような内容です。 * 暫くの間は新しいスキーマと古いスキーマ両方作成される * 2018年1月に古いスキーマの作成が行われなくなるのでそれまでに既存のワークフローの更新が必要 具体的には以下のような変更があるとのことです。 * productカラムがservice.descriptionにリネーム * resource_typeカラムがsku.descriptionにリネーム * start_timeとend_timeカラムがusage_start_timeとusage_end_timeにリネーム * service. idカラムの追加 *
1 min read
Install Container Linux to disk(What is Ignition?)
coreos

Install Container Linux to disk(What is Ignition?)

CoreOS社のLinuxディストリビューションであるCoreOSが、Container Linuxに名称変更しましたね(もう1年経つのか…)。 * Self-Driving Kubernetes, Container Linux by CoreOS and Kubernetes 1.5 | CoreOS 今回Container LinuxをISOイメージからディスク(VMware)へインストールする機会があったのでやり方をメモします。以前とやりかたが変わっていたので。 😮 インストール方法 ISOイメージでブート後、coreosユーザでログインされるのでrootユーザに切り替えて以下のコマンドを実行することでディスクへインストール出来ます。 * インストールするディスクのデバイスファイルを指定 * stable版を選択 sudo su - root coreos-install -d /dev/sda -C stable さて、上の例ではインストールはされるものの、ユーザのパスワードもsshの公開鍵も設定されていないので、起動後にログインするこ
3 min read
How to use .mylogin.cnf
mysql

How to use .mylogin.cnf

.mylogin.cnfファイルを使うことでパスワードの入力をすることなく、MySQLへ認証できます。 * MySQL :: MySQL 5.6 リファレンスマニュアル :: 4.2.6 オプションファイルの使用 .mylogin.cnfの注意事項 以下の条件を満たしていないと参照してくれませんでした。 * mysql_config_editorコマンドを使って暗号化されたファイルとして存在する必要がある .mylogin.cnfの作成方法 以下のようにして作成できます。 mysql_config_editor set --host=localhost --login-path=local --user=localuser --password passwordの入力が求められ、その後~/.mylogin.cnfが作成されます。passwordの文字列を引数で指定することはできない。 printすることでデコードすることが出来ます。ただし、パスワードはマスクされています。 $ mysql_config_editor print --al
1 min read
How to install Ghost on CentOS7 and MariaDB
ghost

How to install Ghost on CentOS7 and MariaDB

少し前にGhost初のメジャーバージョンがリリースされました。 * Attention Required! | Cloudflare Ghost 1.0は後方互換の無いアップデートで幾つもの大幅な変更がありました。 その中でGhostのインストール、設定、起動方法等も変わっています。1.0からはghost-cliを使ってGhostのインストール、設定、起動などができるようになりました。 * ghost-cli Overview Ghost1.0をインストールするための環境として、以下が推奨されています。 * Ubuntu 16.04 * MySQL * NGINX (minimum of 1.9.5 for SSL) * Systemd * Node v6 installed via NodeSource * At least 1GB memory (swap can be used) * A non-root user for running
3 min read
Change default root password of MySQL5.7
mysql

Change default root password of MySQL5.7

※ 追記あり TL;DR mysql --connect-expired-password -u root \ -p$(grep 'temporary password' /var/log/mysqld.log | cut -d' ' -f11) \ -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword1234@';" デフォルトのrootパスワードを変更する方法 MySQL5.7からインストール直後のrootパスワードがmysqld.logに吐かれるようになりました。mysqldを起動すると吐かれる。 この挙動はディストリビューションによって異なるようで、yumリポジトリの場合は上に述べたような挙動になっています。 以下のドキュメントに詳しく書いてあります。 * MySQL :: MySQL 5.7 Reference Manual :: 2.5.1 Installing MySQL on Linux Using
2 min read
OTOKOMAE CAMP #5
camp

OTOKOMAE CAMP #5

8/26,27に男前キャンプなるイベントがあり、参加してきました! * 男前キャンプ 主催は水道橋にあるアウトドアカフェのBASE CAMPオーナーであるA-sukeさんです。BASE CAMPは会社から徒歩10分ちょいなのもあり、ちょくちょくお邪魔しています。 さて、私は男前目標として、 * 食材はなるべく釣ったり獲ったりする * 現地で木の枝か何かを調達し、トライポッドを作ってみる * いつもと違うタープの張り方をしてみる を心のなかで掲げていました。 その辺も含めて男前キャンプの様子を記録します。 出発〜集合 金曜日の深夜に友人と出発し、朝まで釣りをしていました。海がいつもより荒れていたようであまり釣れなかった…。ウミタナゴとカゴカキダイの小さいやつ数匹しか釣れず…。 あと友人がヒトデを釣っていましたがこいつはリリース!w あんまり釣れないので消波ブロックを探索し、マツバガイやイソガニ(たぶん)を獲っていました。 朝焼けがGoodでした。 磯遊び&食料調達 11時にキャンプ場へチェックイン出来るので受付で
3 min read
Moved from Arukas to hyper.sh
arukas

Moved from Arukas to hyper.sh

Arukasのベータサービスが終了したので移住先を探さねばなりません。 * Arukas βサービス提供終了に関するお知らせ – Arukas そこで、少し前に会社のSlackでDockerマンが呟いてるのを見てオッとなったhyper.shを使ってみます。 * Hyper.sh - On-demand Container, Per-Second Billing hyper.shもArukasのようなContainer-as-a-Serviceで、特徴は通常のLinuxコンテナは同一ホスト上のカーネルから複数立ち上げるのに対し、hyper.shはコンテナ毎に独立したカーネル上で動かしている点です。これにより、セキュアなコンテナ環境の提供を可能にしているようです。 また、コンテナの利点である起動スピードを殺さないように特別なハイパーバイザが使われているようです。 * What is Hyper.sh | Hyper.sh User Guide あとはDockerボリュームを使えるのがありがたい(Arukasはβ版なのもありボリュームを使えなかった)。
5 min read
When will /usr/my.cnf be created?
mysql

When will /usr/my.cnf be created?

先日、my.cnfに設定したsql_modeが効かなくて困った話をアップしました。 その作業中に、DBサーバによって/usr/my.cnfがあったりなかったりすることを発見しました(しかもMySQLのバージョンは同一)。 この怪奇現象を突き止めるためには、/usr/my.cnfを作成しているmysql_install_dbがいつ実行されているのか突き止める必要があります。 調べたところ、mysqldのinitスクリプトでmysql_install_dbを叩いていました。具体的にはstart()の中で叩かれていました。以下がmysql_install_dbの実行されていたブロックです。 if [ ! -d "$datadir/mysql" ] ; then # First, make sure $datadir is there with correct permissions if [ ! -d "$datadir" -a ! -h "$datadir" -a "x$(dirname "$datadir")" = "x/
1 min read
sql_mode does not work
mysql

sql_mode does not work

MySQLのsql_modeを設定する必要に迫られたので設定しようとしたらハマった…。MySQLのバージョンは5.6系です。OSはCentOS6系です。 * MySQL :: MySQL 5.6 リファレンスマニュアル :: 5.1.7 サーバー SQL モード 手動で設定する方法 まずは手動で設定する方法。 現在設定されているsql_modeを確認する方法は以下。 SELECT @@GLOBAL.sql_mode; sql_modeを手動で設定する方法は以下。 * 例としてNO_ENGINE_SUBSTITUTIONを指定する場合 SET GLOBAL sql_mode = 'NO_ENGINE_SUBSTITUTION'; ここまでは良い。ただし、この設定はオンメモリなのでmysqldを再起動したら失われます。 なので/etc/my.cnfにsql_modeを設定したかったのですが、ここでハマりました。sql_modeの設定を書いてmysqldをrestartしても設定が反映されない…。 ハマリポイント1 MySQL5.6
2 min read
Automatically build Docker images
docker

Automatically build Docker images

Docker Hubには自動ビルド機能があって、GitHubに対して行われたアクション(ブランチの作成、マスターへのマージ)を契機にDocker Hub側でイメージの自動ビルドを走らせることが出来ます。 以下のようなメリットがあります。 * Docker HubにDockerfileを設置することができる * GitHubリポジトリのdescriptionやREADMEを読み込んで自動的にShort DescriptionとFull Descriptionを埋めてくれる * イメージに対し自動でタグ付けしてくれる * 手元でビルドを実行しpushする手間が省ける Dockerfileはこんな感じで表示されます。 今回は以下のような前提のもと、設定を行いました。 * 既にGitHubリポジトリが存在している 大まかな流れは以下です。 * GitHubとDocker Hubを接続する * Automated Buildの設定をする * 1回目のビルドを手動で行う 自動ビルド設定の手順 GitHubとDocker Hub
3 min read
AWS CLI on Docker
aws

AWS CLI on Docker

先日パイセンとAWS CLIをCircleCIから実行したいときにawsコマンドが使えるdockerイメージがあれば便利かもねみたいな話をしたので作ってみました。 既に同様のものはDocker Hubにありましたが最近自分でDockerイメージ作っていなかったのもあるので練習も兼ねて…。 * GitHub - lorentzca/aws: AWS CLI on Docker. Docker Hubはこちら。 * lorentzca/aws 用途としては以下のような場合に使いたい。 * CircleCIなどで手軽にawsコマンド使いたい場合に使えそう * Dockerから実行したい(環境を汚したくないとかで) pip入れるのが昔より楽だったので特に躓く箇所はなかった。 FROM alpine ARG pip_installer="https://bootstrap.pypa.io/get-pip.py" # Install dependent packages RUN apk --update add \ python \ cu
1 min read
Summary of Terraform v0.10
terraform

Summary of Terraform v0.10

terraformのv0.10が出ましたね。 ✨ * HashiCorp Terraform 0.10 | HashiCorp v0.10の概要とv0.9からの移行方法をメモしておきます。 v0.10の概要 以下の大きめの変更があるようです。 * プロバイダの分離 * 多数のプロバイダの改善 * State Environmentsの名前の変更 プロバイダの分離がだいぶ大きな変更ですね。今まではterraformのバイナリにプロバイダのリソースが含まれていましたが、これからはtarraformのコアのバイナリとプロバイダのバイナリが分離されます。 プロバイダのリソースはそれぞれのプロバイダ毎の単一のバイナリファイルとなり、terraformにインクルードされて使われる様になります。 また、terraformのリポジトリもコアのリポジトリとプロバイダのリポジトリで分離されるようになります。 * Terraform Providers · GitHub このような変更を行った目的として、terraformを改善していく速度を加速させること
3 min read
Terraform state file removed by S3 Lifecycle
aws

Terraform state file removed by S3 Lifecycle

こんにちわ。最近キャンプばっかり行っているのでブログ更新が滞っています。あかん! さて、このブログが動いているサーバはterraformでインフラの管理をしています。 terraformのstateファイルの管理はS3バックエンドを使っています。 * Migration from terraform remote command to terraform backend system また、S3の設定でバージョニングとライフサイクルの設定をしていました。 * Versioning terraform.tfstate この設定が原因でtfstateファイルが消えてしまったので記録しておきます…。 起きたこと terraform planを実行したら全てのリソースがcreateされる差分が出てしまいました。 急いでS3のバケットを見たところ、なんと空になっていました…。泣きながら削除済みオブジェクトを表示してみたところ、以下のように削除マーカーが設置されていました。削除マーカー以前のバージョンのtfstateファイルも見れる状態でした。
2 min read
Mix stacked graph and line graph with Mackerel
mackerel

Mix stacked graph and line graph with Mackerel

Mackerelで積み上げと線グラフを混在させることがUIからできるようになりました! * エージェントインストール手順ページを刷新しました ほか - Mackerel ブログ #mackerelio カスタムメトリックとサービスメトリックが対象のようです。システムメトリック(mackerel-agentインストール時にデフォルトで取られるグラフ)ではUIから設定できませんでした。 やってみる こんな感じ。簡単! システムメトリックでも積み上げグラフ・線グラフを混在させる方法 さて、公式ブログでは「UI上で設定できるようになりました。」と、ちょっと含みのある表現がされていましたが、これは式によるカスタムグラフでは以前から可能だったからと思われます。 * カスタマイズしたグラフを表示する - Mackerel ヘルプ システムメトリックで積み上げグラフ・線グラフを混在させたい場合はカスタムグラフを使えばOKです。stack(metrics)を使うことでこんな感じに混在させられます。 group(alias(stack(time
1 min read
Delete Go Map entry and rename Go Map key
golang

Delete Go Map entry and rename Go Map key

Mapの操作を色々する機会があったのでまとめてみます。 * The Go Programming Language Specification - Map_types それぞれのセクションごとに動作するコードのリンクがあります。play.golang.org上にあるので、その場で実行することができます。 ゴール pathみたいに/区切りの文字列をキーとして持っているMapに対し、特定の条件を持つキーを削除したり、キー名を変更する。 普通はそんなこと意識しないようにMap作っていくと思うんだけど人生は長い。Mapのキーをごにょごにょしたいときもある。 Mapの作成 いくつか作成方法はありますが今回は以下のように作成。このMapをごにょごにょしていきます。 func defineMap() map[string]int { m := map[string]int{ "/tabemono/fruit/apple/hoge": 1, "/tabemono/fish/carp/fuga": 4, "/tabemono/fruit/p
2 min read
Convert markdown to Google Slide
google

Convert markdown to Google Slide

少し前の話ですが、Decksetが無い環境で既存のDecksetで作成したスライドの手直しをする必要に迫られました。 Decksetが無いのでGoogle Slideに移行して作業しようとしたのですが、スライドのページが数十枚ほどあり、手でGoogle Slideに移すのはツライところでした。 そこで調べたところmd2googleslidesというツールがあったので使ってみました。 JavaScript製のツールみたいです。インストール方法は以下。 npm install -g md2gslides 使い方は簡単で以下のようにmd2gslidesコマンドにマークダウンファイルを渡してあげるだけです。 md2gslides hogehoge.md G Suiteのマイページのトップにスライドは作成されていました(確か)。 初回はプロンプトが開いてGoogleアカウントの認証があります。DecksetのようにHTMLタグは対応していないので、HTMLタグが入っているとエラーが出ます。また、![](./pic.jpg)のようなファイル挿入の構文にも対応して
1 min read
DigitalOcean released Cloud Firewalls
digitalocean

DigitalOcean released Cloud Firewalls

DigitalOceanにマネージドなファイアウォールが追加されました! ✨ * Cloud Firewalls: Secure Droplets by Default 管理画面やAPIから設定できるファイアウォールで、設定はDigitalOceanのネットワーク層で適用されます(フィルタされたパケットはドロップレットまで届かない)。 この機能によってドロップレット毎にiptablesやfirewalldを設定する必要がなくなるのがうれしいですね。 sourceもしくはdestinationにはIPv4, IPv6, タグ, ドロップレット, ロードバランサを指定することができます。tagを指定することで楽かつ柔軟にスケールできそうですね。 terraformでも近いうち実装されそう。 * resource_digitalocean_firewall.go: Add DO Cloud Firewalls (#15124) by keinohguchi · Pull Request #1 · terraform-providers/terraform-p
1 min read