[OE-core] Question about apply eglibc configurability to create minimal image
Koen Kooi
koen at dominion.thruhere.net
Fri Jun 17 16:10:41 UTC 2011
Op 17 jun 2011, om 17:46 heeft Mark Hatle het volgende geschreven:
> On 6/17/11 5:05 AM, Kang Kai wrote:
>> 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.
>
> I would guess that there are options within busybox that are enabled that make
> use of each of these. Do you get a failure in compilation, configuration, or?
> You will likely have to shrink busybox down to a shell and a few simple
> commands, instead of the normal config.
THat should be straightforward now that we have this one: http://cgit.openembedded.org/cgit.cgi/openembedded-core/commit/?id=383d94222e8cfc85d0885f60c88c064091866296
and please don't cross-post between poky and oe-core lists...
More information about the Openembedded-core
mailing list