如何为debian非免费创建一个离线存储库?

时间:2012-02-23 22:33:07

标签: linux debian packages

我正在使用debian squeeze并想为debian非自由分支创建一个离线存储库或cd / dvd。我浏览了一下互联网,所有我发现没有iso映像,也没有jidgo文件用于创建这样的映像所以我有想法从一个debian包服务器获取包使用:

 wget -r --no-parent -nH -A*all.deb,*any.deb,*i386.deb \
 ftp://debian.oregonstate.edu/debian/pool/non-free/

我知道我必须在我的*/etc/apt/sources.list*中使用file来指示本地存储库但是我如何实际创建一个以便apt或aptitude能够理解这一点?

1 个答案:

答案 0 :(得分:0)

(在质疑编辑中回答。转换为社区wiki答案。请参阅What is the appropriate action when the answer to a question is added to the question itself?

OP写道:

  

更新:通过一些丑陋的技巧,我能够从池和dist文件夹中提取所需的数据。

     

我使用解压缩的Package.gz来执行此操作:

grep '^Package\:.*' Packages|awk '{print $2}' >> Names.lst
grep '^Version\:.*' Packages|awk '{print $2}' >> Versions.lst
grep '^Architecture\:.*' Packages|awk '{print $2}' >> Arch.lst
     

使用vim我找到并删除文件Versions.lst中的':',并使用bash工具生成更短的Content.lst更容易解析:

paste Names.lst Versions.lst Arch.lst >> Content.lst
     

现在我这样做:

cat content.lst | while read line; \
do echo "$(echo $line|awk '{print $1}')\
_$(echo $line|awk '{print $2}')_$(echo $line|awk '{print $3}')";\
done >> content.lst.tmp && mv content.lst.tmp content.lst
     

它生成我需要的debian目录中的文件名。使用wget完成下载后,我找到了rsync所需的文件名。 mv在这里不起作用,因为我需要在Packages.gz中引用的结构:

cat content.lst |while read line; \
do find debian/ -type f -name ${line}.deb -exec \
rsync -rtpog -cisR {} debian2/ \; ;done 
rm -r debian && mv debian2 debian
     

要接收完整的dists树结构,我再次使用wget

wget -c -r --no-parent -nH -A*.bz2,*.gz,Release \
ftp://debian.oregonstate.edu/debian/dists/squeeze/non-free/binary-i386/
     

我认为我现在唯一要做的就是创建Contents.gz文件。

     

可以使用Contents.gz程序轻松创建apt-ftparchive文件:

apt-ftparchive contents > Contents-i386 && gzip -f Contents-i386