Debianのパッケージ一覧ファイル

Debian の apt-get などのコマンドはサーバから Packages.gz を持ってきて
取得可能なパッケージの一覧を得るようだ.
そこで,ローカルにある .deb パッケージから Packages を作るスクリプトを書いてみた.

/var/www/debian/dists/potato/main/binary-i386/hoge
を /usr/local/archives/Debian へのシンボリックリンクとして,
このスクリプトの出力を gzip で圧縮して Packages.gz として,
/var/www/debian/dists/potato/main/binary-i386/Packages.gz
に置くとうまくいきそう.ファイルサイズがないと,
ダウンロードはするけどサイズが違うとかぬかしてうまくいかなかった.

takayuki@sanapon:~$ cd /var/www/debian/
takayuki@sanapon:/var/www/debian$ sudo ln -s /usr/local/archives/Debian dists/potato/main
/binary-i386/hoge
takayuki@sanapon:/var/www/debian$ ~/bin/MakePakages.pl dists/potato/main/binary-i386/hoge
/*.deb | gzip > /tmp/Packages.gz
takayuki@sanapon:/var/www/debian$ sudo mv /tmp/Packages.gz dists/potato/main/binary-i386/

それから,Debian のサイトからダウンロードしたファイルは,
ファイル名に “:” が含まれると,”%3a” に変換されて,
この変換済みのファイル名を元に Packages.gz を作るとうまくいかないので
元に戻すスクリプトを作った.

#!/usr/bin/perl
while ($ARGV[0]) {
if ($ARGV[0] =~ s/%3a/{%3a,:}/) {
print "mv $ARGV[0]\n";
system "mv $ARGV[0]";
}
shift;
}

/etc/apt/source.list には

http://www.mizuno.or.jp/debian potato main

を先頭に追加するべし.しかし,もっとシンプルにできんのかねえ.

さらにこんな cron を書いてみた.ちゃんと動くかな?

#!/usr/bin/perl
system "apt-get update";
system "apt-get -y upgrade";
chdir "/var/cache/apt/archives";
@deb = `ls *.deb`;
if (@deb == 0) {
exit;
}
foreach $i (@deb) {
chomp $i;
}
system "~takayuki/bin/Colon.pl @deb";
system "mv @deb /usr/local/archives/Debian";
chdir "/var/www/debian";
system "~takayuki/bin/MakePackages.pl dists/potato/main/binary-i386/hoge/@deb
| gzip >> dists/potato/main/binary-i386/Packages.gz"
たぽ
  • たぽ
  • カレン(ST206 3S-GE VVT-i)、BRZ(ZC6 RAエアコン有)でサーキットを走ってます。
    クルマ弄りは基本的にDIY。そのため(?)にガレージ付きの家建てました。

    数年前から登山にも目覚め、時々アウトドアな日記・動画もアップしてます。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください