|
|
InstallAnywhere claims my install package is corrupt, but the package is fine. |
| That message is misleading. It can occur under a number of conditions. 2001-Jan-31 4:31pm gyles19@visi.com | |
From: Gary Sanders
Folks,
I found a problem with the JB4 _installer_. The problem manifests
itself as an error message that your download was corrupted, but the
problem is not that the download got corrupted. The problem is that the
InstallAnywhere script tries to use enormous block sizes, and it
corrupts the files when there isn't enough free memory available on your
system - and increasing the swap or tmp space does NOT resolve the
problem!
The InstallAnywhere installer is actually a script follwed by padding,
followed by the JVM ( as a binary, compressed, tar file ), then followed
by JB4 itself ( also a binary, compressed, tar file ). The script
portion uses dd with a block size of 32768 to extract the binary, but
that includes some padding or the JB4 file at the end of it so they call
it again, but this time with one huge block size of approx. 16MB to trim
it to it's proper size. The 32768 makes it really slow, because the
actual block size for most Linux systems is 1024, but it's the approx.
16MB block that "dd" or the Linux kernal barf on.
The solution is simple. First copy your original "dd" file (
/usr/bin/dd ) to a safe location - you'll want it back later. Then,
just for the installation of this file, replace "dd" with the script
below ( and don't forget to make it executable ( chmod +x dd )). This
script looks at the block sizes and count passed in and determines the
total bytes desired. Then it splits that up into blocks of 1024 with
the appropriate remainder at the end if needed. Not only does it work,
it even runs faster since the block size is the same as that of the OS
itself.
When the install is finished, be sure to copy your original "dd" back
into place.
#!/usr/bin/perl
foreach $arg ( @ARGV ) {
($k,$v) = split( "=", $arg );
$args{$k}=$v;
}
$totalBytes = $args{'bs'} * $args{'count'};
$skip = $args{'skip'} ;
open( INFILE, $args{'if'} ) || die;
open( OUTFILE, "> $args{'of'}" ) || die;
( seek( INFILE, ( $args{'skip'} * $args{'bs'} ), 0 ) || die )
if ( $args{'skip'} > 0 );
$tbs = ( $totalBytes > 1024 )? 1024 : $totalBytes;
while ( $r = read( INFILE, $data, $tbs ) ) {
syswrite( OUTFILE, $data, $r );
$totalBytes -= $r;
$tbs = ( $totalBytes > 1024 )? 1024 : $totalBytes;
}
close( INFILE ) || die;
close( OUTFILE ) || die;
2001-Jan-31 4:32pm gyles19@visi.com | |
| [Append to This Answer] | |
| 2001-Jan-31 4:32pm |
| Previous: |
|
| Next: |
|
| ||||||||
|
Java Community
Java Tools |
Code Central JB OpenTools |
Community Recent Threads |
Borland Chat Chat FAQ |
||||||||||||||
|
Feature Matrices 3.0 | 3.5 | 4.0 5.0 | 6.0 | 7.0 |
Shop for JBuilder |
JBuilder Downloads and reg keys |
Report Piracy | ||||||||||||||
|
Online Manuals 4.0 | 5.0 | 6.0 7.0 |
Borland DevSupport's Bug/RFE Form Quality Central Client |
JB Patches & Updates |
JBuilder FAQs TIs | ||||||||||||||
|
JBuilder Newsgroups |
Tamaracka's News Archive |
Mr. Haki's JBuilder Machine |
JGuru's JBuilder FAQ |
||||||||||||||
|
Sun's Bug Parade |
|||||||||||||||||
|
|||||||||||||||||