diff options
Diffstat (limited to 'tools/gencryptofiles')
-rwxr-xr-x | tools/gencryptofiles | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/tools/gencryptofiles b/tools/gencryptofiles new file mode 100755 index 000000000..cfa11ee2b --- /dev/null +++ b/tools/gencryptofiles @@ -0,0 +1,115 @@ +#!/usr/bin/perl + +#- Mandriva cryptographic package hdlist and depslist generation tools. +#- Copyright (C) 1999-2005 Mandriva (fpons@mandriva.com) +#- +#- This program is free software; you can redistribute it and/or modify +#- it under the terms of the GNU General Public License as published by +#- the Free Software Foundation; either version 2, or (at your option) +#- any later version. +#- +#- This program is distributed in the hope that it will be useful, +#- but WITHOUT ANY WARRANTY; without even the implied warranty of +#- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#- GNU General Public License for more details. +#- +#- You should have received a copy of the GNU General Public License +#- along with this program; if not, write to the Free Software +#- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +#- usage: gencryptofiles <crypto_dir> +#- build an hdlist and depslist file for crypto, need rpmtools also. + +my %resolver = ( + '/bin/sh' => 'bash', + '/bin/bash' => 'bash', + '/usr/bin/perl' => 'perl', + '/usr/bin/perl5' => 'perl', + + 'libBrokenLocale.so' => 'glibc', + 'libICE.so' => 'XFree86-libs', + 'libSM.so' => 'XFree86-libs', + 'libX11.so' => 'XFree86-libs', + 'libXext.so' => 'XFree86-libs', + 'libXmu.so' => 'XFree86-libs', + 'libXpm.so' => 'xpm', + 'libXt.so' => 'XFree86-libs', + 'libc.so.6' => 'glibc', + 'libgdbm.so' => 'gdbm', + 'libgpm.so' => 'gpm', + 'libm.so' => 'glibc', + 'libncurses.so' => 'ncurses', + 'libnsl.so' => 'glibc', + 'libpam.so' => 'pam', + 'libpthread.so' => 'glibc', + 'libreadline.so' => 'readline', + 'libstdc++-libc6.1-2.so' => 'libstdc++', + 'libstdc++.so' => 'libstdc++-compat', + 'libutil.so' => 'glibc', + 'libz.so' => 'zlib', + 'smtpdaemon' => 'postfix', + ); + +sub gendepslist_crypto { + my ($dir) = @_; + my %depslist; + + #- get information about each rpm. + local *DIR; + opendir DIR, $dir or die "cannot open directory: $!\n"; + while ($_ = readdir DIR) { + my ($key) = /(.*)\..*\.rpm$/ or next; + my ($name) = /(.*)-[^-]*-[^-]*-/; + + my $size = `rpm -qp --queryformat="%{SIZE}" $dir/$_`; + my @filelist = split "\n", `rpm -qpl $dir/$_`; + my @requires = split "\n", `rpm -qpR $dir/$_`; + + $depslist{$key} = { + key => $key, + size => $size, + filelist => \@filelist, + requires => \@requires, + deps => [], + }; + + foreach (@filelist) { + $resolver{$_} = $name; + m|.*/([^/]*)$| and $resolver{$1} = $name; + } + } + close DIR; + + #- resolve the dependancies. + foreach my $pkg (values %depslist) { + foreach (@{$pkg->{requires}}) { + $resolver{$_} and push(@{$pkg->{deps}}, $resolver{$_}), next; + m|^([^\s\(]*)| and $resolver{$1} and push(@{$pkg->{deps}}, $resolver{$1}), next; + m|^.*/([^/\s\(]*)| and $resolver{$1} and push(@{$pkg->{deps}}, $resolver{$1}), next; + m|^([^\s\(]*\.so)| and $resolver{$1} and push(@{$pkg->{deps}}, $resolver{$1}), next; + m|^.*/([^\s\(]*\.so)| and $resolver{$1} and push(@{$pkg->{deps}}, $resolver{$1}), next; + m|^([\w-]*)(?:\s+.*)$| and push(@{$pkg->{deps}}, $1); #- last and default to package name. + } + } + + #- build depslist-crypto file. + local *F; + open F, ">$dir/depslist-crypto" or die "cannot open depslist-crypto file for writing: $!\n"; + foreach (values %depslist) { + my %deps; + @deps{@{$_->{deps}}} = (); + print F "$_->{key} $_->{size} ", join(" ", keys %deps), "\n"; + } + close F; +} + +sub main { + my ($dir) = @_; + -d $dir or die "usage: gencryptofiles <crypto_dir>\n"; + -x "/usr/bin/genhdlist_cz2" or die "I need rpmtools to work (ie /usr/bin/genhdlist_cz2)\n"; + + print `genhdlist_cz2 -o $dir/hdlist-crypto.cz2 $dir`; + gendepslist_crypto($dir); +} + +main(@ARGV); |