[zypp-devel] libzypp for openSUSE 11.0
Hi! I'd like to start a discussion how to move forward with libzypp for 11.0. Here is the list of possible improvements I'm aware of: - User interface Work on design, usability of YaST the package management frontends. - Application layer Applications using libzypp duplicate a lot of code which should be refactored into an application layer on top of zypp. - PackageKit PackageKit, building upon PolicyKit, allows to assign specific (administrative) rights in regards to software management. - New SAT solver A new approach to dependency solving seems to overcome the limitations of the current solver, while implementing most of the requested features. (see http://idea.opensuse.org/content/ideas/fast-installation-tool) - Build service integration Client-side software management should be integrated with build service functionality in order to support online search and on-demand information like ratings and screenshots. - Redesign of the caches This comprises the SOLV files and way to store the additional data to be retrieved on-demand, etc. - zypper improvements There is quite some work left to improve zypper, fix the bugs and fill the gaps. - callbacks cleanup The annoying YaST popups are a direct consequence of the complicated callback system of libzypp. A redesign and cleanup of the callbacks should give much better user experience, like - switch to use librpm directly for installing packages So far, libzypp calls rpm for every installation of a package, instead of going directly to librpm - commit part refactoring This is mostly about providing parallel download of packages and also installing more than one package per transaction. Another related feature is to keep the downloaded packages available on the disk. - locking storing and application API 10.3 allows user to configure locking using /etc/zypp/locks file, however, there is no GUI to do this. I believe there is more... I've tried to concentrate on larger blocks, not individual features. Anyway, feel free to add more. So, comments on the list above? any preferences? Any technical issues why the particular part is not feasible, or not feasible for 11.0? Stano -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
On 02/11/2007, Stanislav Visnovsky
I'd like to start a discussion how to move forward with libzypp for 11.0.
Great
- User interface Work on design, usability of YaST the package management frontends.
Sorely needed, also it would make sense to try to make the KDE & GNOME package selectors as consistent as possible for usability & documentation & support reasons.
- PackageKit PackageKit, building upon PolicyKit, allows to assign specific (administrative) rights in regards to software management.
Packagekit looks quite nice, one potential issue I've seen is that they don't have any way to add repositories as on RH/Fedora they seem to use packages containing the .repo files and install those packages to add repositories. (Please correct me if this is completely wrong)
- Build service integration Client-side software management should be integrated with build service functionality in order to support online search and on-demand information like ratings and screenshots.
Not sure if the server side for this is likely to be ready for 11.0 looking at build service roadmap. There was also some discussion as to whether it should be added into the buildservice or a separate component so that it could be community hosted with fewer legal issues & include non-buildservice software.
- callbacks cleanup The annoying YaST popups are a direct consequence of the complicated callback system of libzypp. A redesign and cleanup of the callbacks should give much better user experience, like
I had a look at this earlier this week, see http://bw.uwcs.co.uk/new_callbacks.ogg
I believe there is more... I've tried to concentrate on larger blocks, not individual features. Anyway, feel free to add more.
I would like to propose: - Diffed metadata While it will make virtually no difference for factory where checksums of nearly every package changes almost every sync. It would make a large difference for Packman, KDE:KDE3, GNOME:Community,Update Repository etc etc. Where often there are one or two packages appended. Probably most users have the packman repository and it is updated almost every hour - a 5mb download to retrieve maybe 100kb of new data. Supporting this would be even more visible than speeding up repository cache reading/solving imo. There was another feature I thought was very important, but I've completely forgotten it, will post it when I remember. -- Benjamin Weber -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
Hi, On Fri, 2 Nov 2007, Benji Weber wrote:
I would like to propose:
- Diffed metadata
Hey, great minds think alike as they say :) Yes, we are actively trying to do just that with the SOLV files which Stano already mentioned in the plan. The general plan is to rely on an xdelta/rsync like algorithm, where we have two possibilities: 1) the requester generates a list of blocks it has, sends them to the server, that one figures out which blocks are missing, and sends a diff description to the client, which reconstructs the file. 2) The server generates once (when the file changed) a list of block it has, client downloads that one, and actively asks for the blocks it still needs. 3) server pre-generates a set of xdelta diffs from every file revision to the current one, clients asks for the xdelta matching his own revision, and updates according to that. The second solution theoretically is the most attractive one: it doesn't put high demands (CPU and space-wise) on the server, which still allowing much smaller downloads. The first solution would allow a bit better compression, but it remains to be seen if it's worth it. The third solution is the ugliest one (engineering wise) :) Ciao, Michael. -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
On Monday 05 November 2007 08:59:41 Michael Matz wrote:
Hey, great minds think alike as they say :) Yes, we are actively trying to do just that with the SOLV files which Stano already mentioned in the plan. The general plan is to rely on an xdelta/rsync like algorithm, where we have two possibilities:
1) the requester generates a list of blocks it has, sends them to the server, that one figures out which blocks are missing, and sends a diff description to the client, which reconstructs the file.
2) The server generates once (when the file changed) a list of block it has, client downloads that one, and actively asks for the blocks it still needs.
3) server pre-generates a set of xdelta diffs from every file revision to the current one, clients asks for the xdelta matching his own revision, and updates according to that.
ZSync does that already. But as I had said lot of times, it wont work with current metadata because it changes too much and too often. Duncan -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
On Monday 05 November 2007 08:59:41 Michael Matz wrote:
The general plan is to rely on an xdelta/rsync like algorithm,
This should give some savings. It should be possible to get better
savings with a custom diff that could be generated by createrepo. It
would only need to include the changed package details, and could diff
things like the description which I suspect don't change frequently
even in factory. Then generate a primary.xml.<oldtimestamp> or
something as a diff from that timestamp.
This would be a lot more work than just adding zsync to the download
layer though.
On 05/11/2007, Duncan Mac-Vicar Prett
ZSync does that already. But as I had said lot of times, it wont work with current metadata because it changes too much and too often.
Really only factory this applies to I think. I update only packages that have changed (checksum) for the package search, and this is faster for many repositories. Only for factory is it counterproductive. The biggest benefit is with packman where rebuilds are rare and one or two packages are usually appended to metadata. The frequently changing repositories that most people have will be the update repository & packman. I think it can be beneficial even though it doesn't help for factory. -- Benjamin Weber -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
Am Montag 05 November 2007 schrieb Benji Weber:
On Monday 05 November 2007 08:59:41 Michael Matz wrote:
The general plan is to rely on an xdelta/rsync like algorithm,
This should give some savings. It should be possible to get better savings with a custom diff that could be generated by createrepo. It would only need to include the changed package details, and could diff things like the description which I suspect don't change frequently even in factory. Then generate a primary.xml.<oldtimestamp> or something as a diff from that timestamp.
This would be a lot more work than just adding zsync to the download layer though.
On 05/11/2007, Duncan Mac-Vicar Prett
wrote: ZSync does that already. But as I had said lot of times, it wont work with current metadata because it changes too much and too often.
Really only factory this applies to I think. I update only packages that have changed (checksum) for the package search, and this is faster for many repositories. Only for factory is it counterproductive. The biggest benefit is with packman where rebuilds are rare and one or two packages are usually appended to metadata. The frequently changing repositories that most people have will be the update repository & packman.
I think it can be beneficial even though it doesn't help for factory. It's also true for KDE:KDE3 for example where one checkin of kdelibs3 will recompile everything (which happens often).
Or many other build service repos. So your patch logic would need to find an intelligent way to figure which oldtimestamps do not make sense to be supported because they are better off downloading HEAD and remove these old diffs. Greetings, Stephan -- SUSE LINUX Products GmbH, GF: Markus Rex, HRB 16746 (AG Nürnberg) -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
* Stephan Kulow
Am Montag 05 November 2007 schrieb Benji Weber:
I think it can be beneficial even though it doesn't help for factory.
It's also true for KDE:KDE3 for example where one checkin of kdelibs3 will recompile everything (which happens often).
Do we have hard numbers about how much of a package's metadata actually changes between rebuilds ? Usually, a lot of metadata changes only very slowly, like summary, description, changelog, dependencies, etc. Only checksum and release number have a high change frequency in Factory. Block-wise syncing is certainly one approach, grouping metadata pieces into blocks of high change (checksums, release numbers) and low change (summary, description) might be worth investigation. Klaus --- SUSE LINUX Products GmbH, GF: Markus Rex, HRB 16746 (AG Nürnberg) -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
On Monday 05 November 2007 16:36:58 Klaus Kaempf wrote:
Do we have hard numbers about how much of a package's metadata actually changes between rebuilds ?
Usually, a lot of metadata changes only very slowly, like summary, description, changelog, dependencies, etc. Only checksum and release number have a high change frequency in Factory.
Block-wise syncing is certainly one approach, grouping metadata pieces into blocks of high change (checksums, release numbers) and low change (summary, description) might be worth investigation.
with YUM Factory was only worth to zsync for one rebuild, after 1 rebuild was minimal gain, and 4 days later it was pretty useless. It is easy to regenerate them with any new type of metadata, zsync is in my OBS home: and you can generate the metadata for one file, then wait, apply the zsync metadata to a new one and seeing how many blocks apply, wait, and repeat). Of course you can control also the block size, that could affect XML results, smaller block checksum can perhaps capture xml descriptions but also makes the zsync metadata to grow, as you have more blocks. The best would be first to design the ideal way to store things, and then to repeat zsync experiments and find the optimal block size. Duncan -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
Hi, On Mon, 5 Nov 2007, Benji Weber wrote:
On Monday 05 November 2007 08:59:41 Michael Matz wrote:
The general plan is to rely on an xdelta/rsync like algorithm,
This should give some savings. It should be possible to get better savings with a custom diff that could be generated by createrepo. It would only need to include the changed package details, and could diff things like the description which I suspect don't change frequently even in factory.
That's the (or my at least) plan, yes. But together with a different meta format (the SOLV files) ...
Then generate a primary.xml.<oldtimestamp> or something as a diff from that timestamp.
... and insofar I personally am not interested to work on the yum format, so that would have to be done by someone else :) Ciao, Michael. PS: before someone cries, the SOLV files would be placed in parallel to the yum metadata, so clients not understanding the former can continue to use the latter. -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
Hi, On Mon, 5 Nov 2007, Duncan Mac-Vicar Prett wrote:
On Monday 05 November 2007 08:59:41 Michael Matz wrote:
Hey, great minds think alike as they say :) Yes, we are actively trying to do just that with the SOLV files which Stano already mentioned in the plan. The general plan is to rely on an xdelta/rsync like algorithm, where we have two possibilities:
1) the requester generates a list of blocks it has, sends them to the server, that one figures out which blocks are missing, and sends a diff description to the client, which reconstructs the file.
2) The server generates once (when the file changed) a list of block it has, client downloads that one, and actively asks for the blocks it still needs.
3) server pre-generates a set of xdelta diffs from every file revision to the current one, clients asks for the xdelta matching his own revision, and updates according to that.
ZSync does that already.
Good.
But as I had said lot of times, it wont work with current metadata because it changes too much and too often.
That's why I talk about SOLV files :) Ciao, Michael. -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
On Monday 05 November 2007 13:17:05 Michael Matz wrote:
ZSync does that already.
Good.
JFYI http://zsync.moria.org.uk/ there is a package in my home: in OBS. And a test program somewhere in zypp/devel/devel.dmacvicar (basically computing which blocks I need to download, but never managed to port it to our MediaCurl infrastructure) -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
Dňa Friday 02 November 2007 15:23:03 Benji Weber ste napísal:
- callbacks cleanup The annoying YaST popups are a direct consequence of the complicated callback system of libzypp. A redesign and cleanup of the callbacks should give much better user experience, like
I had a look at this earlier this week, see http://bw.uwcs.co.uk/new_callbacks.ogg
Wow. Is this an actual code? Stano -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
On 05/11/2007, Stanislav Visnovsky
Wow. Is this an actual code?
Yes, but I modified PackageCallbacks which will break a lot of things. I was going to create a new EmbeddableCallbacks or something that can be used alongside. -- Benjamin Weber -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
Dňa Monday 05 November 2007 10:29:13 Benji Weber ste napísal:
On 05/11/2007, Stanislav Visnovsky
wrote: Wow. Is this an actual code?
Yes, but I modified PackageCallbacks which will break a lot of things. I was going to create a new EmbeddableCallbacks or something that can be used alongside.
Cool! I'd suggest to create an experimental branch so everyone can try it out, maybe also using buildservice to get the packages. This is definitely very interesting! Stano -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
On 11/2/07, Stanislav Visnovsky
I believe there is more... I've tried to concentrate on larger blocks, not individual features. Anyway, feel free to add more.
Perhaps this is one of the 'individual features', but maybe some work could be done on getting patterns to be all stored in one .gz. That would really speed things up, as you wouldn't need to make as many connections to the server. I'm sure this could fit into a few of the things said above, but it would be really nice if YaST didn't prompt the user quite so much for changes. Particularly issues like Vendor changing, it would be much nicer for YaST to say i.e. "Upgrading will change the vendor of the following packages..." in the final 'Commit' summary. Many things to look forward to :-) Kind thoughts, -- Francis Giannaros http://francis.giannaros.org -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
Stanislav Visnovsky escribió:
I believe there is more... I've tried to concentrate on larger blocks, not individual features. Anyway, feel free to add more.
a) zypp still floods the network mirrors, this was partially discussed in bug #307098.. remember that zypp should be a good netizen as well !! ;-) b) The mayority of the zypper error messages are awful cryptic for users, very unfriendly :( c) I would personally like to see reconsidered the (mis) behaviuor I described in bug #275484 (I understand the reason why it behaves in such bad^WWcurious manner though ;)) d) implementation of zypper dist-upgrade e) zypper "patch" operations should only read an refresh repos that actually **contain** patches (i.e doing something like curl -Iv http://ftp4.gwdg.de/pub/opensuse/update/10.3/repodata/patches.xml as detection) currently all repos are refreshed regardless the contents. I have more suggestions and ideas, but that's all for now ;) Cheers. -- "Two things are infinite: the universe and human stupidity; and I'm not sure about the universe." --Albert Einstein Cristian Rodríguez R, Core Services SUSE LINUX Products GmbH Research & Development http://www.opensuse.org/ -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
On Monday 05 November 2007 08:44:25 Cristian Rodriguez wrote:
e) zypper "patch" operations should only read an refresh repos that actually **contain** patches (i.e doing something like curl -Iv http://ftp4.gwdg.de/pub/opensuse/update/10.3/repodata/patches.xml as detection) currently all repos are refreshed regardless the contents.
That would make patch checking MUCH faster, but it depends on the assumption that all needed packages from the patch are in the same update repo, and that you can upgrade your system only with installed packages + update repos. This happens 99% of the time Not useful if you want to mention a foreign package in a patch. It just needs to be decided, how it should work. Duncan -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
* Duncan Mac-Vicar Prett
On Monday 05 November 2007 08:44:25 Cristian Rodriguez wrote:
e) zypper "patch" operations should only read an refresh repos that actually **contain** patches (i.e doing something like curl -Iv http://ftp4.gwdg.de/pub/opensuse/update/10.3/repodata/patches.xml as detection) currently all repos are refreshed regardless the contents.
That would make patch checking MUCH faster, but it depends on the assumption that all needed packages from the patch are in the same update repo, and that you can upgrade your system only with installed packages + update repos. This happens 99% of the time
Right. However, patches should be seen as supportive infrastructure to (package) updates and not as the primary means to deliver updates. Esp. 3rd party (and customer specific inhouse) repos will most probably stay with packages and not make use of patches. For these, we need a full refresh.
Not useful if you want to mention a foreign package in a patch.
Which happened quite some times in the past, esp. with changing requirements dragging in additional packages from the original installation repo. Klaus -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
Cristian Rodriguez escribió:
I have more suggestions and ideas, but that's all for now ;)
Also, while downloading large packages, zypp does not seem to "resume" the download if you stop the process but starts once again, this is very unneficient, will be cool if that functionality can be implemented. Note that you dont need much code to add, curl is abstracted in such a way that is trasparent to the protocol, you can even obtain that functionality,and others like that timebased ones for CD/DVD/NFS/SMB/CIFS or whatever you need using the "file://" pseudo-protocol that curl supports ( as long as you mount the CD/DVD/NFS/SMB/CIFS media before, of course ;) ) -- "Two things are infinite: the universe and human stupidity; and I'm not sure about the universe." --Albert Einstein Cristian Rodríguez R, Core Services SUSE LINUX Products GmbH Research & Development http://www.opensuse.org/ -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
Cristian Rodriguez wrote:
Cristian Rodriguez escribió:
I have more suggestions and ideas, but that's all for now ;)
Also, while downloading large packages, zypp does not seem to "resume" the download if you stop the process but starts once again, this is very unneficient, will be cool if that functionality can be implemented.
Note that you dont need much code to add, curl is abstracted in such a way that is trasparent to the protocol, you can even obtain that
It would be little code to add if the RPMs would be downloaded into a well known place, but they are not. But we should definitely bear this in mind when implementing the "download-only--install-later" feature. Jano
functionality,and others like that timebased ones for CD/DVD/NFS/SMB/CIFS or whatever you need using the "file://" pseudo-protocol that curl supports ( as long as you mount the CD/DVD/NFS/SMB/CIFS media before, of course ;) )
-- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
On Friday 09 November 2007 16:45:02 Jan Kupec wrote:
It would be little code to add if the RPMs would be downloaded into a well known place, but they are not. But we should definitely bear this in mind when implementing the "download-only--install-later" feature.
/var/cache/zypp/download or packages, or rpms -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
* Stanislav Visnovsky
Hi!
I'd like to start a discussion how to move forward with libzypp for 11.0.
[...]
I believe there is more... I've tried to concentrate on larger blocks, not individual features. Anyway, feel free to add more.
I fully agree to the list as presented. Let me add one more item based on the discussion on zypp-devel over the last days: - Policy layer Solving package dependencies consists of clearly defined dependency semantics and assumptions not expressable by dependencies. Those assumptions are commonly referred to as 'policies'. Future versions of libzypp must expose these policies, so an application or system administrator (system wide policies) can change them. Klaus --- SUSE LINUX Products GmbH, GF: Markus Rex, HRB 16746 (AG Nürnberg) -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
On Wednesday 07 November 2007 10:52, Klaus Kaempf wrote:
- Policy layer Solving package dependencies consists of clearly defined dependency semantics and assumptions not expressable by dependencies. Those assumptions are commonly referred to as 'policies'. Future versions of libzypp must expose these policies, so an application or system administrator (system wide policies) can change them.
Please keep in mind that this will have to be handled by the application
layer. This is nothing the UI layer will ever want to be concerned with.
CU
--
Stefan Hundhammer
* Stefan Hundhammer
On Wednesday 07 November 2007 10:52, Klaus Kaempf wrote:
- Policy layer Solving package dependencies consists of clearly defined dependency semantics and assumptions not expressable by dependencies. Those assumptions are commonly referred to as 'policies'. Future versions of libzypp must expose these policies, so an application or system administrator (system wide policies) can change them.
Please keep in mind that this will have to be handled by the application layer. This is nothing the UI layer will ever want to be concerned with.
Actually, its a layer separate from application. UIs for advanced users might expose 'policy knobs' for tuning, though. Klaus -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
Dňa Friday 02 November 2007 13:02:07 Stanislav Visnovsky ste napísal:
I believe there is more... I've tried to concentrate on larger blocks, not individual features. Anyway, feel free to add more.
Got another one: - provide human-understandable conflict resolution The solver in libzypp does quite a great job, however, the way the conflict resolution is presented is a real problem for the users. Stano -- To unsubscribe, e-mail: zypp-devel+unsubscribe@opensuse.org For additional commands, e-mail: zypp-devel+help@opensuse.org
participants (10)
-
Benji Weber
-
Cristian Rodriguez
-
Duncan Mac-Vicar Prett
-
Francis Giannaros
-
Jan Kupec
-
Klaus Kaempf
-
Michael Matz
-
Stanislav Visnovsky
-
Stefan Hundhammer
-
Stephan Kulow