On Thu, Jan 30, 2020 at 6:40 PM Michael Biebl <bi...@debian.org> wrote:

> Hi Felipe
>
> Am 30.01.20 um 22:30 schrieb Felipe Sateler:
> >
> >
> > On Thu, Jan 30, 2020 at 1:39 PM Michael Biebl <bi...@debian.org
> > <mailto:bi...@debian.org>> wrote:
> >
> >     Am 28.01.20 um 17:27 schrieb Ansgar:
> >     > On Tue, 2020-01-28 at 16:51 +0100, Michael Biebl wrote:
> >     >> Am 28.01.20 um 14:59 schrieb Ansgar:
> >     >>> I tried linking systemd-{sysusers,tmpfiles} statically against
> >     >>> systemd's private library earlier this month.  It increases the
> >     >>> binaries size by ~100 kB (compared to Installed-Size: 14.2 MB of
> >     >>> systemd that is just one percent).
> >     >>
> >     >> Is that 100K per binary?
> >     >
> >     > I checked my notes at it was 100 kB per binary: they are 212 kB
> larger
> >     > (sysusers 51 kB → 137 kB, tmpfiles 84 kB → 212 kB); I tested with
> >     > systemd 243-8.
> >     >
> >     > It might be possible to make it a bit smaller if one was to somehow
> >     > link libsystemd0 for functions available there (libsystemd-shared
> >     > currently duplicates those).
> >
> >
> > That is not possible. There is global state that is not to be shared.
> > See https://github.com/systemd/systemd/pull/3516#issuecomment-227482524
>
> What's your thought on how to solve this libsystemd-shared issue should
> we consider splitting out systemd-{sysusers,tmpfiles}
>
> - link statically (and carry a downstream patch for eternity)
> - move libsystemd-shared to systemd-utils and risk the breakage that can
> result from a partial/aborted upgrade
> - copy, instead of move, the binaries + libsystemd-shared and make the
> resulting systemd-utils package Conflict with systemd (instead of having
> systemd depend on systemd-utils)
> - something else?
>

I tried linking statically the "can run without systemd-pid1 tools" with
the attached patch.

Disk usage appears to increase by about 400 kb:
% dpkg --info systemd_244.1-1_amd64.deb|grep Installed

 Installed-Size: 13908
% dpkg --info ../systemd_244-3_amd64.deb|grep Installed
 Installed-Size: 14319

Maybe upstream can be persuaded to merge something like this?

-- 

Saludos,
Felipe Sateler
diff --git a/meson.build b/meson.build
index b8dff8cd94..39cef6b301 100644
--- a/meson.build
+++ b/meson.build
@@ -1493,6 +1493,29 @@ make_autosuspend_rules_py = find_program('tools/make-autosuspend-rules.py')
 
 ############################################################
 
+
+libutil = static_library(
+        'util',
+        [
+                'src/shared/acl-util.c',
+                'src/shared/enable-mempool.c',
+                'src/shared/id128-print.c',
+                'src/shared/pager.c',
+                'src/shared/path-lookup.c',
+                'src/shared/pretty-print.c',
+                'src/shared/spawn-ask-password-agent.c',
+                'src/shared/spawn-polkit-agent.c',
+                'src/shared/specifier.c',
+                'src/shared/sysctl-util.c',
+                'src/shared/sysctl-util.h',
+                'src/shared/tmpfile-util-label.c',
+                'src/shared/uid-range.c',
+                'src/shared/verbs.c',
+        ] + id128_sources,
+        link_with: [libbasic, libsystemd_static],
+        include_directories: includes
+)
+
 # binaries that have --help and are intended for use by humans,
 # usually, but not always, installed in /bin.
 public_programs = []
@@ -1537,6 +1560,7 @@ test_dlopen = executable(
         include_directories : includes,
         link_with : [libbasic],
         dependencies : [libdl],
+        b_lto: false,
         build_by_default : want_tests != 'false')
 
 foreach tuple : [['myhostname', 'ENABLE_NSS_MYHOSTNAME'],
@@ -2407,7 +2431,7 @@ install_data('src/sleep/sleep.conf',
 exe = executable('systemd-sysctl',
                  'src/sysctl/sysctl.c',
                  include_directories : includes,
-                 link_with : [libshared],
+                 link_with : [libutil],
                  install_rpath : rootlibexecdir,
                  install : true,
                  install_dir : rootlibexecdir)
@@ -2440,7 +2464,7 @@ public_programs += exe
 exe = executable('systemd-escape',
                  'src/escape/escape.c',
                  include_directories : includes,
-                 link_with : [libshared],
+                 link_with : [libutil],
                  install_rpath : rootlibexecdir,
                  install : true,
                  install_dir : rootbindir)
@@ -2474,7 +2498,7 @@ executable('systemd-cgroups-agent',
 exe = executable('systemd-id128',
                  'src/id128/id128.c',
                  include_directories : includes,
-                 link_with : [libshared],
+                 link_with : [libutil],
                  install_rpath : rootlibexecdir,
                  install : true)
 public_programs += exe
@@ -2482,7 +2506,7 @@ public_programs += exe
 exe = executable('systemd-path',
                  'src/path/path.c',
                  include_directories : includes,
-                 link_with : [libshared],
+                 link_with : [libutil],
                  install_rpath : rootlibexecdir,
                  install : true)
 public_programs += exe
@@ -2580,7 +2604,7 @@ if conf.get('ENABLE_SYSUSERS') == 1
         exe = executable('systemd-sysusers',
                          'src/sysusers/sysusers.c',
                          include_directories : includes,
-                         link_with : [libshared],
+                         link_with : [libutil],
                          install_rpath : rootlibexecdir,
                          install : true,
                          install_dir : rootbindir)
@@ -2591,7 +2615,7 @@ if conf.get('ENABLE_TMPFILES') == 1
         exe = executable('systemd-tmpfiles',
                          'src/tmpfiles/tmpfiles.c',
                          include_directories : includes,
-                         link_with : [libshared],
+                         link_with : [libutil],
                          dependencies : [libacl],
                          install_rpath : rootlibexecdir,
                          install : true,

Reply via email to