2013年9月24日火曜日

Go言語からNeo4jを試してみる

ここ一年半ほどあるものを実装しようとモヤモヤしていたのですが、先週元上司との会話の中でヒントをもらった気がしたので、グラフDBをためしてみることにしました。
グラフDBは初挑戦のため、情報も多いメジャーどころのNeo4jを使用することにしました。
そもそもグラフDBとはなんぞや?って人は各々ググッてください。

◯Neo4Jのインストール

とりあえずローカルで試せればいいので、brewから一発でインストールします
brew install neo4j
で、インストールが終わったら、
neo4j start
で実行させるのですが、Neo4jの動作にはJava7が必要ということらしく、Oracleのサイトからダウンロード&インストールを行いました。
再度 neo4j start コマンドを実行すると、文句を言われながらも、サーバーが立ち上がります。
$ neo4j start
WARNING! You are using an unsupported version of the Java runtime. Please use Oracle(R) Java(TM) Runtime Environment 7.
Using additional JVM arguments: -server -XX:+DisableExplicitGC -Dorg.neo4j.server.properties=conf/neo4j-server.properties -Djava.util.logging.config.file=conf/logging.properties -Dlog4j.configuration=file:conf/log4j.properties -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -Dneo4j.ext.udc.source=homebrew
Detected installation in launchd, starting it...

 サーバが正常に立ち上がったら、Web管理者用ページを開いてみます。
open http://localhost:7474/webadmin/
Neo4j 001
上記の画面はいくつかテスト的にデータを突っ込んだ後の状態になっています。
とりあえず、ここまで確認できたら、インストールは完了です。


◯Go言語用クライアントをインストール

Go言語のライブラリを探す際は、
  • できるだけ最近更新されており
  • こまめにコミットされている
を基準としてるため、Neo4jを試した日(2013/09/23時点)で、最も上記に当てはまった
jmcvetta/neoism
 を採用しました。
ということで、さくっとインストールを行います。
$go get github.com/jmcvetta/neoism

◯データの登録

Go言語からデータの登録を行います。

上記のコードで、一個のルートノードに対して、5つの子ノードを、"ConnectTo"というリレーションで接続したグラフが作成されます。
fmt.Printlnで表示しているルートノードのIDはメモっておきましょう。この後使用します。


◯データの検索

RDBのSQLの様に、Neo4JではCypherというクエリでデータの作成、検索を行えます。
先ほどの
http://localhost:7474/webadmin/
にアクセスして、Power tool Console タブを選択します。
Neo4j 002
そして、コンソールに対して、以下のクエリを入力します。
START a = node([先ほどの実行結果のID])
MATCH a-[r]->b
RETURN a,r,b;
Neo4j 003

START句は、検索開始のノードを指定します。
今回は自分の環境での実行結果が、ルートノードID=20だったため、node(20)を開始ノードとして設定しています。
そして、開始ノード に対して a という別名を定義しています。

MATCH句は、検索対象のパターンを記載します。
MATCH a-[r]->b
は、aに接続されている、リレーション r と、子ノード bという意味合いです。
それぞれ、a, r, b という別名が定義され、以降は別名で参照することができます。
なおここで、リレーションの種類を指定したい場合は、[r]の代わりに
MATCH a-[:ConnectTo]->b
と記載することで、aとbをつなぐリレーションをConnectToのみに限定することができます。

RETURN句はそのまま、返却する値を定義します。
ここで指定した別名がそのまま実行結果として返ってきます。
RDBでいうところのSELECT句ですね。

と、比較的わかりやすい構文で構成されています。
構文についは、Consoleの左サイドバーにチートシートがあるので、いろいろ試してみると新しい発見があるかもしれません(僕もまだ全部は見てないです)

◯感想

触ってみた感想としては、RDBとは異なったパラダイムですが、Cypherが比較的理解しやすいのと、データ構造が人間に理解しやすい形のため、
さわりの部分で投げ出すことはなさそうです。
とは言え、『やっと動かせた!』ってレベルなので、そもそも僕の目的にあっているのか吟味しながら触っていこうと思います。

2013年9月17日火曜日

話題の Genymotionをインストールしてみた

話題の高速androidエミュレータの GenymotionをMacBook Airにインストールしてみました。

 

◯前準備

まずは公式ページにサインアップし、アカウントの作成とdmgファイルをダウンロードしておきます。

Genymotion

 

Genymotionは仮想エンジンとして、VirtualBoxを使用しているので、こちらも事前にインストールしておきます。

 

◯インストール

dmgファイルをマウントし、以下のファイルをApplications内に放り込みます

  • Genymotion.app
  • Genymotion Shell.app

 

Genymotion 008

 

とりあえず、Genymotionを起動します。

『仮想デバイスが無いけど、作るかい?』と聞かれるので、Yesと答えておきましょう。

Genymotion 001

 

 

すると、前準備で作成したアカウントを尋ねられるので、それぞれ入力した後に『Connect』をクリックします。

Genymotion 002

 

 

次に作成する仮想イメージのタイプを選択します。

今回はとりあえず、我が愛機『Galaxy Nexus』の4.2.2 with Google Appsを選択しました。

Genymotion 003

 

 

確認画面が出てくるので、そのまま『Next』をクリックします。

Genymotion 004

 

仮想イメージのダウンロードが始まります。

Genymotion 005

 

自分の環境では約200MBのダウンロードで、5〜10分くらいで完了しました。

Genymotion 006

 

作成する仮想環境に名前をつけます。

今回は特に深く考えずにそのままにしておきました。

Genymotion 007

 

サクッと作成完了です。

ここまでで20分もかかってません。

Genymotion 009

 

◯イメージの起動

インストール完了画面で『Finish』をクリックすると、下記のようなメニュー画面が表示されます。

先ほど作成したイメージだけが表示されています。

Genymotion 010

 

そのまま、『Play』をクリックすると、『Android SDKのパスが設定されてねーよ!このスットコドッコイ』と言われてしまったので、

『Yes』をクリックし、設定画面に移ります。

Genymotion 011

 

自分の環境では、android-sdkはhomebrewで管理しているため、下記のように設定を行い、『OK』をクリックします。

/usr/local/Cellar/android-sdk/22.0.5/

Genymotion 012

 

今度は『VirtualBoxのエンジンがロードできねーぞ!この唐変木が!』と言われてしまいました。

もともと入っていたVirtualBoxが古かったようなので、最新の4.2.18をダウンロードし、インストールを行います。

VirtualBoxのインストールは、主題から外れるので割愛します。

 

さて、VirtualBoxの最新化ができたところで、再度メニューから『Play』をクリックします。

瞬殺でandroidが立ち上がりました。

言語を日本語に設定し、『開始』をクリックします。

Genymotion 014

 

なんか表示がおかしくなっている部分がありますが、まぁ見なかったことにしておきましょう。

あとはいつもどおり、Googleのアカウントを設定して、

Genymotion 015

 

バックアップの設定をして

Genymotion 016

 

位置情報の設定をして

Genymotion 017

 

セットアップ完了です!

Genymotion 018

 

あとは煮るなり焼くなり好きにすればいいじゃない。

Genymotion 019

 

 

◯感想

ちょっといじってみた感想としては、前評判通り動作が実機よりさくさく(ぬるぬる?)と動きます。

Google純正のエミュレータよりも、起動もはやくストレスが少なく感じますね。

ただ、この環境で動作テストを行ってしまうと、実機での検証時に『あれ?』ってなってしまいそうです。

 

 

2013年9月10日火曜日

MSDeployを使用して、JenkinsからWebサーバにデプロイする

定型処理は自動化しましょう!ということで、JenkinsからMSDeployを使ってASP.netプログラムを、Windows 2012 Server上のIISにデプロイできるようにしてみました。

 

Windows Server 2012 (デプロイ先)の設定

◯前提条件

  • サーバーマネージャーからIISがインストールされている状態

 

◯Web Platform Installer から、Web配置ツールをインストール

製品 → すべて → Web配置ツールを探し出して、追加をクリック

無題クリップ 062813 030821 PM

 

インストールをクリックすると、『これでインストールするけど、いいかい?』って聞かれるので、同意しましょう。

無題クリップ 062813 030930 PM

 

 

インストールが終了するまで待ちます。

無題クリップ 062813 030957 PM

 

 

他のもいろいろインストールされましたが、Web配置ツールが入ったので良しとしましょう。

無題クリップ 062813 031118 PM

 

 

◯IISで展開の設定

IIS上のDefault Web Site を右クリックし、展開→Web配置による発行の有効化 をクリックします。

無題クリップ 062813 031514 PM

 

 

Web配置による発行の有効化の画面が出てきます。

ほとんどは初期値で良いのですが、『発行の設定ファイルの保存先を指定します』の項目だけは初期値ではうまく行かなかったので、C:¥inetpub¥wwwroot配下に設定します。

無題クリップ 062813 043330 PM

あとは、設定をクリックして、設定を反映しておきます。

 

 

 

Jenkins側の設定(Windows 7 Pro)

◯前提条件

  • .net Framework 4.0がインストールされていること
  • MSBuild(Jenkins Plugin)がインストールされていること

 

◯MSBuildプラグインの設定

まずは、.net Frameworkのバージョンを明示的に指定します。

Jenkinsのトップページから、『Jenkinsの管理』→『システムの設定』から、MSBuildの項目を下記のように設定します。

Name:任意の名称(バージョンがわかりやすければ、どんな名称でも問題ないと思います)

Path to MSBuild : 指定バージョンのMSBuild.exeへの絶対パス

Default Parameters : 今回は使用しません。

Blog 20130910 01

 

 

◯ジョブを作成する

フリースタイル・プロジェクトのビルド を選択して、新規ジョブを作成します。

 

◯MSBuildの設定

『ビルド手順の追加』から、『Buil a Visual Studio project or solution using MSBuild』を選択し、手順を追加します。

Blog 20130910 03

 

MSBuild Version : 『MSBuildプラグインの設定』で作成した、バージョン情報

MSBuild Build File : ジョブディレクトリ配下のworkspaceディレクトリ配下からの、プロジェクトorソリューションファイルへの相対パス

Command Line Arguments : ビルドはリリースで、ターゲットはPackageに指定

Blog 20130910 02

 

◯MSDeployコマンドを設定する

『ビルド手順の追加』から、『Windowsバッチコマンドの実行』を選択し、手順を追加します。 

Blog 20130910 04 

設定するバッチコマンドの内容は以下のようになります。(実際は一行で記述します。)

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe" 

-verb:sync 

-source:package='[ビルドパッケージのパス]' 

-dest:auto,wmsvc=[サーバアドレス],includeAcls='False',username=[サーバユーザ],password=[ユーザパスワード] 

-setParam:"IIS Web Application Name"="[デプロイ場所]" 

-allowUntrusted=true

Blog 20130910 05

 

 

以上で、デプロイサーバ側、Jenkinsジョブの設定が完了です。

これでVCSのポーリングを組み合わせて、コミット/プッシュに応じてビルド〜デプロイまでを自動化することができます。

本番環境へのデプロイなんかは、間にテストをかませたり、ワークフロー的な動きが出てきたりしますが、開発環境レベルではこのレベルで問題かなぁと思います。

 

 

2013年5月31日金曜日

FxCopをWindows 2012 server にインストールする

 

いままでソースコード解析に使用していたFxCopが、なぜかそのままだとWindows 2012 serverにインストールできなかったので、試行錯誤の結果を備忘録としてまとめておきます。

 

FxCopとは

.NET のソースコードをチェックする、MS社謹製のツールです。

基本的にはMS社の『クラスライブラリ開発のデザインガイドライン』に則り解析をするようです。

FxCopのインストーラーは『Microsoft Windows SDK for Windows 7 and .NET Framework 4』に含まれています。

Windows 2008 standard 64bitはこちらでインストールが可能でした。

 

 

調べる

『FxCop Windows8』で調べると出るわ出るわ

どちらも解決方法が同じだったので、これらを参考に対処していきます。

 

 

ISOをダウンロード

下記サイトから、CPUアーキテクチャに合わせてISOをダウンロードします。

Microsoft Windows SDK for Windows 7 and .NET Framework 4 (ISO)

 

 

インストール

ダウンロードしたISOを右クリックでマウントします。

CDドライブとしてマウントされたはずです。

 

先ほど参考にしたサイトの通り、ファイルを抽出します。

  1. CDのルート → Setup → WinSDKNetFxTools → cab1.cab をエクスプローラで開く
  2. cab1.cab内にある、『WinSDK_FxCopSetup.exe』から始まるファイル名のファイルを、適当なディレクトリ(デスクトップとか)にコピペする
  3. 拡張子をexeに変更し、実行する
  4. ウィザードに従って、インストールを進める

これで、FxCopがインストール出来ました。

スクリーンショット 053113 120349 PM

 

マイクロソフト様には、早めにWindows 2012対応のFxCopを出してほしいものです。

 

 

 

2013年5月28日火曜日

Jenkins Sounds Plugin を仕込んでみた

そこそこの人数でプロジェクトを回す際に、必要となってくるのがソースのバージョン管理と状態管理。

ということで、一年ほど前から継続的インテグレーションを実現させるために、Jenkinsを使用しています。

少人数(1〜3人くらい)で回している間は、なんかあったら『Jenkinsの結果見やがれ』で済んだんですが、今回人数がそこそこ入るプロジェクトにアサインされることになり、少々工夫をする必要が出てしまいました。

具体的には

  • コミットタイミングが開発者によってまちまちなため、ジョブのタイミングがわからない
  • ジョブの結果(success / fail / abort) が、瞬時にわからない

の二点です。

 

結果的に、

  1. 定期的にJenkinsの管理画面を確認し
  2. どのコミットでエラーが発生したかを確認し
  3. コミットの担当者を突き止め
  4. 修正させる

という、至極面倒くさいフローをたどることになります。

Redmineも併用しているため、Jenkinsからチケットを投げて、チケット管理させるという方法も考えたのですが、やはり能動的な通知が必要なのでは?と思い始めました。

 

前置きが長くなりましたが、ということで今回採用したのが、『Jenkins Sounds Plugin』です。

 

なにそれ?

Jenkinsのアクションごとに、指定の音声ファイルを再生するだけのプラグインです。

ジョブの結果ごとに、再生する効果音を指定出来ます。

 

インストールする

Jenkinsはすでにインストール済みである前提で進めます。

まずはJenkinsのダッシュボードから『Jenkinsの管理』をクリックし、『プラグインの管理』をクリックします。

スクリーンショット 2013 05 28 9 55 2

 

『利用可能』タブから、『Jenkins Sounds Plugin』にチェックを入れて、インストールボタンを押すだけ。はい簡単。

スクリーンショット 2013 05 28 9 58

 

 

設定をみてみる

インストールが正常に完了すると、Jenkinsのダッシュボードに以下のような『Sounds』という項目ができているはずです。

スクリーンショット 2013 05 28 10 25

とりあえず、これをクリックしてみましょう。

テスト用の画面が表示されます。

ここで重要なのは、『Sounds Output』に記載されている『(see http://127.0.0.1:8080/jenkins/sounds/jsonpdemo)』というリンクだけです。

あとは読み飛ばしましょう。

 

ジョブに通知音を仕込む

それではジョブに通知音を仕込んでみましょう。

今回はサンプルなので、通知音を鳴らすだけのジョブを新規に作成します。

スクリーンショット 2013 05 28 10 34

 

『ビルド後の処理』から、『Jenkins Sounds』を選択します。

スクリーンショット 2013 05 28 10 35

 

Jenkins Soundsの項目を追加すると、通知音の設定を追加できます。

何も考えず『Add sound』をクリック

スクリーンショット 2013 05 28 10 37

 

すると、ビルド結果の指定と、通知音を設定できるようになります。

スクリーンショット 2013 05 28 10 38

 

 

通知音を鳴らすタイミングは『On build result』で設定します。

設定できるタイミングは以下の5つ

  • Not build
  • Aborted
  • Failure
  • Unstable
  • Success

成功とそれ以外を知りたいので、とりあえずSuccessとFailureあたりを追加しておきます。

 

通知音の種類は『Play sound』で適当に選択します。

なんかたくさんあるので、適当なものを選択しておきます。

 

もう一つ準備

さて、ここまで来てふと『うちJenkinsは仮想サーバでスピーカーもついてねぇよ』とか、『スピーカーはついてるけど、Jenkinsさんがサーバー室に閉じ込められてるんだけど・・・』と思った人は、ここを読んでください。

開発する場所と、同じ場所にスピーカー設置済みのJenkinsを搭載したサーバがある人は読み飛ばしてください。

Jenkins Sound PluginはHTML5のWebAudio機能で、アクセスしているブラウザ上で通知音を再生することが可能です。

ダッシュボード → Jenkinsの管理 → システムの設定 からJenkins Soundsを探しだして、『Play through HTML5 Audio enabled browser』にチェックを入れてください。

スクリーンショット 2013 05 28 15 18

Jenkins Sound Pluginのバージョン0.4では標準でチェックが付いているようです。

 

先ほどのJenkins Soundsの管理画面で表示されていたURL http://[Jenkinsサーバアドレス]/sounds/jsonpdemo を別のタブにでも表示しておきましょう。

 

 

実際に音を鳴らしてみる

 

ここまで来たらあとは通知音を聞いてみましょう。

先ほど作成したジョブを流してみます。

スクリーンショット 2013 05 28 10 40

 

ビルド完了からしばらくおいて、通知音が流れたかと思います。

通知音が出なかった場合は、設定やスピーカーがミュートになっていないか確認してみましょう。

 

これでひとまず、ビルド結果に応じて、Jenkinsから能動的に通知が出来る状態になりました。

 

通知音を変更する

さて、ここまで来ると通知音を自分好みに変えたくなるのが人情というもの。

まずは、通知音の選定です。

ここで重要なのは

  1. 成功/失敗がチーム内でわかりやすい
  2. 成功時はスパっと短めに
  3. 失敗時は、失敗とわかりながらも重たくない音

この3つです。

1つめは言うまでもなく、コミットを行ったプログラマが『あ、今の失敗、俺のコミットかも!』と気がつけるように。

2つめは成功音を長いファンファーレなんかにすると、ビルドの度にファンファーレが鳴り響き、思わずスピーカーをミュートにしてやりたくなるので、短めに。

3つめですが、これが一番重要かと思います。

一時期失敗の通知音を某有名RPGの『冒険の書1が消えました』的な音楽にしてあったんですが、失敗する度に過去のトラウマを刺激され、ビルドする意欲が削られていったのを覚えています。

今は、

  • 成功→某有名RPGのレベルアップ音 or 某ヒゲの配管工がコインを取る音 
  • 失敗→某ヒゲの配管工がやられたときの音

と、比較的軽い音にするようにしています。

 

さて、実際の設定方法ですが

  1. 再生したいwavファイルを用意
  2. そのwavファイルをディレクトリを掘らずに、並列でzip圧縮
  3. jenkinsをホスティングしているサーバにzipファイルをアップロード
  4. Jenkinsダッシュボード → Jenkinsの管理 → システムの設定 → Jenkins Sounds内のSound archive location に先ほどアップロードしたzipファイルのパスを設定する

となっています。

上記手順が済んだら、ジョブを作成した際に出てきた『Play sound』に、アップロードしたファイルが表示されると思います。

あとはお好きなタイミングで、お好きな通知音を設定するだけ。

素敵なJenkinsライフをお過ごしください。

 

2013年5月9日木曜日

Vagrantをインストールしてみた

なんだか流行りっぽいのと、GW中にMacbookAirの大掃除をしてディスク容量に余裕ができたので、Vagrantを試してみた。

 

VirtualBoxとVagrantをインストールする

VMWare Fusion版もあるらしいのだけれど、そんなブルジョワなアプリを持っていないので、VirtualBoxで試すことにします。

とりあえず、Mac版のVirtualBoxをダウンロードしてきます。

 

Downloads – Oracle VM VirtualBox

 

インストールについては本筋ではないので割愛

 

続いてVagrantをダウンロードして、インストールを行います。

バージョンはよく分からないのと、新しいものは良い物なので、1.2.2を選択


Vagrant - Downloads

 

インストールは、インストーラーに従っていれば躓くところもないので、やっぱり割愛

 

 

インストールを確認

ちゃんとインストールできたかを確認するために、コマンドを発行して確認します。

$ vagrant -v
Vagrant version 1.2.2

バージョンが表示されればOK

 

 

Boxのダウンロード

vagrantではイメージファイルをBoxと呼ぶらしいです。

構築済みのBoxがダウンロード可能なようなので、まずはここからチョイスしてダウンロードを行います。

 

A list of base boxes for Vagrant - Vagrantbox.es


今回はベーシックに『CentOS 6.4 x86_64 Minimal (VirtualBox Guest Additions 4.2.8, Chef 11.4.0, Puppet 3.1.0)』を選びます。

URLの横のCopyをクリックし、URLをコピーしておきます。


ターミナルを開いて以下のようにコマンドを発行します。


$ vagrant box add centos64 http://developer.nrel.gov/downloads/vagrant-boxes/CentOS-6.4-x86_64-v20130309.box
Downloading or copying the box...

Extracting box...te: 309k/s, Estimated time remaining: 0:00:01))
Successfully added box 'centos64' with provider 'virtualbox'!

 

vagrant box add に続いて、Box名、URLを指定します。

Box名は任意に命名できるようなので、自分が管理しやすい名前をつけます。

ダウンロードは時間がかかるようなので、じっくりと待ちます。

 

 

Vagrantfileを作成する

Vagrantfileはvagrantの設定ファイルのようです。

Vagrantfileを作成する前に、格納用のディレクトリを作成します。

自分はvagrantというディレクトリを作成後、Box名でディレクトリを作成する形式にします。このへんは各自の好みでいいと思います。

 

$ mkdir vagrant/centos64/

$ cd vagrant/centos64/

 

ディレクトリ作成後、vagrant init でVagrantfileを作成します。

$ vagrant init
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

$ ls
Vagrantfile

 

Vagrantfileの中身をみてみると、ごにょごにょといろいろ記載されていますが、コメントを除外すると

Vagrant.configure("2") do |config|

  config.vm.box = "base"

end

ここまでシンプルになります。

config.vm.box にvagrant box add で指定したBox名を指定するように編集します。

Vagrant.configure("2") do |config|

  config.vm.box = "centos64"

end

色々と設定できるようですが、最低限上記の設定があれば、起動はできるようです。

 

 

起動する

実際に起動してみましょう。

起動するためには、先ほどVagrantfileを作成したディレクトリで、vagrant up コマンドを発行します。

$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
[default] Importing base box 'centos64'...
[default] Matching MAC address for NAT networking...
[default] Setting the name of the VM...
[default] Clearing any previously set forwarded ports...
[default] Creating shared folders metadata...
[default] Clearing any previously set network interfaces...
[default] Preparing network interfaces based on configuration...
[default] Forwarding ports...
[default] -- 22 => 2222 (adapter 1)
[default] Booting VM...
[default] Waiting for VM to boot. This can take a few minutes.
[default] VM booted and ready for use!
[default] Configuring and enabling network interfaces...
[default] Mounting shared folders...
[default] -- /vagrant

ターミナルが戻ってきたら、起動完了です。

さて、ターミナルが戻ってきただけで、ViatualBoxの画面が出てくるわけでもなし・・・。

 

 

vagrant ssh でssh接続する

Boxにssh接続を行う vagrant ssh なるコマンドがあるようなので、それを使用します。

$ vagrant ssh
Welcome to your Vagrant-built virtual machine.
[vagrant@localhost ~]

これでBoxに接続出来ました。

抜けるときは通常のsshと同様に exit で抜けます。

[vagrant@localhost /]$ exit
logout
Connection to 127.0.0.1 closed.

これであとは煮るなり焼くなりお好きにBoxを調理してあげてください。

 

 

Boxをシャットダウンする

ここまで来たら、あとはシャットダウンさせるだけです。

シャットダウンは vagrant halt で行います。

$ vagrant halt
[default] Attempting graceful shutdown of VM...

 

あとはコンフィグファイルをいじり倒して、自分が使いやすい仮想環境にするだけです。

 

しかし、Macbook Air のメモリが4GBぽっちの環境じゃあんまり重たい処理はさせられそうにないです・・・。

2013年4月25日木曜日

Raspberry Pi の Arch Linux で使用領域を拡張する

 

 

Raspberry Piにsshで接続するところまでできたわけですが、ディスクが1.7GBしか認識されていなかったため、拡張することにします。

OSにRaspbianを選択していると、Raspi-configで簡単に設定できるようですが、ArchLinuxではちょっと手間がかかります。

今回は、8GBのSDカードを使用しているので、限界まで拡張したいと思います。

まずは、拡張前の df -hの結果です。

[root@alarmpi ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 1.7G 665M 924M 42% /
devtmpfs 83M 0 83M 0% /dev
tmpfs 231M 0 231M 0% /dev/shm
tmpfs 231M 244K 231M 1% /run
tmpfs 231M 0 231M 0% /sys/fs/cgroup
tmpfs 231M 0 231M 0% /tmp
/dev/mmcblk0p1 90M 25M 66M 28% /boot

 
それでは、拡張手順です。
まず、

fdisk mmcbblk0

を実行し、Commandにpをタイプし、パーティションリストを表示します。

[root@alarmpi dev]# fdisk mmcblk0
Welcome to fdisk (util-linux 2.22.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Command (m for help): p
Disk mmcblk0: 7948 MB, 7948206080 bytes, 15523840 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0004f23a
Device Boot Start End Blocks Id System
mmcblk0p1 * 2048 186367 92160 c W95 FAT32 (LBA)
mmcblk0p2 186368 3667967 1740800 83 Linux

二番目のパーティションを削除します。

Command (m for help): d
Partition number (1-4): 2
Partition 2 is deleted

新たにパーティションを作成します。

Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (1-4, default 2): 2
First sector (186368-15523839, default 186368):
Using default value 186368
Last sector, +sectors or +size{K,M,G} (186368-15523839, default 15523839):
Using default value 15523839
Partition 2 of type Linux and of size 7.3 GiB is set

編集結果を書き込みます。

Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.


ここで一回再起動をかけます。

reboot


起動したら、再度sshで接続し、resize2fsで拡張します。

[root@alarmpi ~]# resize2fs /dev/mmcblk0p2
resize2fs 1.42.7 (21-Jan-2013)
Filesystem at /dev/mmcblk0p2 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/mmcblk0p2 is now 1917184 blocks long.


また再起動します。

reboot


ここまで問題なく設定できていれば、/が拡張されているはずです。
そして拡張後のdf -hの結果です。

[root@alarmpi ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 7.3G 667M 6.3G 10% /
devtmpfs 83M 0 83M 0% /dev
tmpfs 231M 0 231M 0% /dev/shm
tmpfs 231M 236K 231M 1% /run
tmpfs 231M 0 231M 0% /sys/fs/cgroup
tmpfs 231M 0 231M 0% /tmp
/dev/mmcblk0p1 90M 25M 66M 28% /boot


ばっちり拡張されています。