[OE-core] [OE-Core][PATCH] systemd.bbclass: Introduce do_install_append and use systemd unitdir

Andreas Müller schnitzeltony at googlemail.com
Tue Feb 12 23:55:38 UTC 2013


On Tue, Feb 12, 2013 at 10:24 PM, Richard Purdie
<richard.purdie at linuxfoundation.org> wrote:
> On Tue, 2013-02-12 at 09:42 -0800, Khem Raj wrote:
>> systemd always uses /lib and /usr/lib to store unit files
>> so using libdir and base_libdir is incorrect. It will work
>> where libdir is usr/lib and base_libdir is /lib but wont work
>> when say its /lib64
>>
>> Additionally introduce the install append from meta-oe
>> lot of recipe appends in meta-systemd depend on that
>>
>> Signed-off-by: Khem Raj <raj.khem at gmail.com>
>> ---
>>  meta/classes/systemd.bbclass |   21 +++++++++++++++------
>>  1 file changed, 15 insertions(+), 6 deletions(-)
>>
>> diff --git a/meta/classes/systemd.bbclass b/meta/classes/systemd.bbclass
>> index e0ea65c..32cc5c2 100644
>> --- a/meta/classes/systemd.bbclass
>> +++ b/meta/classes/systemd.bbclass
>> @@ -115,11 +115,9 @@ def systemd_populate_packages(d):
>>
>>      # Check service-files and call systemd_add_files_and_parse for each entry
>>      def systemd_check_services():
>> -        base_libdir = d.getVar('base_libdir', True)
>> -        searchpaths = [oe.path.join(d.getVar("sysconfdir", True), "systemd", "system"),]
>> -        searchpaths.append(oe.path.join(d.getVar("base_libdir", True), "systemd", "system"))
>> -        searchpaths.append(oe.path.join(d.getVar("libdir", True), "systemd", "system"))
>> -        searchpaths.append(oe.path.join(d.getVar("libdir", True), "systemd", "user"))
>> +        searchpaths = '/etc/systemd/system/' + ' '
>
> Why remove sysconfdir?
>
> Also, lets standardise on one variable please. We have
> ${nonarch_base_libdir} and ${systemd_unitdir} so do we need to
> hardcode /lib and /usr/lib?
>
> I'd suggest we add ${nonarch_libdir}, standardise on those and drop
> systemd_unitdir. We use the nonarch for other non-systemd multilib work.
>
>> +        searchpaths += '/lib/systemd/system/' + ' '
>> +        searchpaths += '/usr/lib/systemd/system/' + ' '
>>          systemd_packages = d.getVar('SYSTEMD_PACKAGES', True)
>>          has_exactly_one_service = len(systemd_packages.split()) == 1
>>          if has_exactly_one_service:
>> @@ -133,7 +131,7 @@ def systemd_populate_packages(d):
>>          for pkg_systemd in systemd_packages.split():
>>              for service in get_package_var(d, 'SYSTEMD_SERVICE', pkg_systemd).split():
>>                  path_found = ''
>> -                for path in searchpaths:
>> +                for path in searchpaths.split():
>>                      if os.path.exists(oe.path.join(d.getVar("D", True), path, service)):
>>                          path_found = path
>>                          break
>> @@ -156,3 +154,14 @@ python populate_packages_prepend () {
>>      if oe.utils.contains ('DISTRO_FEATURES', 'systemd', True, False, d):
>>          systemd_populate_packages (d)
>>  }
>> +# automatically install all *.service and *.socket supplied in recipe's SRC_URI
>> +do_install_append() {
>> +     for service in `find ${WORKDIR} -maxdepth 1 -name '*.service' -o -name '*.socket'` ; do
>> +     # ensure installing systemd-files only (e.g not avahi *.service)
>> +             if grep -q '\[Unit\]' $service ; then
>> +                     install -d ${D}${systemd_unitdir}/system
>> +                     install -m 644 $service ${D}${systemd_unitdir}/system
>> +             fi
>> +     done
>> +}
>> +
>
> Please no. We have this kind of mess from the binconfig class and its
> horrible to maintain. I'm looking forward to ripping that class out
> someday.
>
> Lets just write proper do_install functions in the recipes and make them
> conditional on systemd being enabled.
>
Copying similar code in in tons of recipes is easier to maintain? We
had this before meta-systemd started and it was a mess. How about a
variable SYSTEMD_AUTO_INSTALL?="enable" for this - since it fits in
many cases.

Andreas




More information about the Openembedded-core mailing list