A 를 설치하려하면, B 가 설치되고, B 는 C 를 요구하고, C 는 D 가 없으면 안된다고 하고..
이른바 ‘의존성(Dependency)’ 은 리눅스계에서 양날검과 같은 존재다. 이게 있음으로 꾸러미를 통해 설치가 편해졌지만, 반대로 이로 인해 복잡한 문제가 생기기도 한다.
그 고민은 개발자(Developer, Packager)들의 몫이고..
일개 사용자에 불과한 내겐 가끔, 궁금증이 뭉실 뭉실 떠오를 때가 있긴 하다. 이 의존성 관계를 좀 더 일목요연하게 알 수는 없을까?
물론, pacman 선택사항에서 확인을 할 순 있다.
% pacman -Sii pipewire 저장소 : extra 이름 : pipewire 버전 : 1:0.3.58-1 설명 : Low-latency audio/video router and processor 아키텍처 : x86_64 URL : https://pipewire.org 라이선스 : MIT LGPL 모음들 : 없음 다음을 제공 : libpipewire-0.3.so=0-64 다음에 의존 : alsa-card-profiles libdbus-1.so=3-64 libglib-2.0.so=0-64 libncursesw.so=6-64 libsndfile.so=1-64 libudev.so=1-64 libusb-1.0.so=0-64 libasound.so=2-64 libsystemd.so=0-64 libbluetooth.so=3-64 libsbc.so=1-64 libldacBT_enc.so=2-64 libfreeaptx.so=0-64 libfdk-aac.so=2-64 libopus.so=0-64 liblilv-0.so=0-64 libwebrtc_audio_processing.so=1-64 선택 의존성 : pipewire-docs: Documentation pipewire-session-manager: Session manager pipewire-alsa: ALSA configuration pipewire-jack: JACK support pipewire-pulse: PulseAudio replacement gst-plugin-pipewire: GStreamer plugin pipewire-zeroconf: Zeroconf support pipewire-v4l2: V4L2 interceptor pipewire-x11-bell: X11 bell realtime-privileges: realtime privileges with rt module rtkit: realtime privileges with rtkit module 다음이 요구 : fluidsynth gamescope gnome-remote-desktop gst-plugin-pipewire helvum lib32-pipewire mpd muffin mutter mutter6 obs-studio pipewire-jack pipewire-media-session pipewire-pulse pipewire-v4l2 pipewire-x11-bell pipewire-zeroconf qpwgraph telegram-desktop weston wireplumber xdg-desktop-portal xdg-desktop-portal-wlr 다음의 선택 의존성 : chromium electron electron17 electron18 electron19 google-chrome google-chrome-dev qmmp qt5-webengine qt6-webengine sdl2 다음과 충돌 : 없음 다음을 대체 : 없음 다운로드 크기 : 1748.06 KiB 설치된 크기 : 8444.79 KiB 꾸러미 만든이 : Jan Alexander Steffens (heftig) <heftig@archlinux.org> 빌드 날짜 : 없음 MD5 합 : 1eedf0f270b561bd2b3900a5be42e89b SHA-256 합 : eef06ae577cecbe03119747b980335157e0dcd9a7aef58034ff2552d2b4ed54f 서명들 : 3B94A80E50A477C7
(‘다음에 의존’은 ‘Depends’, ‘다음이 요구’ 는 ‘Required by’ 의 우리말 번역이다.)
pipewire 는 fluidsynth 를 비롯, wireplumber 등등이 요구하고 있다. 다시 말해, wireplumber 를 설치하려고 하면, 꾸러미 관리자는 wireplumber 가 의존하고 있는 꾸러미인 pipewire 가 있는지 확인한 후, 없다면 pipewire 를 먼저 설치한다.
그런데..
의존성이란게 꾸러미 두서너개 사이로만 얽혀있는게 아니기 때문에, 내 컴퓨터에 설치된 pipewire 가 도대체 어떤 경로로 들어와 자리를 잡게 되었는지.. pacman 결과로만 파악하기는 쉽지가 않다.
그리하여 나온게 바로 pactree. -r
을 주면, 내가 원하는 결과를 쉽게 확인할 수 있다.
% pactree pipewire -r pipewire ├─fluidsynth │ ├─gst-plugins-bad │ │ └─kamoso │ │ └─kde-multimedia-meta │ │ └─kde-applications-meta │ └─minuet │ └─kde-education-meta │ └─kde-applications-meta ├─gst-plugin-pipewire ├─pipewire-pulse │ ├─pavucontrol-qt │ ├─plasma-pa │ │ └─plasma-meta │ └─pulseaudio-alsa ├─pipewire-v4l2 ├─wireplumber │ ├─gst-plugin-pipewire │ ├─kwin │ │ └─plasma-workspace │ │ ├─kdeplasma-addons │ │ │ └─plasma-meta │ │ ├─kget │ │ │ └─kde-network-meta │ │ │ └─kde-applications-meta │ │ ├─khotkeys │ │ │ └─plasma-meta │ │ ├─plasma-browser-integration │ │ │ └─plasma-meta │ │ ├─plasma-nm │ │ │ └─plasma-meta │ │ ├─plasma-pa │ │ ├─plasma-vault │ │ │ └─plasma-meta │ │ ├─plasma-wayland-session │ │ ├─powerdevil │ │ │ └─plasma-meta │ │ ├─systemsettings │ │ │ ├─kgamma5 │ │ │ │ └─plasma-meta │ │ │ ├─kinfocenter │ │ │ │ ├─plasma-disks │ │ │ │ │ └─plasma-meta │ │ │ │ └─plasma-meta │ │ │ ├─plasma-desktop │ │ │ │ └─plasma-meta │ │ │ ├─plasma-firewall │ │ │ │ └─plasma-meta │ │ │ ├─plasma-thunderbolt │ │ │ │ └─plasma-meta │ │ │ └─sddm-kcm │ │ │ └─plasma-meta │ │ └─telepathy-kde-desktop-applets │ │ └─telepathy-kde-meta │ │ └─kde-network-meta │ ├─pipewire-alsa │ ├─pipewire-pulse │ └─pipewire-v4l2 └─xdg-desktop-portal ├─flatpak └─krfb └─kde-network-meta
여기서 원흉(?)을 알 수 있다.
pipewire 는 wireplumber 가 요청했고, wireplumber 는 kwin 이, kwin 은 plasma-workspace 가 초청했고, plasma-workspace 는 kdeplasma-addons 가, 그리고 최종보스, 즉 kdeplasma-addons 를 부른 흉수는 plasma-meta 였다.
물론, plasma-meta
설치 명령은 내가, 내 손으로 직접 내렸었다. 이게 연쇄반응을 불러 일으키며 수많은 꾸러미들이 자동 설치가 되었다!!
pactree <꾸러미> 는 하향으로 연관성 관계를 보여준다. -r 을 붙이면 상향. 따라서, 이게 왜, 어떻게 설치됐을까를 알아보려면 -r 을 붙이면 된다.
위 최종보스(?)인 plasma-meta 로 실험해보면, pactree plasma-meta
는 꼬리에 꼬리를 문, 연관된 꾸러미들의 향연을 볼 수 있다.
반대로, pactree plasma-meta -r
을 하면 결과가 없다. 이걸 요구하는 꾸러미는 없다는 뜻.
그런데 한가지 궁금증.
왜 kwin 은 pipewire 가 아닌 wireplumber 를 요구할까? pipewire 가 더 상위개념인데도 불구하고..?? 원래 의존성 설계는 이렇게 하는건가?