Bitbucket にssh + Git でアクセスする手順

photo by infocux Technologies

はじめに

Bitbucket はプライベートなGitレポジトリを作成することができるサービスです.Githubのプライベート版といったところでしょうか.

Bitbucket にssh + Git でアクセスするための備忘録です.

公開鍵の生成

Bitbucket にsshでアクセスするには公開鍵認証が必要となります.

そこでまずはアクセス元(自分のPC)にて公開鍵を生成します.

Bitbucket ではSSH2のプロトコルで認証を行うのでRSA鍵を生成するのが良いでしょう.

$ ssh-keygen -t rsa 

途中パスフレーズを聞かれます.ここで入力したパスフレーズは、鍵を使ったアクセスの度に聞かれるものとなります.

コマンドが完了すると~/.ssh/id_rsa , ~/.ssh/id_rsa.pub の2つのファイルが生成されます.

後者の ~/.ssh/id_rsa.pub をBitbucket に登録します.

Bitbucket への登録

アカウント管理から公開鍵登録メニューに行きます.

f:id:zonomasa:20140126200648j:plain

f:id:zonomasa:20140126200946j:plain

"Label" フィールドにはマシン名を入力しておくと後で識別可能となり便利です.

"Key" フィールドに公開鍵を入力しましょう.公開鍵を生成したマシン上で$ cat ~/.ssh/id_rsa.pubとし、表示された内容を貼り付けます."鍵を追加"を押せば完了です.

f:id:zonomasa:20140126200951p:plain

まとめ

ssh + Git コマンドでBitbucket にアクセスする方法を解説しました.

Raspberry PI にSSHとVNCを設定しリモート操作可能にする

photo by shokai

はじめに

Raspberry PI で作業をする際に、専用のキーボードやマウスを用意し、ディスプレイを切り替えて行うのはスペース的にも手間的にも無駄が多いものです。

そこでRaspberry PI のリモート環境を整えて、普段使っているPC環境から作業ができるようにします。

具体的には以下の設定を行います。

無線LAN の設定

Raspberry PI のUSBコネクタ無線LAN アダプタを差し込み、いくつかの設定を行うことでネットワークに接続することができます。

USB無線LAN アダプタの選び方ですが、USBコネクタは2つ並びで配置されているので、なるべく小さく薄いものがよいでしょう。

私はPLANEX GW-USNANO というものを使用しています。

PLANEX 11n/g/b対応 150Mbpsハイパワー無線LAN 携帯電話用USBアダプタ GW-USNano2-M

PLANEX 11n/g/b対応 150Mbpsハイパワー無線LAN 携帯電話用USBアダプタ GW-USNano2-M

/etc/wpa_supplicant/wpa_supplicant.conf を以下のように編集します。今回はWPA2-PSK による接続を行う例です。

$ cat /etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1    # アクセスポイントが非公開の場合は1にする
network={
        ssid="<無線アクセスポイントのSSID>"
        proto=WPA WPA2
        scan_ssid=1
        key_mgmt=WPA-PSK
        pairwise=CCMP TKIP
        group=CCMP TKIP
        psk=<暗号化されたパスフレーズ>
}

psk=<暗号化されたパスフレーズ>の部分は以下のコマンドで取得できます。

$ wpa_passphrase <無線アクセスポイントのSSID> <暗号化前のパスフレーズ>
network={
    ssid="<無線アクセスポイントのSSID>"
    #psk="<暗号化前のパスフレーズ>"
    psk=<暗号化されたパスフレーズ>

}

さらに /etc/network/interfaces を編集します。 $ cat /etc/network/interfaces auto lo

iface lo inet loopback
iface eth0 inet dhcp

allow-hotplug wlan0
iface wlan0 inet dhcp
wireless-essid <無線アクセスポイントのSSID>
wpa-driver wext

wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
iface default inet dhcp

Raspberry PI を再起動し、無線アクセスポイントに接続されているか確認しましょう。 $ /sbin/ifconfig wlan0 Link encap:イーサネット ハードウェアアドレス 00:22:cf:3d:02:05 inetアドレス:192.168.1.7 ブロードキャスト:192.168.1.255 マスク:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 メトリック:1 RXパケット:551 エラー:0 損失:10 オーバラン:0 フレーム:0 TXパケット:157 エラー:0 損失:0 オーバラン:0 キャリア:0 衝突(Collisions):0 TXキュー長:1000 RXバイト:133517 (130.3 KiB) TXバイト:23288 (22.7 KiB)

192.168.1.7 という無線LANのネットワークに接続されました。(ネットワークアドレスは環境により異なります。)

SSH によるリモートシェルの設定

SSH の設定はRaspberry PI の設定コマンドであるraspi-configコマンドで行います。

$ sudo raspi-config

メニューから"Advanced Options" を選びます。

f:id:zonomasa:20140114005759p:plain

次にサブメニューから"SSH" を選び、遷移後の選択肢で"Enable" を選びます。

f:id:zonomasa:20140114005811p:plain

f:id:zonomasa:20140114005759p:plain

これでSSH が可能となりました。

他のPCから以下のコマンドを打ち、Raspberry PI のSSHが起動しているか確認しましょう。

$ ssh pi@192.168.1.7              # IPアドレスは無線LAN設定の最後で確認したものになります。

VNC によるリモートデスクトップ設定

VNC はPC を別のネットワーク接続されたPC から操作するためのソフトウェアです。VNC サーバがインストールされたPC をVNC クライアントソフトでリモートから表示することができます。

SSH と異なる点は、GUI を含めたデスクトップ画面をそのまま操作できることです。Windowsリモートデスクトップと同じ使用感です。

操作される側、つまりRaspberry PI へのVNCサーバのインストールは至ってシンプル、以下のコマンドを叩くだけです。

$ sudo apt-get update
$ sudo apt-get install tightvncserver

インストールが完了したら起動します。初回起動時にはパスワードを聞かれますので設定をしましょう。

$ tightvncserver

無事起動したかどうかを確認します。ログファイルを見てみましょう。

$ cat ~/.vnc/raspberrypi:1.log
   13/12/13 16:33:31 Listening for VNC connections on TCP port 5901

ここで5901 がVNC サーバの待ち受けポート番号となります。PC側からログインする際に必要となります。

次に操作する側、VNC クライアントの説明になります。

Windows であればRealVNCがシンプルで使いやすいでしょう。

今回はMac でのFinderから接続する方法を説明します。

Mac では特別なソフトウェアを使用しなくてもVNC サーバに接続できます。

Finderを開き、メニューから"移動”->"サーバーへ移動"を選択します。

するとアドレスを入力するウインドウが開きますので"vnc://:<ポート番号>"を入力します。 以下は私の環境の例です。

f:id:zonomasa:20140113120906p:plain

接続を押し、Raspberry PI のデスクトップが表示されたら成功です。

f:id:zonomasa:20140114010106p:plain

まとめ

Raspberry PI を無線LANでネットワークに接続し、SSHVNC を設定しました。

これにより、Raspberry PI へ接続するケーブルは電源ケーブルのみになります。

省スペースが売りのRaspberry PI なのでなるべく最小限の接続するで利用したいものです。

Raspberry Pi Type B 512MB

Raspberry Pi Type B 512MB

AWS S3 へのファイルのアップロードをコマンドラインから行うAWS Command Line Interfaceを試す

photo by jeff_golden *

はじめに

先日S3 経由でGlacier に写真データをアップロードする記事を書きました。

大切な写真をAmazon AWS にバックアップし99.999999999%の堅牢性を得るための方法 - zonomasaの日記

最後にアップロードを開始したところで前回の記事は終了しているのですが、その後ファイルのアップロードが完了しない問題に苦しめられていました。

どうやらファイルサイズが大きすぎてセッションがタイムアウトしてしまうようです。

そこで今回はAWS の公式コマンドラインツールを用いてS3 へのファイルのアップロードに再チャレンジしてみます。

AWS Command Line Interface とは

AWS Command Line Interfaceは、その名の通りAWSコマンドラインから操作するためのツールです。

S3 をはじめEC2 などいくつかのサービスの操作ができます。

AWS Command Line Interface のインストール

Getting Set Up with the AWS Command Line Interface - AWS Command Line Interface

公式のインストール方法を参考に、Mac OSX 10.9.1にAWS Command Line Interfaceをインストールします。

以下のインストール方法では、コマンドのインストール要件であるpython 2.6.3以降がインストールされており、かつAWSのアカウントを持っていることを前提とします。

bundled installer というインストーラ経由でのインストール行います。

$ curl -O https://s3.amazonaws.com/aws-cli/awscli-bundle.zip
$ unzip awscli-bundle.zip
$ sudo ./awscli-bundle/install -i /usr/local/aws -b /usr/local/bin/aws

AWS Command Line Interface の設定

AWS Command Line Interface でAWS にアクセスするにはキーとシークレットの設定が必要です。

AWS のマイアカウントページを開きます。 アカウント・コンソールから"MyAccount"を選びます。

左のメニューのセキュリティ証明書をクリックします。

f:id:zonomasa:20140109234830p:plain

今後はこのページに変更が入るようです。理解します。

f:id:zonomasa:20140109234827p:plain

"新しいアクセスキーを作成する" を押しましょう。

f:id:zonomasa:20140109234834p:plain

赤枠の部分がキーです。右の"表示"を押すことでシークレットを確認できます。

f:id:zonomasa:20140109234836p:plain

キーとシークレットが確認できたら、AWS Command line Interface にこれらを設定します。

$ /usr/local/bin/aws configure
   AWS Access Key ID [None]: (先ほど確認したのキーを入力します)
   AWS Secret Access Key [None]: (先ほど確認したシークレットを入力します)
   Default region name [None]: Tokyo
   Default output format [None]:

これで最低限の設定が完了しました。

AWS Command Line Interface を使ってみる

まずはS3 に存在するBucket を確認してみましょう。

 $ /usr/local/bin/aws s3 ls
 2014-01-05 21:53:33 photozonomasa    

先日作成したBucket が存在することを確認しました。

では目的であるiphotoのバックアップをアップロードします。

photoディレクトリにtar で固めたファイルが置いてあります。

ディレクトリとS3 のBucket を同期させるコマンド'sync' を使用します。さらに写真データは外部公開しないのでprivate 属性を付与します。

$ /usr/local/bin/aws sync photo s3://photozonomasa --acl private

アップロード完了まで気長に待ちましょう。

まとめ

AWS の公式コマンドラインツールであるAWS Command Line Interface を使用しS3 にファイルをアップロードする方法を紹介しました。

Amazon Web Servicesプログラミング ―APIの基礎からElastic Beanstalkの利用まで

Amazon Web Servicesプログラミング ―APIの基礎からElastic Beanstalkの利用まで

今日の天気を表示してくれるシェルコマンド(ワンライナー)

photo by denebola2025

はじめに

シェル上で仕事をしている時に、ふと今日の天気を知りたくなることありますよね。そんなときにいちいちWebサイトやスマホを開くのは面倒です。

そこでシェルコマンド一発で今日の天気が取得できるワンライナーを紹介します。

今日の天気取得ワンライナー

ruby -r json -e 'p JSON.parse!(`curl http://weather.livedoor.com/forecast/webservice/json/v1?city=130010`)["forecasts"][0]["telop"]'

Weather Hacks - livedoor 天気情報を利用し、取得したJSON 文字列のうち、今日の天気だけをコンソールに表示します。

コマンド中の"130010" は東京を表す地域コードです。 東京以外の情報が欲しければ1次細分区定義表 - livedoor 天気情報を参考に住んでいる地域を指定すれば良いでしょう。

これを.zshrc なりに登録しておけばコマンド一発で呼び出せます。

alias tenki="ruby -r json -e 'p JSON.parse!(\`curl http://weather.livedoor.com/forecast/webservice/\
json/v1?city=130010\`)['\''forecasts'\''][0]['\''telop'\'']'"

まとめ

今日の天気を取得するワンライナーを紹介しました。

修正

当初の記事ではコマンド中の最後の配列インデックスが'1'になっていましたが、これで取得できるのは'明日の天気'でした。 今日の天気を表示する場合の例として'0'に修正しました。

大切な写真をAmazon AWS(Glacier) にバックアップし99.999999999%の堅牢性を得るための方法

photo by blmiers2

はじめに

写真や動画はどんどん溜まっていくものです。家族との大切なひと時を写し出した写真、古い友人との思い出、趣味で撮りためたスナップなどなど。

これらは手元のPC のハードディスク(またはSSD) に保管し、さらに何かしらのバックアップを取っているのが普通だと思います。今回の話はこのバックアップについてです。

Amazon が提供しているGlacier というストレージサービスを使用することで、99.999999999%(イレブンナインと呼ばれています)という可用性をもつバックアップを行うことができます。

ただし、Amazon Glacier は有料サービスとなり、データ1GB につきおおよそ1円のコストが掛かります。

なぜバックアップを行うのか

バックアップを行う目的は、PC の写真データが何かしらの不具合によって消失することを防ぐことです。

不具合には、ハードディスクの故障(思っているより頻繁に起こります)、操作ミス、災害によるPC 自体の損傷などが挙げられます。

外付けドライブによるバックアップの盲点

私は現在Mac を使用しており、TimeMachine という仕組みを使って、ハードディスクの内容をまるごと全て外付けドライブにバックアップしています。

これは操作ミスやPC 本体の故障によるデータ喪失を防ぐことはできるのですが、災害(例えば火災、停電、地震)によるPC の損傷においては、隣においてある外付けドライブも無事である可能性が低く、データが失われる危険性が残ります。

2重バックアップ構成を構築する

地理的に離れた場所にバックアップを行うことで、災害時にもデータを失う危険性を減らすことができます。

今回は、Amazon の提供するGlacier というストレージサービスを利用し、地理的に離れた場所(自宅ではない場所)に写真データのバックアップを残すことを考えます。

f:id:zonomasa:20140104105708p:plain

Glacierによるバックアップは手間がかかるので、図にある通り外付けドライブによるバックアップも継続します。

位置づけとしては、外付けドライブが主たるバックアップ、Glacier はいざという時の安心を得るためのもの、となります。

写真データのアーカイブを作成する

Glacier にアップロードするために写真データをアーカイブ(ひとまとまりのファイルにする)します。

iphoto であれば/Users/(ユーザー名)/Pictures/iphoto_libraryのようなファイルがあるはずです。これをzip 形式、もしくはtar 形式などでアーカイブします。

iphoto でなくてもあまり変わりません。自身の写真管理フォルダのトップからまるごとzip 形式などにアーカイブします。

ファイル名には日付を付けておくとよいでしょう。 iphoto_backup_20140104.zip

Amazon Glacier にアップロードする

Glacier に写真データを保存する流れです。

  1. Amazon AWS への登録(アカウントを持っていない場合)

  2. S3

まずはAmazon AWS への登録が必要です。AWS への登録は以下の公式ページを参考にしてください。

無料アカウント作成の流れ | アマゾン ウェブ サービス(AWS 日本語)

 

登録後にサインインし、以下の図のAWSマネジメントコンソールをクリックします。

f:id:zonomasa:20140104142106p:plain

 

次に"S3" を選択します。すぐ上に"Glacier"がありますが、ここでは選びません。

f:id:zonomasa:20140104142405p:plain

 

S3はストレージサービスになります。ストレージの単位であるbucket を作成し、bucketの保存先をGlacierに設定していきます。 まずは"Create Bucket"を押してください。

f:id:zonomasa:20140104204435p:plain

 

Bucket 名を設定します。名前はグローバルでユニークではいけないようなので、自分の名前などを含めましょう。

RegionはTokyoです。

f:id:zonomasa:20140104204445p:plain

 

ついつい使ってしまいがちなアンダースコア'_' は使用禁止のようです。

f:id:zonomasa:20140104204458p:plain

 

次にBucket の内容をGlacier に保存するための設定をします。

Properties を選択し、Lifecycle の中の"Add rule" を押してください。

f:id:zonomasa:20140104204512p:plain

 

ポップアップが出ますので、"Apply to Entire Bucket" にチェックを入れます(こうすることでBucket の内容全てに適用されます)。

"Move to Glacier" を押し、S3 からGlacier へ移行する日数を入力します。

すぐに移行して欲しいので、ここでは"1日"としています。

すべて入力したら"Save" を押しましょう。

f:id:zonomasa:20140104204527p:plain

 

前の画面に戻ります。

ここでも"Save" を押します。(すでにセーブしてあるよ、という警告が出るかもしれません)

f:id:zonomasa:20140104204535p:plain

 

ファイルをアップロードします。

一覧から作成したBucket 名をクリックします。

画面が切り替わり、"Upload" ボタンが現れますので押しましょう。

f:id:zonomasa:20140104204543p:plain

 

"Add Files" をクリックし、上で作成した写真データのファイルを選択します。

右下の"Start Upload" を押すとアップロードが開始されます。

f:id:zonomasa:20140104204617p:plain

 

アップロード速度は私の環境でだいたい2Mbps 程度です。

気長に待ちましょう。

f:id:zonomasa:20140104204622p:plain

まとめ

大切な写真データの喪失を避けるために、普段のバックアップとは別にAmazon AWS のサービスであるGlacier に保存する方法について述べました。

地理的に離れた場所へのバックアップは、家庭内のバックアップでは実現できない堅牢性を提供してくれます。

 

よくわかるAmazonEC2/S3入門 ―AmazonWebServicesクラウド活用と実践 (Software Design plusシリーズ)

よくわかるAmazonEC2/S3入門 ―AmazonWebServicesクラウド活用と実践 (Software Design plusシリーズ)

LEGOブロックでRaspberry PI のケースを作った

はじめに

Raspberry PI は基本的にむき出しの基板です。

photo by floongle

雑多な机の上で作業をしていると、金属製のものに触れショートしたりしないかとても心配になります。

専用のケースを一緒に買わなかったことが悔やまれます。

しかし検索をしてみると、様々なケースのアイデアが転がっています。中でも興味を引かれたのはLEGOブロックを使ったケース作成です。

久しぶりのLEGOブロック

私も先人たち倣いLEGOブロックでケースを作成しました。

f:id:zonomasa:20131222223947j:plain

はじめは単純な立方体形状で良いと思っていたのですが、組んでいるうちに楽しくなってしまい、最終的には家になってしまいました。

筐体は壁面にすっぽりと収まり、USBやHDMI、サウンドなどは窓を開けてアクセスすることになります。屋根には煙突が飛び出していて、カメラモジュールが顔を出します。(ちょっと気持ち悪いですね)

f:id:zonomasa:20131222224005j:plain

西の窓からはUSBコネクタにアクセス可能なのですが、Wifiモジュールが刺さっているため、こちらの窓が閉まることはなさそうです。

f:id:zonomasa:20131222224013j:plain

放熱についてあまり調べていないので、屋根は完全には塞いでいません。

まとめ

Raspberry PI のケースをLEGOブロックで制作しました。

これでクリスマス会で我が家にやってくるママさんたちにも不審がられることはないですね。

一番の下手くそでいよう

photo by NRK P3

はじめに

"情熱プログラマー ソフトウェア開発者の幸せな生き方" という本を少し前に読みました。

2-3ページのコラム形式の話題が50ほど含まれるもので、それぞれの話題が様々な角度からソフトウェアエンジニアを捉えるものとなっています。

今回は、この中でも印象に残っているエピソード"一番の下手くそでいよう"を紹介したいと思います。

情熱プログラマー ソフトウェア開発者の幸せな生き方

情熱プログラマー ソフトウェア開発者の幸せな生き方

一番の下手くそでいよう

英語で言えば"Be the Worst" 。平たくいえば、あなたが一番の"下手くそ"になるチームに属しないさい、ということになります。

本の中では筆者のジャズ演奏者(筆者であるChad Fowler氏はジャズ演奏者からプログラマーに転向)時代の経験で、自らよりいくつもレベルの高い奏者たちとのセッションをこなすことで、演奏のスキルが大きく向上した経験を述べています。

また同時にソフトウェアエンジニアとして、インドに長期間出張した結果、(ネイティブ話者にもかかわらず)英語のレベルが落ちる経験もしているとのこと。

つまり、自身のスキルレベルは周囲の環境に(上にも下にも)ある程度引っ張られる

これは、直感的にも経験的にも納得のいく法則です。

高いレベルの人たちと一緒に何かをすると、一定の期間を共にすることが前提ですが、その高いレベルの人たちの行動や思考ルーチンをある程度自分の中に取り込むことができます。

本の中では次のように書かれています。

チームで一番下手くそでいるのは、バンドで一番下手くそでいるのと同じ効果がある。どういうわけか自分自身が賢くなるんだ。話し方や書き方さえ以前より知的になる。自分の生み出すコードや設計が以前よりエレガントになり、難しい問題をますます創造的なソリューションで解決できるようになる。

ただこれはよくよく考えると、学習の最も基本的な方法の一つですので、これだけではそれほど特別な驚きがあるわけではありません。

では、私がこのエピソードに印象づけられたのはどのような点かというと、タイトルにもなっている"一番の下手くそでいよう"とういフレーズです。

一番の下手くそでいる=よりレベルの高い集団に自ら飛び込む

自分が一番の下手くそである集団にいても、時とともに成長を重ね、ある日気が付くと真ん中かそれより少し上の位置にいるかもしれません。

また、新入りが入ってくることで、自動的に一番の下手くそで無くなることもあるでしょう。

つまり、"一番の下手くそ" で在り続けるためには、自分と周りをよく把握し、適切に自らのポジションを移動させていかなければならない、ということになります。

"一番の下手くそでいよう"というフレーズには、自身の成長に合わせた積極的な行動を善とする力強いメッセージが含まれていると感じました。

一番の下手くそでいるためには

しかし、会社勤めの人間にとって、自身のポジションを思うように動かすことは大変難しいという実情もあります。

本の中ではその点にも言及し、そのためのソリューションも提示してくれています。

それはオープンソースプロジェクトへ参加することです。

つまり、自分が目標とする技術者が多く在籍するオープンソースプロジェクトへ積極的に参画することで、"一番の下手くそ"環境を得ることができるということです。

まとめ

"一番の下手くそでいよう" と心がけ、自身のポジションを適切に移動させていくことで、よりレベルの高い人達の知識・経験を吸収するチャンスが増えます。

"一番の下手くそ"でいるのは会社でなくても構いません。オープンソースプロジェクトに参画することは、会社とは関係なく、"一番の下手くそ"環境を得る手っ取り早い方法です。