くんすとの備忘録

IT系技術メモ

移転しました。

15秒後に自動的にリダイレクトします。

install(1)コマンドが便利だった件

はじめに

install(1)という、cpmkdirchmodを同時に行うような便利コマンドがあることを知りました。 (忘れちゃいましたが、何かのMakefileを見ているときに存在に気付きました)
これを使うと、プロビジョニングなどのスクリプトが簡潔に書けるようになりそうです。

……というわけで使い方のメモがてらまとめてみます。

manの内容まとめ

installはBSD版とGNU版があるようですが、ここではGNU版について書きます。 BSD版ではいくつかのオプションが使用できません。(-D はなかったと思う)

ちなみにmacの場合は標準でBSD版のinstallが入っており、Coreutilsを入れるとGNU版のinstallが使えるようになります。

4種類の使い方

  • install [OPTION]... [-T] SOURCE DEST
    • SOURCEDESTにコピーする。-Tを付けると、DESTをファイルとして扱う
  • install [OPTION]... SOURCE... DIRECTORY
    • 複数のSOURCEファイルをDIRECTORYディレクトリへコピーする
  • install [OPTION]... -t DIRECTORY SOURCE...
    • 複数のSOURCEファイルをDIRECTORYディレクトリへコピーする
  • install [OPTION]... -d DIRECTORY...
    • ディレクトリを作成する(複数可)

その他のオプション(良さげなのを抜粋)

  • -D
    • コピー先のディレクトリが存在しない場合、ディレクトリを作成する
    • mkdir -pみたいな感じ
  • -o 所有者
    • コピー先の所有者を変更する
    • chownみたいな感じ
  • -g グループ
    • コピー先の所有グループを変更する
    • chownみたいな感じ
  • -m パーミッション
    • コピー先のパーミッションを変更する
    • chmodみたいな感じ
  • -S SUFFIX
    • コピー先が上書きになる場合、ファイル名の最後にSUFFIXを付けてバックアップする
  • -Z
    • コピー先のSELinuxセキュリティコンテキストを設定する
    • (※マニアックかよ)

使用例

authorized_keysのセットアップ

今までこう書いていたものが…

mkdir /home/hoge/.ssh
chmod 700 /home/hoge/.ssh
cp authorized_keys /home/hoge/.ssh/authorized_keys
chmod 600 /home/hoge/.ssh/authorized_keys
chown -R hoge:hoge /home/hoge/.ssh

こう書けます。

install -o hoge -g hoge -m 700 -d /home/hoge/.ssh
install -o hoge -g hoge -m 600 authorized_keys /home/hoge/.ssh/authorized_keys

すっきりしましたね!

まとめ

なぜ今までこんな便利なものに今まで気付かなかったのか……

第26回シェル芸勉強会 大阪サテライト」レポート

12/25(日)に東京で行われた「jus共催 第8回初心者の方角に向いて講師が喋るシェル勉強会(初心者向けとは言ってない)/第26回シェル芸勉強会及びエクシェル芸勉強会」について、今回も大阪でサテライトしました!

※すみません、年末年始忙しすぎ&インフルエンザでレポートがめっちゃ遅れました……

イベント情報

東京(本家)

usptomo.doorkeeper.jp

今回も、大阪(私達)と、福岡でサテライト会場がありました。

大阪サテライト

atnd.org

福岡サテライト

atnd.org ぱぴろん(@papiron)さんによるまとめ papiro.hatenablog.jp

大阪サテライトレポート

会場のようす

午前

今回、午前の部は私用で欠席していたので、午前の内容については他の方のレポを見てくださいです。

おひる

昼休みから参加しました。大阪サテライトでは、@t_motookaさんによって、「CVE番号クイズ」「バイナリを詠む会」「エクシェル芸の予習」などがゲリラ実行されました。
特にエクシェル芸の予習は、午後の部の問題を特に当たって非常に役立ちました。ありがとうございます!






午後

エクシェル芸(泡を吹いて死亡

※詳細はtogetterの方を参照です。

LTのようす

いつもな感じのやばい大阪勢のLTです。今回はUstreamで配信もして頂けました!(録画はナシです)

nmrmsys(@nmrmsys) さん 「Excelでもコマンド実行がしたい!」


いつもの「ExSQell」のお話ですね。今回は新機能として「セル範囲リダイレクト」が追加されたようです。リポジトリはこちら → GitHub - mikkun/gnucash-util-jp: 日本の商慣習下でGnuCashを使うためのツール

くんすと(@kunst1080) 「Hyper™でエキサイティングなシェル芸ライフ」


Hyperというターミナルエミュレータを使って楽しくシェル芸しましょう、という話です。Hyperの公式サイトはこちら → Hyper™

so(@3socha) さん 「FUSE で繋がる世界」


FUSEを使ってGoogleカレンダーのファイルシステムを実装したという話です。予定を探すときにfindとかgrepとかが使えて便利そう!

MSR(@msr386) さん 「漢字バナー芸」


toliet(1)で、漢字を表示するために漢字フォントを作るという話です。実際の手順の説明と、デモを見せて頂きました。

社畜(9か月)(@null_ref_eng) さん 「画面を(^o^)/で埋め尽くす謎のワンライナー」 ※延長線


滅茶苦茶面白いことをされていたので、半ば強引に発表していただきましたw 無理言ってすみませんでした…

今回も面白いLTをたくさん発表していただいてありがとうございました!! 次回もモリモリ発表してくださいねっ!

まとめ

上田会長、東京・福岡・大阪の皆様、お疲れ様でした。
フェンリル様、会場使わせて下さってありがとうございました!

次回もまたよろしくお願いします!!

JavaScriptのsetTimeoutが使いにくいのでヘルパーを書こうという話

第一引数に関数が来てるのが使いにくさの原因なので、引数の順番をひっくりかえしたヘルパーを作成します。

function delay(time, func) {
    setTimeout(func, time);
}

こうしておくと、こんなコードが

setTimeout(function() {
    console.log("hoge");
}, 1000);

こう書けます。

delay(1000, function() {
  console.log("hoge");
});

補足

ちなみにCoffeeScriptで書くと

delay = (time, func) -> setTimeout(func, time)

delay 1000, ->
  console.log "hoge"

となって見やすいです。

FreeBSDでDockerやってみた

この記事はFreeBSD Advent Calendar 2016の23日目の記事として公開されました。

はじめに

数年前まで私は、FreeBSDだいすきおじさんでした。Jailで仮想環境をたくさん作ったり、flavourを作ったり、flavourを管理するツールを作ったり*1、ワンライナーでインストールしたり*2……など、充実したFreeBSDライフを楽しんでいました。 しかし、Dockerという非常に便利なツールが現れました。DockerはLinuxでしか動作しませんが、非常にパワフルで簡単で、そして何より実用的でした。私はFreeBSDというOSが大好きではありましたが、その便利さには抗えず、結果的にFreeBSDから離れることとなってしまいました。。。

しかし、そう。今ではFreeBSDでもDockerは動くらしいのです。 (Docker - FreeBSD Wiki)

その答えを求め我々は南米へ……は飛ばずに、検証してみようと思います。

環境のセットアップ

仮想環境でFreeBSDを起動

2015年6月時点ではFreeBSD 11-CURRENTが推奨されていたようですが、今では11.0-RELEASEがリリースされていますので、こちらで検証します。

最近は仮想環境にHyper-Vを使っているので、今回はHyper-v用のVHDファイルをダウンロードしてきてそのまま利用することにします。

$ curl -LO ftp://ftp2.jp.freebsd.org/pub/FreeBSD/releases/VM-IMAGES/11.0-RELEASE/amd64/Latest/FreeBSD-11.0-RELEASE-amd64.vhd.xz
$ 7z x FreeBSD-11.0-RELEASE-amd64.vhd.xz

VHDファイルが解凍できたので、適当にHyper-Vへインポートします。

SSHサーバの起動

とりあえずネットワークにはDHCPを使うようにして、sshdを起動します。 最近は直接/etc/rc.confを編集するのではなく、sysrcコマンドを使うものらしいです。

$ sysrc sshd_enable="YES"
$ sysrc ifconfig_hn0="DHCP"

あとは/etc/sshd/sshd_confなどを適当に設定してsshdを起動します。 sshでログインしましょう。

Dockerのインストール

公式サイトの内容(https://wiki.freebsd.org/Docker)に沿って進めます。

zfsの準備

$ kldload zfs
$ kldstat
$ dd if=/dev/zero of=/usr/local/dockerfs bs=1024K count=4000
$ zpool create -f zroot /usr/local/dockerfs
$ zpool list
$ zfs list
$ zfs create -o mountpoint=/usr/docker zroot/docker
$ zfs list

結果 f:id:kunst1080:20161223202527p:plain

※再マウントするときはzfs mount zroot/docker

Dockerをセットアップ

Dockerのインストール

$ pkg install docker-freebsd ca_root_nss

Bash利用のためにfdデバイスを作成

$ echo ' fdesc   /dev/fd         fdescfs         rw      0       0' >> /etc/fstab
$ mount -t fdescfs fdesc /dev/fd

Dockerをサービス登録&起動

$ sysrc docker_enable="YES"
$ service docker start

dockerのバージョン確認

$ docker version

f:id:kunst1080:20161223202537p:plain

Docker動かしてみる

Ubuntu

ひとまずUbuntuを。

$ docker search ubuntu

f:id:kunst1080:20161223202547p:plain

$ docker pull ubuntu
$ docker run ubuntu uname -a

f:id:kunst1080:20161223202556p:plain

いろいろ遊んでみます。

$ docker run -it ubuntu bash
$ apt update

f:id:kunst1080:20161223202608p:plain

apt updateがエラーになる……

CentOS

そして、公式にも書いてあるCentOSを。

$ docker search centos

f:id:kunst1080:20161223202619p:plain

$ docker pull centos:6
$ docker run centos uname -a

f:id:kunst1080:20161223202634p:plain

いろいろ遊んでみます。

$ docker run -it centos:6 bash
$ echo nameserver 8.8.8.8 >> /etc/resolv.conf
$ yum update
$ yum install -y bc
$ echo 9 + 7 | bc

f:id:kunst1080:20161223202644p:plain

FreeBSD

なぜかFreeBSDのコンテナもある

$ docker search freebsd

f:id:kunst1080:20161223202654p:plain

$ docker pull lexaguskov/freebsd
$ docker run lexaguskov/freebsd uname -a

f:id:kunst1080:20161223202713p:plain

いろいろ遊んでみます。

$ docker run -it lexaguskov/freebsd tcsh
$ echo nameserver 8.8.8.8 >> /etc/resolv.conf
$ pkg update
$ pkg install -y sl
$ sl

f:id:kunst1080:20161223202729p:plain f:id:kunst1080:20161223202739p:plain

Jenkins

遊んでばかりでもアレなので、最後にJenkinsの公式イメージをホストしてみます。

$ docker search jenkins

f:id:kunst1080:20161223202752p:plain

$ docker pull jenkins:alpine
$ docker run -p 8080:8080 jenkins:alpine

f:id:kunst1080:20161223202809p:plain

ああああああああ………もうちょい勉強が必要ですね。。。

参考URL

リファクタリングのための回帰テストをシェルスクリプトでさくっと書こう

この記事はShell Script Advent Calendar 2016の20日目の記事として公開されました。

昨日は@MasWagさんの「Tech Hack: 最近見た不思議なシェルスクリプトを直してみた」でした。 シェルスクリプトは「知ってる・知らない」で長さもわかりやすさも全然違ってしまうということがよくわかる記事でした。

また、

良く考えてみて下さい。ただ再帰的に処理をするためだけにわざわざ気合を入れてawkでパースする必要があるなら誰かが便利な道具を作っているはずです。

ということを書かれていますが、こういう考え方は非常に重要だと私も思っています。

はじめに

ここでは、シェルスクリプトを使った、WEBアプリケーションのリファクタリング時の回帰テストについて書きます。 シチュエーションとしては以下の様なものを想定しています。

  • 対象は、サーバサイドレンダリングを扱うWEBアプリケーション
  • 言語は特に問わない(JavaでもPHPでもrubyでも、テンプレートエンジンを使っているものは何にでも適用可)
  • バックエンド処理のリファクタリングをしている
  • リファクタリング作業によって、バックエンドの処理は効率化するが、フロントエンドには全く影響を与えたくない

こういったときに、想定外の変更をしてしまっていないか、コードを修正しながら対応前後の画面を目で見て確認するか、Seleniumなどを使って自動テストを行うかと思います。しかしここでシェルスクリプトを書くことによって、フロントエンドに影響を全く与えないこと、与えたとしてもどんな影響を与えたのかということが簡単にわかるようになります。

用意するもの

  • 変更前のWEBアプリケーションの実行環境
  • 変更後(開発中)のWEBアプリケーションの実行環境

どうやって?

簡単です。両方のWEBアプリケーションに対して、curlしてdiffします。

簡単なスクリプトですが、ざっくりこんな感じです。

#!/bin/sh
curl http://対応前のWEBアプリケーション/hogehoge > before.html
curl http://対応後のWEBアプリケーション/hogehoge > after.html
echo ---------- diff before.html after.html ----------
diff before.html after.html

後はログイン処理を挟み込むなり、いろんなページを列挙するなりしてアレンジすれば、自分だけの最強のインテグレーションテストシェルスクリプトが完成します。 もちろんGETだけではなくPOSTで検証することもできるので、いろいろやってみるといいと思います。

実際に自分が仕事で使っているものでは、ログインしたり登録処理をしてみたり……なんていうものもありますが、その辺りは環境ごとに違うコードになるかと思います。

短いですがこの辺で。アイデアだけ投げつけて終了です。


次は@nmrmsysさんです。いつもLTで発表されているアレの話かな???

第8回大阪Jenkins勉強会へ行ってきました

一般&LTで参加してきました。 さらりとまとめます。

イベント情報

本編

なが~いお付き合い Jenkins おじさん - 僕と会社と Jenkins

個人開発での利用、会社での利用のお話が聞けました。
iutest が利用しているサービス」のページがとても参考になりそうです。

JenkinsとDockerって何が良いの? 〜言うてるオレもわからんわ〜

www.slideshare.net

たくさん笑わせていただきました。
「わかる」「それな」「うんうん」っていう感じの感想です。

最後の

「JenkinsとDocker」ってどうなんすかね?良い感じです?

知らんけど、オレは使うよ!

このスタンスは凄く良いと思ったし好きですね!

組み込みソフト開発(カーナビ)とJenkinsの活用について、あとAGLについて

  • 発表者: 日下部雄一さん

AGL(Automotive Grade Linux)に関する発表でした。

AGLについては本当に何も知らなかったので、食い入るように聴いていました。 物理層に近い方の業界でも使われてるという話、非常に興味深いです。

LT

Jenkinsでやってみてよかったこと・やめておいたほうが良かったこと

www.slideshare.net

自分で使っていく中で得たグッドノウハウ・バッドノウハウを共有しました。
本番DBとテストDBのスキーマ比較はマジ便利なのでオススメです。
何を血迷ったか発表時間が5分のところを勘違いして15分用の資料を作ってきてしまって駆け足で喋り倒して10分で終わらせました(超過

第8回大阪Jenkins勉強会LT: iOS vs CI

www.slideshare.net

フォントがゴジラ……

MEMO

※他の方のLTはタイトルをちゃんと控えてなかったので資料が公開されてきたら追記しますね。

ビルドが進む度にゴジラが近づいてくるやつ面白かったですw
ビルドにもライブ感はだいじ!

sshでログインせずにknown_hostsを登録する方法

ホスト名example.comへsshするためのknown_hostsレコードの登録方法は以下の通り。

ssh-keygen -R example.com
ssh-keyscan -H example.com >> ~/.ssh/known_hosts
  • ssh-keygen -R <ホスト名> で、~/.ssh/known_hostsからそのホスト名のエントリを削除できます。
  • ssh-keyscan -H <ホスト名>で、known_hosts用にハッシュ化したホスト名のデータを出力できます。

こうやって登録しておくと、sshで初めてログインするときでもAre you sure you want to continue connecting (yes/no)?とか言われません。

蛇足

ちなみにこれをワンライナーにすると以下の通り。

echo example.com | while read L; do ssh-keygen -R $L; ssh-keyscan -H $L >> ~/.ssh/known_hosts; done

または

echo example.com | xargs -I@ echo "ssh-keygen -R @; ssh-keyscan -H @ >> ~/.ssh/known_hosts" | sh

以上。

参考

  • man ssh-keyscan
  • man ssh-keygen