Raspberry Pi関連

Raspberry Piで IoT開発

関連記事: IoT関連写真

最近 IoT関連がマイブームです
Raspberry Pi関連のブログも書いていきます

Raspberry Pi 2 Model B

ラズパイ! Raspberry Pi をついに買いました (2016年9月)
Raspberry Pi 2 Model B 1
Raspberry Pi 2 Model B です
あとケースや 追加の USB-LAN USB-WiFi あと OS入れるために 32GBの microSDHCカード
Raspberry Pi 2 Model B 1
本体+ケース+メモリ で合計 12000円くらいでした
10年前は この 1/5くらいの性能の小型Linuxが 5倍くらいの値段だったことを考えると
ここ数年のモバイル性能の伸びのすごさが実感できます
Raspberry Pi 2 Model B 3
組み立ての状況です
ファン付きのケースで ファンへの電源供給に写真位置の GPIO 3.5Vを使ってます
Raspberry Pi 2 Model B 4
利用状況です モバイルバッテリで給電しています
Raspberry Pi 3になると性能向上してますが モバイルバッテリだと供給不足になるようなので
外での利用を想定するなら Raspberry Pi 2 がちょうどよいのではないでしょうか
OSは Raspbianという Linuxディストリビューションを使っていますが
IoT版 Windowsも無償利用可能です

PiCamera利用状況
年末には Raspberry Pi専用カメラモジュールも買いました
Tensorflowで 画像認識の実験をするためです
PiCamera接続状況
専用カメラは Raspberry Pi の専用コネクタに接続します
CPUに直結しているようで 高解像度(808万画素)の動画や画像が撮影できます
低解像度でもよければ USBカメラが手軽に利用できます

Hyper-V環境

Hyper-V環境

Windows8の環境で Hyper-V(仮想PC)を試してみました

検証環境
CPU Core i7-4770S 3.1GHz
(第4世代 Haswel)
マザーボート ASRock社製 H87 Pro4 (LGA1150)
メモリ 32GB
グラフィック PowerColor社製 AX7850 1GBD5-S3DH
(RADEON HD7850 GDDR5-1GB)
HDD Cドライブ 500GB + データ用 2TB
いずれも 5400rpm SATA
OS Windows8.1Pro 64bit

Hyper-Vは PCのエミュレータを実現できるソフトですが
正確には ハイパーバイザ型の仮想環境を構築するためのもので ホストOS上で 複数のゲストOSが動作します
Hypre-Vを動作させるには CPUが SLAT(Second Level Address Translation)に対応している必要があります
そのため CPUを最新の Coreiシリーズに買い換えました

Hyper-Vセットアップ

Hyper-Vのセットアップの紹介です
Windowsのコントロールパネルからインストール
Windowsのコントロールパネル→プログラムと機能→Windowsの機能の有効化または無効化
から Hyper-Vを選択します Windowsの再起動が求められます
スタートメニューに Hyper-Vマネージャ
スタートメニューに Hyper-Vマネージャが追加されているはず
Hyper-V管理マネージャ
Hyper-V管理コンソールです 複数の仮想マシンを設定し 起動・停止を制御できます
仮想マシンの作成
仮想マシンを1台作成しました
世代というのは Hyper-Vでの仮想マシンのバージョンのことで
第2世代は PXEブートなど最新の機能がサポートされているが IDEが使えないなど制約もあります
WindowsVista以降の OSを使うなら 第2世代ですかね
仮想マシン起動中
xp という名前をつけて起動してみました
システム上 裏では起動しています 「接続」を選択して動作画面にアクセスできます
動作画面へのアクセス
動作画面を見ると 確かにPCが起動しています
何もインストールしていないので OSのインストーラを求められます
仮想CD-ROMに WindowsXPの CDイメージを指定して仮想マシンをリセットします
WindowsXPインストール失敗
WindowsXP のCDイメージから インストールを進めてみた画面です
秋葉原で購入した怪しいCDのためか インストールに失敗しました
ただ 仮想マシンとしては あたかももう1台のPCが動いているかのように動作します

この後いろいろな OSを試してみました
Windows98, Windows2000, Linux だいたい動作しました
以前は PCエミュレータではオーバヘッドが大きくで重い感じでしたが
最近の PCはマルチコアでオーバヘッドも小さく仮想環境を快適に試すことができます

Android開発

Android Studio

ここでは Android Studio を簡単に紹介します
Android デベロッパーのページで開発情報提供やツール配布が行われています
ここから Android Studioをダウンロード インストールします
Windowsで検証しました Windows用にエミュレータも提供されていて Windows上で開発・検証が可能です
Android Studio トップ画面
Android Studioでサンプルアプリを開発してみます メニューから New Projectを開きます
Android Studio New Project
開発ターゲットの Androidバージョンを選択します
Android Studio ターゲットプラットフォーム選択
Activity ということで Androidアプリのテンプレートがいくつか選べます
ここでは 簡単なアプリということで Empty Activity を選択しました
Android Studio 開発Activityの選択
IDE(統合開発環境)のメニュー項目です
Runを選ぶと Windows上でアプリケーションがビルドされ Androidエミュレータ上で動作確認できます
Android Studio メニュー項目
Android Studiの 画面レイアウトです
左から リソース(関連ファイルなど)ブラウザ ソースコードエディッタ エミュレータ と配置されています
Android Studio 画面レイアウト1
Hello World! を表示させるアプリケーションをビルドして実行してみました
Android Studio ビルド実行テスト
アプリのウィジェット配置など レイアウト関連の機能も充実しています
Android Studio ウィジェットレイアウト
ボタンを配置してみましょう 配置したい GUIコンポーネントを指定して 画面上の位置を選択するだけ
Android Studio ボタン配置
コンポーネントのプロパティから ボタンのラベル名称や外観をカスタマイズします
Android Studio GUIプロパティ
Go To Declaration を選択すれば GUIがクリックされたときのイベント処理の定義にジャンプします
Android Studio イベントハンドラ定義
OnClickイベントを受信した際のアクションを記述します テキストラベルに pushed! を表示します
Android Studio イベント記述
アプリの実行状況です ボタンが押されると pushed! と表示されます
Android Studio アプリ実行画面

iPhoneシリーズ

iPhone関連の写真

2015年3月に auの iPhone6Plusを買いました
2017年10月は 機種変更の際に iPhone6Plusに UQ Mobileの SIMに挿し変えました

ここでは iPhone関連の写真や情報をまとめています

iPhone6Plus 初期設定

Apple IDを設定してストアでゲームを買ったり キャリアメールの初期設定です
Apple ID初期設定 地域選択
利用条件の確認
ストアへの初回サインイン
ストアから au用の 客サポアプリをダウンロードします
iPhoneに Apple IDの情報が登録されました
Grand Theft Autoのゲームが 3本パックで購入できました。
オープンワールドのクライムアクション iPhoneでできるようになるとは時代も進化したものです
Grand Theft Autoの購入画面
Wi-Fiの設定画面 5GBプランのデジラサービスなので 自宅ではなるべく Wi-Fiを利用します
Wi-Fiの設定画面
Grand Theft Autoダウンロード中
キャリアメールの設定
キャリアメール設定
auお客さまサポート画面 メニューがシンプルで解りやすいです
キャリアメールの初期設定の画面です
au客サポ画面
au客サポ オンラインヘルプ
au客サポ キャリアメール設定
キャリアメール初期設定
キャリアメール設定完了
auでは データチャージにデジラアプリを使います デジラのキャラデザは良いですがチャージはお金がかかるので使ってません
デジラアプリ1
デジラアプリ2

OpenSSH用パッチ OpenSSL-1.1.x化対応

OpenSSH用のパッチを公開しています

最近は OpenSSLを初めとした オープンソース系の脆弱性情報も頻繁に公開されるようになりました

OpenSSLは 0.9.x系 1.0.x系 1.1.x系 といくつかバリエーションがありますが
「OpenSSL-1.1系の最新版を使うことを推奨します」といった文句を受けて OpenSSL-1.1.0に更新したら
これが地雷だったようで 1.1.0になっていくつか APIの仕様が変わったため対応作業が必要になりました

検証システム
CPU AMD A10-7800 (3.1GHz 4コア)
メモリ 16GB
OS Gentoo-1.12.14 Linux-4.7.0 x86_64 UTF-8
コンパイラ gcc-6.1.0
Cライブラリ glibc-2.24
OpenSSL OpenSSL-1.1.0
OpenSSH OpenSSH-7.3p1

OpenSSLに依存しているアプリケーションは ソースコードレベルで修正行ってましたが
特に OpenSSHが修正量が大きめだったので修正パッチを作りついでに公開します

OpenSSH-7.3p1向け OpenSSL1.1.x対応 Unix98PTY化パッチ

  • 他のサイトで公開されているパッチをベースにしています
  • 自環境は Unix98仕様の PTY(擬似端末環境)ですが
    OpenSSHがなぜか BSD仕様 PTY環境と認識してしまい うまく仮想端末が開かないため
    sshpty.c も修正を行い強制的に Unix98仕様にしています

Unix98仕様かどうか確認するには /dev/ 配下に ptmx と pts** があるか確認
BSD仕様かどうか確認するには /dev/ 配下に pty** と tty** があるか確認

パッチの摘要は openssh-* ディレクトリ配下で下記のようにコマンドを打ってください

$ patch -p1 < ../openssh-7.3p1-ssl1.1.x.patch
patching file cipher-3des1.c
patching file cipher-bf1.c
patching file cipher.c
patching file cipher.h
patching file dh.c
patching file dh.h
patching file digest-openssl.c
patching file kexdhc.c
patching file kexdhs.c
patching file kexgexc.c
patching file kexgexs.c
patching file monitor.c
patching file regress/unittests/sshkey/test_file.c
patching file regress/unittests/sshkey/test_sshkey.c
patching file rsa.c
patching file rsa.h
patching file ssh-dss.c
patching file ssh-ecdsa.c
patching file ssh-keygen.c
patching file ssh-pkcs11-client.c
patching file ssh-pkcs11.c
patching file ssh-rsa.c
patching file sshkey.c
patching file sshpty.c
$
 
OpenSSHを普通にビルドすると 下記のようにエラーとなります

OpenSSH has been configured with the following options:
                     User binaries: /usr/bin
                   System binaries: /usr/sbin
               Configuration files: /usr/etc/ssh
                   Askpass program: /usr/libexec/ssh-askpass
                      Manual pages: /usr/share/man/manX
                          PID file: /var/run
  Privilege separation chroot path: /var/empty
            sshd default user PATH: /usr/bin:/bin:/usr/sbin:/sbin
                    Manpage format: man
                       PAM support: no
                   OSF SIA support: no
                 KerberosV support: no
                   SELinux support: no
                 Smartcard support: 
                     S/KEY support: no
              MD5 password support: no
                   libedit support: no
  Solaris process contract support: no
           Solaris project support: no
         Solaris privilege support: no
       IP address in $DISPLAY hack: no
           Translate v4 in v6 hack: yes
                  BSD Auth support: no
              Random number source: OpenSSL internal ONLY
             Privsep sandbox style: seccomp_filter

              Host: x86_64-unknown-linux-gnu
          Compiler: gcc
    Compiler flags: -g -O2 -Wall -Wpointer-arith -Wuninitialized -Wsign-compare -Wformat-security -Wsizeof-pointer-memaccess -Wno-pointer-sign -Wno-unused-result -fno-strict-aliasing -D_FORTIFY_SOURCE=2 -ftrapv -fno-builtin-memset -fstack-protector-strong -fPIE 
Preprocessor flags: -I/usr/include 
      Linker flags: -L/usr/lib  -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack -fstack-protector-strong -pie
         Libraries: -lcrypto -ldl -lutil -lz  -lcrypt -lresolv

$ make

....

In file included from ssh_api.h:26:0,
                 from ssh_api.c:20:
cipher.h:69:17: エラー: フィールド ‘evp’ が不完全型を持っています
  EVP_CIPHER_CTX evp;
                 ^~~
make: *** [ssh_api.o] エラー 1
$
 

OpenSSL-1.1.0になって EVP_CIPHER_CTXなどのインスタンスが直接生成てきなかったり
他にも OpenSSLが提供する関数を経由しなければ利用できなくなったりといった変更があります

そのうち 他のアプリも含めて OpenSSL-1.1.x系に対応するようになるのでしょうか