craigwblake / redline

Pure Java Rpm Library
http://redline-rpm.org
MIT License
128 stars 97 forks source link

unable to create delta rpms from redline rpms #137

Open ruedigerblock opened 5 years ago

ruedigerblock commented 5 years ago

Hello,

We use maven and redline to build RPMs from WAR files. Those RPMs only contain the plain WAR file. Some are pretty big ~ 80MB, thus I tried to create deltarpms. Lets say I have: myrpm-1.0-1.rpm and myrpm-1.2-1.rpm. I should be able to do: makedeltarpm myrpm-1.0-1.rpm myrpm-1.2-1.rpm myrpm-1.2-1.drpm. Which is only about 10 % of the size. But makedeltrpm fails with:

makedeltarpm myrpm-1.0-1.x86_64.rpm myrpm-1.2-1.x86_64.rpm new.rpm -vvvv
Old: myrpm-1.0-1.rpm
New: myrpm-1.2-1.rpm
reading new rpm...
reading old rpm...
USING ELEMENT opt/tomcat
USING ELEMENT opt/tomcat/webapps
USING FILE opt/tomcat/webapps/my.war
files used:       3/3 = 100.0%
files skipped:    0/3 = 0.0%
sequence: 30
creating diff...
writing delta rpm...
payload open failed

I tried a lot of things to make it work but I am stuck. I tried building the RPMs but with a plain text file instead of the WAR but no luck. If I create the RPMs using FPM it works though.

I suspect that it issue is somehow related to the compression method of the payload. This should be "gzip rsyncable" but is "gzip". How do I know ? If I append "-z bzip2" to makedeltarpm, it works. Unfortunately applydeltarpm does not have this switch so I am left with a deltarpm which I can't combine with the source rpm. :-(

I searched the Code and the Docs, but could not find a method to tell the payload which compression mode to use.

oesolutions commented 3 years ago

@ruedigerblock did you ever make progress on this? I just encountered the same issue.

ruedigerblock commented 3 years ago

Puh ... To be honest: I don't remember ! I switched jobs thus I can't look at the code. But what I do remember is that I figured that this solution did not fit my use case anyway. I had to send GBs of RPMs over a very thin and expensive line on a regular non-deteministic basis. At the end - and this worked amazing - I zipped the release at the source, used RSYNCs send only deltas feature, which did the job flawlessly and the extracted the archive at the destination for further distribution. With delta RPMs you always have to make sure that - as with sequencial backups - you supply the full lineage of RPMs. Which I could not gurantee.