Linux မှာ package manager တွေကိုဘယ်လိုအသုံးပြုသလဲ
Linux distribution ပေါ်မှာမူတည်ပြီး အသုံးပြုတဲ့ package manager တွေဟာအနည်းနဲ့အများ ကွာခြားချက်တွေရှိပါတယ်။ Debian ပေါ်မှာအခြေပြုထားတဲ့ distribution တွေမှာ .deb file တွေနဲ့တွဲပြီးအသုံးပြု သော APT ဆိုတဲ့ Advanced Package Tool ကိုသုံးထားသလို Red Hat ကနေဆင်းသက်လာတဲ့ distribution မှာဆိုရင် .rpm file တွေအတွက် YUM(Yellowdog Updater Modified)/DNF(Dandified YUM) ကိုသုံးကြပြန်ပါတယ်။ ဒါ့အပြင် အခြားသော mainstream Linux distribution ထဲကနေခွဲထွက်သွားတဲ့ Arch လိုမျိုးမှာလည်း pacman ကိုအသုံးပြုကြပြန်ပါတယ်။ ဒီ့နောက်ပိုင်းမှာ ပိုပြီိးတွင်တွင်ကျယ်ကျယ် အသုံးပြုလာတဲ့ neo package manager တွေဖြစ်တဲ့ Flatpak တို့ Snap တို့လို အမျိိုးအစားတွေလည်း ရှိပြန်ပါတယ်။ ထုံးစံအတိုင်း Linux မှာက ရွေးစရာတွေအများကြီးနဲ့ ပြည့်နေတတ်ပါတယ်။ ဒါဟာလည်း opensource ကမ္ဘာက healthy competition တွေမို့ အကျိုးထူး အကျိုးမြတ်တွေရတာ end user တွေပါ။
ရွေးချယ်စရာတွေအများကြီးရှိပေမယ့်လည်း လက်တွေ့မှာ de facto standard အနေနဲ့အသုံးများနေတုန်းဖြစ်တဲ့ YUM/DNF နဲ့ APT ကိုဘယ်လိုမျိုး အသုံးပြုပြီး package manager အနေနဲ့ အသုံးချနိုင်သလဲဆိုတာ ဒီ article မှာဆွေးနွေးတင်ပြချင်ပါတယ်။
Package manager ဆိုသည်မှာ
Package manager ဆိုတဲ့ concept က Linux မှာအရင်ကတည်း ရှိနေပြီးသား tool တခုပါ။ Windows မှာတော့ အခုနောက်ပိုင်းမှာမှ Chocolatey တို့၊ Winget တို့တဖြည်းဖြည်းပေါ်လာကြပါတယ်။ ပုံမှန်အားဖြင့်ဆိုရင် Windows မှာကိုယ်လိုချင်တဲ့ software/application တခုကို အင်တာနက်ပေါ်ကနေ download ဆွဲမယ်၊ ပြီးရင် next click ... next click agree ဆိုပြီး install လုပ်ကြပါတယ်။ အဲ့လိုနဲ့ malware တွေ၊ bloatware တွေကို install လုပ်မှန်းမသိလုပ်ကြပါတော့တယ်။ Linux မှာဆိုရင် package manager တွေအသုံးပြုတဲ့အတွက် official repository ကနေလိုအပ်တဲ့ software တွေကို စိတ်ချက်လက်ချ install လုပ်လို့ရနိုင်ပါတယ်။ Unofficial repository တွေကို setup လုပ်ပြီး malware တွေရနိုင်ချေရှိသော်လည်း Linux user တယောက်အနေနဲ့ ကိုယ်ဘာဖြစ်လို့ အဲ့ unofficial repository လုပ်ထားသလဲဆိုတာ သိကြပါတယ်။ မသိရင်တော့လည်း Windows နည်းတူ၊ Linux မှာလည်း malware တို့ ransomware တို့ ကူးစက်နိုင်ချေရှိပါတယ်။ ဒါ့အပြင်... လိုအပ်တဲ့ repository တွေကို setup မလုပ်ပဲနဲ့ .deb နဲ့ .rpm file ကိုလည်း တိုက်ရိုက် install လုပ်နိုင်ပါတယ်။ ပုံမှန်အားဖြင့်ကတော့ လုပ်ရိုးလုပ်စဉ်မဟုတ်ပါ။ သို့သော်... အချို့သော software/application တွေကို အဲ့နည်းအတိုင်းနဲ့ပဲ install လုပ်ကြပါတယ်။
Windows မှာ .exe file တွေကို install လုပ်တဲ့အခါ အဲ့ဒီ installer ထဲမှာလိုအပ်တဲ့ utility တွေ၊ tool တွေတခါတည်းပါလာပြီးသားပါ။ သို့သော်... Linux မှာက package manager တွေရဲ့တာဝန်က လိုအပ်တဲ့ dependencies ကို manage လုပ်ပေးပါတယ်။ ကိုယ် packaging လုပ်တဲ့အခါမှာ ဘာတွေလိုအပ်သလဲဆိုတာ ပြောပေးလိုက်ရုံပဲဖြစ်ပါတယ်။ လိုအပ်တဲ့ အရာတွေအားလုံးကို သူဟာသူ အရင်ဆုံး install လုပ်ပြီးတော့မှ လိုရင်းဖြစ်တဲ့ software/application ကို install ဆက်လုပ်ပါတယ်။ ဒါ့အပြင် repository configuration မှာဘယ်် repository ကို subscribe လုပ်ချင်သလဲပေါ်မူတည်ပြီး လိုအပ်တဲ့ အခြား package တွေ dependency တွေကို download ဆွဲယူပါတယ်။ Centralised repository ဖြစ်တဲ့အတွက် အင်တာနက်ပေါ်ကတွေ့ကရာ .exe file ထက်တော့ အနည်းငယ်ပိုပြီးစိတ်ချနိုင်ပါတယ်။ Security အတွက် gpg ကိုအသုံးပြုပြီး အဲ့ဒီ repository ကို validate လုပ်နိုင်ပါသေးတယ်။ Package တွေဟာ အကုန်လုံး central location တခုတည်းမှာရှိတဲ့အတွက် ကိုယ်ရှာချင်တဲ့ application တွေကိုလည်း package manager တွေအသုံးပြုပြီး ရှာဖွေနိုင်ပြန်ပါတယ်။ နောက်တခုက ကိုယ့် system မှာဘယ် package ကို install လုပ်ထားသလဲဆိုတဲ့ ကိစ္စကိုလည်း package manager ကပဲတာဝန်ယူပြီး system consistency ဖြစ်ဖို့အတွက် ထိန်းသိမ်းပေးပြန်ပါတယ်။ ဒီတော့... package manager ရဲ့လုပ်ဆောင်နိုင်စွမ်းဟာ Linux system တခုအတွက် တော်တော်လေးအရေးပါပါတယ်။ အောက်မှာ Fedora ရဲ့ out-of-the-box YUM repo configuration ကို ဥပမာတခုအနေနဲ့ပြထားပါတယ်။
tyla@fedora:~$ cat /etc/yum.repos.d/fedora.repo
[fedora]
name=Fedora $releasever - $basearch
#baseurl=http://download.example/pub/fedora/linux/releases/$releasever/Everything/$basearch/os/
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch
enabled=1
countme=1
metadata_expire=7d
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False
[fedora-debuginfo]
name=Fedora $releasever - $basearch - Debug
#baseurl=http://download.example/pub/fedora/linux/releases/$releasever/Everything/$basearch/debug/tree/
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-debug-$releasever&arch=$basearch
enabled=0
metadata_expire=7d
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=False
[fedora-source]
name=Fedora $releasever - Source
#baseurl=http://download.example/pub/fedora/linux/releases/$releasever/Everything/source/tree/
metalink=https://mirrors.fedoraproject.org/metalink?repo=fedora-source-$releasever&arch=$basearch
enabled=0
metadata_expire=7d
repo_gpgcheck=0
type=rpm
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch
skip_if_unavailable=FalseRPM package နဲ့ repository ဖြစ်ဖို့ပြင်ဆင်ပုံ
ကြိုတင်ပြင်ဆင်မူ
Fedora Packager - စာရေးသူက Fedora ကိုအသုံးပြုပြီး rpm package တခုကိုထုပ်ပိုးပြင်ဆင်ပြမှာဖြစ်တဲ့အတွက် Fedora မှာအသုံးပြုနိုင်တဲ့ package တွေကိုအရင်ဆုံး install လုပ်ဖို့လိုပါလိမ့်မယ်။ Fedora မှာတော့
sudo dnf install fedora-packager -yသို့မဟုတ်sudo yum install fedora-packager -yဆိုပြီး install လုပ်ပေးလိုက်ရုံပါပဲ။ အဲ့ဒီ package ထဲမှာလိုအပ်တဲ့ components တွေအကုန်ပါတာမို့ RPM package တခုကိုပြင်ဆင်ဖို့အဆင်သင့်ဖြစ်ပါပြီ။Ansible - Ansible မှာ role ဆိုတဲ့ concept တခုရှိပါတယ်။ Ansible automation မှာ role တွေဟာ ထပ်ခါထပ်ခါပြန်ပြီး အသုံးပြုနိုင်ဖို့အတွက် အရေးပါတဲ့အရာတခုပါ။ အောက်တွင်ဖော်ပြသွားမယ့် demo မှာအဲ့ဒီ role တွေကို create လုပ်ပြီး RPM package တခုအနေနဲ့ distribute လုပ်နိုင်အောင်ဘယ်လိုပြင်ဆင်နိုင်သလဲဆိုတာ ဖော်ပြမှာဖြစ်တဲ့အတွက် ဒီနေရာမှာ Ansible ကိုအရင် install လုပ်ခိုင်းထားခြင်းဖြစ်ပါတယ်။ မှတ်ချက် - Ansible မှာ reusable role တွေကို အလွယ်တကူ ဖြန့်ဝေနိုင်တဲ့ Ansible Galaxy ရှိပါတယ်။ သို့သော်လည်း အချို့သောလုပ်ငန်းစဉ်တွေမှာ Ansible Galaxy ကိုအဆင်မပြေနိုင်တဲ့အခါ၊ Red Hat ရဲ့ Ansible Automation Hub အတွက် subscription မရှိတဲ့အခါတွေမှာ အခုလိုမျိုး RPM ကိုအသုံးပြုပြီး Ansible role တွေကိုအလွယ်တကူ distribute လုပ်နိုင်ပါတယ်။ Ansible Automation Platform မှာ Automation Hub အပြင်အခြားသော component တွေပါဝင်ပါတယ်။ ဒီနေရာမှာတော့ Ansible role နဲ့ပတ်သတ်ပြီး စိတ်ကူးမိသမျှ လုပ်ငန်းစဉ်တွေကိုရှင်းပြနေတာပါ။
RPM package ထုပ်ပိုးပုံ လုပ်ငန်းစဉ်အဆင့်ဆင့်
အရင်ဆုံး Ansible role တခုကို ကိုယ်အလုပ်လုပ်မယ့် directory မှာဖန်တီးလိုက်ရအောင်။ ဒီနေရာမှာ ဘာအတွက်အသုံးပြုတဲ့ Ansible role လဲဆိုတာအရေးမကြီးပါဘူး။ ဘယ်လိုမျိုး RPM package တခုရအောင်ဖန်တီးသလဲဆိုတာသာ အဓိကဖြစ်တဲ့အတွက် ansible-galaxy init command ကိုအသုံးပြုပါ့မယ်။
Ansible role တခုမှာပါရမယ့် လိုအပ်တဲ့ file တွေ directory တွေကို ansible-galaxy init က auto-magically ဖန်တီးပေးပါလိမ့်မယ်။ နောက်အဆင့်အနေနဲ့ RPM package ကိုဖန်တီးဖို့အတွက်စတင်ပြင်ဆင်လိုက်ရအောင်။
rpmdev-setuptree command ကို run လိုက်တာနဲ့ ကိုယ့်ရဲ့ home directory မှာ rpmbuild ဆိုတဲ့ directory တခုတည်ဆောက်ပေးပါလိမ့်မယ်။ ဒါ့အပြင် အခြားသောလိုအပ်တဲ့ sub-directory တွေကိုလည်း အလိုအလျှောက် အဲ့ဒီ directory အောက်မှာဖန်တီးသွားပါတယ်။ နောက်အဆင့်မှာ ကိုယ်ဖန်တီးထားတဲ့ Ansible role ကို tar နဲ့ .tar.gz ရလာအောင် အောက်မှာဖော်ပြပါအတိုင်း SOURCES ဆိုတဲ့ sub-directory အောက်မှာအရင်ပြင်ဆင်ပေးလိုက်ပါ။
RPM package တခုကို ဘယ်လိုမျိုး build လုပ်ချင်သလဲဆိုတာကို လမ်းညွန်ပေးမယ့် spec file တခုကို အောက်မှာဖော်ပြပေးထားသလိုမျိုး ဖန်တီးလိုက်ရအောင်။
ဒီ spec file မှာ RPM အတွက်အရေးပါတဲ့ အချက်အလက်တွေပါဝင်ပါတယ်။ ဥပမာ - Name, Version, Release, BuildArch, Requires ဆိုတဲ့ဟာတွေကို RPM package တခုအတွက် ဘယ် version နဲ့ ဘယ် release ကိုဘယ်လိုမျိုး system ပေါ်မှာ run နိုင်သလဲဆိုတာမူတည်ပြီး အလိုက်သင့်ပြောင်းပေးရပါ့မယ်။ Ansible role ဟာ plaintext file တခုဖြစ်တဲ့အတွက် %build အတွက်ဘာမှ လုပ်စရာမလိုပါဘူး။ အားလုံးအဆင်သင့်ဖြစ်နေပြီးဆိုရင်တော့ RPM တခုဖန်တီးဖို့အတွက် စတင်လို့ရနိုင်ပါပြီ။
အထက်မှာဖော်ပြထားတဲ့အတိုင်း ~/rpmbuild/BUILD/RPMS/noarch directory အောက်မှာ ansible-role-myrole-1.0.0-1.fc41.noarch.rpm ဆိုပြီးတွေ့ရပါလိမ့်မယ်။ RPM package နှစ်ခုဖြစ်သွားအောင်လို့ အထက်ဖော်ပြပါ လုပ်ငန်းစဉ်အတိုင်း ansible-role-merole တခုကိုထပ်မံဖန်တီးလိုက်ပါ။
RPM repository ဖန်တီးပုံ လုပ်ငန်းစဉ်အဆင့်ဆင့်
အထက်မှာ ထုပ်ပိုးပြီးသား RPM package တွေကို ကိုယ် repository အနေနဲ့အသုံးပြုမယ့် directory ထဲကိုအရင်ဆုံး ကူးယူလိုက်ပါ။ ကူးယူပြီးတာနဲ့ createrepo ကိုအသုံးပြုပြီး RPM repository တခုဖြစ်လာအောင် အောက်မှာဖော်ပြထားသလိုပြင်ဆင်လိုက်ပါ။
ဒီ repository ကို DNF/YUM နဲ့အသုံးပြုဖို့အတွက် /etc/yum.repos.d/myrepo.repo ဆိုတဲ့ file တခုကိုအောက်မှာပြထားသလိုမျိုးအရင်ဆုံးဖန်တီးပေးလိုက်ပါ။
RPM package တွေကို DNF/YUM package manager နဲ့စားသုံးခြင်း
RPM package တွေကို repository အနေနဲ့ ပြင်ဆင်ပြီးနောက် ကိုယ့်ရဲ့ package manager workflow မှာဘယ်လိုမျိုး အသုံးပြုလို့ရသလဲဆိုတာအောက်မှာတချက်လောက်ကြည့်လိုက်ရအောင်။
ပြထားတဲ့အတိုင်း yum repo ကိုသေချာ configure လုပ်ပြီးသွားတာနဲ့ ကိုယ်သုံးနေကြ DNF/YUM command တွေနဲ့ လိုသလို install လုပ်လိုက်၊ uninstall လုပ်လိုက်နိုင်ပါပြီ။ တခုရှိတာက... /opt/myrepo ဆိုတဲ့ directory ထဲကိုနောက်ထပ် rpm package တွေထပ်ကူးထည့်တာပဲဖြစ်ဖြစ်၊ အချို့သော rpm package တွေကို ဖယ်ရှားပစ်တာပဲဖြစ်ဖြစ် createrepo command ကိုပြန်ပြီး run ပေးရပါလိမ့်မယ်။
DEB package နဲ့ repository ဖြစ်ဖို့ပြင်ဆင်ပုံ
ကြိုတင်ပြင်ဆင်မူ
Dpkg-dev - ဒီ tool ဟာ .deb package တွေကိုထုပ်ပိုးဖို့ ပြင်ဆင်တဲ့အခါလိုအပ်ပါတယ်။ Fedora မှာ Fedora-packager လိုသလိုပဲ၊ Debian နဲ့ Ubuntu မှာလည်း dpkg-dev ကိုအရင်ဆုံး install လုပ်ထားဖို့လိုပါလိမ့်မယ်။
sudo apt install dpkg-dev -ycommand ကိုအသုံးပြုပြီး dpkg-dev package ကို Ubuntu ပေါ်မှာ install လုပ်နိုင်ပါတယ်။Ansible - အထက်က RPM package တွေအကြောင်းမှာရှင်းပြထားသလိုပဲ၊ စာရေးသူ Ansible role တွေကို distribute လုပ်တဲ့အခါမှာ .deb package တွေကိုဘယ်လိုမျိုး အသုံးပြုသလဲဆိုတာကို ဥပမာတခုအနေနဲ့ ပြချင်လို့ install လုပ်ရခြင်းဖြစ်ပါတယ်။
DEB package ထုပ်ပိုးပုံ လုပ်ငန်းစဉ်အဆင့်ဆင့်
အထက်မှာလည်း ရှင်းထားပြီးသားဖြစ်တဲ့အတွက် ansible-galaxy init command ကိုသုံးပြီး Ansible role နှစ်ခုကို အောက်မှာပြထားတဲ့အတိုင်း အရင်ဆုံး ဖန်တီးလိုက်ရအောင်။
Ansible role နှစ်ခုကို အထက်ကအတိုင်းဖန်တီးပြီးရင် .deb package အတွက်ပြင်ဆင်စရာရှိတာကို ဆက်လက်ပြင်ဆင်ပေးလိုက်ပါ။ လုပ်ရတဲ့အဆင့်တွေက RPM နဲ့တော့ကွာခြားချက်တွေရှိပါတယ်။
အထက်မှာပြထားတဲ့အတိုင်း အဆင့်ဆင့်လုပ်ပြီးတာနဲ့ ansible-role-myrole.deb ကို ကိုယ့်ရဲ့ home directory မှာတွေ့မြင်ရမှာဖြစ်ပါတယ်။ နောက်ထပ် အသစ်တွေပြင်ဆင်မူတွေလုပ်မယ်ဆိုရင် control file မှာ version update လုပ်၊ ပြီးရင် dpkg-deb --build ansible-role-myrole command ကိုနောက်တခါ run လိုက်ရုံပါပဲ။
ထိုနည်းတူစွာ ansible-role-merole.deb ကိုလည်း အထက်ဖော်ပြပါအဆင့်တွေအတိုင်းနောက်တခေါက်လုပ်ပြီး ဖန်တီးလိုက်ပါ။ .deb package နှစ်ခုရလာပြီဆိုရင် repository အနေနဲ့ နောက်အဆင့်မှာဆက်လက် setup လုပ်ဖို့အဆင်သင့်ဖြစ်ပါပြီ။
DEB repository ဖန်တီးပုံ လုပ်ငန်းစဉ်အဆင့်ဆင့်
RPM မှာတုန်းကလိုပဲ .deb package တွေကို /opt/myrepo directory အောက်မှာပြထားတဲ့အတိုင်းပြင်ဆင်လိုက်ပါ။ ပြီးရင် .deb package တွေကို သူ့ရဲ့ sub-directory pool ထဲကို copy ကူးထည့်လိုက်ပါ။
Repository အဆင်သင့်ဖြစ်ရင် APT package manager နဲ့တွဲပြီးအသုံးပြုလို့ရအောင် အောက်မှာပြထားတဲ့ အတိုင်း source list ကို update လုပ်ပေးရပါ့မယ်။
DEB package တွေကို APT package manager နဲ့စားသုံးခြင်း
APT ကိုအသုံးပြုပြီး ကိုယ်တိုင်ဖန်တီးထားတဲ့ .deb package တွေကို ဘယ်လိုမျိုး အသုံးချနိုင်သလဲဆိုတာကိုအောက်မှာကြည့်လိုက်ရအောင်ဗျာ။
ဒီလောက်ဆိုရင် package manager ဆိုတာဘာအတွက်လဲ၊ ဘယ်လိုအသုံးဝင်သလဲ၊ ဘယ်လိုမျိုးသုံးနိုင်သလဲဆိုတာ ရိပ်စားမိမယ်လို့မျှော်လင့်ပါတယ်။
Last updated
Was this helpful?