2012/12/30

【脱獄アプリ開発】第2回 Cydia Debパッケージを作成しよう!

前回は仮想マシンに「Ubuntu」をインストールしました。
今回は、実際にdebパッケージを作成してみましょう!


前回の記事を見ていないかたは、先に目を通してください。

【脱獄アプリ開発】第1回 VirtualBoxにLinux Ubuntuをインストール!



debパッケージ作成用のディレクトリを作る



仮想マシンでLinuxを起動しましょう。

ホームディレクトリに分かりやすい名前でフォルダを作ります。

例.「apt」というフォルダを作りました。

この中で、Cydia用のファイルを作成します。


簡単なdebパッケージを作ろう!



「apt」ディレクトリの中に、「test」というフォルダを右クリックで作ります。

その中に、/var/mobileというフォルダを作ります。

そこで、右クリックで「新しいドキュメントの作成」→「空のドキュメント」とクリックして「hello」というファイルを作ります。中身は何でもOK!お決まりの「Hello world」とでも記述しておきます。

次に、「test」ディレクトリに戻り、「DEBIAN」というフォルダを作ります。

同じく右クリックで空のドキュメントを作成→「control」という名前でファイルを作ります。

controlファイルは、debパッケージを作る上で、ベースとなるものです。
記述には決まりがありまして、最後に一行空行を入れるなどあります。
Author: yourname <yourname@example.com>
Maintainer: yourname <yourname@example.com>
Name: Test deb
Package: domain.yourname.test
Depends: 
Section: Tweaks
Version: 0.1-1
Architecture: iphoneos-arm
Description: test deb package.
Depiction: 
Homepage: 
Sponsor: 
dev: yourname
Tag: purpose::extension
Icon: 
Installed-Size: 
 
このような形で記述してください。

それぞれの項目の後に、半角スペースを入れてあげます。
  • Author、Maintainer、devは自分の名前
  • Package:自分のドメイン.自分の名前.そのパッケージの名前といった形で記述
  • Depends:インストールするときに、一緒にインストールするもののPackage名を記述
  • Section:Cydiaで認識するカテゴリみたいなもので、表示されるアイコンがここで変わります
  • Version:バージョン情報で、インストールしていた場合、数字によってCydiaのアップデートに反映されます
  • Architecture:iphoneos-arm固定でOK
  • Description:そのパッケージの簡単な説明で、Cydiaで一覧で見た時に表示されます
  • Depiction:HTMLで書かれたURLを記述しておくと、Cydiaで開いた時にその内容が表示されます
  • Homepage:メインのホームページがある場合に記述します
  • Sponsor:BigBossやModmyiなどへ提出する時に記述されます(自分で記述しなくてOK)
  • Tag:基本「purpose::extension」でOK
  • Icon:Cydiaで開いた時に表示させたいアイコンのパスを記述
  • Installed-Size:インストールされたときのサイズ(特に記述しなくてもOK)

その他は、以下を参考にしてください。

Debianパッケージのcontrolファイル - ichitaso



さて、記述が終わりましたら保存するわけですが、上の画像のように「control~」というファイルができてしまいました。これは、バックアップから戻すためのファイルで、Debパッケージの中には不要なものになります(OS Xの.DS_Storeも同様)

普段は隠しファイルとなっているので、見えません。

メニューバーの「表示」→「隠しファイルを表示する」にチェックしてください。

そうすると、表示されるようになるので削除しておきましょう。

test.debの構成


apt
+- test
+- var
| +- mobile
|   +- hello
+- DEBIAN
+- control

出来ましたでしょうか?

それでは、これを元にDebパッケージを作成します。


Debパッケージの構築


「端末」を起動して、以下のコマンドを一行ずつ入力
cd ~/apt(自分で作ったディレクトリ名)
dpkg-deb -b test

デキタ━━━ヽ(∀゚ )人(゚∀゚)人( ゚∀)ノ━━━!!


iPhone3GSでHD画質のビデオを撮れる「3GS HD Video Enabler」の作成



では、もう少し難しいものも作ってみます。

iPhone 3GS でHD画質の動画を撮る方法|ichitaso's back of flyer



ちょっと古めな記事ですが、この内容を自動で行なってくれるものを作ります。

パッケージの名前のフォルダを作ります。

ディレクトリの階層が深くなるので、ターミナルである程度作ります。
cd ~/apt/com.ichitaso.3gshdvideo
mkdir DEBIAN

mkdir -p System/Library/PrivateFrameworks/Celestial.framework/N88
DEBIANフォルダに以下のファイルを作成します。

参考:
preinst:インストール前に、実行するシェルスクリプト
postinst:インストール後に、実行するシェルスクリプト
prerm:リムーブする前に、実行するシェルスクリプト
postrm:リムーブする後に、実行するシェルスクリプト

※アップデート時にも関係してきます。

それぞれの内容は、以下のようにします。

Author: ichitaso
Maintainer: ichitaso
Name: 3GS HD Video Enabler
Package: com.ichitaso.3gshdvideoenabler
Conflicts: com.iphonerepocenter.hdvideoenabler3gstheme, cy.model+iphone (>= 2), cy.model+iphone (<< 3)
Depends: firmware  (<= 4.2.1)
Section: System
Version: 1.0-1
Architecture: iphoneos-arm
Description: SuperHD Video Rec Enabled for iPhone 3GS.
Depiction: http://willfeeltips.appspot.com/depiction/3gshdvideo.html
Homepage: http://ichitaso.blogspot.com
dev: ichitaso
Tag: purpose::extension
 
cy.model+iphone (>= 2), cy.model+iphone (<< 3)で、iPhone 3GSのみに指定 iOS 4.2.1以降では機能しないので、Depends: firmware (<= 4.2.1)としています。
#!/bin/sh

cd /System/Library/PrivateFrameworks/Celestial.framework/N88/

mv AVCapture.plist AVCapture.plist.bak
mv CameraRollValidator.plist CameraRollValidator.plist.bak
mv CameraSetup.plist CameraSetup.plist.bak
mv MediaValidator.plist MediaValidator.plist.bak

exit 0
元のファイルをバックアップしておきます。
#!/bin/sh

declare -a cydia
cydia=($CYDIA)
if [[ ${CYDIA+@} ]]; then
    eval "echo 'finish:restart' >&${cydia[0]}"
fi
インストール完了後にRespringさせます(restartをrebootにすれば再起動となります)
#!/bin/sh

cd /System/Library/PrivateFrameworks/Celestial.framework/N88/

mv AVCapture.plist.bak AVCapture.plist
mv CameraRollValidator.plist.bak CameraRollValidator.plist
mv CameraSetup.plist.bak CameraSetup.plist
mv MediaValidator.plist.bak MediaValidator.plist

declare -a cydia
cydia=($CYDIA)
if [[ ${CYDIA+@} ]]; then
    eval "echo 'finish:restart' <&${cydia[0]}"
fi
アンインストール時にバックアップからもとに戻すようにします。

「System/Library/PrivateFrameworks/Celestial.framework/N88」にplistファイルをコピー

ターミナルで以下のコマンドを入力します。
cd ./DEBIAN
chmod 755 preinst
chmod 755 postinst
chmod 755 postrm
これを行うことで、実行権限が与えられます(詳しくは:chmod 755 - Google 検索

Debパッケージを作成します。
cd ~/apt
dpkg-deb -b com.ichitaso.3gshdvideo

出来ました(^-^)


Debパッケージのインストール



では、実際にJailbreakしたiOSデバイスにインストールしましょう!

「ここで問題発生」

VirtualBox 4.2.6ではホストPCからゲストPCにはドラッグ&ドロップができますが、ゲストからホストへできないようです・・・というわけで、共有フォルダを作成します。

※VMwareの場合、以下の作業は必要ありません

あらかじめホストPCでホームディレクトリに「sharedfolder」というフォルダを作っておきます。

VirtualBoxの設定から「共有フォルダー」フォルダーリスト右の+アイコンをクリック

→「sharedfolder」を選択

読み込み専用のチェックはオフ、自動マウントにチェックで「OK」

「sharedfolder」を右クリックして情報を表示→アクセス権を全て「読み/書き」にします。

ゲストに移り、ホームディレクトリに「sharedfolder」を作成→端末から以下のコマンドを入力
sudo mount.vboxsf sharedfolder /home/あなたのユーザー名/sharedfolder

「sharedfolder」を右クリックして、プロパティから共有

→このフォルダを共有するにチェック

この時、「Sambaをインストール云々」と聞かれるのでインストール

終わったら、再び端末を開き以下のコマンドを入力
sudo gedit /etc/rc.local

exit 0の前に mount.vboxsf sharedfolder /home/あなたのユーザー名/sharedfolder
と、追記して保存します。

これで、ゲストから「sharedfolder」を通してホストへファイルを送れます。
Dropbox経由でもできますが、一度設定してしまえば、こちらの方が楽です。

おそらく、今後のバージョンアップで対応してくれるかと信じています。

作成したdebファイルをホストへ入れますヽ(・∀・)ノ

OpenSSHのインストール


あらかじめ、iOSデバイスにSSHをインストールしておきましょう。

なにかあった時に修復作業ができる他、開発には必須です。
PwnageToolやsn0wbreezeでSSH入りのCFWを作っておくと楽ですよ!

あとは、SBSettingsを入れておくと何かと便利です(Wi-Fi IPアドレスをメモっておきます)

ターミナルやiFunBox v2以降でrootのパスワードを変更しておきましょう。
ssh -l root IPアドレス
alpine
passwd
新しいパスワードを2回入力

test.debのインストール


iFunBoxなどで、/var/mobile に作成したdebファイルをコピーします。

ターミナルやiFunBox v2以降を使用して、SSHでiOSデバイスに入り、以下のコマンドを入力
cd /var/mobile
dpkg -i test.deb
これで、インストールできました\(^o^)/オワタ

hello world!!

iFileで簡単にインストールすることができますが、SSHで行うとCydiaでインストールした時の動作と同じような動作になるので、テストする時はこの方法を覚えておきましょう。


test.debのアンインストール


アンインストールする時は、Package IDを入力する必要があります。

SSHで以下のコマンドを入力

dpkg -r domain.yourname.test
アンインストールする時に、Dependsで依存関係となっているものを消したくない場合
dpkg -r --force-depends Package ID
Linuxコマンド集 - 【 dpkg 】 debパッケージのインストール・アンインストールを行う:ITpro



リムーブすると、debファイルに入れてあったファイルは自動的に消えます。

というわけで、Debパッケージの作成 - 基本編は終了です。上手く出来ましたか?

今回作成した「3GS HD Video Enabler」をichitasoリポに入れてあります。

3GSでiOS 4.2.1の方は稀かもしれませんが、古いiOSの方だと昔のドックアクセサリが使えたりと便利なので。

次回は、Cydia Repositoryの作成方法について説明します。それでは!

【脱獄アプリ開発】第3回 Google App Engineを使ったCydiaリポジトリの作成方法