.gitkeepファイルをすべてのディレクトリに作成する

Gitでコードを管理する場合、空ディレクトリが存在すると、管理対象になりません。


こんなときは、find コマンドの -exec オプションを使って、.gitkeepファイルを
全てのディレクトリにとりあえず作ってしまうのが楽です。


たとえば、Chefで新しいcookbookを作ったとき。

$ knife cookbook create mycookbook -o .                                                                                                                                                                                                            
WARNING: No knife configuration file found
** Creating cookbook mycookbook
** Creating README for cookbook: mycookbook
** Creating CHANGELOG for cookbook: mycookbook
** Creating metadata for cookbook: mycookbook

$ ls -laR mycookbook/
mycookbook/:
合計 52
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:28 2015 .
drwxr-xr-x.  3 myuser myuser 4096  3月 15 15:28 2015 ..
-rw-r--r--.  1 myuser myuser  467  3月 15 15:28 2015 CHANGELOG.md
-rw-r--r--.  1 myuser myuser 1480  3月 15 15:28 2015 README.md
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 attributes
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 definitions
drwxr-xr-x.  3 myuser myuser 4096  3月 15 15:28 2015 files
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 libraries
-rw-r--r--.  1 myuser myuser  284  3月 15 15:28 2015 metadata.rb
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 providers
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 recipes
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 resources
drwxr-xr-x.  3 myuser myuser 4096  3月 15 15:28 2015 templates

mycookbook/attributes:
合計 8
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:28 2015 ..

mycookbook/definitions:
合計 8
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:28 2015 ..

mycookbook/files:
合計 12
drwxr-xr-x.  3 myuser myuser 4096  3月 15 15:28 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:28 2015 ..
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 default

mycookbook/files/default:
合計 8
drwxr-xr-x. 2 myuser myuser 4096  3月 15 15:28 2015 .
drwxr-xr-x. 3 myuser myuser 4096  3月 15 15:28 2015 ..

mycookbook/libraries:
合計 8
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:28 2015 ..

mycookbook/providers:
合計 8
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:28 2015 ..

mycookbook/recipes:
合計 12
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:28 2015 ..
-rw-r--r--.  1 myuser myuser  136  3月 15 15:28 2015 default.rb

mycookbook/resources:
合計 8
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:28 2015 ..

mycookbook/templates:
合計 12
drwxr-xr-x.  3 myuser myuser 4096  3月 15 15:28 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:28 2015 ..
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:28 2015 default

mycookbook/templates/default:
合計 8
drwxr-xr-x. 2 myuser myuser 4096  3月 15 15:28 2015 .
drwxr-xr-x. 3 myuser myuser 4096  3月 15 15:28 2015 ..


こんな感じでfindコマンドを使うと、楽です。

$ find mycookbook -type d -exec touch {}/.gitkeep \;

$ ls -laR mycookbook/
mycookbook/:
合計 52
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:35 2015 .
drwxr-xr-x.  3 myuser myuser 4096  3月 15 15:28 2015 ..
-rw-r--r--.  1 myuser myuser    0  3月 15 15:35 2015 .gitkeep
-rw-r--r--.  1 myuser myuser  467  3月 15 15:28 2015 CHANGELOG.md
-rw-r--r--.  1 myuser myuser 1480  3月 15 15:28 2015 README.md
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 attributes
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 definitions
drwxr-xr-x.  3 myuser myuser 4096  3月 15 15:35 2015 files
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 libraries
-rw-r--r--.  1 myuser myuser  284  3月 15 15:28 2015 metadata.rb
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 providers
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 recipes
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 resources
drwxr-xr-x.  3 myuser myuser 4096  3月 15 15:35 2015 templates

mycookbook/attributes:
合計 8
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:35 2015 ..
-rw-r--r--.  1 myuser myuser    0  3月 15 15:35 2015 .gitkeep

mycookbook/definitions:
合計 8
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:35 2015 ..
-rw-r--r--.  1 myuser myuser    0  3月 15 15:35 2015 .gitkeep

mycookbook/files:
合計 12
drwxr-xr-x.  3 myuser myuser 4096  3月 15 15:35 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:35 2015 ..
-rw-r--r--.  1 myuser myuser    0  3月 15 15:35 2015 .gitkeep
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 default

mycookbook/files/default:
合計 8
drwxr-xr-x. 2 myuser myuser 4096  3月 15 15:35 2015 .
drwxr-xr-x. 3 myuser myuser 4096  3月 15 15:35 2015 ..
-rw-r--r--. 1 myuser myuser    0  3月 15 15:35 2015 .gitkeep

mycookbook/libraries:
合計 8
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:35 2015 ..
-rw-r--r--.  1 myuser myuser    0  3月 15 15:35 2015 .gitkeep

mycookbook/providers:
合計 8
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:35 2015 ..
-rw-r--r--.  1 myuser myuser    0  3月 15 15:35 2015 .gitkeep

mycookbook/recipes:
合計 12
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:35 2015 ..
-rw-r--r--.  1 myuser myuser    0  3月 15 15:35 2015 .gitkeep
-rw-r--r--.  1 myuser myuser  136  3月 15 15:28 2015 default.rb

mycookbook/resources:
合計 8
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:35 2015 ..
-rw-r--r--.  1 myuser myuser    0  3月 15 15:35 2015 .gitkeep

mycookbook/templates:
合計 12
drwxr-xr-x.  3 myuser myuser 4096  3月 15 15:35 2015 .
drwxr-xr-x. 10 myuser myuser 4096  3月 15 15:35 2015 ..
-rw-r--r--.  1 myuser myuser    0  3月 15 15:35 2015 .gitkeep
drwxr-xr-x.  2 myuser myuser 4096  3月 15 15:35 2015 default

mycookbook/templates/default:
合計 8
drwxr-xr-x. 2 myuser myuser 4096  3月 15 15:35 2015 .
drwxr-xr-x. 3 myuser myuser 4096  3月 15 15:35 2015 ..
-rw-r--r--. 1 myuser myuser    0  3月 15 15:35 2015 .gitkeep

今日はこんなところで。

Oracle JDKをCLIで直接ダウンロードする方法

今日はTIPSをメモ。


Oracle JDKLinuxで使う場合、直接RPMファイル等をダウンロードしたい場合があります。


wgetで「--no-check-certificate」「--no-cookies」「--header」オプションをつけるとうまくいく模様。


本日時点で最新版のJava SE Development Kit 8u40で試してみました。

$  wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u40-b26/jdk-8u40-linux-x64.rpm
--2015-03-15 13:17:10--  http://download.oracle.com/otn-pub/java/jdk/8u40-b26/jdk-8u40-linux-x64.rpm
download.oracle.com をDNSに問いあわせています... 42.127.234.73, 42.127.234.88
download.oracle.com|42.127.234.73|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Moved Temporarily
場所: https://edelivery.oracle.com/otn-pub/java/jdk/8u40-b26/jdk-8u40-linux-x64.rpm [続く]
--2015-03-15 13:17:10--  https://edelivery.oracle.com/otn-pub/java/jdk/8u40-b26/jdk-8u40-linux-x64.rpm
edelivery.oracle.com をDNSに問いあわせています... 23.37.150.140
edelivery.oracle.com|23.37.150.140|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 302 Moved Temporarily
場所: http://download.oracle.com/otn-pub/java/jdk/8u40-b26/jdk-8u40-linux-x64.rpm?AuthParam=1426393151_62f6eb3f2a8ce42c742574ab302a7510 [続く]
--2015-03-15 13:17:11--  http://download.oracle.com/otn-pub/java/jdk/8u40-b26/jdk-8u40-linux-x64.rpm?AuthParam=1426393151_62f6eb3f2a8ce42c742574ab302a7510
download.oracle.com:80 への接続を再利用します。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 152185219 (145M) [application/x-redhat-package-manager]
`jdk-8u40-linux-x64.rpm' に保存中

100%[=============================================================================================================================================================================================================================>] 152,185,219 3.69M/s 時間 52s     

2015-03-15 13:18:03 (2.81 MB/s) - `jdk-8u40-linux-x64.rpm' へ保存完了 [152185219/152185219]


うまくやれば、自動インストールができますね。
Chefに組み込んでみよう。

今日はこんなところで。

CloudFormationのParameterで正規表現を使う場合の話

今日はタイトル通りのメモです。


CloudFormationで正規表現を使いたい場合のリファレンスをメモ。
Parametersのパラメータ内でAllowedPatternを使いたい場合など
Java正規表現に準拠しているんですね。


今日はこんなところで。

CloudFormationでElastiCacheを設定してみる

CloudFormationでやってみたシリーズです。
CloudFormationでVPC上にElastiCacheを作成するサンプルを作ってみました。


githubにアップロードしました。
使えそうだったら使って見ていただけるとうれしいです。


今回は以下のようなことをやってみました。

  • ElastiCacheのCacheClusterを作成
    • ClusterはVPC内に作成
    • Clusterが使うSubnetは2つ選択
    • CacheEngineはMemcachedを選択
    • ParameterGroupを作成

今日はこんなところで。

TerraformでAWS環境の鍵ペアをインポートする

Terraformのドキュメントを見ていたら、AWS環境の鍵ペアをインポートできることが
分かり試してみました。


コンフィグは以下のとおりです。

provider "aws" {
  access_key = <your access key>
  secret_key = <your secret key>
  region     = "ap-northeast-1"
}

resource "aws_key_pair" "terraform-key" {
  key_name   = "terraform-key"
  public_key = <public_key>
}


で、やってみます。

$ terraform plan                                                                                                                     
Refreshing Terraform state prior to plan...


The Terraform execution plan has been generated and is shown below.
Resources are shown in alphabetical order for quick scanning. Green resources
will be created (or destroyed and then created if an existing resource
exists), yellow resources are being changed in-place, and red resources
will be destroyed.

Note: You didn't specify an "-out" parameter to save this plan, so when
"apply" is called, Terraform can't guarantee this is what will execute.

+ aws_key_pair.terraform-key
    fingerprint: "" => "<computed>"
    key_name:    "" => "terraform-key"
    public_key:  "" => <public_key>


$ terraform apply                                                                                                                    
aws_key_pair.terraform-key: Creating...
  fingerprint: "" => "<computed>"
  key_name:    "" => "terraform-key"
  public_key:  "" => <public_key>
aws_key_pair.terraform-key: Creation complete


無事、鍵を登録しました。

 aws ec2 describe-key-pairs
{
    "KeyPairs": [
        {
            "KeyName": "terraform-key",
            "KeyFingerprint": "db:dc:28:2b:51:b5:47:45:b5:47:bd:7f:d4:d8:84:9a"
        }
    ]
}


今日はこんなところで。