ポジティブ丸メガネ

3年目エンジニアです。

Raspberry Piを自宅Webサーバー化するための設定

前回のラズパイ初期設定記事はこちら。
キーボードもマウスも使わずにsshでRaspberry Pi Model Bを使えるようにした for Mac OSX - ぽじてぃぶしんきんぐ

ラズパイを自宅Webサーバー化したので備忘録として書きました。

参考にしたサイト様

ぐぐったらたくさん出てきましたが、こちらを主に参考にしてやりました。
shutosg.hatenadiary.com

やったことの流れ

  1. ラズパイのプライベートIPの固定
  2. apache2の導入
  3. ルータの設定
  4. ドメイン取得
  5. ddclientの導入

ざっくりとこんな感じです。

実施環境としては

です。

IPアドレスの固定

ラズパイのIPを固定します。Jessieの場合は少し違うようで、こちらを参考にしてやりました。
qiita.com

/etc/dhcpcd.confに以下のように追記してreboot

interface eth0
static ip_address=192.168.10.15/24
static routers=192.168.10.1
static domain_name_servers=192.168.10.1

192.168.0.*の部分はご自身の環境にあわせて変えてください。Atermの場合はこれでいけるとおもいます。

Apache2の導入

以下のコマンドで導入します。

sudo apt-get install apache2  #apacheの導入

導入できたら、Macとかのブラウザに先ほど設定したIP(例では192.168.10.15)にアクセスできるようになっているはずです。It works!とか出てたらバッチリ。

設定はめんどくさいのでとりあえず初期設定のままで。

ルータの設定

これが非常に苦労しました。

ポートマッピング自体は簡単でした。ポート80(Http)を開放して、ルータのWAN側のアドレス(グローバルIP)にアクセスされれば、ラズパイのプライベートIP(192.168.10.15)のポート80番へ飛ばすようにすればいいだけです。

ただ、Aterm特有なのかもしれませんが、ローカルIP(例だと192.168.10.*)からグローバルIP経由でラズパイにアクセスできません。タイムアウトするのです。外部サイト(ポートチェック【外部からポート開放確認】)を使ってアクセスするとできましたので、ルータが悪いことはわかっていましたが、なかなか解決できません。LTE回線使うとラズパイにアクセスできますので、まあいいっちゃいいんですが。

この部分は未解決です。とりあえず外部からラズパイが見えるようになったのでOKとしました。

ドメインの取得

僕はこちらを使いました。
www.dot.tk

ddclientの導入に、DotTKに登録したメールアドレスとパスワードが必要になりますので、Facebookで登録するのではなく、メールアドレスで登録するようにしましょう。

こちらが参考になります。
qapla.blog52.fc2.com

ddclientの導入

我が家はアパートの部屋ごとに個別に契約しているので、グローバルIPISP次第となります。

僕の場合はグローバルIPは動的に割り当てられているため、DDNSを利用する必要があります。それをいい感じにやってくれるのがddclientです。これも先ほどのサイトを参考にすればうまく設定できるかと思います。

まとめ

最後の方は雑になってしまいましたが、ひとまずこれで自宅Webサーバー化できました。ルーターの問題はなんとか解決したいですが。

次はFTPでファイルをアップロードできるようにしたいと思います。

キーボードもマウスも使わずにsshでRaspberry Pi Model Bを使えるようにした for Mac OSX

久しぶりの更新です。

今回はRaspberry Pi Model Bを購入したので、これを使って遊ぶための準備を整えました。

Raspberry Pi 2 Model B (2015年2月発売品)

Raspberry Pi 2 Model B (2015年2月発売品)

初期導入にあたって、有線キーボードやマウスが必要だよという話を聞いていました。しかし、当方キーボードを持ちあわせていません。ですので、それでもできないのかと調べてみたところ、様々な記事が見つかったので、そのへんを参考にして進めていきました。
qiita.com
labs.torques.jp

ちなみに準備出来たものはこちらです。

  • RasPi本体
  • microUSBとアダプタ
  • 有線LANケーブル
  • HDMIケーブル
  • 外部ディスプレイ
  • マウス
  • microSDカード32GB

SDカードにRaspbianデータを焼く

まず、こちらからファイルをダウンロードします。
www.raspberrypi.org

ここで気をつけたいのは、

  • NOOBSの方は、GUIでRaspbianをインストールするためのファイル群であり、画面やキーボード・マウスが必要
  • RASPBIANの方は、SDにOSを直接焼いちゃうので、そのままいきなり使いはじめることができるファイル群

ということです。ですので、今回はRASPBIANをダウンロードしました。

ここで躓いたのが、ZIPでダウンロードしたのですが、解凍ができない。「エラー2-ファイルまたはディレクトリがありません。」と出ていました。いろいろいろいろ試してみたのですが、どうやっても解凍できない。

ふと思ったのは、ZIPファイルが破損している原因はダウンロード時に問題があったでは?ということ。

ということでTorrentからダウンロードしてみました。そのときに使ったクライアントソフトはこちら。
Transmission
軽そうだったのでこれにしました。

ダウンロード後、解凍・・・・・できた!!!!!Jessieというimgファイルが出てきたと思います。やっとSDカードに焼きます。

その前に、ディスクユーティリティからSDカードをMS−FAT形式でフォーマットしておきます。このとき、SDカードに適当な名前(僕はRASPBIANにしました)をつけます。

その後、ターミナルを起動して、SDカードのパスを探します。

diskutil list

これで、SDカードがあるパスがわかります。今回は/dev/disk3s1だったとします。

次に、SDカードをアンマウントします。

sudo diskutil unmountDisk /dev/disk3

(注)SDカードはまだ抜いてはいけません。

そしてSDカードにimgを書き込みます。まず、imgファイルがあるディレクトリまでcdでいきましょう。その後、

sudo dd bs=1ms if=xxxx-xx-xx-raspbian-jessie.img of=/dev/rdisk3

のコマンドでSDカードに書き込みます。これはSDカードの性能に左右されますが、数分から小1時間はかかります。このddコマンドは途中経過が表示されませんので、フリーズしたのかと勘違いしました。途中経過を知りたい方は、ターミナルをフォアグラウンドに持ってきて、「command+T」を押してみてください。途中経過を見ることが出来ます。

この処理が終わると、SDカードに焼く作業が終了したことになります。

RasPiの起動からのssh接続

本体に、LANケーブル、HDMIケーブル、マウス、microSDを差し込み、最後に電源であるmicroUSBを差し込むとRasPiが起動します。この際に、黒い画面でコマンドの羅列が表示されていきますが、最後にkernel panicで終了している場合は、imgファイルが正常に書き込めていないか、SDカードとRasPiの相性の問題があります。再度書き込むか別のSDカードを使う必要があります。

無事起動すると、灰色の画面にRaspberryのマークが表示されている、GUIの画面になります。マウスで右上の画面が2つ重なっているマークにマウスオーバーするとRasPiのIPアドレスが分かります。例えば、192.168.0.10だったとします。

ターミナルから

ssh pi@192.168.0.10

ssh接続します。初期設定ではpiのパスワードはraspberryに設定されているので、それでログインすると無事ssh接続が完了しました。

あとはrootのパスワードやらpiのパスワード変更、ユーザーの追加を行いますが、こちらを参考にして行いました。
wings2fly.jp

このRasPiを使っていろいろ遊んでいきたいと思います!

読んだマンガや小説の管理ができ、新刊発売日の通知が来るiPhoneアプリ「読んだ。」をリリースしました!

今までコツコツ作ってきたアプリがついにリリースされましたー!ブログでSwift系の記事を書いていましたが、大体はこのアプリを作るために必要な機能でした。

読んだ。

読んだ。

  • Seiya Mogami
  • 仕事効率化
  • 無料

機能

マンガや小説の買い忘れや間違って同じものを買ってしまったことはありませんか?

「読んだ。」は読んだマンガや小説の管理、そして読んだマンガや小説の新刊情報が知れるアプリです。

  • マンガや小説を本棚に登録することで、巻数や発売日の管理ができます。
  • 本棚に登録された書籍の新刊発売日がわかり、なおかつ通知が来ます。
  • 本棚に登録された書籍以外のマンガや小説の発売日の一覧が見れます。
  • 買い忘れがないように、このアプリから楽天ブックスで書籍の予約注文ができます。
  • 読んだ書籍をTwitterにシェアすることができます。

注意していただきたいのは、タイトルや著者名の入力です。正確に入力して頂く必要があります。

例えば、尾田栄一郎さんのワンピースの場合ですが、入力はタイトル:ONE PIECE、著者名:尾田栄一郎を入力していただく必要があります。ワンピースでは発売日に通知されない可能性が高いです。入力には、マンガや小説の背文字(画像参照)を参考に入力していただければ、発売日に通知がくるはずです。
f:id:seiya-orz:20160117202233j:plain

正確に入力できており、かつその書籍の新刊が発売される予定であれば、発売日一覧タブに表示されます。

ちなみにこの正確に入力する面倒さは今後改善予定です。

使ってる感想

自分で作っておいてなんですが、わりと便利だと思ってます。特に、発売日に通知が来るのがありがたい。

使い始めは読んだマンガや小説を入力するのがちょっと面倒ですが、一度入力してしまえば巻数の更新は楽ちん。買い忘れや重複して買ってしまうことがほんとになくなりました。

マンガや小説をたくさん読んでる人は、是非使ってみてください!

そしてよければ感想ください。レビューに書いていただいても構いません。

あ、デザイナーさんたちのなかでデザインやりたいという人がいればぜひお声がけください。独断と偏見でデザインしてるので全然自信ないです。

実装

ここからはエンジニアの方向けのお話。

読んだ書籍の表示はTableViewを使って行っています。
Swift: 初心者がTableViewを利用するときに参考にしたサイト一覧 - ぽじてぃぶしんきんぐ
Swift: tableViewを横スワイプして2つのボタンを出すときにハマったこと。 - ぽじてぃぶしんきんぐ
Swift: 好きなタイミングで画面遷移(コードで画面遷移)する方法。 - ぽじてぃぶしんきんぐ
Swift2:tableViewのセクションヘッダの背景色や文字色を変更する方法 - ぽじてぃぶしんきんぐ

読んだ書籍情報の管理は、はじめはRealmを使っていましたが、ちょっとトラブって結局Coredataを使っています。
Swift: 初心者のデータベース導入[Realm] - ぽじてぃぶしんきんぐ
Swift: CoreDataのモデルで、数値を扱うときにハマったことと、Realmとの比較(簡単に)。 - ぽじてぃぶしんきんぐ
Swift: CoreDataのレコード取り出し時に昇順、降順を指定する方法 - ぽじてぃぶしんきんぐ
SwiftのCoredata(データベース)のマイグレーションで少し苦労した。 - ぽじてぃぶしんきんぐ
次やるときはまたRealmに挑戦してみたいです。

このアプリのメイン機能である発売日の通知のために、書籍の発売日情報を取ってきています。これはWebスクレイピングして発売日情報のデータベースを作っています。
Swift:HTMLをParseする方法(WEBスクレイピング) - ぽじてぃぶしんきんぐ

本の注文は楽天ブックスAPIを利用して行っています。
楽天ブックス書籍検索APIをSwift2.0で使ってみた with SwiftyJSON - ぽじてぃぶしんきんぐ
JSONの処理に少し時間がかかるのでバックグラウンド処理にしてみた。 - ぽじてぃぶしんきんぐ

広告の表示はAdmobを利用して行っています。
Swift2.0とストーリーボードで自分のアプリにAdmobを導入してみた。 - ぽじてぃぶしんきんぐ
Admobの取得をviewDidLoad()に置いてると「this application is modifying the auto layout engine...」と出る件の対処法@Swift - ぽじてぃぶしんきんぐ

以上が「読んだ。」で使っている技術です。たぶん。

何か質問等あればお気軽にどうぞ!