Kuroo's Development Information
Since 0.81 there was a portage database to handle "a bit" of things regarding to emerge stuff, also, kuroo was just an frontend to emerge command. It was called internally and parsed its output.
Since 0.90, great changes will come to kuroo:
1. Kuroo will not be JUST an emerge frontend anymore, kuroo will handle internally things like dependency calculation, blockers detection, and so on, and it will call emerge just to install (because sometimes emerge is so slow in calculating dependencies).
2. Kuroo will have a new Portage Database with a public Portage class, which would allow any developer to know almost every portage thing without knowing SQL, nor the database design. For this purpose, DataBase? design is being remade.
So be patient and wait until >=0.90 release! And of course, you can register and post bugs by creating a new ticket.
Discovering emerge's internal work
I am reserching emerge's internal work at doing all dependencies calculation, and after, searching for updates, and the internal work of revdep-rebuild utility.
1. Dependencies information:
- DEPEND: Are dependencies at compile time, utilities to compile, etc.. a change in this does not affect correct runtime of a package.
- RDEPEND: Are dependencies at runtime, dynamic libraries, external programs, etc.. A change in any of those dependencies could affect to runtime of a program, for example a change in a library ABI, a upgrade of a library, a change in soname of a library and so on (this could be used to implement a custom revdep-rebuild)
- IUSE: Is a list of all possible USE flags for a package, wich introduces more DEPEND or RDEPEND atoms if some of them are activated (via USE? grammar).
- ECLASS: If a ebuild inherits from a eclass, it gets more dependencies, which are set up by that eclass, and also, it may inherit more IUSE flags.
- LOGICAL OPERATORS: An ebuild can have several logical operators for its dependencies, if no operator is set, the logical AND is used:
- Order operator: Sets an order of a dependency. Available operators are: <, <=, =, >=, >. Its use is simple: ORDER_OPERATORcategory/packagename-version. For example >=dev-db/sqlite-3.0.0. Note: A version cannot be specified and passed as command to emerge if it does not have the order operator.
- Logical OR: With this operator, you can specify a set of dependencies, but not all are needed, with just one of them, dependency graph is resolved. Its notation is:"||" (category/packagename category2/packagename2 ... ) (without quotes)
- USE dependant dependency: This allows to add dependencies according to one or more IUSE variables. Notation: USE_VAR? ( category/packagename category2/packagename2 ... )
1. Information of Installed Packages: There are two places to store information:
- World file: This is a file where emerge stores information of packages passed to emerge as commands without the --oneshot option, in other words, all the packages that user installed explicitly.
- PKGDB: This is a more complete "database" of ALL packages installed (it includes also, the ones recorded in world). It contains several things: USE list package used when being built, DEPEND info, RDEPEND info, an EBUILD copy... (incomplete)
Attachments
- New Portage DataBase.png (58.7 kB) -
Design for the new Portage DataBase
, added by stormbyte on 08/27/07 16:17:04.
