[OE-core] Question about apply eglibc configurability to create minimal image

Kang Kai Kai.Kang at windriver.com
Fri Jun 17 10:05:02 UTC 2011


On 2011?06?09? 23:20, Mark Hatle wrote:
> On 6/9/11 5:57 AM, Kang Kai wrote:
>> Hi Mark,
>>
>> I am focus on eglibc itself compilation with disabling all the
>> configurable options, right now eglibc can be compiled with disable all
>> the configurable options.
>>
>> But when I build core-image-minimal in a clear new directory, some
>> packages build failed and they need eglibc supports, such as
> core-image-minimal is simply to large of an image to see some of the advantages
> of the eglibc configuration.  Realistically the advantages come on single
> application or small (busybox + single application) systems.
>
>> gcc-runtime    depends on     libc-libm
> The above looks like a bug to me and should be investigated.. (a bug in gcc that
> is..)
>
>> ncurse            depends on    libc-posix-wchar-io libc-posix-clang-wchar
> ncurses can be configured WITHOUT wide character support, the needs to be done
> with any of the wchar options disabled in eglibc.
>
>> openssl           depends on    libc-inet libc-nsswitch
> I'm not sure why openssl needs either inet or nsswitch.  inet perhaps if it
> tries to make certain socket calls, but libc-nsswitch should never be required
> outside of eglibc.  This is likely a configuration issue in openssl -- or a bug
> in eglibc.
>
>> gettext            depends on    libc-spawn libc-locale-code
>> libc-getlogin libc-utmp
>> ...
> Once we introduce gettext (beyond simply it's m4 macros) we're no longer in
> "small" system territory.  gettext and many others really want some of the
> larger system capabilities as they are designed for multilingual systems.
>
>> After enable those options, the image size only decrease from 9.6M  to
>> 9.4M(qemux86). And the dependencies on eglibc is hard to break,
>> something like  libcrypt getlogin(function) can't be breaken.
>> Could you give me some directions what should I do with eglibc
>> configurability?
> My suggest is to start with a new custom configuration.  (ignore the gcc-runtime
> for right now and enable libm.)  The goal of this configuration is a small,
> local system -- without network connectivity.
>
> Walk through the core-image-minimal, and you'll see:
> IMAGE_INSTALL = "task-core-boot ${ROOTFS_PKGMANAGE_BOOTSTRAP}"
>
> Looking at task-core-boot:
>
> RDEPENDS_task-core-boot = "\
>      base-files \
>      base-passwd \
>      busybox \
>      initscripts \
>      ${@base_contains("MACHINE_FEATURES", "keyboard", "keymaps", "", d)} \
>      modutils-initscripts \
>      netbase \
>      sysvinit \
>      tinylogin \
>      udev \
>      ${VIRTUAL-RUNTIME_update-alternatives} \
>      ${MACHINE_ESSENTIAL_EXTRA_RDEPENDS}"
>
> RRECOMMENDS_task-core-boot = "\
>      ${MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS}"
>
>  From the above, I'm pretty sure that "netbase" will require a lot of networking
> components, specifically adding things like libc-inet.  So avoid netbase.
>
> It's possible that keyboard/keymaps may cause additional stuff to come in due to
> locale requirements.. so I'd dump those as well..
>
> sysvinit may also introduce some additional items -- so if it causes problems,
> remove it and switch to the init located within busybox.
>
> update-alternatives is what included gettext -- so this might need some
> enhancement to avoid gettext as a requirement.  So I'd suggest skipping it.
> (Note without it, it's likely busybox, tinylogin may not get setup properly...)
>
> udev is quite complex and drags in a number of components -- so drop that..
>
> Leaving:
>
>      base-files \
>      base-passwd \
>      busybox \
>      initscripts \
>      modutils-initscripts \
>      sysvinit \
>      tinylogin

Hi Mark,

According this list, expand with their run time depency(show in the 
attachment minimal-image-runtime-dependies.png) , and the list is:

     base-files \
     base-passwd \
     busybox \
     busybox-syslog \
     busybox-udhcpc \
     initscripts \
     makedevs \
     modutils-initscripts \
     sysvinit \
     sysvinit-pidof \
     sysvinit-inittab \
     tinylogin


When only enable eglibc libm, busybox, sysvinit and tinylogin can't be 
compiled.

busybox depends on

    * libc-crypt
    * libc-getlogin
    * libc-inet
    * libc-posix-regexp

I wonder that maybe libc-crypt can NOT be disabled?  Other 3 options can 
be disabled by closing some busybox feature and builtin commands.

sysvinit depends on

    * libc-inet
    * libc-sunrpc
    * libc-crypt

I don't how to resolve them, so as you said, remove it and use busybox 
init instead.

tinylogin depends on

    * libc-crypt
    * libc-utmp
    * libc-getlogin

I am trapped here, and could you give me some more help here, please?

The picture named eglibc-options-deps-for-minimal-image.png in 
attachment is the packages depends on every eglibc option that required 
by other packages.

There are some other dependencies cause problems.
linux-yocto requires elfutils python and perl.

elfutils requires gettext and gettext depends on:

    * libc-locale-code
    * libc-spawn
    * libc-getlogin

python requires ncurses and openssl.

    * ncurses could be update bb file to choose support wchar or not.
    * openssl depends on:
          o libc-inet
          o libc-nsswitch


perl depends on:

    * libc-crypt
    * libc-fcvt
    * libc-inet
    * libc-utmp


How to remove these dependencies?  One way is to remove the "elfutils 
python perl" from linux-yocto depencies, and the other is to disable 
related features of these packages, and I wonder this is too hard to finish.

Thanks a lot.

Regards,
Kai





> First see if you can compile the above with a minimal eglibc configuration.  If
> not I can help you work through those issues..  If you can, you SHOULD see a
> fairly dramatic decrease in size.
>
> --Mark
>
>> Thanks a lot!
>>
>> I made a mistake that try eglibc configurability in a directory which
>> has build core-image-minimal, so the packages which depend on eglibc
>> didn't rebuild, and I didn't find the dependency before. I am sorry!
>>
>> Regards,
>> Kai

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20110617/a91b1b91/attachment-0002.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: eglibc-options-deps-for-minimal-image.png
Type: image/png
Size: 280448 bytes
Desc: not available
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20110617/a91b1b91/attachment-0004.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: minimal-image-runtime-dependies.png
Type: image/png
Size: 117500 bytes
Desc: not available
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20110617/a91b1b91/attachment-0005.png>


More information about the Openembedded-core mailing list