Systemd
      
      
        
          Introduction to systemd
        
        
          Even though systemd was built in
          LFS, there are some features provided by the package that some BLFS
          packages need, but their dependencies didn't fit into LFS.
        
        
          There are two reasons why systemd
          needs to be rebuilt. Some packages require GUdev library to be
          present in order to compile while others expect working
          systemd-logind
          service in order to work properly. To build the GUdev library, make
          sure that you have installed first set of required dependencies. In
          order to get systemd-logind to work properly,
          make sure that you have installed second set of required
          dependencies.
        
        
          Unlike other packages in BLFS, there is no set version of
          systemd in this page's title and
          no set version specified for download. Version updates to
          systemd make it possible that the
          user's system may have a systemd
          version different from the one in the current LFS book. Therefore,
          users should use the version of systemd that is currently installed on their
          system.
        
        
          This package is known to build and work properly using an LFS-7.6
          systemd platform using systemd-216 source.
        
        
          Package Information
        
        
        
          Make sure you download the "compat" patch whose version matches the
          systemd version you are building.
        
        
          
          
            Note
          
          
            If you are unsure which version needs to be downloaded, issue
            systemctl --version
            in order to find out. Some of the commands below might need the
            version information. Issue the following command to store the
            systemd version number into an
            environment variable:
          
          
export SYSTEMD_VERSION=$(systemctl --version | head -n1 | awk '{print $2}')
         
        
          systemd Dependencies
        
        
          Required (GUdev)
        
        
          GLib-2.40.0 and gobject-introspection-1.40.0
        
        
          Required (Logind)
        
        
          Linux-PAM-1.1.8
        
        
          Recommended Runtime Dependency
        
        
          Polkit-0.112
        
        
          Optional
        
        
          cURL-7.37.1, elfutils-0.160, GnuTLS-3.3.7,
          GTK-Doc-1.20, libgcrypt-1.6.2,
          libidn-1.29, Python-3.4.1, Valgrind-3.10.0,
          cryptsetup, libmicrohttpd,
          libqrencode, libseccomp,
          lxml (Python Module),
          and lz4
        
        
          
          
            Note
          
          
            In order to build the systemd
            Python module, lxml package
            needs to be installed for the corresponding Python version (2 or 3). Note that
            configure defaults
            to Python 2. In order to build
            the module for Python 3, make
            sure you pass the PYTHON=python3
            environment variable to the configure command below.
          
         
        
          Optional (for rebuilding manual pages)
        
        
          libxslt-1.1.28, docbook-xml-4.5,
          and docbook-xsl-1.78.1
        
        
          User Notes: http://wiki.linuxfromscratch.org/blfs/wiki/systemd
        
       
      
        
          Installation of systemd
        
        
          First, apply the required patch:
        
        
patch -Np1 -i ../systemd-${SYSTEMD_VERSION}-compat-1.patch
        
          Rebuild systemd by running the
          following commands:
        
        
cc_cv_CFLAGS__flto=no              \
./configure --prefix=/usr          \
            --sysconfdir=/etc      \
            --localstatedir=/var   \
            --with-rootprefix=     \
            --with-rootlibdir=/lib \
            --enable-split-usr     \
            --disable-firstboot    \
            --disable-ldconfig     \
            --disable-sysusers     \
            --docdir=/usr/share/doc/systemd-${SYSTEMD_VERSION} &&
make
        
          
          
            Note
          
          
            For the best results, make sure you run the testsuite from a
            system that is booted by the same systemd version you are rebuilding.
          
         
        
          To test the results, issue: make -k
          check.
        
        
          
          
            Warning
          
          
            Installing the package will override all files installed by
            systemd in LFS. It is critical
            that nothing uses either systemd
            or Udev libraries or programs
            during the installation phrase. Best way to achieve that is to do
            the installation in the rescue mode. To switch to the rescue
            mode, issue the following command as the root user from a TTY:
          
          
systemctl start rescue.target
         
        
          Now, as the root user:
        
        
make install
        
          Move NSS libraries to /lib by running
          the following command as the root
          user:
        
        
mv -v /usr/lib/libnss_{myhostname,mymachines,resolve}.so.2 /lib
        
          Remove an unnecessary directory by running the following command as
          the root user:
        
        
rm -rfv /usr/lib/rpm
        
          Remove a reference to a non-existent group by running the following
          command as the root user:
        
        
sed -i "s:0775 root lock:0755 root root:g" /usr/lib/tmpfiles.d/legacy.conf
       
      
        
          Configuring systemd
        
        
          If the systemd PAM module was
          built, the /etc/pam.d/system-sesion
          file needs to be modified and a new file needs to be created in
          order for systemd-logind to work correctly.
          To accomplish that, run the following commands as the root user:
        
        
cat >> /etc/pam.d/system-session << "EOF"
# Begin Systemd addition
    
session   required    pam_loginuid.so
-session   optional    pam_systemd.so
# End Systemd addition
EOF
cat > /etc/pam.d/systemd-user << "EOF"
# Begin /etc/pam.d/systemd-user
account  required pam_access.so
account  include  system-account
session  required pam_env.so
session  required pam_limits.so
session  include  system-session
auth     required pam_deny.so
password required pam_deny.so
# End /etc/pam.d/systemd-user
EOF
        
          At this point it would be a nice idea to reboot to test if the
          reinstallation was successful.
        
       
      
        
          Contents
        
        
          A list of the installed files, along with their short descriptions
          can be found at 
          ../../../../lfs/view/7.6-systemd/chapter06/systemd.html#contents-systemd.
        
        
          Below are listed newly installed libraries and directories along
          with short descriptions.
        
        
          
            
              Installed Programs:
              None
            
            
              Installed Libraries:
              libgudev-1.0.so and pam_systemd.so (in
              /lib/security)
            
            
              Installed Directories:
              /usr/include/gudev-1.0 and
              /usr/share/gtk-doc/html/gudev
            
           
         
        
          
            Short Descriptions
          
          
            
            
              
                | 
                   
                    libgudev-1.0.so
                   
                 | 
                
                   
                    is a GObject-based wrapper library for libudev.
                   
                 | 
              
              
                | 
                   
                    pam_systemd.so
                   
                 | 
                
                   
                    is a PAM module used to register user sessions with the
                    systemd login manager,
                    systemd-logind.
                   
                 | 
              
            
          
         
       
      
        Last updated on 2014-08-23 15:42:10 -0700