2015-07-13 17:51 GMT+02:00 Christopher Larson <clar...@kergoth.com>: > > On Mon, Jul 13, 2015 at 3:23 AM, Pau Espin Pedrol <pespin.s...@gmail.com> > wrote: >> >> I am not sure which is the behavior with those paths right now and how >> it should be. >> >> I just checked this: >> >> http://www.freedesktop.org/software/systemd/man/systemd.unit.html#Unit%20Load%20Path >> >> So, it seems according to documentation that system services should be >> installed under /usr/lib/systemd/system, but currently they are >> installed in /lib/systemd/system in my generated image. Is that a >> expected behaviour? Shouldn't we try to follow documentation? I see >> that sometimes /lib/systemd/system path is appended to the dirs in >> systemdsystemunitpath, but it's not stated in the documentation, >> that's a bit strange. > > > Depends on the distro. Ubuntu, for example, uses /lib/systemd. > >> >> For user services, /usr/lib/systemd/user is already being used as >> stated in docs. >> >> Now, when multilib comes in, I get lost. If I understand correctly, >> with multilib enabled we have too /lib64 and /usr/lib64. Are then >> systemd service files suppoused to be installed in /usr/lib/systemd/ >> or in /usr/lib64/systemd/ ? If I undersood correctly your comment you >> meant they should still be going into /usr/lib/systemd right? > > > Yes, we don’t want arch-independent files going into arch-specific dirs. > >> Now, talking about bitbake.conf. I see there's already a line with the >> following: >> export systemd_unitdir = "/lib/systemd" >> >> So, apart from your nonarch issue, I think it would also be a good >> idea to split systemd_unitdir into system and user, as done by >> provided pc in systemd (src/core/systemd.pc.in): >> 1- If still want system services to be in /lib and user services to be >> in /usr/lib: >> export nonarch_libdir = "${prefix}/lib" >> >> export systemd_system_unitdir = "${nonarch_base_libdir}/systemd/system" >> export systemd_user_unitdir = "${nonarch_libdir}/systemd/user" >> or >> export systemd_system_unitdir = "${nonarch_base_libdir}/systemd" >> export systemd_user_unitdir = "${nonarch_libdir}/systemd" >> >> >> 2- If you want both in /usr/lib: >> export nonarch_libdir = "${prefix}/lib" >> >> export systemd_system_unitdir = "${nonarch_libdir}/systemd/system" >> export systemd_user_unitdir = "${nonarch_libdir}/systemd/user" >> or >> export systemd_system_unitdir = "${nonarch_libdir}/systemd" >> export systemd_user_unitdir = "${nonarch_libdir}/systemd" > > > I don’t really see why one would want some of their service files in one > libdir and the rest in another. Is there a reason to not just obey > systemd_unitdir in pulseaudio?
Because they are actually a different type of service files (system vs user) and they are handled in a different way by systemd. For instance, if you check the list of paths in which systemd looks for services, you can see that for system services it actually checks /lib/systemd/system, but it doesn't for user ones (/usr/lib/systemd/user): In systemd, src/shared/path-lookup.c: /* For the user units we include share/ in the search * path in order to comply with the XDG basedir spec. * For the system stuff we avoid such nonsense. OTOH * we include /lib in the search path for the system * stuff but avoid it for user stuff. */ if (running_as == MANAGER_USER) { if (personal) unit_path = user_dirs(generator, generator_early, generator_late); else unit_path = strv_new( /* If you modify this you also want to modify * systemduserunitpath= in systemd.pc.in, and * the arrays in user_dirs() above! */ STRV_IFNOTNULL(generator_early), USER_CONFIG_UNIT_PATH, "/etc/systemd/user", "/run/systemd/user", STRV_IFNOTNULL(generator), "/usr/local/lib/systemd/user", "/usr/local/share/systemd/user", USER_DATA_UNIT_PATH, "/usr/lib/systemd/user", "/usr/share/systemd/user", STRV_IFNOTNULL(generator_late), NULL); } else unit_path = strv_new( /* If you modify this you also want to modify * systemdsystemunitpath= in systemd.pc.in! */ STRV_IFNOTNULL(generator_early), SYSTEM_CONFIG_UNIT_PATH, "/etc/systemd/system", "/run/systemd/system", STRV_IFNOTNULL(generator), "/usr/local/lib/systemd/system", SYSTEM_DATA_UNIT_PATH, "/usr/lib/systemd/system", #ifdef HAVE_SPLIT_USR "/lib/systemd/system", #endif STRV_IFNOTNULL(generator_late), NULL); And also in systemd, src/core/systemd.pc.in: systemdsystemunitpath=${systemdsystemconfdir}:/etc/systemd/system:/run/systemd/system:/usr/local/lib/systemd/system:${systemdsystemunitdir}:/usr/lib/systemd/system:/lib/systemd/system systemduserunitpath=${systemduserconfdir}:/etc/systemd/user:/run/systemd/user:/usr/local/lib/systemd/user:/usr/local/share/systemd/user:${systemduserunitdir}:/usr/lib/systemd/user:/usr/share/systemd/user So, pulseaudio is intended to be used as a systemd user service, not as a systemd system service, and that means it needs to end up in /usr/lib/systemd/user and not in /lib/systemd/system/. All these changes are part of my efforts to improve systemd user service support in OE, which is kind of bad nowadays imho. > -- > Christopher Larson > clarson at kergoth dot com > Founder - BitBake, OpenEmbedded, OpenZaurus > Maintainer - Tslib > Senior Software Engineer, Mentor Graphics -- _______________________________________________ Openembedded-core mailing list Openembedded-core@lists.openembedded.org http://lists.openembedded.org/mailman/listinfo/openembedded-core