2000年11月16日
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"