Re: [PATCH v5] env-update: create systemd user-session environment definition
Zac Medico <[email protected]>
| Newsgroups | gmane.linux.gentoo.portage.devel |
|---|---|
| Message-ID | <[email protected]> |
On 9/5/20 12:18 AM, Florian Schmaus wrote: > Portage's env-update currently transforms the environment information > from /etc/env.d into /etc/profile.env, which is typically sourced by > every user session, setting up its environment. > > However, /etc/profile.env is not sourced by systemd user > services. Instead, for the definition of a systemd user session > environment, the 'environment.d' machinery exists. Unfortunately, up > to now, env-update does not produce a profile.env equivalent for this > machinery, causing issues for systemd user services. For example, an > emacs daemon run as user systemd service does not have a complete > PATH (bug #704412 [1]), because some PATH components are injected by > packages via /etc/env.d. For example, an LLVM ebuild may set > PATH="/usr/lib/llvm/9/bin". > > This commit changes env-update so that a systemd user session > environment configuration file named > > /etc/environment.d/10-gentoo-env.conf > > is created. > > Thanks to Michael 'veremitz' Everitt, Arfrever Frehtes Taifersar > Arahesis, Ulrich Müller, Joakim Tjernlund, and Zac Medico for the > useful feedback. > > 1: https://bugs.gentoo.org/704412 > > Closes: https://bugs.gentoo.org/704416 > Signed-off-by: Florian Schmaus <[email protected]> > --- > > Notes: > - Shorten created filename to 10-gentoo-env.conf > - Minor fixes in the commit message > - Use atomic_ofstream() > - Use os.makedirs() (Thanks Zac) > > lib/portage/util/env_update.py | 42 +++++++++++++++++++++++++++++++--- > 1 file changed, 39 insertions(+), 3 deletions(-) > > diff --git a/lib/portage/util/env_update.py b/lib/portage/util/env_update.py > index f130b6f6b..ab3caee47 100644 > --- a/lib/portage/util/env_update.py > +++ b/lib/portage/util/env_update.py > @@ -333,14 +333,16 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, > > del specials["LDPATH"] > > - penvnotice = "# THIS FILE IS AUTOMATICALLY GENERATED BY env-update.\n" > - penvnotice += "# DO NOT EDIT THIS FILE. CHANGES TO STARTUP PROFILES\n" > + notice = "# THIS FILE IS AUTOMATICALLY GENERATED BY env-update.\n" > + notice += "# DO NOT EDIT THIS FILE." > + penvnotice = notice + " CHANGES TO STARTUP PROFILES\n" > cenvnotice = penvnotice[:] > penvnotice += "# GO INTO /etc/profile NOT /etc/profile.env\n\n" > cenvnotice += "# GO INTO /etc/csh.cshrc NOT /etc/csh.env\n\n" > > #create /etc/profile.env for bash support > - outfile = atomic_ofstream(os.path.join(eroot, "etc", "profile.env")) > + profile_env_path = os.path.join(eroot, "etc", "profile.env") > + outfile = atomic_ofstream(profile_env_path) > outfile.write(penvnotice) > > env_keys = [x for x in env if x != "LDPATH"] > @@ -353,6 +355,40 @@ def _env_update(makelinks, target_root, prev_mtimes, contents, env, > outfile.write("export %s='%s'\n" % (k, v)) > outfile.close() > > + # Create the systemd user environment configuration file > + # /etc/environment.d/10-gentoo-env.conf with the > + # environment configuration from /etc/env.d. > + systemd_environment_dir = os.path.join(eroot, "etc", "environment.d") > + os.makedirs(systemd_environment_dir, exist_ok=True) > + > + systemd_gentoo_env_path = os.path.join(systemd_environment_dir, > + "10-gentoo-env.conf") > + systemd_gentoo_env = atomic_ofstream(systemd_gentoo_env_path) > + try: > + senvnotice = notice + "\n\n" > + systemd_gentoo_env.write(senvnotice) > + > + for env_key in env_keys: > + env_key_value = env[env_key] > + > + # Skip variables with the empty string > + # as value. Those sometimes appear in > + # profile.env (e.g. "export GCC_SPECS=''"), > + # but are invalid in systemd's syntax. > + if not env_key_value: > + continue > + > + # Transform into systemd environment.d > + # conf syntax, basically shell variable > + # assignment (without "export "). > + line = f"{env_key}={env_key_value}\n" > + > + systemd_gentoo_env.write(line) > + except: > + systemd_gentoo_env.abort() > + raise > + systemd_gentoo_env.close() > + > #create /etc/csh.env for (t)csh support > outfile = atomic_ofstream(os.path.join(eroot, "etc", "csh.env")) > outfile.write(cenvnotice) > Thanks, merged: https://gitweb.gentoo.org/proj/portage.git/commit/?id=45a5982fe8076066323e91f6b5fe860f3a429f9f -- Thanks, Zac
signature.asc
(application/pgp-signature, 981 B)
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQKTBAEBCgB9FiEE8OgXaltWzqgSupCu0HX7jBBKPSAFAl9Wyv5fFIAAAAAALgAo aXNzdWVyLWZwckBub3RhdGlvbnMub3BlbnBncC5maWZ0aGhvcnNlbWFuLm5ldEYw RTgxNzZBNUI1NkNFQTgxMkJBOTBBRUQwNzVGQjhDMTA0QTNEMjAACgkQ0HX7jBBK PSDEMg//bp07ikXqyndQRJyCL4kKEe8hbfi+QB8sMxwHGGjhG4zqeBRGC9Vzysv5 bREqBELmwE1mNauDA9BqhdAoGXsFfhaMYE8lUt3GgpUomtDZzi3UEG0ba/Qn27IB QdCYcvPBgZPzgswJ4bXJaOE4OsjUGFIoEDrD9TwFxy+TzRzfAO4A8Bxl6r5xtbCI E8URFrsXu6qbyVM92D8x/EgNrkDFmOIMFxZZ6ZfMdNpZbh+ZAEhE+dJFWOr+dDVz glzJ3iP9QtnbwsuZpQudvVdC4CmUILbNpr93NGhUgKoLgAbe/0dIyWL3hIWLY2u7 ASmap1syPJIVKWEdH860dtWs75LKKD627Rmn7KLGzsogzrC717TUK5b3uBjkg0hr kLSZexiENfNKj20ejVwkYw7swHwK/0CnCZwA4F/AgRrM3CjWlEYJeJd/jE8v5bQB WQs2TsMCyVq+hUiBpwfdPWWbSSWZzcc0CnWYTAjpekTgvKUhFRrZP6B7kzm5VA1n tMVJuIB/pY+YyKb7FpziFYVgXtxjXFoRED4eOMTXE+EeVSY2kKk4Au25ouPAs3DZ j9tnDEvOjBtxtPJUawta823Zptwzh6kmFcF8HM+5bj48XlrOcGhgRjs1MI7DZ8N1 jl5EZc956v1AtjtsfWRJTqsAMsMsDl0mhHuru02sW0/FkN+W8Ig= =ZYFP -----END PGP SIGNATURE-----