iPhoneシリーズ

iPhone関連の写真

2015年3月に auの iPhone6Plusを買いました
2017年10月は 機種変更の際に iPhone6Plusに UQ Mobileの SIMに挿し変えました
2018年5月は 業務用端末として iPhone8を入手しました

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

iPhone8

業務用に iPhoneを入手できたので その写真です
iPhone8 パッケージ
パッケージを開けたところ
iPhone8 保護部品
落としても壊れないよう 保護シートとバンパーフレームも装着することにしました
フレームの方は 裏面に SUICAなど電子マネーカードを挟み込めるものを選定しました
iPhone8 概観
完成状態 前の iPhone4Sでも特に不満なかったですが さらに薄くなり
指紋認証も便利です

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系に対応するようになるのでしょうか

 
 

IoT関連写真

IoT関連機器の購入製品を紹介していきます

関連記事: デジタル関連写真 関連記事: Raspberry Pi関連 Raspberry Pi関連情報はこちらに引っ越しました

NVIDIA Jetson Nano Developer Kit

2019年5月に 日本で発売されるようになったマイコンキットです
位置づけは Raspberry Pi と同じで、Linuxが動作するマイコンです

最大の特徴は NVIDIA製の GPUが載っているということで
Raspberry Pi では出来なかった CUDA(GPGPU)を使った機械学習などの高速化
また 3Dグラフィックスの支援機能としても期待できます

2014年に発売された GeForce GTX 750 Ti が Maxwell世代の CUDAコア 640基なので
Jetson Nano の 128基の Maxwell世代 CUDAコアでは 比較すると 1/5 程度です

Jetson Nano 外箱
Jetson Nano 本体
Jetson Nano セットアップ
OSが Ubuntu であることを除けば ほぼ Raspberry Pi です

初回の起動画面もキャプチャしたので貼っておきます
Jetson Nano ブートロゴ
ブートロゴです
Jetson Nano EULA
エンドユーザライセンス画面
Jetson Nano エリア選択
地域の選択画面
Jetson Nano デスクトップ
デスクトップです Ubuntuです

RaspberryPi Zero用 照光スイッチ 拡張基盤

部屋の LED照明器具の明るさを制御してみたいと思い購入しました
RaspberryPi Zero用 照光スイッチ 拡張基盤 と Raspberry Pi Zero W です
XBee
まず Zeroですが OSの相性の問題か Jessie(2018-10以降)では I2Cインターフェースが
動かずうまく拡張基盤と通信できませんでした Jessie(2018-7)版では動作しました

制御対象の LEDは 12Vまでの 外部電源を利用可能となっています
0~255 の 256段階で明るさを指定できますが明るさの制御が PWM方式だからか
100とかの中間の段階を指定すると若干ノイズが聴こえるような

BLUENINJA

BLUENINJAという IoTセンサモジュールに挑戦中
BLUENINJA
BLUENINJA本体 と ブレークアウトボードつまり開発キットです
かなり小型のモジュールです Bluetoothで通信でき
9軸(加速度 角速度 地磁気) や 気圧などの環境情報を採取できます
開発環境は整って テストファームウエアをビルドできるところまで確認しました

XBeeモジュール

ZigBee通信規格のモジュール と USB変換器です
Arduinoのシリアルを無線化したりするのに使えます
XBee
XBeeモジュール自体も センサ測定情報を収集する簡単な機能を持っているようです

USB Wi-Fi

Raspberry Pi用に追加 無線LAN機器を買いました
これはお薦めです
AirStation N150 USB
AirStation N150 USB (WLI-UC-GNM2)
親機 つまり Wi-Fiアクセスポイント になれるのです
Wi-Fiモジュールで親機になれるのは 以外と少ないので親機モジュールが欲しい場合
結構探す必要がありますよ

GCC-6.1.0 での g++ によるシステムヘッダ検索パス

GCC-6.1.0 での g++ によるシステムヘッダ検索パス

久々に GCCを更新して最新の 6.1.0にしましたが g++でコンパイルできないトラブルがありました
GCC-6.1.0 での環境設定上の注意点をメモします

環境は次のとおりです

検証環境
CPU AMD A10-7800 (3.5GHz 4コア)
マザーボード F2A88XM-D3H(GIGABYTE製 AMD A88X Micro-ATX)
メモリ 16GB (DDR3-1333)
HDD HITACHI HDP725025GLA380 (SATA 250GB)
イーサネット Realtek GbE RTL8111F?
グラフィック RadeonR7 (内蔵GPU)
サウンド Realtek ALC887 codec (オンボード)
Linux 3.10.1
GCC 6.1.0
glibc 2.23
binutils 2.26.1

発生した問題と原因

Linux を 64bit化したときのメモ を参考にしながら binutils glibc GCC を最新化しました
で 下記テストプログラムをコンパイルすると…

$ cat tes.cpp
#include <iostream>

int main() {
 std::cout << "Hello World\n";
 return ( 0 );
}

$ g++ -o tes tes.cpp
In file included from /usr/gcc/6.1.0/x86_64/include/c++/6.1.0/ext/string_conversions.h:41: ,
                 from /usr/gcc/6.1.0/x86_64/include/c++/6.1.0/bits/basic_string.h:5402,
                 from /usr/gcc/6.1.0/x86_64/include/c++/6.1.0/string:52,
                 from /usr/gcc/6.1.0/x86_64/include/c++/6.1.0/bits/locale_classes.h:40,
                 from /usr/gcc/6.1.0/x86_64/include/c++/6.1.0/bits/ios_base.h:41,
                 from /usr/gcc/6.1.0/x86_64/include/c++/6.1.0/ios:42,
                 from /usr/gcc/6.1.0/x86_64/include/c++/6.1.0/ostream:38,
                 from /usr/gcc/6.1.0/x86_64/include/c++/6.1.0/iostream:39,
                 from tes.cpp:1:
/usr/gcc/6.1.0/x86_64/include/c++/6.1.0/cstdlib:75:25: 致命的エラー: stdlib.h: そのようなファイルやディレクトリはありません
 #include_next <stdlib.h>

コンパイルを停止しました。
$
 

単純な C++プログラムがコンパイルできないという現象でした
#include_next <stdlib.h> で stdlib.h が見つからないというのが直接の原因です

<cstdlib> (C言語で言う stdlib.h のようなもの) 内での <stdlib.h> の呼び出しが
#include から #include_next に変わったのが 最近の GCC での変更点ですが そもそも #include_next とは何でしょうか

#include_next とは システムオリジナルのヘッダ.h を 同名のヘッダでオーバーライドできる仕組みです
オリジナルの glibcのヘッダでは 問題が出るため GCCでは上書き用のヘッダを用意することでビルド環境の整合性を保っています
図にすると下記イメージです
(ユーザプログラム) #include <stdlib.h> → (GCC stdlib.h) #include_next <stdlib.h> → (glibc オリジナル stdlib.h)
stdlib.h の例では ユーザプログラム側で #include <stdlib.h> すると
glibcの stdlib.h が呼ばれる前に GCCの stdlib.h が呼ばれる仕組みとなっています
GCCの stdlib.h では必要な変更点が記載されており 変更不要な定義は glibcの stdlib.h を呼び出す動作となります

このような オーバーライドの仕組みを担保するために
#include_next で確実にオリジナルのヘッダディレクトリが探索される必要がありますが
g++ではこの辺りの挙動が変わったようです