[WBEL-devel] file by file check, RC2 vs 3WS
David Cox
david.e.cox@nasa.gov
Thu, 04 Dec 2003 12:25:14 -0500
--=-zamxxvRkTXK3GsrSbw+8
Content-Type: text/plain
Content-Transfer-Encoding: 7bit
I ran a check on whitebox rpm's vs RedHat-3WS looking for missing
files, executables with different dynamic links and different file
sizes.
The whitebox rpms look pretty good on completeness and library links. An
error log is attached. Tora is the only package with different linking.
emacs,grub and filesystem rpms can be fixed with
emacs and grub:
rpmbuild --define "_host i386-redhat-linux" --rebuild
filesystem:
rpmbuild --define "__debug_package 0" --rebuild
as pointed out by Michael Redinger on the rhel-rebuild mailing list.
File size differences, however, are pretty common. With a 10% threshold
there are about 3200 file size differences. About 2900 of them end with
.gz, and are mostly multi-language man pages.
But there are some larger binaries in /bin and /sbin that deserve a
closer look, e.g. /usr/sbin/kppp is 5 times larger in whitebox and has
suid root permissions, in RHEL the suid bit is not set.
Does anyone know if ownership/permissions are ever adjusted on an rpm
install, or are they always set correctly in the rpm file itself?
dave
PS. I've also attached the perl script that runs the check.
-------------------------------------------------------------------
David E. Cox david.e.cox@nasa.gov (757) 864-6658
-------------------------------------------------------------------
--=-zamxxvRkTXK3GsrSbw+8
Content-Disposition: attachment; filename=wblogs_nosize.txt
Content-Type: text/plain; name=wblogs_nosize.txt; charset=UTF-8
Content-Transfer-Encoding: 7bit
GConf2-devel-2.2.1-1.i386.rpm
Package contains extra file: ./usr/share/gtk-doc/html/gconf/left.png
Package contains extra file: ./usr/share/gtk-doc/html/gconf/up.png
Package contains extra file: ./usr/share/gtk-doc/html/gconf/right.png
Package contains extra file: ./usr/share/gtk-doc/html/gconf/home.png
coreutils-4.5.3-26.i386.rpm
Package contains extra file: ./usr/bin/su
emacs-21.3-4.i386.rpm
Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/emacsserver
Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux
Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/fns-21.3.1.el
Package contains extra file: ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/fakemail
Package contains extra file: ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/emacsserver
Package contains extra file: ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/sorted-doc
Package contains extra file: ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/movemail
Package contains extra file: ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/rcs2log
Package contains extra file: ./usr/libexec/emacs/21.3/i686-pc-linux-gnu
Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/hexl
Package contains extra file: ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/fns-21.3.1.el
Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/profile
Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/fakemail
Package contains extra file: ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/yow
Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/vcdiff
Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/movemail
Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/cvtmail
Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/rcs2log
Package contains extra file: ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/vcdiff
Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/yow
Package contains extra file: ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/cvtmail
Package contains extra file: ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/profile
Package contains extra file: ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/hexl
Package contains extra file: ./usr/libexec/emacs/21.3/i686-pc-linux-gnu/digest-doc
Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/digest-doc
Package is missing file: ./usr/libexec/emacs/21.3/i386-redhat-linux/sorted-doc
festival-1.4.2-18.i386.rpm
Package is missing file: ./usr/share/festival/etc/unknown_RedHatLinux
Package contains extra file: ./usr/share/festival/etc/unknown_Linux/audsp
Package contains extra file: ./usr/share/festival/etc/unknown_Linux
Package contains extra file: ./usr/share/festival/etc/unknown_Linux/.made
Package is missing file: ./usr/share/festival/etc/unknown_RedHatLinux/audsp
filesystem-2.2.1-3.i386.rpm
Package is missing file: ./usr/src/debug
foomatic-2.0.2-15.1.1.i386.rpm
Package contains extra file: ./usr/share/foomatic/db/source/printer/Dell-M5200.xml.dell
Package contains extra file: ./usr/share/foomatic/db/source/printer/Dell-S2500.xml.dell
grub-0.93-4.i386.rpm
Package is missing file: ./usr/share/grub/i386-redhat/e2fs_stage1_5
Package contains extra file: ./usr/share/grub/i386-pc/vstafs_stage1_5
Package is missing file: ./usr/share/grub/i386-redhat/stage1
Package is missing file: ./usr/share/grub/i386-redhat/xfs_stage1_5
Package is missing file: ./usr/share/grub/i386-redhat/ffs_stage1_5
Package is missing file: ./usr/share/grub/i386-redhat/reiserfs_stage1_5
Package is missing file: ./usr/share/grub/i386-redhat/minix_stage1_5
Package is missing file: ./usr/share/grub/i386-redhat/fat_stage1_5
Package contains extra file: ./usr/share/grub/i386-pc/stage2
Package contains extra file: ./usr/share/grub/i386-pc/stage1
Package contains extra file: ./usr/share/grub/i386-pc/jfs_stage1_5
Package contains extra file: ./usr/share/grub/i386-pc/reiserfs_stage1_5
Package contains extra file: ./usr/share/grub/i386-pc/ffs_stage1_5
Package contains extra file: ./usr/share/grub/i386-pc/xfs_stage1_5
Package contains extra file: ./usr/share/grub/i386-pc/e2fs_stage1_5
Package contains extra file: ./usr/share/grub/i386-pc/minix_stage1_5
Package is missing file: ./usr/share/grub/i386-redhat/jfs_stage1_5
Package is missing file: ./usr/share/grub/i386-redhat/stage2
Package is missing file: ./usr/share/grub/i386-redhat
Package is missing file: ./usr/share/grub/i386-redhat/vstafs_stage1_5
Package contains extra file: ./usr/share/grub/i386-pc
Package contains extra file: ./usr/share/grub/i386-pc/fat_stage1_5
tora-1.3.9.2-1.i386.rpm
Missing link in ./usr/lib/tora/toanalyze.tso: libgcc_s.so.1
Missing link in ./usr/lib/tora/toanalyze.tso: libm.so.6
Missing link in ./usr/lib/tora/toanalyze.tso: libstdc++.so.5
Missing link in ./usr/lib/tora/tobrowser.tso: libgcc_s.so.1
Missing link in ./usr/lib/tora/tobrowser.tso: libm.so.6
Missing link in ./usr/lib/tora/tobrowser.tso: libstdc++.so.5
Missing link in ./usr/lib/tora/tochart.tso: libgcc_s.so.1
Missing link in ./usr/lib/tora/tochart.tso: libm.so.6
Missing link in ./usr/lib/tora/tochart.tso: libstdc++.so.5
Missing link in ./usr/lib/tora/toeditextensions.tso: libgcc_s.so.1
Missing link in ./usr/lib/tora/toeditextensions.tso: libm.so.6
Missing link in ./usr/lib/tora/toeditextensions.tso: libstdc++.so.5
Missing link in ./usr/lib/tora/toextract.tso: libgcc_s.so.1
Missing link in ./usr/lib/tora/toextract.tso: libm.so.6
Missing link in ./usr/lib/tora/toextract.tso: libstdc++.so.5
Missing link in ./usr/lib/tora/toproject.tso: libgcc_s.so.1
Missing link in ./usr/lib/tora/toproject.tso: libm.so.6
Missing link in ./usr/lib/tora/toproject.tso: libstdc++.so.5
Missing link in ./usr/lib/tora/toqsqlconnection.tso: libgcc_s.so.1
Missing link in ./usr/lib/tora/toqsqlconnection.tso: libm.so.6
Missing link in ./usr/lib/tora/toqsqlconnection.tso: libstdc++.so.5
Missing link in ./usr/lib/tora/toresult.tso: libgcc_s.so.1
Missing link in ./usr/lib/tora/toresult.tso: libm.so.6
Missing link in ./usr/lib/tora/toresult.tso: libstdc++.so.5
Missing link in ./usr/lib/tora/tosqledit.tso: libgcc_s.so.1
Missing link in ./usr/lib/tora/tosqledit.tso: libm.so.6
Missing link in ./usr/lib/tora/tosqledit.tso: libstdc++.so.5
Missing link in ./usr/lib/tora/totemplate.tso: libgcc_s.so.1
Missing link in ./usr/lib/tora/totemplate.tso: libm.so.6
Missing link in ./usr/lib/tora/totemplate.tso: libstdc++.so.5
Missing link in ./usr/lib/tora/towidget.tso: libgcc_s.so.1
Missing link in ./usr/lib/tora/towidget.tso: libm.so.6
Missing link in ./usr/lib/tora/towidget.tso: libstdc++.so.5
Missing link in ./usr/lib/tora/toworksheet.tso: libgcc_s.so.1
Missing link in ./usr/lib/tora/toworksheet.tso: libm.so.6
Missing link in ./usr/lib/tora/toworksheet.tso: libstdc++.so.5
xemacs-21.4.13-2.ent.i386.rpm
Package contains extra file: ./usr/bin/xemacs-21.4.13-3fb307ff.dmp
Package is missing file: ./usr/bin/xemacs-21.4.13-3f6f23d8.dmp
--=-zamxxvRkTXK3GsrSbw+8
Content-Disposition: attachment; filename=testrebuild.pl
Content-Type: text/x-perl; name=testrebuild.pl; charset=UTF-8
Content-Transfer-Encoding: 7bit
#!/usr/bin/perl -w
# Directories of binary rpm files:
$RH_RPMS = "/usr/local/rhel-3ws/RPMS/";
$WB_RPMS = "/usr/local/whitebox-rc2/RPMS/";
# Size difference to trigger error, .1 = plus/minus 10%
$SizeError=.10;
# Temporary working directories
# Careful where these point, they get a "rm -rf" cleaning!
$RHTMP="/tmp/RH-$$";
$WBTMP="/tmp/WB-$$";
# Grab filenames on all the redhat rpms
opendir(DIR,$RH_RPMS);
@allrpms= grep (/rpm$/, readdir(DIR) );
closedir(DIR);
foreach $rpm (sort @allrpms){
if (! (-e "$WB_RPMS/$rpm") ) {
print " No equivalent rebuild for $rpm \t Skipping\n";
next;
}
# Initialize
%allfiles=(); %RHhash=(); %WBhash=();
$fileproblems=0; $libproblems=0;
system("rm -rf $RHTMP;mkdir $RHTMP");
system("rm -rf $WBTMP;mkdir $WBTMP");
# Extract RPMS
system("cd $RHTMP/; rpm2cpio $RH_RPMS/$rpm | cpio -id --no-absolute-filenames --quiet");
system("cd $WBTMP/; rpm2cpio $WB_RPMS/$rpm | cpio -id --no-absolute-filenames --quiet");
# Parse name/size info
@RHnamesize=`cd $RHTMP/; find ./ -printf "%p:_:%s\n"`;
@WBnamesize=`cd $WBTMP/; find ./ -printf "%p:_:%s\n"`;
for ($i=0;$i<@RHnamesize;$i++){
($file,$size)=split(/:_:/,$RHnamesize[$i]);
$RHhash{"$file"}=$size;
$allfiles{"$file"}=1;
}
for ($i=0;$i<@WBnamesize;$i++){
($file,$size)=split(/:_:/,$WBnamesize[$i]);
$WBhash{"$file"}=$size;
$allfiles{"$file"}=1;
}
# Print and tag file errors if appropraite
printf ("%-50s\t", $rpm);
foreach $file (keys %allfiles){
if (!(exists $RHhash{"$file"})){
print "\n\tPackage contains extra file: $file";
$fileproblems=1;
}
elsif (!(exists $WBhash{"$file"})){
print "\n\tPackage is missing file: $file";
$fileproblems=1;
}
else {
if ($RHhash{"$file"}>0){
$ratio=($WBhash{"$file"})/($RHhash{"$file"})}
else{
$ratio=1-$WBhash{"$file"}; # Negative ratios indicate filesize vs. zero in RedHat
}
if (($ratio-1)*($ratio-1)>($SizeError*$SizeError)) {
printf("\n\tSize Ratio: %3.2f on file:%s",$ratio,$file);
$fileproblems=1;
};
}
}
# Select executable files
@RHexec=`cd $RHTMP/; find ./ -perm +111 -type f -print`;
# Check library dependencies
foreach $executable (@RHexec) {
chop $executable;
# Move on if no equivalent binary exists in rebuild
if (! (-e "$WBTMP/$executable") ) {next;}
# Get shared libs
@RHlibs=`ldd $RHTMP/$executable`;
@WBlibs=`ldd $WBTMP/$executable`;
# Clean up ldd output
$RHlibline=join('',(sort @RHlibs));
$WBlibline=join('',(sort @WBlibs));
$RHlibline=~ s/=>(.*)(\n)/\n/g; $RHlibline=~ s/(\s+)/ /g;
$WBlibline=~ s/=>(.*)(\n)/\n/g; $WBlibline=~ s/(\s+)/ /g;
@RHlibs=split(/ /,$RHlibline);
@WBlibs=split(/ /,$WBlibline);
# Print and tag library errors
foreach $lib (@RHlibs){
$searchpat=$lib;
$searchpat =~ s/\+/\\\+/g;
$searchpat =~ s/\./\\\./g;
unless ($WBlibline =~ (/$searchpat/)){
print "\n\tMissing link in $executable:\t$lib";$libproblems=1;
}
}
foreach $lib (@WBlibs){
$searchpat=$lib;
$searchpat =~ s/\+/\\\+/g;
$searchpat =~ s/\./\\\./g;
unless ($RHlibline =~ (/$searchpat/)){
print "\n\tExtra link in $executable:\t$lib";$libproblems=1;
}
}
}
if ($fileproblems || $libproblems) { print "\n\n";} else {print "MATCH\n";}
}
--=-zamxxvRkTXK3GsrSbw+8--