2015年6月14日日曜日

MacのTime Machineではバックアップされないフォルダ(ディレクトリ)があった.

バックアップに便利なTime Machineですが..

Time Machine便利ですよね.かんたんに設定するだけで自動的にどんどんバックアップを取ってくれるから重宝しています.
でも,一部のディレクトリだけがバックアップが取られていませんでした.
HDDがクラッシュしてから気付いたため立ち往生してしまいました.
注意すべき点は2つあります.それは
  1. 外付けHDDのバックアップは可能,ただし設定が必要
  2. 特定のフォルダがバックアップ対象にならない

外付けHDDのバックアップは可能,ただし設定が必要

外付けハードディスクもTime machineでバックアップ可能ですが,デフォルトではバックアップの対象外に設定されてバックアップされない状態に模様です.Time Machineの設定を変えるだけでバックアップ対象になります.

システム環境設定→Time Machineからオプションに入り,外付けHDDが一覧にあったら「-」ボタンで一覧から削除します.




特定のフォルダがバックアップ対象にならない

一部のフォルダは更に例外的にバックアップ対象から除かれているようです.どんなフォルダが除かれているかは

/System/Library/CoreServices/backupd.bundle/Contents/Resources/StdExclusions.plist

で確認できます.

$cat /System/Library/CoreServices/backupd.bundle/Contents/Resources/StdExclusions.plist
該当するフォルダはありましたか?先ほどの「バックアップ対象から除外する項目」で設定した内容が羅列されています.私は外付けHDDのhomeという名前のフォルダが全くバックアップされていませんでいた.システムディレクトリという扱いのようですね. おそらく原因は


 
 PathsExcluded
 
              
              /home
              
 
につきるでしょう.このファイルを直接書き換えるという手もアリなのかもしれませんが,システムに自動生成されるファイル故おそらくオススメできないでしょう.そこで,今回はhomeというフォルダ名を変更することで対応しました.


しかしなぁ,この辺りにHDDがクラッシュする前に気付いていればな〜〜

2015年5月24日日曜日

unityの最初の書籍えらび

先日,RoomAliveRoomAliveをためしてみたのですが,今後の発展を考えたときにゲーム開発キットのUnityを学ぼうと思いました.
今ではOpenGLラッパーライブラリを使ってセコセコと描画すると言うことはしないんでしょうか(^^)v

さて,Unityですがこれまでも勉強しよう,勉強しようとして続いていなかったので今度こそは続けようと思います.とりあえずチュートリアルとして進められる書籍などを一通りやり終えて,何か自作していきたいなぁと思います.

ゲーム制作と言うよりは,手頃な映像表現と言うことで興味あるんですけどね.

で,その書籍ですが,,基本的にプログラミングについては分かっていますし,C#は大好きな言語なので,あまり教科書的にならず一緒に作っていくタイプの本にしました.(ちなみに,プログラミング初心者の方にも言語の教科書的な書籍と一緒に作っていくタイプの書籍両方を買って,交互に読み進めていくことを進めています.)

まず,以前買っていた1冊目.


ゲームの作り方 Unityで覚える遊びのアルゴリズム
ゲームの作り方 Unityで覚える遊びのアルゴリズム
バンダイナムコスタジオ!と帯に書いてあったのですが,失敗しました.内容は非常に良さそうなのですが,Unity初心者には厳しい;;最初の章は非常に丁寧に説明があるのですが,その次の章からかなり説明が省かれて,応用的な説明になっています.完全に2冊目以降の本でした.(←確認してから買え!)ある程度,内容も豊富で良著な予感ですがある程度 出来るようになってから読みたいと思います.

で,続いた2冊目,これ結構イイですよ.

Unityではじめるゲームづくり (DVD付) (ゲープロシリーズ)
Unityではじめるゲームづくり

これは,正真正銘の初心者向けの本ですね.若干,古い本なのでUIの配置の違いに戸惑うこともありますが何とか大丈夫です.難点を挙げればやや画像が少ないことかな,,,マウス操作やボタンの位置などについてはスクリーンショットで説明して欲しかった.ゲーム制作の考え方なども述べられています.

最後に,ひよこの本.とりあえずコレで学習しようと思います.スクリーンショットのイラストがたくさんあるため,操作の仕方が分かりやすい.

Unity4入門 最新開発環境による簡単3Dゲーム制作
Unity4入門 最新開発環境による簡単3Dゲーム制作
先ほどのUnityではじめるゲームづくりほどの情報量は無さそうですが,その分スクリーンショットのイラストなどの多くて分かりやすいと感じました.

ただあくまでも,C#やJavaScriptその他もろもろのコーディングはできる人がUnityの操作方法や仕様を勉強したいと選んだ結果というのをご留意ください.

さ,がんばるぞい!

※追記
これらの本はUnity4向けに書かれています.2015年5月24日現在の最新バージョンは5です.私も含めて初めての場合は,Unity4.6でやった方が良さそうです.

2015年5月18日月曜日

Kinect v2で、RoomAliveを試してみた

RoomAliveって何?

マイクロソフトがBuild2015で披露したKinect v2とプロジェクタを組み合わせたプロジェクションマッピングです。部屋の壁にプロジェクタで映像を投影して、映し出したCGの物体をタッチしたりするとKinectでソレを検出してインタラクティブな操作を可能にする物です。

恐らくこの映像を見ていただくのが分かりやすいと思います。


自分の部屋がAR空間になって、とてもすばらしですね。私はコレを見て物凄くワクワクしました。部屋をゲーム世界にするRoomAlive、マイクロソフトがプロジェクションマッピング自作ツール公開でも紹介されています.

必要な物

  • Kinect v2 (Windows PCに接続できる) 1台以上
  • プロジェクタ 1台以上
  • Windows 8 のPC
  • Visual Studio 2013
  • Kinect2 SDK

Kinect v2はXbox One Kinectセンサーと等価ですが、ここではKinect v2と表記します。

Kinect v2と接続ケーブル

私は、RoomAliveのデモを見てKinect v2とプロジェクタをそれぞれ1台ずつ購入しました。
(これまで、Kinect v1は持っていたのですがv2は持っていませんでいた。)

Xbox One Kinect センサー (DANCE CENTRAL SPOTLIGHT (ご利用コード) 同梱)
Xbox One Kinect センサー


初期のKinect v2では、Xboxゲーム用のKinectの物と、Windows開発用の物と2種類ありましたが、現在ではXboxゲーム用のKinect v2に一本化されているようです。

ただし、このXbox One Kinect センサーを買えばXboxでゲームを楽しむことはできるのですが、PCに接続して開発するには次の接続ケーブルを購入する必要があります。
若干価格が高いですが、これはWindows開発のためにライセンス料も含まれていると考えるわけです。(元々、Windows向けのKinect v2は2万円くらいしていた。)

マイクロソフト Xbox One Kinect センサー用 Windows PC アダプター 9J7-00001
マイクロソフト Xbox One Kinect センサー用 Windows PC アダプター


プロジェクタ


プロジェクタも買ってしまいました。フルHDが良かったのですが、エプソンのEB-X8と言う機種を中古購入しました。新品でプロジェクタを購入するとお高いので、今回はヤフオクで落札しました。

開発環境


無料で利用できるVisual Studio 2013 Communityを使いました。
iMac 5K RetinaにBootcampで構築したWindows8.1 64bit を使用します。
Kinect2 SDKをダウンロード&インストールします。

RoomAlive Toolkit


プロジェクタとKinect v2各1台からRoomAliveができるツールキットがGithubで公開されています。
また、このツールキットを使った解説ビデオが公開されています。リスニング力がない私には厳しい、、、が参考になります!


アウトライン

  1. GithubからRoomAlive Toolkitのソリューションをcloneして、ビルドする。
  2. PCにKinect v2とプロジェクタを接続&設置する。
  3. CalibrateEnsembleで設置したKinect v2とプロジェクタのキャリブレーションを行う。
  4. ProjectionMappingSampleを試してみる.

GithubからRoomAlive Toolkitをcloneして、ビルドする

https://github.com/Kinect/RoomAliveToolkitにリポジトリがあるわけですが、2015年5月16日現在まだまだ完成と呼ぶには遠い開発途中のプログラムになっています。特に、マスターブランチではキャリブレーションなどに失敗した際の例外がキャッチされず、そのままアプリケーションがクラッシュしてしまいます。developブランチではある程度改善されていますが、いくつか間違いが見受けられました。
そこで、私は自分で最低限修正したコードを使用しました。developブランチを変更したコードをhttps://github.com/hiroyky/RoomAliveToolkit/tree/developにフォークして公開しています。
ここではこれをクローンすることにします。その後、developブランチに切り替えます。

$git clone git@github.com:hiroyky/RoomAliveToolkit.git
$git  git checkout -b develop origin/develop

ただし、本屋RoomAliveリポジトリは今後開発が進められていくと思います。実際、本屋RoomAliveのdevelopブランチはかなりの頻度でコミットされているようです。(私は本屋にpull requestするつもりは恐れ多くてありません。。。)

ソリューションの中身は6つのプロジェクトから構成されています。
プロジェクト群
ひとまず、まずはソリューション全体をビルドしてみましょう。追加で必要なパッケージは適宜NuGetでダウンロードされます。

PCにKinect v2とプロジェクタを接続&設置する

Kinect v2とプロジェクタをPCに接続します.プロジェクタの投影がKinect v2で捉えられれば位置関係はOKだと思います.今回は,プロジェクタの上にKinect v2を設置しました.
 
通常の投影とは異なり,平面ではないところに投影する必要があります.
投影したところ,このように部屋の端などが良いベスト??(生活感アリアリですいません)
プロジェクタ画面と2画面拡張にします(ミラーリングではありません).

CalibrateEnsembleで設置したKinect v2とプロジェクタのキャリブレーションを行う


まず,KinectServer.exeとProjectorServer.exeを起動します.Visual Studioのデバッグモードではなく,直接binディレクトリを開いて起動しましょう.ProjectorServerのウィンドウをプロジェクタの画面に移動させます.
ProjectorServerのウィンドウを投影画面に移動


CalibrateEnsembleプロジェクトをスタートアップのプロジェクトに設定して、F5キーを押して、デバッグモードでCalibrateEnsembleを起動しました。(スタートアップのプロジェクトに設定するには、ソリューションエクスプローラのCalibrateEnsembleを右クリック→スタートアッププロジェクトに設定をクリックします。)

ツールバーのFile→Newと進めます。
「Create New Ensemble」のダイアログが表示されたら接続しているKinect v2とプロジェクタの台数を指定します。今回は両方とも1台なのでこのままOKをクリックします。
続いて、キャリブレーション結果を記録するXMLファイルの保存先を指定します。XMLファイルが作成されます。

XMLファイルを編集します.
XMLファイルのCameraとProjector要素の直下にあるname要素の値が初期値は"0"になっていると思いますが、好きな名前に変更しましょう。私はmainとしました。
複数台のカメラとプロジェクタを使うときは、どれがどれを示しているのか分かりやすい名前にする必要がありそうです。
また、projector要素のdisplayindexをプロジェクタが投影している画面の番号にします。大抵はメインのディスプレイが0でプロジェクタが1になるようです。

<projectorcameraensemble xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <name>Untitled</name> ←好きな名前に変更
  <cameras>
    <camera>
      <name>main</name> ←好きな名前に変更
      <hostnameoraddress>localhost</hostnameoraddress>
      <pose>
        <valuesbycolumn>
          <arrayofdouble>
            <double>1</double>
            <double>0</double>
            <double>0</double>
            <double>0</double>
          </arrayofdouble>
          <arrayofdouble>
            <double>0</double>
            <double>1</double>
            <double>0</double>
            <double>0</double>
          </arrayofdouble>
          <arrayofdouble>
            <double>0</double>
            <double>0</double>
            <double>1</double>
            <double>0</double>
          </arrayofdouble>
          <arrayofdouble>
            <double>0</double>
            <double>0</double>
            <double>0</double>
            <double>1</double>
          </arrayofdouble>
        </valuesbycolumn>
      </pose>
    </camera>
  </cameras>
  <projectors>
    <projector>
      <name>main</name> ←好きな名前に変更
      <hostnameoraddress>localhost</hostnameoraddress>
      <displayindex>1</displayindex> ←ここでは0から1に変更
      <width>0</width>
      <height>0</height>
     </projector>
  </projectors>
</projectorcameraensemble>

ProCam Ensemble Calibrationのアプリケーションに戻って、File→Reloadをクリックします。
右側に
Loaded <XMLファイルへのパス>
が出力されます。

ツールバーのSetup→Show Projector Namesから画面の識別を表示します。プロジェクタが適切に選ばれいることを確認します。

キャリブレーションを開始します.
ツールバーのCalibrate→Acquirで開始します.
続いて,Calibrate→Solveします.
キャリブレーション中の様子

終わったらFile→Saveで先ほどのXMLにキャリブレーション結果を追記されます.

Acquir及びSolveで右側の出力で例外が発生していないかを確認します.発生していなければ正常です.
ちなみに,現状のマスターブランチのコードではこのとき,例外がキャッチされずにアプリケーションごと終了してしまいます.
また,平面に投影している場合はキャリブレーションに失敗します.プロジェクタの投影面などを調整してみるのもアリでしょう.

キャリブレーションが終わったらFile→Saveで結果を保存します。先ほどのXMLファイルに追記されます。また、XMLと同じフォルダに撮影した画像ファイルを含むフォルダが作成されます。

再度,File→OpenでXMLファイルを開きなおし,左側の画像をマウスでドラッグしたり、 W, A, S, D, E, Dキーを押したりすることで部屋の3Dモデル(?)を確認することができます。また、ツールバーのRender→Live Viewにするとリアルタイムにそれが確認できます。

ProjectionMappingSampleを試してみる

それでは,プロジェクションマッピングのサンプル動かしてみます.
ただし,その前にプロジェクト内のProperties/Settings.settingsを開いて設定を行います.ここでは便宜上,
  • FullScreenEnabled: False
  • LocalHeadTrackingEnabled: False
に変更しました.FullScreenEnabledはTrueだと映像が表示なかったからです.一方,LocalHeadTrackingEnabledはTrueにするとKinect v2が人物を検出して,人物に合わせてオブジェクトをコントロールします.ただ,若干わかりにくいので最初はFalseにして,2回目移行にTrueにしてみましょう.
このプログラムは引数に,先ほど設定したキャリブレーションのXMLへのパスを取ります.プロジェクトを右クリック→プロパティ→デバッグからコマンドライン引数でパスを指定します.
ここまで出来たら,ProjectionMappingSampleプロジェクトをスタートアッププロジェクトに設定して起動します.
2つのウィンドウが表示されるので,プロジェクタ名の方のウィンドウを投影画面に移動させて最大化しましょう.
サンプルのプロジェクションマッピング
できたーーーー!
部屋の角に投影しているますが,投影されている家の模型(?)オブジェクトはそれを見事に吸収しています.実際,タイトルバーやタスクバーはゆがんでいますが,オブジェクトは角の影響を受けてゆがんでおらず,まっすぐです.

トラブルシューティング


EndpointNotFoundException

ProjectorServer.exeやKinectServer.exeは起動していますか?
 


2015年3月29日日曜日

Apache2でDigest認証を設定した

Aapcheで稼働しているWebサーバ上で,特定のページをパスワードで認証をかけたい!

そのために,今回はDigest認証を行いました.

一般的にベーシック認証もありますが,こちらの方がより安全とのことです.
ダイジェスト認証を設定する(AdminWeb)に従って進めました.

認証の準備

htdigestを使用するそうですが,インストールされていなかったためapt-getでインストールしました.
$ htgiest
-bash: htgiest: command not found
$apt-cache search htdigest
apache2-utils - Apache HTTP Server (utility programs for web servers)
$sudo apt-get install apache2-utils

また,Apache2のDigest認証のモジュールも有効にします. その後は当然再起動が必要ですが,まだApache2の設定が必要であるため,あとでまとめてやります.
$sudo a2enmod auth_digest
それでは,/etc/apache2/.digestpassをパスファイルとして自分の認証キーを追加します.
$sudo htdigest -c "/etc/apache2/.digestpass" "Digest Authentication" hiroyky
New password: 
Re-type new password: 
$sudo cat /etc/apache2/.digestpass  ←確認

Apacheの設定

今回は,ディレクトリではなくURL毎に制限を掛けたかったため先ほどのページとは異なり Locationで制限をかけました.といってもやり方は同じです.サイトの設定ファイルを編集します. 以前,gitlistを稼働させましたが,チームのメンバーだけなど限られた人のみが閲覧できるリポジトリにしたかったわけなのです. http://<my domain>/gitlist 以下を全て認証を行うようにします.
$sudo emacs /etc/apache2/sites-avairable/<サイトの設定ファイル>

    AuthType Digest
    AuthName "Digest Authentication" ←htdigestコマンドの2つめの引数,認証名と同じにする
    AuthUserFile "/etc/apache2/.digestpass"
    Require valid-user

で,Apacheを再起動します.
$sudo service apache2 restart

で〜きた!

2015年3月24日火曜日

GitlistでGithubみたいにWebからリポジトリを見られるようにした

GithubみたいにWebからリポジトリを確認したいな.

ODROID C1のUbuntuサーバ構築も一段落ついたので,今回はGitリポジトリをWebから閲覧できるようにしたいと思います. gitlistを使って実現します.チーム内だけの非公開リポジトリをつくるときなどに便利そうですよね.
gitlistでgitリポジトリを表示したところ

インストールと設定

$git clone https://github.com/klaussilveira/gitlist.git

$cd gitlist
$less README.md
Apacheは前回の通りインストール済みです.
$sudo apt-get install apache2

しかしREAD.mdによるとrewriteモジュールが必要なようなので有効にします.
$sudo apt-get install php5 
$sudo a2enmod rewrite 
gitlistはPHPで書かれているそうですが,まだPHPをインストールしていなかったので,インストールします.
$sudo apt-get install php5
$sudo a2enmod php5

さて,デプロイします.Apacheで設定したDocumentRootのディレクトリ以下にコピーするだけです.
cacheディレクトリがなければ作成してパーミッション変更.設定ファイルはサンプルをコピーして使います.
$sudo mv gitlist /var/www/html
$sudo chmod 777 cache
$cp config.ini-example config.ini
$emacs config.ini
[git]
client = '/usr/bin/git' ; ←git実行ファイルの場所
default_branch = 'master' ; ←デフォルトのブランチはマスターにするよ
repositories[] = '/home/git/repositories/' ;←リポジトリの場所,複数ある場合は改行して追記

; hidden[] = '/home/git/repositories/BetaTest' ; ←隠したいリポジトリを書く

debug = false
cache = true
theme = "default"
baseurl = "http://localhost/gitlist"; ←これを追記している記述を見かけます.

URLをRewriteするための.htaccessが既にgitlistの中に入っていると思います. Apache側で.htaccessを許可するか,.htaccessの中身を<Direcotry>セクションで書いてやるかして,,

これで,OKなはずです.Webブラウザからhttp://xxx.xxx.xx/gitlistで表示されるはず..

遭遇したトラブル?

空白ページが表示された( ゚Д゚)ヒョエー

blank pageです.真っ白.色々試行錯誤した結果ですが,gitのリポジトリディレクトリ(repositories)はApacheのユーザすなわちwww-dataでもアクセスできる許可が要るようです.リポジトリディレクトリのパーミッションを775など公開用にしてやるか,リポジトリのグループにwww-dataを足すなど,方法はいくつかあると思いますが,ともかくパーミッションがないとWebからも見れないみたいです.

私の場合は,リポジトリの持ち主はroot:repoでrepoグループに属していればアクセス可能にしていたので,
sudo gpasswd -a www-data repo
www-dataをrepoに追加して対応しました.

リポジトリの中身を見ようとすると404 NOT FOUND.

.htaccessを使用するなどして適切なRewrite設定ができていないとリポジトリの一覧ページが表示されても,リポジトリの中身を見ようとすと404エラーになりました.

2015年3月21日土曜日

Odroid C1 / Ubuntu でサーバ構築 5: Subsonicで音楽ストリーミングサーバにする

Odroid C1を利用してサーバを構築する.今回はSubsonicでメディアストリーミングサーバにします.
Subsonicは指定ディレクトリ以下の音楽ファイルなどを検索し,Web上でストリーミング配信が行えるJavaベースのシステムです.開発元にお金を支払うことでビデオなどの配信やスマートフォンからのアクセス,DLNAにも対応します.ユーザ名とパスワードで保護されます.

Subsonic事始め

インストール

Subsonicをダウンロードします.公式サイトからダウンロードのURL(恐らくsourceforge)を確認してwgetで取得します.ダウンロードページではなく,debファイルの直リンクURLですね.
ダウンロードしてインストールします.
$wget -O subsonic.deb http://downloads.sourceforge.net/project/subsonic/subsonic/5.2.1/subsonic-5.2.1.deb
$sudo dpkg -i subsonic.deb

SubsonicはJavaだからjreが必要なんじゃなかったけ??と思いつつインストールしました. パッケージマネージャがそのことを指摘するかと思いきやしない.

ともかく,この段階でsubsonicは既に稼働しているはずです.初期設定では4040ポートでアクセスを受け付けているのでブラウザから開きます.

http://192.168.1.xx:4040/

subsonicに初アクセス

設定

最初にadminユーザのパスワード設定行います.ログインページにもサッサと設定するように警告されていますね.ユーザ名admin, パスワードadminでログインして,,,表示されるページの指示に従ってパスワードを変更します.

再度ログインして音楽などのメディアディレクトリを指定すれば勝手にファイルを調べてくれて使えるようになります.カンタン

SSL(Https:443)でのアクセス,Apacheのリバースプロキシ

Subsonicの設定

ここまででもSubsonicは機能するのですが,安全のためにSSLを使ってhttpsによるアクセスをできるようにしましょう.
今回は,アクセスにはhttpsを使ったhttps://<ドメイン>/subsonic/ のURLにします.
まずはsubsonicの設定ファイルを編集します.SUBSONIC_ARGSを以下のように変更しました.httpsは後述のApacheで実現します.そのため,--port=4040 --https-port=443といった設定を今回は行いません.

$sudo emacs /etc/default/subsonic
SUBSONIC_ARGS="--max-memory=200 --context-path=/subsonic" 

--max-memoryは使用するメモリの最大値を指定するようですが,どれくらいがいいのでしょうか?? 一方の--context-pathはhttps://<ドメイン>/subsonic以下でSubsonicを運営するため,追加します.https://xxx/sonic以下で運営したい場合は/sonicにします.
その他の設定項目は

OpenSSLとApache, 鍵の作成

続いて,Httpsを実現するためにOpenSSLと,Apacheを設定します.OpenSSLはプリインストール済みかと思いますが確認します.
$whicl openssl
/usr/bin/openssl

無ければapt-getでインストールしましょう.

続いてApacheもインストールします.通常のUbuntu ServerならばOSインストール時に一緒にインストールすることもできますが,ODROIDのUbuntuでは恐らくないでしょう.
ApacheをインストールしてSSLのモジュールをONにします.また,SSLのサイトもONにします.
$sudo apt-get install apache2
$sudo a2enmod ssl
$sudo a2ensite default-ssl

SSLのための鍵を作成します.今回は/etc/apache2以下につくります.
秘密鍵,公開鍵,鍵の証明の3つを作ります.鍵の証明は本来は然るべき機関から発行してもらうわけですが,それには費用も掛かるため,今回は証明書を自分でつくります.いわゆるオレ様証明書であるため,ブラウザが「証明書の〜〜」うんぬんと警告してきてしまいますが目をつむります.
$cd /etc/apache2
$sudo su
#openssl genrsa -des3 1024 > https.key ←秘密鍵の作成(RSA des3フォーマット,1024bitの鍵)
Enter pass phrase: ←パスフレーズを入力
Verifying - Enter pass phrase: ←再入力

# openssl req -new -key https.key >https.key.csr ←公開鍵の作成
Enter pass phrase for https.key: ←先ほどのパスフレーズを入力
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----↓ここからは公開が基の情報を入力
Country Name (2 letter code) [AU]:ja ←国名(二文字のコードでja, us, uk, krなど)
State or Province Name (full name) [Some-State]:tokyo ←都道県名
Locality Name (eg, city) []: ←市町村名(今回は空白)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:hiroyky ←組織名
Organizational Unit Name (eg, section) []: ←担当部署名
Common Name (e.g. server FQDN or YOUR name) []:Happy Server ←サイト名
Email Address []:xxxxx@mail.jp ←メールアドレス

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:   ←証明書破棄の際のパスワード(今回は空白)
An optional company name []: ←組織名2(今回は空白)

# openssl x509 -in https.key.csr -days 36500 -req -signkey https.key > https.key.crt ←証明書の発行(x509フォーマット,有効期限は36500日つまり100年←おい!笑)
Signature ok
subject=/C=ja/ST=tokyo/O=yokoyama/CN=Asuna/emailAddress=ykym_hirokazu@yahoo.co.jp
Getting Private key
Enter pass phrase for https.key: ←パスフレーズ入力
これにて作成が完了しました.

Apacheに鍵を登録

/etc/apache2/sites-available/default-ssl.confのSSLCertificateFileとSSLCertificateKeyFileを設定します.
$sudo emacs /etc/apache2/sites-available/default-ssl.conf
SSLCertificateFile     /etc/apache2/https.key.crt ←証明書
SSLCertificateKeyFile /etc/apache2/https.key ←秘密鍵

で,Apacheを再起動します.
$sudo service apache2 restart

Apacheの警告 AH0058

$sudo service apache2 restart
AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message
こういう警告メッセージが出てきました.
ubuntuにおけるapache2のAH00558エラーを解決する。UbutnuでApache2を起動してみたにもあるようにServerNameを変えるか,/etc/hostsを設定するかのようです.もしくは無視しても構わないかもしれませんが..
というわけで前者のページに従い.
 sudo echo ServerName $HOSTNAME > /etc/apache2/conf-available/fqdn.conf
 sudo a2enconf fqdn
 sudo service apach2 restart
 * Restarting web server apache2 
として,ServerNameを設定しました.別ファイルを作るのも良いですが,/etc/apache2/apache2.confに追記しても良い気もしますが..

いずれにしてもhttpsでアクセスして,恐らく証明書の警告は表示されると思いますが,"It works!"のページが表示されました.

リバースプロキシの設定

https://<ドメイン>/subsonic でアクセスされたら4040ポートで稼働しているSubsonicにつなぎます.
proxyモジュールを有効にし,セクションを設定します.
$sudo a2enmod proxy
$sudo a2enmod proxy_http
$sudo emacs /etc/apache2/mods-available/proxy.conf
        
           AddDefaultCharset off
           Order deny,allow
           Allow from all
        #   #Require local                                                                                                          
        

SSLのVirtualHostを設定します.下記を追記します.
$sudo emacs /etc/apache2/sites-available/default-ssl
 SSLProxyEngine on ←プロキシを介してSSL化を有効にする
 ProxyPass /subsonic http://localhost:4040/subsonic ←リバースプロキシの設定
 ProxyPassReverse /subsonic http://localhost:4040/subsonic ←リバースプロキシの設定
リバースプロキシの設定はお察しの通り
 ProxyPass  <転送先> 
 ProxyPassReverse  転送先>
です.末尾の"/"スラッシュには注意です.

変更の適用

Subsonic, Apache共に再起動して変更を適応します.
$sudo service subsonic restart
$sudo service apache2 restart

 https://<ドメイン>/subsonicでsubsonicに行けるようになりました.

参考

http://www.jamescoyle.net/how-to/875-reverse-proxy-subsonic-with-apache
http://qiita.com/paty-fakename/items/829afd3577ba18dbb2c8

2015年3月20日金曜日

Odroid C1 / Ubuntu でサーバ構築 4: Samba

Odroid C1を利用してサーバを構築する.今回はsambaで他のWindowsなどからファイルにアクセスできるようにします.普通のLinuxでのサーバ構築ですが,,
まずは,apt-getでsambaをインストール
$sudo apt-get install samba
sambaのためのユーザを別途追加します.このときのユーザ名やパスワードはクライアントとなるWindowsと同じにしておけば再ログインすることなくWindowsなどからアクセスできます.
$sudo smbpasswd -a <ユーザ名>
このあとはsambaの設定をします./etc/samba/smb.confを変更します.バックアップしてから編集します.
まず,workgroupをWindowsなどで使っている名前に変更します.
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
sudo emacs /etc/samba/smb.conf
workgroup = <ワークグループ名>
[homes]のコメントを外して有効にして設定すれば,各ユーザのディレクトリにアクセスできるようになります.各設定項目をそれぞれ有効にします.

  • browsebleをyesにしてファイルのブラウジングを許可します.
  • read onlyをyesにしてファイルの書き換え,作成,削除を許可します.
  • create maskとdirectory maskでsambaアクセス時のパーミッションを設定します,
  • valid usersでアクセスできるユーザを限定します.
  • wide links follow symlinksでリンクをたどることを許可するかどうかを設定します.


[homes]
comment = Home Directories ←有効にする
browseable = yes ←有効にする, yesにする
read only = no ←有効にする, noにする
create mask = 0700 ←有効にする, sambaアクセス時のパーミッションを設定
 directory mask = 0700 ←有効にする, sambaアクセス時のパーミッションを設定
valid users = %S ←有効にする
他にも特定のディレクトリを共有したければ下記を追記します.
[共有名]
   comment = <コメント>
   path = <共有するディレクトリパス>
   browseable = yes
   read only = yes
   guest ok = no
   create mask = 770
   directory mask = 770
   wide links = yes
   unix extensions  = no
   follow symlinks = yes
   valid users = <アクセス可能なユーザーまたはグループをスペースで区切って入力>
設定後,sambaを開始します.
$sudo service samba start