iPadにAltStoreをインストールしています。主にUTMを動作させるためです。ただ現状ではサイドロードしたアプリをインストールした時の制約として動作が7日間という制限があります。

7日間以上そのアプリを動作させるためには、アプリをインストールし直すか、Appleのauthenticateサーバと通信しなければなりません。今のところそれはJailbreakでもしない限り、デバイス単体で行うことができません。

そこでRaspberry Pi 4でAltServerを動作させて、近くにMacやWindowsがなくてもAltStoreアプリからリフレッシュできるようにしてみました。

Redditなどを読み漁ったりもしましたが、ほとんどがラズパイにUbuntuをインストールした状態で環境を構築した事例でした。

今回紹介する内容は、ラズパイOSでAltServerを起動し、iPadで起動しているAltStoreでリフレッシュを実行することです。無事動作するようになったので、手順をまとめていきます。

必要なライブラリのインストール

今回参考にしたのは、こちらのGitHubにまとめられた手法です。

AltServer Linux with Wifi Refresh.md

GitHub Gist: instantly share code, notes, and snippets.

ただしこのドキュメントでまとめられている方法をそのまま実行するとエラーが起こった箇所もあるので、情報を付け加える形でコマンドを紹介します。

まずビルドに必要なライブラリ関連をインストールします。

sudo apt install -y \
  libavahi-compat-libdnssd-dev \
  usbmuxd \
  ninja-build \
  ldc \
  libplist-dev \
  libimobiledevice-dev \
  libgtk-3-0 \
  dub \
  openssl

これらをインストールした後に、libmobiledevice-glueをmakeしてインストールします。

sudo apt-get install \
	build-essential \
	pkg-config \
	checkinstall \
	git \
	autoconf \
	automake \
	libtool-bin \
	libplist-dev

ソースコードをgitからcloneして、makeしてみます。

git clone https://github.com/libimobiledevice/libimobiledevice-glue.git
cd libimobiledevice-glue
./autogen.sh
make
sudo make install

僕の環境では、autogen.shを実行した時点でエラーが出ました。 どうやらlibplistのバージョンがラズパイでは2.0で、makeするのに必要なバージョンが2.3.0らしいというのがわかりました。

今回はここで一度、libplist-devをアンインストールして、2.3.0をgit cloneしてインストールしました。

sudo apt-get remove libplist-dev
cd ../
git clone https://github.com/libimobiledevice/libplist.git
cd libplist
./autogen.sh
make
sudo make install

これでlibplistのバージョンが2.3.0に上がりました。改めて、libimobiledeviceのmakeを試みます。

cd libimobiledevice-glue
./autogen.sh
make
sudo make install

次はRust言語環境を整えます。

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

インストール方法はデフォルトにしました。インストールすることで新たなパスが通ったので、パスを有効化するためにシェルを立ち上げ直しました。って言っても一旦exitでSSH接続を終えて、再度接続するだけですけど。

SSH接続し直した後で、toolchainをインストールします。

rustup toolchain install stable
rustup default stable

最後にusbmuxdのサービスの設定を変更します。

sudo nano /lib/systemd/system/usbmuxd.service

usbmuxd.serviceの末尾にこれを追記します。

# Taken from https://bugs.archlinux.org/task/31056
[Install]
WantedBy=multi-user.target

追記が終わったら、サービスを立ち上げておきます。

sudo systemctl enable --now avahi-daemon.service
sudo systemctl enable --now usbmuxd

お疲れ様でした。これでラズパイ上でAltServerが動く環境が整いました。

AltServerをダウンロードして起動する

Linux版AltServerと、WIFIリフレッシュするためのnetmuxdをダウンロードします。

wget https://github.com/NyaMisty/AltServer-Linux/releases/download/v0.0.5/AltServer-aarch64
wget https://github.com/jkcoxson/netmuxd/releases/download/v0.1.4/aarch64-linux-netmuxd

ダウンロードしたバイナリに、それぞれ実行権限を付与します。

sudo chmod a+x aarch64-linux-netmuxd
sudo chmod a+x AltServer-aarch64

次に、Appleの認証サーバと通信するための環境を整えますが、ここでは公開されてるdockerイメージを元にコンテナを作って実行します。

Docker環境がまだ整っていなければ、こちらのコマンドを実行しておきましょう。僕は既に実行した後なので、飛ばしました。

$sudo apt install docker.io
$sudo usermod -aG docker $USER
$sudo reboot

Dockerが使えるようになったら、docker runコマンドでイメージの取得から実行まで一気にやります。

docker run -d -v lib_cache:/opt/lib/ --restart=always -p 6969:6969 --name anisette dadoum/anisette-server:latest

このタイミングで、ラズパイで同一ネットワーク内のAppleデバイスを認識してみるか、確かめてみます。

sudo apt install avahi-utils
avahi-browse -a

これでペアリングしたいデバイスが表示されていたらOKです。確認ができたらCtrl + Cで抜けます。

そしてラズパイ4とAltStoreをインストールしたデバイスをUSBで接続します。

とその前に、既に接続したことがあるMacかWindowsで、WIFI同期の設定にはチェックを入れておいてください。

その確認の後で、ラズパイとデバイスを接続します。僕の場合はiPad Proとラズパイ4をUSB-Cで接続してSSHしていましたが、この繋ぎ方では認識しませんでした。

なので、ラズパイ4を別の電源から起動して、ラズパイ4のUSB-A端子とiPad ProのUSB-C端子を接続しました。

すると、デバイス上で「このコンピュータを信頼しますか?」と表示されるので、信頼します。これが表示されてるということは、ここまで順調だという証拠です。

信頼作業が終わったら、一旦USBケーブルを抜きます。一度信頼できたデバイスなら、WIFI経由でも同期できるはず。

ここまで来たら、netmuxdを起動してみます。

sudo ./aarch64-linux-netmuxd

起動してみるて、特にエラーらしき表示がなければ成功です。一度Ctrl + xで終了してから、&をつけて実行し直します。

sudo ./aarch64-linux-netmuxd &

さぁいよいよ、AltServerを起動します。

sudo ALTSERVER_ANISETTE_SERVER=http://127.0.0.1:6969 ./AltServer-aarch64

僕の環境では、iPadにインストールしてあったAltStoreから、無事リフレッシュできました。最高。 これでラズパイさえ持ち歩いていれば、出先でも7日以内にサイドロードしたアプリのリフレッシュができます。Macを持ち歩かなくても良い理由ができました。

数日前にRaspberry Pi 5が発表されましたが、4もまだまだ捨てたもんじゃないですね。