| 1 | GLEP: 61 |
1 | GLEP: 61 |
| 2 | Title: Manifest2 compression |
2 | Title: Manifest2 compression |
| 3 | Version: $Revision: 1.3 $ |
3 | Version: $Revision: 1.6 $ |
| 4 | Last-Modified: $Date: 2010/01/13 01:14:35 $ |
4 | Last-Modified: $Date: 2010/01/31 09:55:43 $ |
| 5 | Author: Robin Hugh Johnson <robbat2@gentoo.org> |
5 | Author: Robin Hugh Johnson <robbat2@gentoo.org> |
| 6 | Status: Draft |
6 | Status: Draft |
| 7 | Type: Standards Track |
7 | Type: Standards Track |
| 8 | Content-Type: text/x-rst |
8 | Content-Type: text/x-rst |
| 9 | Requires: 44 |
9 | Requires: 44 |
| 10 | Created: July 2008 |
10 | Created: July 2008 |
| 11 | Updated: October 2008, January 2010 |
11 | Updated: October 2008, January 2010 |
| 12 | Updates: 44 |
12 | Updates: 44 |
| 13 | Post-History: December 2009 |
13 | Post-History: December 2009, January 2010 |
| 14 | |
14 | |
| 15 | Abstract |
15 | Abstract |
| 16 | ======== |
16 | ======== |
| 17 | Deals with compression of large Manifest2 files. |
17 | Deals with compression of large Manifest2 files. |
| 18 | |
18 | |
| … | |
… | |
| 20 | ========== |
20 | ========== |
| 21 | With the introduction of MetaManifest, and full-tree Manifest coverage, |
21 | With the introduction of MetaManifest, and full-tree Manifest coverage, |
| 22 | we are faced with the possibility of having very large Manifests. |
22 | we are faced with the possibility of having very large Manifests. |
| 23 | |
23 | |
| 24 | Preliminary experiments with MetaManifest, show that with just the |
24 | Preliminary experiments with MetaManifest, show that with just the |
| 25 | existing per-package Manifests, the full MetaManifest, for a tree |
25 | existing per-package Manifests, the full MetaManifest (top-level only, |
| 26 | including metadata/, exceeds 8MiB in size. Applying common compression |
26 | no first-level sub directories), for a tree including metadata/, exceeds |
| 27 | can achieve a 50-60% reduction in this size. |
27 | 8MiB in size. Applying common compression can achieve a 50-60% reduction |
|
|
28 | in this size. |
|
|
29 | |
|
|
30 | Additionally, some of the larger already-existing Manifests in the tree |
|
|
31 | can also be reduced. |
|
|
32 | |
|
|
33 | This GLEP is not mandatory for the tree-signing specification, but |
|
|
34 | instead helps to cut down the size impact of large Manifest2 files, some |
|
|
35 | of which are already present in the tree. As such, it is also able to |
|
|
36 | stand on it's own. |
| 28 | |
37 | |
| 29 | Specification |
38 | Specification |
| 30 | ============= |
39 | ============= |
|
|
40 | Creation of compressed Manifests: |
|
|
41 | --------------------------------- |
|
|
42 | 32KiB is suggested as a arbitrary cut-off point to start generating |
|
|
43 | compressed Manifest2 files. |
|
|
44 | |
|
|
45 | The compression must only applied during the creation of a tree intended |
|
|
46 | for end users. No Manifests stored in a VCS should be compressed in the |
|
|
47 | VCS. For the main gentoo-portage tree, this means that the compressed |
|
|
48 | Manifests should be generated using the CVS to Rsync process. |
|
|
49 | |
|
|
50 | The Manifest compression process is required to ensure that inconsistent |
|
|
51 | compressed versions do not exist. |
|
|
52 | |
|
|
53 | Validation of Manifests: |
|
|
54 | ------------------------ |
| 31 | When searching for a Manifest2 file, if the basename form does not |
55 | When searching for a Manifest2 file, if the basename form does not |
| 32 | exist, the package manager should search in the same location using |
56 | exist, the package manager should search in the same location using |
| 33 | common compressed suffixes, and use the compressed file in place of the |
57 | common compressed suffixes, and use the compressed file in place of the |
| 34 | Manifest2. |
58 | Manifest2. |
| 35 | |
59 | |
| 36 | gzip, bzip2, lzma, xz should all be supported if available on the given |
60 | gzip, bzip2, lzma, xz should all be supported if available on the given |
| 37 | platform. In the case that multiple versions exist, the package manager |
61 | platform. In the case that multiple versions exist, the package manager |
| 38 | should simply pick one - they should be identical, differing only in |
62 | should simply pick one - they should be identical, differing only in |
| 39 | compression. |
63 | compression. |
| 40 | |
64 | |
| 41 | The Manifest generation process is required to ensure that inconsistent |
65 | Example Results with a 32KiB cut-off, gzip algorithm |
| 42 | compressed versions do not exist. |
66 | ==================================================== |
|
|
67 | As of 2010/01/30, the suggested cut-off would impact the following 21 existing |
|
|
68 | Manifests, for a saving of nearly 900KiB:: |
|
|
69 | |
|
|
70 | Size Path |
|
|
71 | 65788 app-doc/linux-gazette/Manifest |
|
|
72 | 75739 app-office/openoffice-bin/Manifest |
|
|
73 | 40534 app-text/texlive-core/Manifest |
|
|
74 | 41710 dev-texlive/texlive-bibtexextra/Manifest |
|
|
75 | 38197 dev-texlive/texlive-documentation-english/Manifest |
|
|
76 | 129610 dev-texlive/texlive-fontsextra/Manifest |
|
|
77 | 36022 dev-texlive/texlive-humanities/Manifest |
|
|
78 | 686118 dev-texlive/texlive-latexextra/Manifest |
|
|
79 | 43392 dev-texlive/texlive-latexrecommended/Manifest |
|
|
80 | 33375 dev-texlive/texlive-mathextra/Manifest |
|
|
81 | 39781 dev-texlive/texlive-pictures/Manifest |
|
|
82 | 69567 dev-texlive/texlive-pstricks/Manifest |
|
|
83 | 75460 dev-texlive/texlive-publishers/Manifest |
|
|
84 | 50879 dev-texlive/texlive-science/Manifest |
|
|
85 | 36711 kde-base/kde-l10n/Manifest |
|
|
86 | 36539 media-gfx/bootsplash-themes/Manifest |
|
|
87 | 33058 net-fs/autofs/Manifest |
|
|
88 | 39781 www-client/firefox-bin/Manifest |
|
|
89 | 48983 www-client/icecat/Manifest |
|
|
90 | 60213 www-client/mozilla-firefox/Manifest |
|
|
91 | 39065 x11-themes/gkrellm-themes/Manifest |
|
|
92 | |
|
|
93 | |
|
|
94 | Additionally, with the MetaManifest proposal, the following new manifests would |
|
|
95 | also be compressed, for a saving of nearly 4MiB:: |
|
|
96 | |
|
|
97 | Size Path |
|
|
98 | 33442 app-admin/Manifest |
|
|
99 | 71073 app-dicts/Manifest |
|
|
100 | 35923 app-emacs/Manifest |
|
|
101 | 45808 app-misc/Manifest |
|
|
102 | 50169 app-text/Manifest |
|
|
103 | 112786 dev-java/Manifest |
|
|
104 | 65581 dev-libs/Manifest |
|
|
105 | 42619 dev-lisp/Manifest |
|
|
106 | 182163 dev-perl/Manifest |
|
|
107 | 96198 dev-python/Manifest |
|
|
108 | 58963 dev-ruby/Manifest |
|
|
109 | 59736 dev-util/Manifest |
|
|
110 | 58338 eclass/Manifest |
|
|
111 | 55749 kde-base/Manifest |
|
|
112 | 110064 licenses/Manifest |
|
|
113 | 35262 media-gfx/Manifest |
|
|
114 | 53995 media-libs/Manifest |
|
|
115 | 55607 media-plugins/Manifest |
|
|
116 | 71911 media-sound/Manifest |
|
|
117 | 34835 media-video/Manifest |
|
|
118 | 5747849 metadata/Manifest |
|
|
119 | 47452 net-analyzer/Manifest |
|
|
120 | 65989 net-misc/Manifest |
|
|
121 | 316787 profiles/Manifest |
|
|
122 | 67784 sys-apps/Manifest |
|
|
123 | 48971 x11-misc/Manifest |
|
|
124 | 41475 x11-plugins/Manifest |
|
|
125 | |
| 43 | |
126 | |
| 44 | Backwards Compatibility |
127 | Backwards Compatibility |
| 45 | ======================= |
128 | ======================= |
| 46 | The package Manifests should also be maintained as ONLY uncompressed in |
129 | The package Manifests should also be maintained as ONLY uncompressed in |
| 47 | CVS. |
130 | CVS. |
| … | |
… | |
| 55 | MetaManifests may come into existence as compressed from the start, as |
138 | MetaManifests may come into existence as compressed from the start, as |
| 56 | do not have an backwards compatibility issues. |
139 | do not have an backwards compatibility issues. |
| 57 | |
140 | |
| 58 | As a side note, this breaks all manual interaction with Manifests |
141 | As a side note, this breaks all manual interaction with Manifests |
| 59 | such as grep, and so should only be applied to large Manifest2 files, |
142 | such as grep, and so should only be applied to large Manifest2 files, |
| 60 | such as the MetaManifest. 384KiB is suggested as a arbitary cut-off |
143 | such as the MetaManifest. |
| 61 | point to start generating compressed Manifest2 files. |
|
|
| 62 | |
144 | |
| 63 | References |
145 | References |
| 64 | ========== |
146 | ========== |
| 65 | .. [#GLEP44] Mauch, M. (2005) GLEP44 - Manifest2 format. |
147 | .. [#GLEP44] Mauch, M. (2005) GLEP44 - Manifest2 format. |
| 66 | http://www.gentoo.org/proj/en/glep/glep-0044.html |
148 | http://www.gentoo.org/proj/en/glep/glep-0044.html |
| 67 | |
149 | |
| 68 | Copyright |
150 | Copyright |
| 69 | ========= |
151 | ========= |
| 70 | Copyright (c) 2007-2010 by Robin Hugh Johnson. This material may be |
152 | Copyright (c) 2008-2010 by Robin Hugh Johnson. This material may be |
| 71 | distributed only subject to the terms and conditions set forth in the |
153 | distributed only subject to the terms and conditions set forth in the |
| 72 | Open Publication License, v1.0. |
154 | Open Publication License, v1.0. |
| 73 | |
155 | |
| 74 | vim: tw=72 ts=2 expandtab: |
156 | vim: tw=72 ts=2 expandtab: |