##(see the SpecSpec for an explanation) * '''Launchpad Entry''': UbuntuSpec:foo * '''Created''': * '''Contributors''': * '''Packages affected''': == Summary == Extend an existing graphical application manager to allow users to determine all the dependencies of a particular application, and show the minimum file system size required to support these. Allows device designers to determine the storage requirements for a single use device e.g. Audio player, browser. == Release Note == Speeds up device design. == Rationale == For embedded devices storage can be a limiting factor. Determining the packages required to support a single application, and hence the storage required, can be a time consuming task. A single point & click way of doing this may aid the adoption of Ubuntu ARM as the platform of choice. == User stories == A device manufacturer is designing a browser. He likes the look of arora, but firefox looks good too. Using the appmanext he quickly determines which will take less storage. == Assumptions == * Dependency circularities will not hang the dependency search. * Support infrastructure in placed e.g. a file system image with the listed packages can be easily constructed. == Design == === Initial investigation === In the GUI add an option to output the estimated file system size required for the selected package. Add a similar option in the "show" functionality. For the selected package recursively determine the dependencies of all dependencies. Stop search when current package has no dependencies. Add each dependency to a list. Skip any repeated dependencies to avoid dependency loops. For the completed list sum the package installation sizes. === Conclusions === Resulting file system sizes were large (> 20MB) because of - Security packages - Package management packages - etc. Example - busybox needs 27.5 M, the basic system provide by debootstrap occupies In fact an embedded system with busybox alone can be provided in 3 MB even using unstripped binaries. Hence modifying aptitude in this manner can give an indication of which of two applications will require the larger file system but cannot provide any indication of the absolute size of the file systems required. === New Design === Use aptitude show in scripts to provide a dependency tree for a given package. Prune the tree according to various heuristics - e.g. remove security packages, package management packages etc. Calculate size of remaining packages. Output: - Minimum file size - Packages to remove from a debootstrap with the target package installed. == Implementation == ==== Pick a graphical app manager ==== Available in Lucid * aptitude * Better place to fit the option * synaptic * Smaller code base * Nicer GUI Chose aptitude since I'm more familiar with C++ than XML etc. ==== UI Changes ==== Preferences offers "Show minimum system for the app" If set, package information page shows total. ==== Command line changes === Offer an option to "show" that displays the system size, in addition to current display. ==== Code Changes ==== * GUI: Calculate & display total in pkg_info_screen.cc:- pkg_grouppolicy_info::setup_package_info() - option.patch * Command line: Calculate & display total in cmdline/cmdline_show.cc - get_list.patch The dependency list function can be common to both. TODO: 1. Use command line function in GUI. 2. Define an option for aptitude show 3. Add size summation. Future improvements - add figure for Depends plus Recommends and Suggests - output sizes for all pattern matches, rather than none. ==== Migration ==== * data migration - NONE * redirects from old URLs to new ones - NONE * how users will be pointed to the new way of doing things * Help entry * Menu option == Test/Demo Plan == It's important that we are able to test new features, and demonstrate them to users. Use this section to describe a short plan that anybody can follow that demonstrates the feature is working. This can then be used during testing, and to show off after release. Please add an entry to http://testcases.qa.ubuntu.com/Coverage/NewFeatures for tracking test coverage. === Tests === 1. If passed a pkg name pattern, do not calculate sizes. 2. For some packages compare results to real file systems. 3. Run for a large number of packages. == Unresolved issues == This should highlight any issues that should be addressed in further specifications, and not problems with the specification itself; since any specification with problems cannot be approved. ---- CategorySpec