How to Fix Old Software Dependency Issues in Linux
මේ කියන්න යන්නෙ Linux වල old dependancy issues fix කරගන්න පුලුවන් හොඳම methord එක ගැන. පහුගිය දවසක packet Tracer install කරන්න ගියාම මට මේ විදිය සෑහෙන්න usefull කියලා තේරුනා (මගෙ os එක ubuntu 24.04). ඉතිං ඒක තව කාට හරි වටී කියලා හිතලා මේක ලියන්නෙ මං .
මේක packet tracer installation scenario එකෙන්ම පැහැදිලි කරන්නම්. මේ ක්රමය Packet Tracer වලට විතරක් නෙවෙයි, මේ වගේ legacy dependency අවුල් තියෙන ඕනම software එකකට පාවිච්චි කරන්න පුලුවන්.
The Problem
මේකෙදි example එක විදියට මං ගන්නෙ packet tracer. මේක packet tracer නෙවේ ඕනෙම old dependencies තියන software එකකට use කරන්න පුලුවන්
ඔයා Cisco එකෙන් දෙන Packet Tracer.deb file එක download කරගෙන, සුපුරුදු විදිහට install කරන්න හදනවා කියල හිතමු.
sudo dpkg -i Packet_Tracer822_amd64_signed.deb
ඊට පස්සෙ terminal එකේ මෙන්න මේ වගේ ලස්සන error message එකක් පෙන්වයි.
𝘥𝘱𝘬𝘨: 𝘥𝘦𝘱𝘦𝘯𝘥𝘦𝘯𝘤𝘺 𝘱𝘳𝘰𝘣𝘭𝘦𝘮𝘴 𝘱𝘳𝘦𝘷𝘦𝘯𝘵 𝘤𝘰𝘯𝘧𝘪𝘨𝘶𝘳𝘢𝘵𝘪𝘰𝘯 𝘰𝘧 𝘱𝘢𝘤𝘬𝘦𝘵𝘵𝘳𝘢𝘤𝘦𝘳:
𝘱𝘢𝘤𝘬𝘦𝘵𝘵𝘳𝘢𝘤𝘦𝘳 𝘥𝘦𝘱𝘦𝘯𝘥𝘴 𝘰𝘯 𝘭𝘪𝘣𝘨𝘭1-𝘮𝘦𝘴𝘢-𝘨𝘭𝘹; 𝘩𝘰𝘸𝘦𝘷𝘦𝘳:
𝘗𝘢𝘤𝘬𝘢𝘨𝘦 𝘭𝘪𝘣𝘨𝘭1-𝘮𝘦𝘴𝘢-𝘨𝘭𝘹 𝘪𝘴 𝘯𝘰𝘵 𝘪𝘯𝘴𝘵𝘢𝘭𝘭𝘦𝘥.
දැන් ඉතිං ඔයා sudo apt install libgl1-mesa-glx කියල ගැහුවට වැඩක් නෑ. මොකද ඒ package එක Ubuntu 24.04 වල official repository එකේ දැන් නෑ.
What exactly happened?
මේකට හේතුව සරලයි.
Packet Tracer එක හදල තියෙන්නෙ පරණ Ubuntu version එකක් base කරගෙන.
libgl1-mesa-glx කියන package එක දැන් පරණයි (deprecated). ඒ වෙනුවට දැන් libgl1 වගේ අලුත් packages ඇවිත්.
හැබැයි Packet Tracer එකේ installation file එක (control file) එකේ hard code කරලා තියනවා එයාට අර පරණ libgl1-mesa-glx කියන package එකම ඕනෙ කියලා.
අලුත් Linux Distro වලින් මේ වගේ පරණ, පාවිච්චි නොකරන packages අයින් කරන නිසා තමයි මේ dependency ප්රශ්නෙ එන්නෙ.
මෙතනදි dpkg වල --force-depends හරි --ignore-depends හරි දීල .deb එක install කරගන්න පුලුවන් උනත් ඊට පස්සෙ apt package corruption error එනවා අපිට ආයෙ කිසිම package එකක් install කරන්න බෑ apt වලින් ඒක fix කරන්න apt install -f ගහපු ගමන් packet tracer remove කරන්න ඉල්ලනවා ඕන්න ඕකයි පස්නෙ 😅
ඉතිං මේකට easiest solution එක තමා system එක පොඩ්ඩක් "රවට්ටන" එක. අපි libgl1-mesa-glx කියන නමින් dummy package එකක් හදනවා. මේකෙ ඇතුලෙ මුකුත්ම නෑ, නම විතරයි. මේක install කරාම dpkg හිතනවා "ආ... හරි, මම ඉල්ලපු dependency එක system එකේ තියෙනවනෙ" කියලා, ඊට පස්සෙ කිසි අවුලක් නැතුව Packet Tracer එක install වෙන්න දෙනවා.
Debian based වලදි මේ වැඩේට පට්ටම ලේසි tool එකක් තියෙනවා equivs කියලා.
Step by Step,
equivs ඉන්ස්ටෝල් කරගන්න
sudo apt update ; sudo apt install equivs
Dummy Package එකට Workspace එකක් හදන්න
Clean එකට වැඩේ කරන්න පොඩි ෆෝල්ඩර් එකක් හදාගමු.
mkdir ~/dummy-glx ; cd ~/dummy-glx
Control File එක හදන්න
දැන් equivs වලින් control file එකක් generate කරගන්න. මේ file එකෙන් තමයි අපි අපේ dummy package එකේ විස්තර දෙන්නෙ.
equivs-control glx-dummy
දැන් ඔයාගෙ ෆෝල්ඩර් එකේ glx-dummy කියල file එකක් හැදිලා ඇති. ඒක ඔයා කැමති text editor එකකින් (gedit, nano, etc.) open කරගෙන, ඇතුලෙ තියෙන ඔක්කොම අයින් කරලා පහල තියෙන ටික විතරක් දාන්න.
Section: misc
Priority: optional
Recommended by LinkedIn
Standards-Version: 3.9.2
Package: libgl1-mesa-glx
Description: Dummy package to satisfy Packet Tracer dependency.
Dummy .deb File එක Build කරන්න
දැන් අර control file එක use කරලා අපේ dummy package එක හදමු.
equivs-build glx-dummy
Dummy Package එක Install කරන්න
අන්තිමට, අපි හදපු dummy package එක install කරගන්න.
sudo dpkg -i libgl1-mesa-glx_1.0_all.deb
Let's install Packet Tracer now!
sudo dpkg -i Packet_Tracer822_amd64_signed.deb
Install උනාට පස්සෙ terminal එකේ apt install -f කියල type කරල බලන්න. වැඩේ සාර්ථකයි!
Common for RedHat too
මේ කතා කරේ Debian based වලට අදාල විසඳුමක්. ඔයා Red Hat, CentOS, Fedora වගේ OS එකක් පාවිච්චි කරන කෙනෙක් නම්, මේ වගේම වැඩක් dummy RPM package එකක් හදල කරගන්න පුලුවන්. ඒකට rpmbuild tool වගේ use කරන්න වෙනවා.
Concept එක එකයි: system එක රවට්ටලා dependency එක satisfy කරන එක.
ඉතිං ඔය විදිහට ඔයාටත් පරණ software වල එන dependency issues ගොඩ දාගන්න පුලුවන්.
Thanks for reading!