Calm Hill My Random Thoughts

Uninstalling pkg packages

Mac မှာ တချို့ Software တွေက pkg installer နဲ့လာတတ်တယ် သာမန်လူအတွက် အဆင်ပြေပေမယ့် ကိုယ့်အတွက်ကျတော့ Install လုပ်လိုက်ရင် Software က ဘယ်နေရာတွေမှာ ဘယ် files တွေကို Install လုပ်သွားသလဲ လိုက်ရှာရအတော်ခက်တယ် system directory တွေမှာ သူတို့လိုအပ်တဲ့ library တွေကို ထည့်ချင်ရာထည့်သွားရင် ကိုယ်ကတခြား software တွေကို build လုပ်မယ်ဆိုရင် ပြဿနာတွေက တက်လာတတ်တယ်။

ဒီနေ့တော့ build လုပ်စရာတခုရှိလို့ brew နဲ့ build လုပ်တော့ Tcl/Tk library တွေက ပြဿနာလုပ်နေရော brew doctor နဲ့ကြည့်တော့ library တွေက brew နဲ့ build လုပ်ထားတာ မဟုတ်ဘူး ပြောနေတော့ ဘာများမေ့ပြီး install လုပ်မိလဲ ပြန်စဉ်းစားတော့ လွန်ခဲ့တဲ့ ၃−၄ ပါတ်လောက်က R ကို pkg installer နဲ့ install လုပ်လိုက်မိတယ် သိပ်တော့မဆိုင်ပေမယ့် R ရဲ့ document ကိုသွားကြည့်မှ R မှာ Tcl/Tk အတွက် package တခုပါလာတယ်။

အဲဒါနဲ့ ပျင်းနေလို့ မဖြစ်ပါဘူးဆိုပြီး R ကို Uninstall လုပ်ပြီးတော့ brew နဲ့ R ကို ပြန်ပြီးတော့ Install လုပ်မယ်ဆိုတော့ ဇာတ်လမ်းက စပြီးတော့ ရှုပ်လာတယ် Framework နဲ့ App က /Library/Frameworks နဲ့ Application ထဲမှာရှိတော့ ဖျက်လိုက်ရုံပဲ ဒါပေမယ့် Tcl/Tk က /usr/local အောက်မှာ ပွစိတက်အောင် install လုပ်ထားတော့ file တခုချင်းကို လိုက်ဖျက်ရမယ့် အခြေအနေဖြစ်လာလို့ ကြံဖန်ပြီးတော့ ဖျက်လိုက်ရတယ်။ နောက်လည်း ဖြစ်လာရင် ရှင်းလို့ရအောင်ဆိုပြီး မမေ့အောင် blog မှာရေးပြီး မှတ်ထားလိုက်တယ်။

အရင်ဆုံး pkg နဲ့ install လုပ်ထားတဲ့ package တွေကို ရှာကြည့်ပြီးတော့ uninstall လုပ်ရမယ့် package name ကို အရင်ဆုံးသိဖို့လိုမယ်။

pkgutil --pkgs

ဆိုရင် စက်ထဲမှာ install လုပ်ထားသမျှ package တွေကို တွေ့ရလိမ့်မယ် pkg installer တခုဟာ package တခုထက်ပိုပြီးတော့ install လုပ်လို့ရတယ် အဲဒီတော့ ကိုယ် uninstall လုပ်ရမယ့် package ဟာ တခုထက်ပိုကောင်းပိုမယ် အများအားဖြင့်တော့ namespace တွေဟာ ခပ်ဆင်ဆင် တူတတ်ပါတယ် ဥပမာဆိုရင် R အတွက်ဆိုရင် ရှာကြည့်လိုက်တော့ org.r-project နဲ့စတဲ့ package ၃ ခုရှိတယ် Uninstall လုပ်မယ်ဆိုရင် ၃ ခုလုံးကိုလုပ်ရမယ်။

pkgutil --files org.r-project.x86_64.tcltk.x11

package တခုချင်းစီမှာ install လုပ်ထားတဲ့ file စာရင်းကို pkgutil ကို —files နဲ့ကြည့်လို့ရတယ် အဲဒီစာရင်းကိုပဲ တကယ်ကတော့ manual လိုက်ဖျက်ပေးရမှာပါ pkgutil နဲ့ ကြည့်လို့ရတဲ့ file စာရင်းမှာက path တွေဟာ absolute မဟုတ်ပဲနဲ့ relative ဖြစ်နေတယ် အရင်ဆုံးအနေနဲ့ reference လုပ်ထားတဲ့ path ကို အရင်ဆုံးသိဖို့လိုမယ်။

pkgutil --pkg-info org.r-project.x86_64.tcltk.x11

pkgutil ကို —pkg-info နဲ့ကြည့်ရင် install လုပ်ထားတဲ့ volume နဲ့ location ပါတယ် တခါတရံမှာတော့ location ဟာ ဗလာဖြစ်မယ် အဲဒါဆိုရင်တော့ volume တခုထဲကိုပဲ ကြည့်ရင်ရတယ် volume နဲ့ location သိပြီဆိုရင် အဲဒီ့ directory ကိုသွားပြီးရင် စပြီးတော့ Uninstall လုပ်ဖို့ပြင်ဆင်ရမယ်။

cd your-volume-plus-location-from-pkg-info

အခုအချိန်ကစပြီးတော့ ကိုယ့်ကိစ္စနဲ့ကိုယ်ပါ ABSOLUTELY NO WARRANTY လို့ပြောရမယ် နည်းနည်းလွဲတာနဲ့ system directory ထဲက system file တွေဖျက်မိပြီးတော့ OS ပြန်မတက်တာ ဖြစ်နိုင်ပါတယ်။ −−only-files ဆိုတဲ့ option ကို သတိထားပါ မပါလာရင်တော့ ရှိသမျှ parent directory တွေကနေစပြီး အကုန်လုံးကို ဖျက်ပါလိမ့်မယ်။

pkgutil --files org.r-project.x86_64.tcltk.x11 −−only-files | xargs sudo rm -f

အားလုံး delete လုပ်ပြီးပြီဆိုရင် directory တွေကို ရှင်းဖို့ကျန်သေးတယ်။ pkg-info option နဲ့မှာ တွေ့ခဲ့တဲ့ volume နဲ့ location ကို ပြန်သုံးဖို့လိုမယ် တခုသတိထားရမှာက location မပါလာရင်တော့ တခုသတိထားပါ root ကနေ စမိရင် ရှိသမျှ empty directory တွေကို အကုန်လုံး ဖျက်လိုက်ပါလိမ့်မယ် မလိုအပ်ဖူးထင်ရင် ဒီအဆင့်ကို မလုပ်ပါနဲ့။

find your-volume-plus-location-from-pkg-info -type d -empty -delete

မလိုအပ်တဲ့ file တွေ directory တွေကို ဖျက်ပြီးရင်တော့ uninstall နောက်ဆုံးအဆင့်အနေနဲ့ package စာရင်းကို install လုပ်ထားတဲ့ စာရင်းကနေ ဖျက်ပေးရုံပါပဲ အဲဒါဆိုရင် uninstall လုပ်တာတခုပြီးပါပြီ။

sudo pkgutil --forget org.r-project.x86_64.tcltk.x11

Uninstall လုပ်ရမယ့် package အားလုံးကို အပေါ်မှာပြောထားသလို remove လုပ်ပါ ပြီးရင်တော့ Restart ချကြည့်ပါ အသေအချာ ဂရုတစိုက်နဲ့ လုပ်မယ်ဆိုရင် ပြဿနာ မဖြစ်နိုင်ပါဘူး အဆင်ပြေပါလိမ့်မယ်။