[poky] [yocto] problem about package and subpackage
Mark Hatle
mark.hatle at windriver.com
Wed Apr 18 08:45:27 PDT 2012
On 4/18/12 9:51 AM, Gary Thomas wrote:
> On 2012-04-18 08:46, caterwaul wrote:
>>
>>
>>
>>
>> At 2012-04-18 22:06:36,"Gary Thomas"<gary at mlbassoc.com> wrote:
>>> On 2012-04-18 07:57, caterwaul wrote:
>>>> At 2012-04-18 19:57:21,"Gary Thomas"<gary at mlbassoc.com> wrote:
>>>>> On 2012-04-18 05:29, caterwaul wrote:
>>>>>> Hi,
>>>>>>
>>>>>> I wanted to add dhcp(4.2.0) into my image. And I added "dhcp" into IMAGE_INSTALL of my image's bb file. After I runing bitbake, the dhcp package is normally fetched and compiled
>>>>>> and so on. But during do_rootfs bitbake reported as follow:
>>>>>> Processing dhcp...
>>>>>> Unable to find package dhcp (dhcp)!
>>>>>> ERROR: Function 'do_rootfs' failed
>>>>>>
>>>>>> I note that in /meta/recipes-connectivity/dhcp/dhcp4.inc the dhcp package is split into 4 subpackages(PACKAGES += "dhcp-server dhcp-client dhcp-relay dhcp-omshell"). Now If I
>>>>>> remove "dhcp" from IMAGE_INSTALL and add these 4 subpackages' name into IMAGE_INSTALL and run bitbake AGAIN, they can be normally added into my final image.
>>>>>>
>>>>>> I've tried to modify last part of dhcp4.inc as follow: But bitbake still reported "Unable to find package dhcp"
>>>>>> FILES_${PN} = ""
>>>>>> FILES_${PN} += "${sbindir}/dhcpd ${sysconfdir}/init.d/dhcp-server ${sysconfdir}/default/dhcp-server ${sysconfdir}/dhcp/dhcpd.conf"
>>>>>> FILES_${PN} += "${sbindir}/dhcrelay ${sysconfdir}/init.d/dhcp-relay ${sysconfdir}/default/dhcp-relay"
>>>>>> FILES_${PN} += "${base_sbindir}/dhclient ${base_sbindir}/dhclient-script ${sysconfdir}/dhcp/dhclient.conf"
>>>>>> FILES_${PN} += "${bindir}/omshell"
>>>>>> RDEPENDS_${PN} = "bash"
>>>>>>
>>>>>> So How should I config bitbake to get my image with dhcp by running bitbake ONLY ONCE?
>>>>>
>>>>> There is no "dhcp" package, only dhcp-client, dhcp-relay, dhcp-server.
>>>>> Pick the functionality you need and use the appropriate package(s)
>>>>>
>>>>
>>>>
>>>> Thank you very much. But maybe my question is not clear. What I mean is:
>>>> If I pick dhcp-server dhcp-client dhcp-relay and dhcp-omshell, bitbake will NOT start to build and report can NOT find these packages. On the other hand, if I pick dhcp, bitbake
>>>> will start to build, but at do_rootfs stage it will report "Unable to find package dhcp (dhcp)!"(at this moment all dhcp-xxx packages has actually been generated there). So I want
>>>> to know how to config bitbake to complete the build and produce image with whole or part of dhcp.
>>>
>>> You are confusing packages with recipes. Bitbake only knows how to
>>> build recipes which in turn create packages. Most of the time, the
>>> packages have the same name as the recipe, but not always. Sometimes
>>> a recipe only creates "component" packages which, as in the case of dhcp,
>>> do not include a package with exactly the same name as the recipe.
>>>
>>> In order to get any of these component packages built, one needs to
>>> tell bitbake to build the recipe (if you are trying to force it on
>>> the command line). However, the image needs to use the package names,
>>> as that's what gets installed.
>>>
>>> Maybe a bit confusing, but that's how it works.
>>>
>>> n.b. Please keep replies on the mailing list so that everyone may benefit
>>>
>>
>> Thank you again. Could you explain more about how to tell bitbake which recipe I want and which package I want? Should I add both the recipe name(dhcp) and the package names(dhcp-xxx) into IMAGE_INSTALL of the image's recipe? If so, how does bitbake know which name in IMAGE_INSTALL is for recipe and which is for package?
>
> As I said above, you use recipe names when you are running bitbake
> from the command line, e.g.
> % bitbake dhcp
> % bitbake core-image-minimal
> As part of the process of building recipes, bitbake learns what _packages_
> are created by each recipe. Thus, inside recipes, you use package names,
> not recipe names. So to add dhcp-client to your image, simply add that
> package, not the recipe name. bitbake will then realize that it needs to
> build the dhcp _recipe_ in order to build the dhcp-client _package_
>
>
This is the difference between a "DEPENDS" and an "RDEPENDS" as well. DEPENDS
are recipe names or recipe provides (think source code level). While RDEPENDS
are "runtime" depends on binary package name, or some other provide on a binary
package level.
For an image or task, you would add "dhcp" to the DEPENDS, and dhcp-client to
your RDEPENDS. (It happens that an image recipe is a bit unique and RDEPENDS is
specified as IMAGE_INSTALL...)
--Mark
More information about the poky
mailing list