feed のサーバを作ってみる

ソフトウェアの追加/削除の、ネットワーク経由でソフトウェアをインストールが使えるように、りなざうテクノウに feed のサーバを作ってみる。
と、言うのも少し前に naismith さんが書かれてた feed の作り方が簡単そうだったので。
http://d.hatena.ne.jp/AllStarMoves/20050924/p4
あう、Packagesと、それを圧縮したPackages.gzも置いたけど、うまくいかない。パッケージ一覧は表示されるものの、それを選択してインストールすると必ず失敗しました。と出てしまう。ちと、悩み中。←解決した〜

feed のサーバのディレクトリの準備

うちは ~nyano/archives/slzaurus/ に ipk のパッケージを置いてあるんだけど、他の feed のサーバみたいに ~nyano/feed/ にしたいので、「ln -s archives/slzaurus feed」てな具合にシンボリックリンクを張った。

Packages ファイルの作り方

あとは ipk のパッケージに含まれる control.tar.gz 内の control ファイルを、パッケージの数だけ空行で区切って繋げただけの Packages って名前のテキストファイルを作る。
(最初、空行で区切らなくても Package: 行を見てくれるかと思って作ったら失敗した(汗))
ここで注意が必要で control ファイルに Filename: 行が含まれていないとインストールに失敗しちゃう。
さらにバージョンが違っても Package: 行が同じものが複数あると、やはりインストールに失敗してしまう。(さらに困ったことにインストールに失敗したパッケージは /home/zaurus 直下に放置されたままになる(汗))
あと Package: 行で始まらなければいけないみたいなので、Filename: 行を追加する場合は2行目以降に書かなければならない。

Packages ファイル自動生成スクリプト

てな訳で、その辺を踏まえた上で ipk を置いてあるディレクトリ内で実行すれば一発で Packages ファイルを作ってくれるシェルスクリプト「mkfeed.sh」をでっちあげてみた。control ファイルの末尾に改行が入らない場合も考慮して無駄に空行を2つ付けてるのは少しカッコ悪いけど(汗)

#!/bin/sh
if test -f ./mkfeed_rm.sh
then
    rm -f ./mkfeed_rm.sh
fi
for file in `ls ./*.ipk`
do
    echo $file
    tar zxf $file ./control.tar.gz
    if test -f ./control.tar.gz
    then
        tar zxf ./control.tar.gz ./control
        rm ./control.tar.gz
        if test -f ./control
        then
            ipkg=`grep '^Package: ' ./control | sed -e '/^Package: /s/Package: //'`
            echo "rm -f mkfeed_tmp.$ipkg" >> ./mkfeed_rm.sh
            if test -f ./mkfeed_tmp.$ipkg
            then
                rm ./mkfeed_tmp.$ipkg
            fi
            if grep "^Filename: " ./control
            then
                cat ./control >> ./mkfeed_tmp.$ipkg
            else
                grep "^Package: " ./control >> ./mkfeed_tmp.$ipkg
                echo "Filename: $file" >> ./mkfeed_tmp.$ipkg
                grep -v "^Package: " ./control >> ./mkfeed_tmp.$ipkg
            fi
            echo "" >> ./mkfeed_tmp.$ipkg
            echo "" >> ./mkfeed_tmp.$ipkg
            rm ./control
        fi
    fi
done
cat mkfeed_tmp.* > Packages
chmod +x ./mkfeed_rm.sh
ipkg=`./mkfeed_rm.sh`
rm ./mkfeed_rm.sh

すげぇアバウトなシェルスクリプトなんで、明らかな間違い以外のツッコミは無しで(汗)
で、naismith さんからのコメントを元にシェルスクリプト発見〜。ああ、ちゃんとした人が作ったものは綺麗だな〜。sed 使って Filename: 行挿入も考えたんだけど、改行が見苦しいかなとか思って grep -v とかに逃げてしまった(滝汗)
http://www.netmonks.ca/projects/opensource/openwrt/ipkg-make-index

ネットワーク経由でソフトウェアをインストール

TAKETYONがやったことないって言うてたので、やり方なんぞをメモ。今回作った feed のサーバのURL は「http://www.areanine.gr.jp/~nyano/feed/」、名前は何でもいいけど「りなざうテクノウ」とか入れてみた。

  1. 「ソフトウェアの追加/削除」の「ネットワーク経由でソフトウェア」を選択する。
  2. 右下の3つのアイコンの一番左にあるスイッチのアイコンを選択する。
  3. 「新規サーバー」ボタンを選択する。
  4. 「名前」に feed のサーバの名前を入れる。、「URL」に feed のサーバの URL を入れる
  5. 「サーバー」一覧から「りなざうテクノウ」を選択する。(青色で反転表示される)
  6. 右上の「OK」ボタンを選択する。
  7. パッケージ一覧が表示されるので、パッケージの左端の荷物のアイコンを選択すると、荷物の箱が開いたアイコン表示に変わる。これでインストールしたいパッケージを複数選択することができる。
  8. 右上の「OK」ボタンを選択すると、通常のインストールと同じくインストール方法を聞いてくるので、プログラムエリア(本体メモリー)、CF カード、SD カードなどを選択する。