Masteries

技術的なことや仕事に関することを書いていきます.

EdgeRouter Xで/etc/hostsを変更する

EdgeRouter Xにはdnsmasqが載っています. dnsmasqは, /etc/hostsに書かれたルールに従ってDNSクエリに反応してくれるので, つまりEdgeRouter Xの/etc/hostsを書き換えれば, 家庭内ネットワークにある端末の名前解決をすることができます.

※そのためにはもちろん, LAN内における端末のIPを固定する必要があります. その辺りの手順はこちらのページが参考になります:

yabe.jp

/etc/hostsを変更する

EdgeRouter Xの/etc/hostsを書き換えたい場合, 直接/etc/hostsを変更するのではなく, 次のようにstatic-host-mappingコマンドで設定する必要があります: コマンド > configure > system - EdgeOS 日本語Wiki [非公式]

# set system static-host-mapping host-name [host] inet [ip addr]

例えば, test.homeというホスト名を192.168.1.10というIPで登録したい場合, 次のようにします.

$ configure
# set system static-host-mapping host-name test.home inet 192.168.1.10
# commit
# save

こうすることで, /etc/hostsにも設定が追加され, LAN内にある端末から, test.home192.168.1.10というIPアドレスを引くことができるようになります.

現在の設定を確認する/削除する

setではなく, showとすることで, 現在のstatic-host-mappingの設定を見ることができます.

# show system static-host-mapping

また, deleteで既存の設定を削除することができます.

# delete system static-host-mapping host-name [host]

参考にしたページ

qiita.com

EdgeRouter Xで公開鍵を使ってログインする

ちょっと... というか, だいぶ前に id:hoto17296 などと一緒にEdgeRouter Xを購入していました.

EdgeRouter Xは, ネットワーク機器ベンチャーUbiquiti Networksというところが開発しているルータ製品の1つで, 安価なわりに高機能で評判... らしく, いつか遊べると良いのでは? ということで買っていたのでした.

詳しくはこちらのサイトを見て下さい. 様々な設定手順とかも紹介されていて便利です:

yabe.jp

で, 買ってから半年くらいは, 単純にルータとして使っていたのですが, 流石に勿体無いし, そろそろ本腰入れていろいろやってみるか... ということで, この土日にいろいろやっていました. その中で幾つか知見があったので, ちまちまとではありますが, まとめて公開していこうと思います.

公開鍵を使ってログインする

EdgeRouter Xはブラウザから設定することもできますが, sshコマンドでEdgeRouter XにログインしてCLIで各種設定をすることもできます(EdgeRouter Xには, ネットワーク機器向けOSであるVyattaの派生版であるEdgeOSが載っています).

デフォルトだと, パスワードログインとなっていて「流石にナ〜」と思ったので, 公開鍵を使ってログインできるようにしました. とはいえ, 概ねここに書かれている通りにやればOK: SSH login with RSA keys on Vyatta/EdgeOS

$ configure
# loadkey <user> /path/to/id_rsa.pub
# commit
# save

適当な場所(上の例では/path/to/id_rsa.pub)に公開鍵を設置してコマンドを実行します. なお, <user> にはその公開鍵を使いたいユーザー名を入れます.

...ちなみに直接authorized_keysに追加した場合, ファームウェアアップデートなどで消えてしまったりするそうなので, 上記の手順で設定する必要があります.

注意点

ここで設置して読み込ませる公開鍵は, コメント部分が必要になります. というのも, loadkey コマンドの実装が, 公開鍵を半角スペースでsplitしたときに(このsplitはPerlのsplitです, なんとloadkeyを実行すると内部でPerlのスクリプトが動いていました), 3つの要素が存在しない場合エラーになるからです.

...というわけで,

ssh-rsa <...key...>

こういった形で公開鍵を用意するとダメで,

ssh-rsa <...key...> comment

このように, 適当なコメント(上記の例ではcommentのところ)を書いた上で読み込ませる必要があります. 最初, コメントがない状態で読み込ませようとして延々とエラーになり, 20分くらいロスしました...

パスワードログインを無効にする

さて, これでEdgeRouter Xに公開鍵を使ってログイン出来るようになりました. 続いて, パスワードログインの機能を無効にしましょう.

$ configure
# set service ssh disable-password-authentication
# commit
# save

で, OKです.

Mackerel Drink Up #6で, 「はてなブログにおけるMackerel活用術」というLTをしました

本日開催されたMackerel Drink Up #6で, 「はてなブログにおけるMackerel活用術」というLTをしました.

mackerelio.connpass.com

資料はこちらです.

speakerdeck.com

Mackerelは「サーバーの監視SaaS」として捉えられる事が多いですが, それ以外にも「サーバーの管理」, 「サービスの定期的な振り返り」, 「サービスに起こったイベントの記録(グラフアノテーション)」, 「サービスや開発チームの状況の可視化(サービスメトリック)」などなど, 様々な目的で利用できるツールだと思っています.

発表資料の中に登場するMackerel活用事例は, ほとんどがチームメンバーが試行錯誤の末に構築したものではあるのものの, 資料としてまとめているうちに「こういう使い方も出来そうでは?」といった気付きがあったので, 機会があれば実践してみたいですね.

引き続き, こういった形でMackerelの活用術など共有していきたいですし, いろいろな会社, いろいろなチームが工夫を凝らしながらMackerelを活用していると思うので, そういった知見もどんどん吸収して, はてなブログの開発に活かしていきたいと思います!

「Mackerel サーバ監視 [実践] 入門」発売中ですね!

www.songmu.jp

id:Songmu さんのブログでも紹介されている通り, 「Mackerel サーバ監視 [実践] 入門」が発売中です!

Mackerel サーバ監視[実践]入門

Mackerel サーバ監視[実践]入門

  • 作者: 井上大輔,粕谷大輔,杉山広通,田中慎司,坪内佑樹,松木雅幸
  • 出版社/メーカー: 技術評論社
  • 発売日: 2017/08/26
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

この本は, Software Designで連載されていた「Mackerelではじめるサーバ管理」を本にまとめたものになっています. 著者欄に自分の名前はないのですが, 実は自分が前職時代にこの連載に寄稿した, Mackerel活用術の記事が「付録」として掲載されていたりしますので, 興味を持った方は是非ご一読頂ければ幸いです.

Mackerelは, もはやインフラ監視/管理の基盤と言って差し支えないSaaSだと思っていて, 自分自身はてなブログというサービスを開発/運営するという業務の中で, バリバリ活用しています. …というLTを, 近々開催される「Mackerel Drink Up #6 Osaka」で出来た良いなと思っておりますので, こちらも是非(便乗宣伝).

mackerelio.connpass.com

peco芸: ファイルを検索して開いたりする

gfx.hatenablog.com

pecoめっちゃ便利ですよね. 僕も愛用しています. こちらの記事で紹介されているように, ghq + peco も便利ですが, 僕は ag + peco の組み合わせにハマっていて(?), その紹介をします.

ag

ag (The Silver Searcher)は, 一言で言えば「めっちゃ早いgrep」みたいなものです. 最近は, これよりも更に早いhw (Highway)とかも登場しているようですが, 手癖でずっと ag コマンドを使っています.

MacでHomebrewを使っていれば, こういう感じでインストールできます:

$ brew install the_silver_searcher

さて, ag コマンドは grep のように使えますが, -l オプションを使うと, カレントディレクトリ以下に存在するファイル(ag が検索対象とするファイル?)の一覧を出してくれます(例は, skajiさんのApp::cpmのGitリポジトリのルートで実行してみた様子です):

$ ag -l
author/copyrights-and-licenses.json
author/cpanfile.snapshot
author/fatpack.pl
Changes
Build.PL
cpanfile
lib/App/cpm/CircularDependency.pm
dist.ini
lib/App/cpm/Distribution.pm
lib/App/cpm/Job.pm
lib/App/cpm/Logger/File.pm
lib/App/cpm/Logger.pm

    ...

これを, peco と組み合わせてみましょう.

ag + peco

色々やり方はあると思いますが, 自分は .zshrc に次のように書いています.

function peco-file() {
    local filepath=$(ag -l | peco --prompt 'PATH >')
    if [ -n "$filepath" ]; then
        if [ -n "$BUFFER" ]; then
            BUFFER="$BUFFER $(echo $filepath | tr '\n' ' ')"
            CURSOR=$#BUFFER
        else
            if [ -f "$filepath" ]; then
                BUFFER="$EDITOR $filepath"
                zle accept-line
            fi
        fi
    fi
}
zle -N peco-file
bindkey '^f' peco-file

peco-file という関数を用意して, これを Ctrl + f で呼び出すようにしています. 更に, バッファ($BUFFER)の有無によって挙動が変わるようになっていて,

  • バッファ($BUFFER)が空の時は, ag -l によって得られたファイルの一覧を peco で検索/選択して, それをそのまま vim で開く, という挙動をします:

f:id:papix:20170726111735g:plain

  • バッファ($BUFFER)に空ではない時, 例えば carton exec -- prove のような文字列が入力済みのときは, peco で検索/選択したファイルを入力済みの文字列の末尾にくっつける, という挙動をします:

f:id:papix:20170726112006g:plain

このように, 「vim でファイルを開く」と「コマンドの引数としてファイルを指定する」が, 全て Ctrl + f で実現できて, これがなかなか非常に便利です.

まとめ

このツイートを見て, 確かに! と思ったので, シュッと書きました. 皆さんもこの機会にオリジナルの peco ハック(?)について記事を書いてみると良いと思います!!!