pslaboが試したことの記録

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

はてなダイヤリー時代はカテゴリ分けが適当だったのですが、これはそのうち直します。


自己メモ:Android SDK と NDK の違い

なんとなく自己整理のためのメモ

Android SDK - Android アプリケーション開発で一般的に使うもの。 - Kotolin (以前なら Java)で開発する - OSバージョンによって必要なAPIレベルが異なる。Google Play でアプリを配信する場合は2018年11月1日からは APIレベル26への対応が必要 - ちなみに Delphi/C++Builder/RAD Studio で APIレベル26 でアプリをビルドするには、10.3 のベータ版が必要らしい。10.2.x では未対応。10.3 ベータは、年間保守契約(アップデートサブスクリプション)期間内の場合にベータプログラムに参加することで入手できる。

Wikipedia の英語版に、OSバージョンとAPIレベルの一覧表があったのでリンク貼っとく。

Android version history - Wikipedia

Android NDK - NDK = Native Development Kit の略 - C や C++Android 向けの開発ができる - 通常の開発では使わない - Delphi/C++Builder/RAD StudioではネイティブコンパイルしてNDKでビルドしている。(Java や Kotolin にトランスパイルしているわけではない)

2018/10/12以降にDelphi/C++Builder/RAD StudioのIDE利用時に表示されるエラーを出ないようにしたい

2018/10/14 08:00 補足 エラーの発生は解決しているようなので、この記事の作業は必要ありません。 この記事は、発生したエラーの原因や、その対処方法に関する資料としてのみ、お読みいただけます。

続きを読む

iOS12にアップデートしたばかりの端末をiOS11にダウングレードする

このネタは期間限定なのでご注意ください。おそらく、2018年9月いっぱいで賞味期限切れになります。

目的:検証用の端末を古いバージョンで手元においておきたい

iOS12はパブリックベータのころから試していたのですが、正式版がリリースされたとなると、逆に1つ前のバージョンを実機で残しておきたくなりました。

通常、iOSはアップグレードすると前のバージョンに戻せません。iOSを個別のデバイスにインストールするには、デバイス+OSの組み合わせに対してApple の認証サーバが発行するSHSH (Signature Hash) が必要になるからです。

このSHSHは新しいOSがリリースされてしばらくすると、旧バージョン向けの発行が停止します。逆に言えば、旧バージョン向けのSHSHが発行されている間はダウングレードが可能です。

つまりiOS12がリリースされた直後でiOS11向けのSHSHがまだ発行されている今ならiOS11に戻すことが可能なのです。

注意事項:OS入れ替えをすると完全に初期化されます

ダウングレードしたら、ゼロから環境を作り直すか、またはダウングレード対象OSバージョンでのバックアップから復元します。iOS12で作成したバックアップはiOS11には適用できないことにご注意ください。

必要なものを用意する

必要になるのはこんなものです。

PCは当然用意済みでしょうから、ここではファームウェアを入手することにします。iOS11の最終ファームウェアは11.4.1ですので、"iOS11.4.1 ファームウェア ipsw" のようなキーワードで検索すると、ファームウェアのダウンロードリンクを掲載しているサイトがいろいろ出てくると思います。このときに、ファームウェアのリンク先が確かに apple.com を指していることをよく確かめてください。ファームウェアのダウンロードリンクが apple.com ではないリンクは基本的に NG です。

iPhoneを探す」の機能をOFFにするなど、iPhoneを修理に出す際に推奨される作業を行っておく

これを行わずにダウングレードを実施すると、ダウングレード後の起動でAppleIDによるロックが掛かった状態になります。

iPhone を DFU モードにする

iPhone を強制リカバリーモードにするために DFU モードにします。基本的には以下の手順ですが、iPhoneX/8/8Plus以降ではホームボタンの代わりに音量ダウンボタンを押すみたいです。

  • 電源3秒押し→電源+ホームボタン10秒押し→ホームボタンだけをさらに押し続ける

iTunes からファームウェアを選択して復元する

DFUモードになったiPhoneをPCに接続し、Altキー (Windows) または Optionキー (macOS) を押しながら「復元」を選択すると、ファームウェアを選んでの復元ができます。ここで iOS11.4.1 のファームウェアを選択すれば、iOS12にアップデートした端末をダウングレードできます。

より詳しく知りたい方は、iOS の脱獄系の情報を調べるとよいでしょう

今回の手順で紹介した SHSH の話はiOS脱獄では必ず出てくる話題なので、脱獄関連の情報を調べるといろいろ参考になるはずです。

iPhone7PlusのAppleCareが切れる前に無料のバッテリー交換に申し込む

バッテリー充電容量が低下したiOSバイスのパフォーマンスが意図的に下げられていた問題で2018年末まではバッテリー交換費用が通常よりも格安でできるようになりましたが、そもそもAppleCareが有効な期間は無償で交換できるので、購入してからもうすぐ2年になるiPhone7+のバッテリーを交換することにしました。

普段ならばiPhoneの修理はAppleStoreに持ち込むのですが、今回は配送修理を手配してみることにしました。単純に、どれくらいの日数で対応完了するかを知っておきたかったのです。

どうせなら、日数がかかりそうな条件で手配してみよう

各種対応は平日しか行わないと思うので、週末に集荷手配すれば、Appleへの到着はきっと月曜日になるはずです。というわけで、土曜日午前中の集荷を手配。

集荷のための準備をしよう

詳細は以下のリンク先に出ている通りなのですが、配送修理の場合は iPhone を初期化して個人に紐づかない状態で送付する必要があるようなので、以下の作業を行います。

  • バックアップする
  • iPhoneSuica を使っている場合は Wallet から明示的に削除しておく
  • iPhoneを探す」をオフにする
  • iMessage をオフにする (修理期間中に、SIMをiPhone以外で使う場合は電話番号でのiMessage受診を無効化する必要があるため)
  • 端末を初期化し、Apple ID を紐付けない状態で使える状態にしておく
  • SIMカード、ケース、フィルム類は全て取り外す。

support.apple.com

集荷の時系列ログ

あえて日数が掛かりそうなパターンで申し込んでいるので、このケースでは9/1集荷、9/6返送受け取り、となっています。これが8/31(金)の集荷だとしても土日はApple側の受け取り対応が行われないでしょうから、受け取りまでに1週間かかると考えられます。

日付 内容
2018/8/28(火) 配送修理申し込み
2018/9/1(土) 集荷
2018/9/3(月) ADSC支店宛配達完了
2018/9/4(火) Apple側 受領
2018/9/5(水) 修理
2018/9/5(水) 返送
2018/9/6(木) 到着(クロネコメンバーズで受け取り場所をコンビニ受け取りに変更)

ちなみにこれは関東圏での集荷配送を依頼しています。Appleの修理拠点がどこにあるかはよく知らないのですが、配送修理を依頼する場所によっては日数がもう少しかかるかもしれません。

感想

  • 修理期間中の予備機が無い方は持ち込み修理の方が良いと思います。

  • 予備機が手元にあるなら、配送修理はアリです。指定の時間帯に機器を引き取りにきますので、それまでに準備しておけば大丈夫です。持ち込み修理は当日(または翌日)に修理完了するメリットはありますが、都合の良いタイミングで予約を取るのが難しかったりします。

  • 修理品の集荷や配送はヤマト運輸なので、クロネコメンバーズに入っておき、修理後の受け取りをコンビニ等に変更すればタイムラグ少なく受け取れます。

  • エクスプレス修理なら端末交換になるので修理待ちが発生せず良いような気がしますが、バッテリ交換でこれが選べるかどうかは未確認です。

support.apple.com

  • Apple Store や正規サービスプロバイダへの持ち込み修理予約が都合の良い日時に取れるなら、そちらの方が待ち時間少なく対応できると思います。ただし、予約日時に機器を預けた上で、1時間後以降に再度来店する必要があることに注意が必要です。

Raspberry Pi 3 や Zero W に OpenWrt/LEDE 18.06 をインストールしてルータにする

LinuxベースのディストリビューションOpenWrtによるRaspberry Pi 3 や Zero W のルータ化の話は過去にも書いていますが、最新の 18.06 がリリースされていたので、環境を作り直すことにします。

(とは言いつつ、最初のバージョンのリリースを見逃していたので、この記事では 18.06.1 を前提に書いています)

既存の製品ではなく、あえて自分で作る理由とは?

既製品は機能面が不満です

例えば、DS-Lite (任天堂製品ではありません。フレッツ光のインターネット接続をPPPoEのIPv4ではなくIPoEのIPv6化することで速度改善をはかり、なおかつIPv4への通信も提供される仕組み)に対応したルータは案外少ないのですが、OpenWrtなら DS-Lite が利用できます。手持ちの製品が DS-Lite に対応していない為にルータを買い換えるというのは、とても残念な話ですが、そういうことは起きません。

セキュリティを強化したい

WPA2-EAPのような企業向けのセキュリティを導入するには、既製品はそれなりの価格の製品が必要です。でもOpenWrtならパッケージを追加してカスタマイズするだけで利用できます。作業コストは発生しますが、単にそれだけ。

IoT関連のハブにしたい

Raspberry Pi 3 に OpenWrt を導入したルータなら、Bluetooth 関連のパッケージを追加することで IoT 関連のハブにすることも可能ですね。

要するに、様々な拡張が容易に行えるのが魅力なのです。なお、OpenWrtを日本国内で運用する場合は電波法や技適の問題が付きまといますので、既製品のルータにOpenWrtを導入する話は公式な場所では展開しづらいのですが、Raspberry Pi 3 はデバイス自体が技適を通過していますから、OpenWrtをインストールしても技適の問題は発生しないはずです。(もしこれが問題になるとしたら、既存のノートパソコンにWindows / macOS / Linux の設定超背でWiFi AP化することもアウトになりますし)

そんな訳で、Raspberry Pi 3 は OpenWrt を導入するにはうってつけのデバイスだと考えています。技適の問題に目をつぶったとしても、既製品にOpenWrtを導入する場合は焼き方の失敗による文鎮化が心配です。でもファームウェアmicroSDに記録しているRaspberry Piは、何か問題があればmicroSDを再フォーマットすれば済むので、この辺りの不安も生じません。だから OpenWrt を試す環境としては Raspberry Pi3 に代表されるシングルボードコンピュータはちょうどよいのです。

ファームウェアイメージを入手する

OpenWrt のファームウェアイメージは、一般的な Raspberry Pi 向けファームウェア同様に dd で書き込みます。イメージは下記のURLから入手できます。

Raspberry Pi Zero W 向け https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2708/openwrt-18.06.1-brcm2708-bcm2708-rpi-ext4-factory.img.gz

Raspberry Pi 3 向け https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2710/openwrt-18.06.1-brcm2708-bcm2710-rpi-3-ext4-factory.img.gz

macOSな方は、下記記事のスクリプトを使うと、書き込み時の一連の作業(書き込み先デバイス名の確認、ddの実行、eject)が自動化できて便利だと思います。

[https://pslabo.hatenablog.com/entry/2015/12/09/MacOS_X%E3%81%A7_Raspberry_Pi%E7%94%A8%E3%81%AE%E8%B5%B7%E5%8B%95%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92SD%E3%82%AB%E3%83%BC%E3%83%89%E3%81%AB%E6%9B%B8:embed:cite]

焼いたファームウェアmicroSD に、作業用のディレクトリを作る

適当な名前で作ってください。work とか。 これは OpenWrt 起動後のシェルからは /boot/work としてアクセスできます。

基本設定をバッチで流し込むためのファイルを作る

こんな設定をGUI操作なしに投入しようと思います

管理UIのパスワードはバッチ投入しないほうがよいかなあと思うので、これはインストール完了後にGUIから変更してください。

上記の設定は、次の内容をスクリプトとして保存・実行することで投入できます。 initialconfig.sh のような名前で保存して microSD の作業用ディレクトリに入れておきます。WiFiSSIDパスフレーズはご自身が使うものに変えてください。

#!/bin/sh -x

uci set system.@system[0].zonename='Asia/Tokyo'

uci set dropbear.@dropbear[0].Interface=lan

uci set dhcp.lan.ra_management='1'
uci set network.lan.ipaddr='192.168.4.1'
uci set network.lan.ifname='wlan0'

uci set network.wan=interface
uci set network.wan.proto='dhcp'
uci set network.wan.ifname='eth0'

uci set wireless.radio0.disabled='1'
uci set wireless.radio0.country='JP'
uci set wireless.radio0.txpower='10'
uci set wireless.default_radio0.encryption='psk2'
uci set wireless.default_radio0.network='lan'
uci set wireless.default_radio0.ssid='[設定するSSID名]'
uci set wireless.default_radio0.key='[WPA-PSKのパスフレーズ]'
uci set wireless.default_radio0.wpa_disable_eapol_key_retries='1'
uci delete wireless.radio0.disabled='1'

Pi3 以外の方向け:追加パッケージの下準備

Pi zero W をルータ化する場合は有線LANアダプタが必須です。USB LANアダプタに必要なパッケージやドライバを追加します。

下記のリストは PIMONORIの 3 Port USB Hub + NIC 向けドライバ を想定していますので、それ以外の USB LAN NIC をお使いの場合は必要なドライバを別途追加します。

https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2708/packages/kmod-libphy_4.9.120-1_arm_arm1176jzf-s_vfp.ipk
https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2708/packages/kmod-mii_4.9.120-1_arm_arm1176jzf-s_vfp.ipk
https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2708/packages/kmod-usb-net_4.9.120-1_arm_arm1176jzf-s_vfp.ipk
https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2708/packages/librt_1.1.19-1_arm_arm1176jzf-s_vfp.ipk

https://downloads.lede-project.org/releases/packages-18.06/arm_arm1176jzf-s_vfp/base/libusb-1.0_1.0.22-1_arm_arm1176jzf-s_vfp.ipk
https://downloads.lede-project.org/releases/packages-18.06/arm_arm1176jzf-s_vfp/base/usbutils_007-7_arm_arm1176jzf-s_vfp.ipk

# PIMONORIの 3 Port USB Hub + NIC 向けドライバ
https://downloads.lede-project.org/releases/18.06.1/targets/brcm2708/bcm2708/packages/kmod-usb-net-rtl8152_4.9.120-1_arm_arm1176jzf-s_vfp.ipk

これらのURLリストをテキストファイルに保存した上でシェルから wget -i packagelist.txt のようにダウンロードするのがお手軽で良いと思います。

全機種共通:最初から日本語UIで使いたい場合の追加パッケージ

これをインストールすれば、最初から日本語UIで使えます。必要な方はダウンロードして、microSD の作業ディレクトリに入れておきます。

http://downloads.openwrt.org/releases/18.06.1/packages/arm_arm1176jzf-s_vfp/luci/luci-i18n-base-ja_git-18.235.62437-6503756-1_all.ipk

焼いたmicroSDを装着してRaspberry Pi を起動し、パッケージインストールと初期設定の投入を行う

初期段階では NIC には LAN ケーブルを刺さずに作業します。(Pi Zero W は USB NIC だけ装着し、ケーブルは刺しません)。OpenWrt ではデフォルトのIPアドレスが 192.168.1.1 が NIC に設定され、さらにDHCPも有効なので、LAN接続して起動すると接続先ネットワークに影響が出る可能性があるからです。

行う作業はこんな内容です。

  • 起動したらシェルから cd /boot/作業ディレクトリ を実行
  • パッケージをインストールする。opkg install *
  • 初期設定の投入./initialconfig.sh
  • 初期設定をコミット uci commit
  • 再起動 reboot

ここまでくれば、有線LAN側がDHCPクライアントに設定されたWiFiルータになっています。あとは管理UIのパスワード設定を行い、さらに必要なカスタマイズを加えていきます。

OpenWRT/LEDE 18.06 リリースされてた

2018年7月末に 安定版18.06 がリリースされ、さらに8月17日に 18.06.1 がリリースされていた模様。

Raspberry Pi 3 向けのはここらへんにあるので、週末にでもセットアップしてみよう。(今は忙しすぎて時間がない)

Index of /releases/18.06.1/targets/brcm2708/bcm2710/

macOSの再インストールや各種トラブル対応の際に使用するキーボードショートカットのメモ

Mac起動時の特殊なショートカットーキー時々忘れてしまうので、使いそうなものをメモしておく。

内容 キーボード組み合わせ
SMCリセット shift control option + 電源
NVRAMリセット option command P R
Mac購入時のmacOSで復元 command R
利用可能な最新のmacOSで復元 option command R
Mac購入時またはそのバージョンに最も近い利用可能なバージョンで復元 shift option command R
シングルユーザモード command S
Verboseモード command V
セーフモード shiftキーを押して起動、ログインウィンドウが表示されたら放す
Apple Hardware Test の実行 Dキーを押したままで電源を入れる

ただし、メモしてから改めてググってみたら、そもそもAppleの下記のページにまとまっているのをみつけました。 https://support.apple.com/ja-jp/HT201255

まあでも自分なりにまとめるのは大事なので残しておく。