Zimbra Desktop 2 Storage Migration: Difference between revisions
Davidfraser (talk | contribs) m (Fix mediawiki syntax) |
Davidfraser (talk | contribs) (Added sourcecode for Java gzip/gunzip) |
||
Line 16: | Line 16: | ||
* The file store uses different names for the same mail items | * The file store uses different names for the same mail items | ||
* Zimbra Desktop 2 uses gzip for all mail items over (approximately) 150kb; Zimbra Desktop 1 doesn't | * Zimbra Desktop 2 uses gzip for all mail items over (approximately) 150kb; Zimbra Desktop 1 doesn't | ||
* The gzip compression doesn't seem to exactly match that produced by the command-line gzip tool at any setting, so | * The gzip compression doesn't seem to exactly match that produced by the command-line gzip tool at any setting, so we need to use the Java gzip classes to do compression | ||
* Zimbra Desktop 1 seems to store some strange items | * Zimbra Desktop 1 seems to store some strange items | ||
== Scripts == | == Scripts == | ||
=== Java gzip implementation === | |||
<pre> | |||
import java.util.zip.GZIPOutputStream; | |||
import java.io.FileOutputStream; | |||
import java.io.FileInputStream; | |||
import java.io.IOException; | |||
public class gzip { | |||
public static void main(String args[]) { | |||
if(args.length<=0) | |||
{ | |||
System.out.println("Please enter the valid file name"); | |||
} | |||
else | |||
{ | |||
try | |||
{ | |||
String inFilename = args[0]; | |||
String outFilename = args[1]; | |||
GZIPOutputStream out = new GZIPOutputStream(new FileOutputStream(outFilename)); | |||
FileInputStream in = new FileInputStream(inFilename); | |||
// Transfer bytes from the input file to the gzip output stream | |||
byte[] buf = new byte[1024]; | |||
int len; | |||
while ((len = in.read(buf)) > 0) | |||
{ | |||
out.write(buf, 0, len); | |||
} | |||
in.close(); | |||
out.finish(); | |||
out.close(); | |||
} | |||
catch(IOException e) | |||
{ | |||
System.out.println("Exception has been thrown" + e); | |||
} | |||
} | |||
} | |||
} | |||
</pre> | |||
=== Java gunzip implementation === | |||
<pre> | |||
import java.util.zip.GZIPInputStream; | |||
import java.io.FileOutputStream; | |||
import java.io.FileInputStream; | |||
import java.io.IOException; | |||
public class gunzip { | |||
public static void main(String args[]) { | |||
if(args.length<=0) | |||
{ | |||
System.out.println("Please enter the valid file name"); | |||
} | |||
else | |||
{ | |||
try | |||
{ | |||
String inFilename = args[0]; | |||
String outFilename = args[1]; | |||
GZIPInputStream gzipInputStream = | |||
new GZIPInputStream(new FileInputStream(inFilename)); | |||
FileOutputStream out = new FileOutputStream(outFilename); | |||
// Transfer bytes from the compressed file to the output file | |||
byte[] buf = new byte[1024]; | |||
int len; | |||
while ((len = gzipInputStream.read(buf)) > 0) | |||
{ | |||
out.write(buf, 0, len); | |||
} | |||
gzipInputStream.close(); | |||
out.close(); | |||
} | |||
catch(IOException e) | |||
{ | |||
System.out.println("Exception has been thrown" + e); | |||
} | |||
} | |||
} | |||
} | |||
</pre> | |||
=== Makefile === | |||
<pre> | |||
%.class: %.java | |||
javac $< | |||
%.manifest: %.java | |||
echo "Main-Class: $(shell basename $<)" > $@ | |||
%.jar: %.manifest %.class | |||
jar -cfm $@ $+ | |||
all: gunzip.jar gzip.jar | |||
</pre> |
Revision as of 16:17, 25 February 2010
Zimbra Desktop 2 Storage Migration
These are unofficial notes on how the store for items in Zimbra Desktop 2 differs from that in Zimbra Desktop 1, designed to aid in migration.
The rationale behind this is:
- Zimbra Desktop 2 requires a totally fresh setup; no migration path from ZD1 is provided
- I am living in a country with slow and expensive bandwidth
- Our mail server is in a country with fast and cheap bandwidth
So my plan is:
- Install Zimbra Desktop 2 somewhere with fast and cheap bandwidth to our mail server
- Set up the same accounts as on Zimbra Desktop 1
- Use rsync to efficiently transfer the Zimbra Desktop 2 setup without having to retransmit all messages
Complications that mean the installations don't exactly match:
- The file store uses different names for the same mail items
- Zimbra Desktop 2 uses gzip for all mail items over (approximately) 150kb; Zimbra Desktop 1 doesn't
- The gzip compression doesn't seem to exactly match that produced by the command-line gzip tool at any setting, so we need to use the Java gzip classes to do compression
- Zimbra Desktop 1 seems to store some strange items
Scripts
Java gzip implementation
import java.util.zip.GZIPOutputStream; import java.io.FileOutputStream; import java.io.FileInputStream; import java.io.IOException; public class gzip { public static void main(String args[]) { if(args.length<=0) { System.out.println("Please enter the valid file name"); } else { try { String inFilename = args[0]; String outFilename = args[1]; GZIPOutputStream out = new GZIPOutputStream(new FileOutputStream(outFilename)); FileInputStream in = new FileInputStream(inFilename); // Transfer bytes from the input file to the gzip output stream byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { out.write(buf, 0, len); } in.close(); out.finish(); out.close(); } catch(IOException e) { System.out.println("Exception has been thrown" + e); } } } }
Java gunzip implementation
import java.util.zip.GZIPInputStream; import java.io.FileOutputStream; import java.io.FileInputStream; import java.io.IOException; public class gunzip { public static void main(String args[]) { if(args.length<=0) { System.out.println("Please enter the valid file name"); } else { try { String inFilename = args[0]; String outFilename = args[1]; GZIPInputStream gzipInputStream = new GZIPInputStream(new FileInputStream(inFilename)); FileOutputStream out = new FileOutputStream(outFilename); // Transfer bytes from the compressed file to the output file byte[] buf = new byte[1024]; int len; while ((len = gzipInputStream.read(buf)) > 0) { out.write(buf, 0, len); } gzipInputStream.close(); out.close(); } catch(IOException e) { System.out.println("Exception has been thrown" + e); } } } }
Makefile
%.class: %.java javac $< %.manifest: %.java echo "Main-Class: $(shell basename $<)" > $@ %.jar: %.manifest %.class jar -cfm $@ $+ all: gunzip.jar gzip.jar