[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