【脱獄アプリ開発】第10回ichitasoリポジトリ変更のお知らせとCydiaダウンロードカウンタの設置方法

2015/03/15 19:08

Cydia用のリポジトリが更新するたびにエラーとなってしまったため、新たにURLを作り直しました。また新しくするついでに、自分のRepoからどのくらいダウンロードされているかわかるカウンタを設置しましたので、その方法も紹介いたします。

ichitaso repositoryの登録方法

分かりやすいように動画にしてみました。


Cydia→ソース→編集→追加→ソースを追加で登録して下さい。

Link: ichitaso’s repository
以前のRepo(ichitaso.com/apt)を登録してる場合、削除してください。

以前のRepoのキャッシュを削除


Unable to parse package file/var/mobile/Library/Caches/com.saurik.Cydia/lists/ichitaso.com_apt_._Packages.IndexDiff(1)
古いRepoを削除してRefreshすれば消えます。
もし残ってる場合、iFunBoxやiFileなどで以下のファイルを消して下さい。

/var/mobile/Library/Caches/com.saurik.Cydia/listsディレクトリに移動
  • ichitaso.com_apt_._Packages
  • ichitaso.com_apt_._Packages.IndexDiff
  • ichitaso.com_apt_._Release
今月の3/3にDDosアタックを受けまして、CloudFlareを利用しサーバーを移設などしてからおかしくなりました。ご迷惑をお掛けして申し訳ありませんでした。


(Googleのサジェストにも反映される始末…)
それによって色々と得るものがあったので、サーバー環境やWordPressの移設方法などを後ほど記事にしてまとめておきたいと思います。

個人でホスティングしているRepoにダウンロードカウンタを設置する方法

さて、これからが本番です。

自分のRepositoryから何のパッケージがどれくらいDownloadされてるか、気になるところですよね。せっかくなのでダウンロードカウンタを設置してみました。(実はめっちゃハマりました)
ググってみるとHASHBANG ProductionsのAdam D (kirb)(@hbkirb)さんのGistが見つかりました。

Link: Self-hosted Cydia Repo Download Counter
簡単な流れをまとめると、自分のサーバーに専用のMySQLテーブルを作成して、.htaccessでリダイレクトさせ、PHP経由でダウンロードした回数をカウントするというものです。

こちらはヒラクチャン(@hirakujira)さんも利用しているみたいで、本人に方法を聞いてみたのですが結果うまく行きませんでした。

ヒラクチャンはリダイレクトは使用しておらず、手動でPackagesファイルを編集しているとのこと。

うーん…めんどい(´-ω-`)

iphoneリポジトリ専用のダウンロードカウンターの設置方法 | おまっちゃおの備忘録
ということで、こちらを参考にさせていただきました。

ちなみに古いファイルなので、PHP 5.xで推奨されていない「mysql_select_db」などで行いますが、ちゃんと動いたので良しとします(汗)
必要なもの
  • UbuntuとかのLinux OS(VMwareで使用)
  • PHPとMySQLが使えるサーバー
  • SSHクライアント:WinSCPPoderosa(Windows用)
  • MacならTerminalとForkLiftなど
  • cydia_repo_counter.zip
  • やる気と根気

サーバーに専用のMySQLテーブルを作成する

1.SSHでサーバーに接続しmysqlにログイン
mysql -u root -p
2.テーブルを作成する(例.ichitasorepo ※名前は適宜変えて下さい)
mysql> CREATE DATABASE ichitasorepo CHARACTER SET utf8;
mysql> show databases;
mysql> use ichitasorepo;
Database changed

CREATE TABLE `download` (
`filename` varchar(255) NOT NULL,
`dldate` DATETIME,
`stats` int(11) NOT NULL,
`ip` varchar(20) NOT NULL default '',
`device` varchar(20) NOT NULL default '',
`firmware` varchar(20) NOT NULL default '',
`agent` varchar(250) NOT NULL default '',
PRIMARY KEY (`filename`)
) ENGINE = MYISAM DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)

mysql> show tables;
+------------------------+
| Tables_in_ichitasorepo |
+------------------------+
| download |
+------------------------+
1 row in set (0.00 sec)
mysql> \q
以上でMySQL側の準備は完了です。

サーバーにPHPを配置する

1.cydia_repo_counter.zipを解凍して編集
counter
├─createtable.sql
└─root
  ├─.htaccess
  ├─config.php
  ├─download.php
  └─yourdebsfolder
    └─counter.php
解凍するとこんな感じのファイルが入ってます。

「createtable.sql」は、すでに作ったので使いません。「.htaccess」はApacheの場合使えるかもですが、自分の場合Nginx使ってるので使いません。
Apacheで上手く出来ている方がいらっしゃいましたら教えて頂けると幸いです。
Nginxでリダイレクトの設定をすると「Bad URL」となりました。


vi /etc/nginx/conf.d/default.conf
server {

###### 省略 ######

location / {
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache_key $proxy_cache_key;
proxy_pass http://unix:/var/run/nginx.sock;
#rewrite ^(/apt/debs)/(.*).(deb|zip)$ ./counter.php?file=$2.$3 redirect;
}

###### 省略 ######

PCのブラウザからはダウンロード出来るのですが、Cydiaの「Telesphoreo APT-HTTP」だと不正なURLとして扱われるようです。
2.config.phpを編集する
$Benutzer = “USERNAME"; これを $Benutzer = “root"; にします。

$Passwort = “PASSWORD"; これを $Passwort = “rootのパスワード"; にします。

mysql_select_db(“DB-Name", $verbindung); これを mysql_select_db(“作ったデータベースの名前", $verbindung); 自分の場合ichitasorepoにします。
3.yourdebsfolderを開き「counter.php」を編集する
$path = $_SERVER['DOCUMENT_ROOT’]."/debs/"; ここをdebファイルがあるディレクトリに指定します。
4.サーバーにファイルを入れる
自分の場合で説明します。

Cydia Repoのディレクトリ
├─Packages.bz2
├─Release
├─Release.gpg
├─index.html
├─CydiaIcon.png
├─config.php
├─download.php
└─debs
   ├─OOO.deb
   ├─OOO.deb
   └─counter.php
こんな感じになります。

UbuntuでPackages.bz2を作成する

【脱獄アプリ開発】第1回 VirtualBoxにLinux Ubuntuをインストール! | Will feel Tips【脱獄アプリ開発】第1回 VirtualBoxにLinux Ubuntuをインストール! | Will feel Tips【脱獄アプリ開発】第1回 VirtualBoxにLinux Ubuntuをインストール! | Will feel Tips
第一回目にVirtualBoxにUbuntuをインストールする方法を紹介しましたが、自分はVMware(Windows版)を使用しています。

また、バージョンは『Ubuntu 12.04』を使用しています。

debファイル生成時にtar.xzになるのは新しいバージョンを使っているからかもです(誰となく)

Link: autorepo_counter.zip
こちらのシェルスクリプトを使って簡単にPackagesのダウンロードURLを変更することができます。Macだと動かないみたいなので手動でやっても構いません。

『autorepo_counter』に実行権限を与えダブルクリック→「端末内で実行する」をクリックしガイダンスに沿って操作して下さい。
ポイントはPackagesファイル内に記載されている.debファイルのURLを「counter.php?file=」という風に記述して、php経由でダウンロードされるようにすることです。
具体的な例を挙げますと、「./debs/OOO.deb」を「./debs/counter.php?file=OOO.deb」という風に記述させます。
※「Packages(.gz or .bz2)」があるディレクトリの下に「debs」フォルダがあって、その中にdebファイルがある状態です。
【脱獄アプリ開発】第3回 Google App Engineを使ったCydiaリポジトリの作成方法 | Will feel Tips【脱獄アプリ開発】第3回 Google App Engineを使ったCydiaリポジトリの作成方法 | Will feel Tips【脱獄アプリ開発】第3回 Google App Engineを使ったCydiaリポジトリの作成方法 | Will feel Tips
詳細は、以前紹介したこちらを参考にして下さい。

URLの書き換えは『Packages.bz2(ミラーRepo用にあえてgzから変更しています)』に圧縮する前に、Packagesファイル内を[sed]コマンドで行っています。
sed -i "s/\.\/debs\//\.\/debs\/counter\.php\?file\=/g" Packages
あとは『Packages.bz2』をRepoのサーバーにアップロードして完了です。

ダウンロードカウンタの確認

上手く設置が出来たら、「http://RepoのURL/download.php」にアクセスするとテーブルで表示されます。
そのままですと、誰でもアクセスできる状態なのでBasic認証を導入します。

Nginxを使用しているので、事前に準備が必要です。

yum install httpd-tools 
cd /etc/nginx
htpasswd -c .htpasswd ユーザー名
New password: パスワード
Re-type new password: パスワード
vi /etc/nginx/conf.d/default.conf
server {

###### 省略 ######

location ~ /apt/download\.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}

server {
listen 80;
root /var/www/wordpress/apt;
server_name cydia.ichitaso.com www.cydia.ichitaso.com;

location ~ /download\.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
}

location ~ /.*\.php$ {
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
auth_basic “Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
こちらを追加することでBasic認証が有効となります。

Apacheの場合は「.htaccess」と「.htpasswd」をディレクトリに設置して下さい。
参考:アクセス制限ベーシック認証~パスワードでページを守ろう~ – .htaccessの小技編 – futomi’s CGI Cafe

それでは最後にサーバーをリセットします。

/etc/init.d/mysqld restart
/etc/init.d/php-fpm restart
/etc/init.d/nginx restart
以上で終了です。お疲れ様でした!