gen-package-pages 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306
  1. #!/usr/bin/perl -w
  2. # $OpenBSD: gen-package-pages,v 1.23 2017/01/23 10:50:25 phessler Exp $
  3. # Copyright (c) 2004 Michael Coulter
  4. #
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. # notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. # notice, this list of conditions and the following disclaimer in the
  12. # documentation and/or other materials provided with the distribution.
  13. #
  14. # THIS SOFTWARE IS PROVIDED BY THE OPENBSD PROJECT AND CONTRIBUTORS
  15. # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  16. # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  17. # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OPENBSD
  18. # PROJECT OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  19. # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  20. # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  21. # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  22. # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  23. # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  24. # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  25. # Requires:
  26. # all packages under some $pkgpath, in <arch>/*.tgz
  27. # Outputs result in html/*
  28. use strict;
  29. use OpenBSD::PackageInfo;
  30. use OpenBSD::PackageName;
  31. use OpenBSD::PackageLocator;
  32. use OpenBSD::PackingList;
  33. use subs qw(dprint gen_arch_page gen_pkg_page gen_pkg_listing_page getfile
  34. htmlfile gen_index_page arch_body arch_foot arch_head index_head
  35. index_foot pkg_list pkg_long);
  36. our $osrev = "6.6";
  37. our $debug = 0;
  38. our $html;
  39. my @arches = qw(amd64);
  40. my $pkgpath = "/home/ftp/pub/OpenBSD/$osrev/packages";
  41. my $htmlbase = "html";
  42. mkdir($htmlbase);
  43. foreach (@arches) {
  44. mkdir "$htmlbase/$_";
  45. }
  46. gen_index_page(@arches);
  47. foreach (@arches) { gen_arch_page($_); }
  48. sub dprint
  49. {
  50. if($debug) { print @_; }
  51. }
  52. sub getdesc
  53. {
  54. my $fname = shift;
  55. local $_;
  56. open(my $f, '<', $fname) or die "No such file $fname\n";
  57. $_ = <$f>;
  58. my $result = join('', <$f>);
  59. close($f);
  60. return $result;
  61. }
  62. sub getline
  63. {
  64. my $fname = shift;
  65. open(my $f, '<', $fname) or die "No such file $fname\n";
  66. my $line = <$f>;
  67. chomp($line);
  68. close($f);
  69. return $line;
  70. }
  71. sub htmlfile
  72. {
  73. my $fname = "$htmlbase/".shift;
  74. open(my $f, '>', $fname) or die "Cannot write to $fname\n";
  75. return $f;
  76. }
  77. sub gen_arch_page
  78. {
  79. my $arch = shift;
  80. print "generating page for $arch\n";
  81. my $archfile = htmlfile("$arch.html");
  82. print $archfile arch_head($arch);
  83. opendir(my $pkgs, "$pkgpath/$arch") || die "cannot get package listing for $arch: $!\n";
  84. foreach my $file (sort(readdir($pkgs))) {
  85. next if ($file =~ /^\./);
  86. next if ($file =~ /^index.txt$/);
  87. next if ($file =~ /^pkglocatedb$/);
  88. next if ($file =~ /^SHA256$/);
  89. dprint "generating package for $arch/$file\n";
  90. my $package = OpenBSD::PackageLocator->find("$pkgpath/$arch/$file");
  91. if(! $package) { die "package error: $pkgpath/$arch/$file $!\n"; }
  92. my $dir = $package->info();
  93. $package->close();
  94. print $archfile arch_body($arch,$file,getline($dir.DESC));
  95. gen_pkg_page($arch,$file,$dir);
  96. $package->wipe_info();
  97. }
  98. closedir($pkgs);
  99. print $archfile arch_foot();
  100. close($archfile);
  101. }
  102. sub gen_pkg_page
  103. {
  104. my ($arch,$pkg, $dir) = @_;
  105. my $long = htmlfile("$arch/$pkg-long.html");
  106. my $pkg_info = getdesc($dir.DESC);
  107. $pkg_info =~ s/\&/\&amp\;/g;
  108. $pkg_info =~ s/\</\&lt\;/g;
  109. $pkg_info =~ s/\>/\&gt\;/g;
  110. print $long pkg_long($arch,$pkg,$pkg_info);
  111. close($long);
  112. gen_pkg_listing_page($arch,$pkg,$dir);
  113. }
  114. sub gen_pkg_listing_page
  115. {
  116. my ($arch,$pkg,$dir) = @_;
  117. my $cont = htmlfile("$arch/$pkg-contents.html");
  118. my $pkg_info;
  119. my $plist = OpenBSD::PackingList->fromfile($dir.CONTENTS, \&OpenBSD::PackingList::FilesOnly);
  120. die "Bad packing list: $!\n" unless defined $plist;
  121. for my $item (@{$plist->{items}}) {
  122. next unless $item->IsFile();
  123. $pkg_info .= $item->fullname() . "\n";
  124. }
  125. if (!$pkg_info) {
  126. $pkg_info = "empty packing list";
  127. }
  128. print $cont pkg_list($arch,$pkg,$pkg_info);
  129. close($cont);
  130. }
  131. sub gen_index_page
  132. {
  133. my @arches = @_;
  134. my $index = htmlfile("index.html");
  135. print $index index_head();
  136. foreach (@arches) {
  137. print $index "<a href=\"$_.html\">$_</a>\n";
  138. }
  139. print $index index_foot();
  140. close($index);
  141. }
  142. exit(0);
  143. sub arch_body
  144. {
  145. my($arch,$file,$comment) = @_;
  146. return <<"EOF";
  147. <tr>
  148. <td><b><a href=$arch/$file-long.html>$file</a></b></td>
  149. <td>&nbsp&nbsp&nbsp<i>$comment</i></td>
  150. <td>[ <a href=ftp://ftp.libertybsd.net/pub/LibertyBSD/$osrev/packages/$arch/$file>FTP Site</a> ]</td>
  151. <td>[ <a href=http://127.0.0.1:8080/ipns/libertybsd.net/pub/LibertyBSD/$osrev/packages/$arch/$file>IPFS Site</a> ]</td>
  152. <td>[ <a href=https://ipfs.io/ipns/libertybsd.net/pub/LibertyBSD/$osrev/packages/$arch/$file>Gateway</a> ]</td>
  153. <td>[ <a href=https://libertybsd.net/pub/LibertyBSD/$osrev/packages/$arch/$file>HTTPS Site</a> ]</td>
  154. </tr>
  155. EOF
  156. }
  157. sub arch_foot
  158. {
  159. return <<"EOF";
  160. </table><hr></body></html>
  161. EOF
  162. }
  163. sub arch_head
  164. {
  165. my $arch = shift;
  166. return <<"EOF";
  167. <html>
  168. <body BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#23238E">
  169. <title>LibertyBSD Packages ($osrev/$arch)</title>
  170. <img src=https://libertybsd.net/LibertyLogo_small.png><br>
  171. <font color=#e00000><h2>Packages</h2></font>
  172. The following table is a listing of the packages currently available for LibertyBSD
  173. <font color=#e00000><b>$osrev</b></font>
  174. on the <font color=#e00000><b>$arch</b></font> platform. Make sure you've got
  175. the right version and platform -- chaos will ensue if you are in the wrong
  176. area.
  177. <br><br><hr>
  178. <table>
  179. EOF
  180. }
  181. sub index_head
  182. {
  183. return <<"EOF";
  184. <html><title>LibertyBSD Packages - Architecture
  185. Selection for LibertyBSD $osrev</title>
  186. <body BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#23238E">
  187. <img src=https://libertybsd.net/LibertyLogo_small.png><br>
  188. <h2><font color="#e00000">Packages - Architecture Selection for LibertyBSD $osrev</font></h2>
  189. Please select the architecture for which you wish to download a package.<br><br><center><h2>
  190. EOF
  191. }
  192. sub index_foot
  193. {
  194. return <<"EOF";
  195. <br><br><hr></table></body></html>
  196. EOF
  197. }
  198. sub pkg_list
  199. {
  200. my ($arch,$pkg,$pkg_info) = @_;
  201. return <<"EOF";
  202. <html><title>LibertyBSD Package Details - $pkg</title>
  203. <body BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#23238E">
  204. <img src=https://libertybsd.net/LibertyLogo_small.png><br>
  205. <h2><font color=#e0000>Package Information for $pkg ($arch)</font></h2>
  206. [ <a href=ftp://ftp.libertybsd.net/pub/LibertyBSD/$osrev/packages/$arch/$pkg>FTP</a> ]
  207. [ <a href=http://127.0.0.1:8080/ipns/libertybsd.net/pub/LibertyBSD/$osrev/packages/$arch/$pkg>IPFS</a> ]
  208. [ <a href=https://ipfs.io/ipns/libertybsd.net/pub/LibertyBSD/$osrev/packages/$arch/$pkg>Gateway</a> ]
  209. [ <a href=https://libertybsd.net/pub/LibertyBSD/$osrev/packages/$arch/$pkg>HTTPS</a> ]
  210. [ <a href=$pkg-contents.html>Package Contents</a> ]
  211. <br><br><hr><br><pre>
  212. $pkg_info
  213. </pre><hr></body></html>
  214. EOF
  215. }
  216. sub pkg_long
  217. {
  218. my ($arch,$pkg,$pkg_info) = @_;
  219. return <<"EOF";
  220. <html><title>LibertyBSD Package Details - $pkg</title>
  221. <body BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#23238E">
  222. <img src=https://libertybsd.net/LibertyLogo_small.png><br>
  223. <h2><font color=#e0000>Package Information for $pkg ($arch)</font></h2>
  224. [ <a href=ftp://ftp.libertybsd.net/pub/LibertyBSD/$osrev/packages/$arch/$pkg>FTP</a> ]
  225. [ <a href=http://127.0.0.1:8080/ipns/libertybsd.net/pub/LibertyBSD/$osrev/packages/$arch/$pkg>IPFS</a> ]
  226. [ <a href=https://ipfs.io/ipns/libertybsd.net/pub/LibertyBSD/$osrev/packages/$arch/$pkg>Gateway</a> ]
  227. [ <a href=https://libertybsd.net/pub/LibertyBSD/$osrev/packages/$arch/$pkg>HTTPS</a> ]
  228. [ <a href=$pkg-contents.html>Package Contents</a> ]
  229. <br><br><hr><br><pre>
  230. $pkg_info
  231. </pre><hr></body></html>
  232. EOF
  233. }