8.76.1. Udev のインストール
        
        
          Udev は systemd-257.8 パッケージの一部です。 ソース tarball としては
          systemd-257.8.tar.xz ファイルを用います。
        
        
          render と sgx という 2 つのグループが不要であるため、デフォルトの udev
          ルールから削除します。
        
        sed -e 's/GROUP="render"/GROUP="video"/' \
    -e 's/GROUP="sgx", //'               \
    -i rules.d/50-udev-default.rules.in
        
          Systemd を完全にインストールしていることを前提としている udev ルールを削除します。
        
        sed -i '/systemd-sysctl/s/^/#/' rules.d/99-systemd.rules.in
        
          ネットワーク設定ファイルへのパスがハードコーディングされているため、独立した udev インストールとして修正します。
        
        sed -e '/NETWORK_DIRS/s/systemd/udev/' \
    -i src/libsystemd/sd-network/network-util.h
        
          Udev をコンパイルするための準備をします。
        
        mkdir -p build
cd       build
meson setup ..                  \
      --prefix=/usr             \
      --buildtype=release       \
      -D mode=release           \
      -D dev-kvm-mode=0660      \
      -D link-udev-shared=false \
      -D logind=false           \
      -D vconsole=false
        
          
            meson オプションの意味
          
          
            - 
              --buildtype=release
- 
              
                本スイッチはデフォルトのビルドタイプ (「debug」) をオーバーライドします。
                そのデフォルトでは、最適化されていないバイナリーが生成されます。
               
- 
              -D
              mode=release
- 
              
                アップストリームが試験的なものとしている機能を無効化します。
               
- 
              -D
              dev-kvm-mode=0660
- 
              
                デフォルトの udev ルールは、全ユーザーが /dev/kvmにアクセスできるようになります。
                しかし本書ではこれは危険なものと捉えています。 本オプションはこれをオーバーライドします。
 
- 
              -D
              link-udev-shared=false
- 
              
                本オプションは、内部提供されている systemd 共有ライブラリ libsystemd-sharedを udev にリンクしないようにします。
                このライブラリは Systemd 内の数多くのライブラリが共有するものとして作られていますが、udev
                のみをインストールする際には少々おおげさなものです。
 
- 
              -D logind=false
              -D vconsole=false
- 
              
                これらのオプションは、udev ルールをいくつか生成しないようにするものです。
                そのルールは、インストールする予定としていない Systemd コンポーネントに対するものであるためです。
               
 
        
          同梱されている udev ヘルパーの一覧を取得して、それを環境変数に保存します。
          (変数をエクスポートしておくことは、厳密に言えば不要です。
          ただしこうすると、一般ユーザーによるビルドやパッケージマネージャーの利用がしやすくなります。)
        
        export udev_helpers=$(grep "'name' :" ../src/udev/meson.build | \
                      awk '{print $3}' | tr -d ",'" | grep -v 'udevadm')
        
          udev に必要となるコンポーネントのみをビルドします。
        
        ninja udevadm systemd-hwdb                                           \
      $(ninja -n | grep -Eo '(src/(lib)?udev|rules.d|hwdb.d)/[^ ]*') \
      $(realpath libudev.so --relative-to .)                         \
      $udev_helpers
        
          パッケージをインストールします。
        
        install -vm755 -d {/usr/lib,/etc}/udev/{hwdb.d,rules.d,network}
install -vm755 -d /usr/{lib,share}/pkgconfig
install -vm755 udevadm                             /usr/bin/
install -vm755 systemd-hwdb                        /usr/bin/udev-hwdb
ln      -svfn  ../bin/udevadm                      /usr/sbin/udevd
cp      -av    libudev.so{,*[0-9]}                 /usr/lib/
install -vm644 ../src/libudev/libudev.h            /usr/include/
install -vm644 src/libudev/*.pc                    /usr/lib/pkgconfig/
install -vm644 src/udev/*.pc                       /usr/share/pkgconfig/
install -vm644 ../src/udev/udev.conf               /etc/udev/
install -vm644 rules.d/* ../rules.d/README         /usr/lib/udev/rules.d/
install -vm644 $(find ../rules.d/*.rules \
                      -not -name '*power-switch*') /usr/lib/udev/rules.d/
install -vm644 hwdb.d/*  ../hwdb.d/{*.hwdb,README} /usr/lib/udev/hwdb.d/
install -vm755 $udev_helpers                       /usr/lib/udev
install -vm644 ../network/99-default.link          /usr/lib/udev/network
        
          LFS 環境において有用となるカスタムルールやサポートファイルをインストールします。
        
        tar -xvf ../../udev-lfs-20230818.tar.xz
make -f udev-lfs-20230818/Makefile.lfs install
        
          man ページをインストールします。
        
        tar -xf ../../systemd-man-pages-257.8.tar.xz                            \
    --no-same-owner --strip-components=1                              \
    -C /usr/share/man --wildcards '*/udev*' '*/libudev*'              \
                                  '*/systemd.link.5'                  \
                                  '*/systemd-'{hwdb,udevd.service}.8
sed 's|systemd/network|udev/network|'                                 \
    /usr/share/man/man5/systemd.link.5                                \
  > /usr/share/man/man5/udev.link.5
sed 's/systemd\(\\\?-\)/udev\1/' /usr/share/man/man8/systemd-hwdb.8   \
                               > /usr/share/man/man8/udev-hwdb.8
sed 's|lib.*udevd|sbin/udevd|'                                        \
    /usr/share/man/man8/systemd-udevd.service.8                       \
  > /usr/share/man/man8/udevd.8
rm /usr/share/man/man*/systemd*
        
          udev_helpers 変数をクリアします。
        
        unset udev_helpers