Toshiba Canvio Home を使えるようにする

f:id:mdoca:20191128003426j:plain
秋葉原で投げ売られてたNASであるToshiba Canvio Homeを入手したので、NASとして使えるようにセットアップする過程を書いていきます。

環境
初期設定

このNASには電源スイッチは存在しないので、ACアダプタを接続するとすぐに電源が入ります。

電源を投入してしばらくすると、本体のインジケータLEDが4つ点灯から1つ点灯に変わるので、エクスプローラからネットワーク探索をして「Canvio-******」みたいな名前の機器をダブルクリックします。f:id:mdoca:20191127235046p:plain

ログイン画面に飛ぶので初回ログイン時に限り
Username: admin
Password: admin
でログインし、その後に続く初期設定を済ませます。ちなみにWeb UIに日本語はありません。
f:id:mdoca:20191127234842p:plain

普通のNASならこの時点でファイルサーバとして使えるところですが、このNASは違います。最新のWindowsでSMB接続しようとすると繋がらない。

というのも、このNASはSMB1.0しか有効でないため、デフォルトでSMB1.0が無効化されている最新のWindows 10では有効化しない限り接続できません。

しかし今頃脆弱性のあるSMB1.0を有効化するのもはばかられるので、NAS側でどうにかします。要はSMB2.0を有効化します。(なぜ無効にしてるのか)

管理画面に入り、「Services」→「SSH」と進んでルートパスワードを適当に入力し、SSHを有効化します。
f:id:mdoca:20191127234848p:plain

あとはターミナル上での作業です。

SMB2.0の有効化

まずこのNASに入ってるsambaのバージョンを確認します。

# smbd -V
Version 3.6.6

バージョンが3.6以上ならSMB2.0をサポートしているので、SMB2.0を有効化、ついでにSMB1.0を無効化するように構成ファイルに追記します。ちなみに元々viが入っているのでviが使えます。

# vi /etc/samba/smb.conf

[global]
  min protocol = SMB2
  max protocol = SMB2

書き換えたら、デーモンを再起動して構成ファイルを読み込ませます。

# /etc/init.d/samba restart
完了

つながった
f:id:mdoca:20191128002751p:plain

futurerestoreで"libc++abi.dylib: terminating with uncaught exception of type libipatcher::exception: std::exception"が出たときの対処法

先日 iPod touch 5g のダウングレードを行うために futurerestore を用いて iOS 6.1.3 の復元を試みたところ、タイトルにあるようなエラーが出力されて止まってしまった。

調べてみると、どうやら ipsw.me が提供している復号化キーに復元対象のデバイス/バージョンが含まれていないと、このエラーが表示されるようで自前で復号化キーを用意すれば解決するらしい。

必要なもの
  • 復元先の ipsw
  • Firmware Keys
  • xpwntool
手順

復号化キーの雛形を入手する。もし iPod touch 5g, iOS 6.1.3 に復元するならば以下のファイルがそのまま使える。他のデバイス/バージョンの場合は次の手順により復号化キーなどを書き換える。
drive.google.com

ダウンロードした index.html に対してまず以下を書き換える。

   "identifier":"<復元するモデルのID>",
   "buildid":"<復元先バージョンのBuild ID>",
   "codename":"<復元先バージョンのコードネーム>",
   "baseband":"0",

iPod touch は baseband が無いので "baseband":"0" となっているが、iPhone などの baseband があるものは適宜ググって書き換える。

次に復元先の ipsw を展開し、中から以下のファイルに対して xpwntool を用いて KBAG を取得する。

./Firmware/all_flash/all_flash.<model>.production/*.img3
./Firmware/dfu/*
./*.dmg
./kernelcache.release.<model>

./xpwntool <path to file> nul

index.html の Keys の部分を、取得した KBAG と以下のサイトから得られる Firmware Keys に書き換える。存在しないイメージや書いてないイメージのキーは消したり追加したりして、上記のファイルすべてのキーが含まれるようにする。
www.theiphonewiki.com

      {
         "image":"<イメージ名>",
         "filename":"<イメージのファイルパス>",
         "kbag":"<KBAG>",
         "key":"<Key>",
         "iv":"<IV>",
         "date":"2014-02-20T00:00:00Z"
      },


書き換えが終わったら適当に http サーバを建てて、ホームディレクトリから
/firmware/<model ID>/<Build>/index.html (例: /firmware/iPod5,1/10B329/index.html)
となるようにファイルを配置する。
macOS の場合はホームディレクトリに上記のように配置した後

$ sudo python -m SimpleHTTPServer 80

でhttpサーバを建てられる。

httpサーバを建てたら、通常通り futurerestore で復元を行う。

完成
f:id:mdoca:20190830222329p:plain:w200

Debian 10 Busterで録画環境を構築する

Debianはあまりにも更新を怠るとapt updateしたときに404が帰ってくることを知った。ちょうど時間があったのでリポジトリを書き換えてアップデートするくらいなら、いっそクリーンな環境で構築し直そう。というわけで次の環境で構築してみる。

 

環境

  • Debian 10 Buster
  • Mirakurun + EPGStation on Docker
  • PT3

 

もくじ

Debianのインストール

 実は環境構築時点でDebian 10はリリースされていないのでテスト版をダウンロードしてくる。

www.debian.org


OSイメージをダウンロードしたらディスクなりUSBに焼いてインストールする。デスクトップ環境はいらないのでインストール時に除外した。

 

Docker CE のインストール

いつの間にかDockerがCEとEEに分離してて何が違うんだろうと思っていたら、CEはCommunity Editionでいわゆる無償版、EEはEnterprise Editionで商用版らしい。いずれにしろDebianにはCEしかインストールできないようだが、それはさておき公式の手順に沿って進める。

docs.docker.com


まっさらなDebianにはsudoが入ってないのでまずsudoを入れる。

# apt install sudo

visudoでログインユーザーのsudoを許可する。

# visudo

mdoca ALL=(ALL:ALL) ALL

あとは手順通りに進める。

$ sudo apt-get update
$ sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg2 \
    software-properties-common
$ curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -

Dockerのfingerprintを検索してキーがあることを確かめる。

$ sudo apt-key fingerprint 0EBFCD88

pub   4096R/0EBFCD88 2017-02-22
      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid                  Docker Release (CE deb) <docker@docker.com>
sub   4096R/F273FCD8 2017-02-22
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/debian \
   $(lsb_release -cs) \
   stable"
$ sudo apt-get update
$ sudo apt-get install docker-ce docker-ce-cli containerd.io

Docker Composeのインストール

これも公式の手順に従って導入する。
docs.docker.com

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose

Mirakurun、EPGStationの導入

便利なことにMirakurun + EPGStationのDockerコンテナがあるのでそちらを使うことにする。
github.com

Readme.mdを見ると前提条件にPT3+m-tsudo/pt3の利用を想定と書いてあるので、ホストOSにm-tsudo/pt3ドライバを導入する。

$ sudo apt install git build-essential dkms
$ git clone https://github.com/m-tsudo/pt3.git
$ cd pt3
$ make
$ sudo make install
$ sudo bash ./dkms.install
$ sudo echo "blacklist earth_pt3" >> /etc/modprobe.d/blacklist.conf
$ sudo reboot now

再起動後、PT3ドライバがロードされていることを確かめる。

$ lsmod | grep pt3

pt3_drv                53248  2

Readme.mdに書かれている通りに進める。

$ git clone https://github.com/l3tnun/docker-mirakurun-epgstation.git
$ cd docker-mirakurun-epgstation
$ sudo docker-compose pull
$ sudo docker-compose build

デフォルトのチャンネル設定だとMXが受信できないので16から20に変更する。

$ vim mirakurun/conf/channels.yml

- name: MX
  type: GR
  channel: '20'

カードリーダーのパスを確かめる。

$ lsusb

Bus 002 Device 002: ID 4971:8017 SimpleTech
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 04e6:5120 SCM Microsystems, Inc. SCR331-DI SmartCard Reader
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

ここではBus 001 Device 002がカードリーダーである。

構成ファイルのコメントアウトされている restart や user の設定やカードリーダーのパスなどを適宜変更する。

$ vim docker-compose.yml

        devices:
            - /dev/pt3video0:/dev/pt3video0
            - /dev/pt3video1:/dev/pt3video1
            - /dev/pt3video2:/dev/pt3video2
            - /dev/pt3video3:/dev/pt3video3
            - /dev/bus/usb/001/002

設定し終えたらコンテナを起動する。

$ sudo docker-compose up -d

ブラウザから録画機にアクセスしてメイン画面が表示されればOK。始めは番組表が空だが、しばらく待つと表示される。それでも実は動いてないんじゃないかって不安になるので

$ sudo docker-compose logs -f

でログを眺めてエラーが出てないことを確かめる。

完成

f:id:mdoca:20190626223733p:plain