'मेक इनस्टॉल' के विपरीत क्या है, यानी आप लिनक्स में लाइब्रेरी की स्थापना कैसे रद्द करते हैं?


396

भागते समय

./configure --prefix=/mingw 

मेरे द्वारा पहले चलाए गए पुस्तकालय के लिए एक मिनगेड / एमएसवाईएस प्रणाली पर

'./configure --prefix=/mingw && make && make install' 

मुझे यह संदेश आया:

चेतावनी: वैम्प प्लगइन एसडीके का एक संस्करण पहले से स्थापित है। यदि आप पहले पुराने को हटाए बिना एक नया संस्करण स्थापित करते हैं, तो चिंताओं और दुखों की अपेक्षा करें। (सतत)

इससे मैं चिंतित था। 'मेक इनस्टॉल' के विपरीत क्या है, यानी लिनक्स में लाइब्रेरी की स्थापना कैसे की जाती है? क्या Will साफ-सुथरा ’काम करेंगे, या इसमें अन्य कदम भी शामिल हैं?



1
इसी तरह के उत्तरों के लिए askubuntu.com/questions/87111/… देखें , मुख्य समाधान वर्तमान में ऐसा प्रतीत होता है कि sudo make uninstallअगर इंस्टॉलेशन कॉन्फ़िगरेशन फाइलें अभी भी उपलब्ध हैं, लेकिन सिस्टम चेक प्रबंधन उपयोगिता के साथ अनइंस्टॉल करने के अलावा कोई अन्य स्पष्ट समाधान नहीं है, यदि "जाँच के साथ स्थापित किया गया हो “उपयोगिता।
एडवर्ड

7
दौड़ने के बाद make installमुझे make uninstallउन्हें हटाने की कभी जरूरत नहीं पड़ी । मैंने हमेशा उपयोग किया हैxargs rm < install_manifest.txt
जॉन स्ट्रॉड जूड

जवाबों:


508

make cleanआपके स्रोत / बिल्ड ट्री से किसी भी मध्यवर्ती या आउटपुट फ़ाइलों को निकालता है। हालाँकि, यह केवल स्रोत / बिल्ड ट्री को प्रभावित करता है; यह शेष फाइल सिस्टम को नहीं छूता है और इसलिए पहले से स्थापित सॉफ्टवेयर को नहीं हटाएगा।

यदि आप भाग्यशाली हैं, तो दौड़ने make uninstallसे काम चल जाएगा। हालांकि, यह प्रदान करने के लिए पुस्तकालय के लेखकों पर निर्भर है; कुछ लेखक एक uninstallलक्ष्य प्रदान करते हैं , अन्य नहीं।

यदि आप भाग्यशाली नहीं हैं, तो आपको इसे मैन्युअल रूप से अनइंस्टॉल करना होगा। रनिंग make -n installमददगार हो सकता है, क्योंकि यह उन चरणों को दिखाएगा जो सॉफ्टवेयर खुद को स्थापित करने के लिए ले जाएगा लेकिन वास्तव में कुछ भी नहीं करेगा। फिर आप मैन्युअल रूप से उन चरणों को उल्टा कर सकते हैं।


10
+1; उन फ़ाइलों के लिए देखें जिन्हें अन्य पैकेजों द्वारा भी इंस्टॉल किया गया है। बस इन फ़ाइलों को हटाने ("मैन्युअल रूप से उन चरणों को उलटने" की एक व्याख्या) अन्य पैकेजों को तोड़ सकती है। यह (कई कारणों में से एक है) क्यों पैकेज प्रबंधकों का आविष्कार किया गया था।
मर्लिन मॉर्गन-ग्राहम

3
यह केवल तभी संभव है जब आप उसी कॉन्फ़िगर और संकलित बिल्ड निर्देशिका को सही रखें? इस प्रकार बहुत उपयोगी नहीं है क्योंकि ज्यादातर लोग इसे इंस्टॉल करने के बाद हटा देते हैं। यदि वह बिल्ड फ़ोल्डर रखता है, तो वह चीजों को अनइंस्टॉल करना चाहता है, और चाहे पैकेज को अनइंस्टॉल विकल्प के लिए सही ढंग से कॉन्फ़िगर किया गया हो। स्पष्टता: वह जो करना चाहता है वह संकुल के लिए कुछ प्रकार के प्रबंधन को सक्षम करना है जो उन चीजों के लिए काम करता है जो उसने खुद संकलित किए हैं।
निस

360

अगर sudo make uninstall अनुपलब्ध है:

एक डेबियन आधारित प्रणाली में, के बजाय (या * के बाद) make installआप sudo checkinstallएक .debफ़ाइल बनाने के लिए चला सकते हैं जो स्वचालित रूप से स्थापित हो जाती है। तब आप सिस्टम पैकेज मैनेजर (जैसे apt/ synaptic/ aptitude/ dpkg) का उपयोग करके इसे हटा सकते हैं । Checkinstall स्थापना अन्य प्रकार के पैकेज बनाने का भी समर्थन करती है, जैसे RPM।

Http://community.linuxmint.com/tutorial/view/162 और कुछ बुनियादी चेक स्थापना उपयोग और डेबियन चेक स्थापना पैकेज भी देखें ।


*: यदि आप इसे स्थापित करने के बाद पढ़ रहे हैं तो आप make installअभी भी उपरोक्त निर्देशों का पालन कर सकते हैं और dpkg -r $PACKAGE_NAME_YOU_CHOSENबाद में कर सकते हैं।


53
यह उत्तर इस बात का प्रमाण है कि सर्वश्रेष्ठ उत्तरों को अक्सर बहुत अधिक वोट नहीं मिलते हैं। धन्यवाद! मैं यह जानना चाहता हूं कि लंबे समय तक ऐसा कैसे किया जाए। मैं हमेशा एक "स्थापित करें" करने में संकोच करता हूं क्योंकि मुझे पता है कि यह लगभग निश्चित रूप से दूर करने के लिए दर्द होगा।
doug65536

1
एलएफएस पुस्तक में पैकेज प्रबंधन प्रणालियों के बारे में कुछ जानकारी है, क्योंकि आपको इसे स्वयं स्थापित करना होगा। इस तरह की चीज को बेहतर तरीके से काम करने में मददगार होना चाहिए (क्लीनर, अधिक सामान्य)। ऐसी स्क्रिप्ट होती हैं जो बस वही सुनती हैं जो इंस्टॉल हो जाती है और फिर एक स्क्रिप्ट बनती है जब लॉन्च की गई उन सभी फाइलों को हटा देती है, या ऐसा कुछ।
निस

13
इसने मेरे लिए खूबसूरती से काम किया, भले ही मैं इसके बजाय make installउपयोग checkinstallकरने से पहले ही चला गया था ।
ल्यूकगेट

9
checkinstallकाम करने के लिए इस उत्कृष्ट उत्तर के लिए पैकेज स्थापित करें ।
क्विमनस

1
इसी तरह जिस उपयोगकर्ता "ल्यूकजीटी" ने टिप्पणी की, अगर इंस्टॉलेशन कॉन्फ़िगरेशन फाइलें उपलब्ध नहीं हैं, लेकिन इंस्टॉलर फाइलें हैं, तो उन्हें संकलित और स्थापित किया जा सकता है checkinstallऔर यदि नया संकलन पुराने सेटिंग्स के समान सेटिंग्स के साथ बनाया गया है, तो स्थापित पैकेज की स्थापना रद्द करना साथ checkinstallपहले से स्थापित फ़ाइलों को हटा देना चाहिए।
एडवर्ड

62

यदि आपके पास एक manifestफ़ाइल है जो make installआपके साथ स्थापित की गई सभी फाइलों को सूचीबद्ध करती है, तो इस कमांड को चला सकते हैं, जो मेरे पास दूसरे उत्तर से है:

cat install_manifest.txt | xargs echo rm | sh

यदि आपके पास sudo make installअपनी स्थापना रद्द करने के लिए एक sudo जोड़ने की आवश्यकता होगी:

cat install_manifest.txt | xargs echo sudo rm | sh

4
मुझे यह देखकर आश्चर्य हुआ कि इसे कोई उभार नहीं मिला। यह सिस्टम से उन फ़ाइलों को हटाने के लिए काम करता है जब कोई अन्य विकल्प काम नहीं करता है। मेरे मामले में, checkinstall एक बहस नहीं बना सका क्योंकि प्रोग्राम का संस्करण एक नंबर से शुरू नहीं हुआ था, और इसलिए निर्माण नहीं होगा। यह अच्छी तरह से काम किया।
डीडिल्स

3
@ मुझे लगता है कि यह ज्यादा खतरनाक नहीं हुआ क्योंकि यह काफी खतरनाक है। इसके अतिरिक्त xargs echo rm | sh? स्पष्ट है कि जिसने भी यह सुझाव दिया है वह विशेष रूप से शेल का उपयोग करने में अनुभवी या जानकार नहीं है।
fstd

4
(संदर्भ के लिए, यह फ़ाइल नाम के किसी भी वर्ण पर रोक देगा, जिसकी व्याख्या शेल द्वारा की गई है (और फिर आपने दुष्ट आरएम की हत्या को अंजाम दिया है!), इसके अलावा यह सभी प्रकार के शेल विस्तार करेगा। बस अगर install_manifest.txtतारांकन में क्या होता है तो सोचिए। ... rm *एक शेल में पाइप किया जाएगा।) डाउनवोट, इस कारण से।
fstd

@ काफी सही है। हमेशा की तरह इस तरह के उत्तर का उपयोग सावधानी से करना होगा। इस कमांड को चलाने से पहले मेनिफेस्ट फाइल को देखें। लेकिन अगर आप शेल का उपयोग कर रहे हैं तो मुझे लगता है कि आप जानते हैं कि आप क्या कर रहे हैं।
तीन

क्या आप उन परिस्थितियों का वर्णन कर सकते हैं जिनके तहत install_manifest.txtअस्तित्व की उम्मीद की जा सकती है?
einpoklum

28

इस सवाल पर प्रोग्राम का मेकफाइल / कॉन्फ़िगर स्क्रिप्ट / ऑटोफू जादू कितना अच्छा है, इस पर निर्भर करता है कि आपकी समस्या हल हो सकती है:

make uninstall

समस्या यह है कि आपको इसे स्थापित किए गए संस्करण के स्रोत पेड़ पर निष्पादित करना चाहिए और ठीक उसी कॉन्फ़िगरेशन के साथ जो आपने स्थापित करने के लिए उपयोग किया था।


19

"इंस्टॉल करें" के बाद स्थापना रद्द कैसे करें

विधि # 1 (स्थापना रद्द करें)

चरण 1: आपको केवल इस चरण का अनुसरण करने की आवश्यकता है यदि आपने निर्माण निर्देशिका को किसी भी तरह से हटा दिया है / बदल दिया है : सटीक रूप से उपयोग करके डाउनलोड करें और स्थापित करें उसी प्रक्रिया करें जैसा आपने पहले किया था।

चरण 2: स्थापना रद्द करने का प्रयास करें।

cd $SOURCE_DIR 
sudo make uninstall

यदि यह सफल होता है तो आप कर रहे हैं। यदि आप पागल हैं तो आप यह भी सुनिश्चित करने के लिए "मेथड # 3" के चरणों की कोशिश कर सकते हैं ताकि make uninstallकोई भी फाइल छूट न जाए।

विधि # 2 (चेक-इन - केवल डेबियन आधारित प्रणालियों के लिए)

प्रक्रिया का अवलोकन

डेबियन आधारित सिस्टम (उदाहरण के लिए उबंटू) में आप .debबहुत ही आसानी से नाम के टूल का उपयोग करके एक पैकेज बना सकते हैं checkinstall। आप तब .deb पैकेज स्थापित करते हैं (यह आपके डेबियन सिस्टम को यह एहसास कराएगा कि आपके पैकेज के सभी भाग वास्तव में स्थापित हो चुके हैं) और अंत में इसे अनइंस्टॉल करें ताकि आपके पैकेज मैनेजर को आपके सिस्टम को ठीक से साफ करने में मदद मिल सके।

क्रमशः

sudo apt-get -y install checkinstall
cd $SOURCE_DIR 
sudo checkinstall

इस बिंदु पर checkinstallपैकेज नाम के लिए संकेत देगा। कुछ वर्णनात्मक लिखें और इसे नोट करें क्योंकि आप इसे एक मिनट में उपयोग करेंगे। यह कुछ और डेटा के लिए भी संकेत देगा जिसे आप अनदेखा कर सकते हैं। यदि यह संस्करण के बारे में शिकायत करता है तो स्वीकार्य नहीं है जैसे कुछ उचित दर्ज करें 1.0। जब यह पूरा हो जाए तो आप इंस्टॉल कर सकते हैं और अंत में स्थापना रद्द कर सकते हैं:

sudo dpkg -i $PACKAGE_NAME_YOU_ENTERED 
sudo dpkg -r $PACKAGE_NAME_YOU_ENTERED

विधि # 3 (install_manifest.txt)

यदि install_manifest.txtआपके स्रोत में कोई फ़ाइल मौजूद है, तो उसमें हर एक फ़ाइल का फ़ाइल नाम होना चाहिए जो कि इंस्टॉलेशन बनाया गया है।

तो पहले फाइलों की सूची और उनके मॉड-टाइम की जांच करें:

cd $SOURCE_DIR 
sudo xargs -I{} stat -c "%z %n" "{}" < install_manifest.txt

आपको शून्य त्रुटियां मिलनी चाहिए और सूचीबद्ध फ़ाइलों का मॉड- टाइम स्थापना के समय या उसके बाद होना चाहिए । यदि सब ठीक है तो आप उन्हें एक बार में हटा सकते हैं:

cd $SOURCE_DIR 
mkdir deleted-by-uninstall
sudo xargs -I{} mv -t deleted-by-uninstall "{}" < install_manifest.txt

उपयोगकर्ता मर्लिन मॉर्गन-ग्राहम के पास इस पद्धति के बारे में एक गंभीर सूचना है, जिसे आपको ध्यान में रखना चाहिए (यहां वर्बेटिम की प्रतिलिपि बनाई गई है): "उन फ़ाइलों के लिए देखें जो अन्य पैकेजों द्वारा भी स्थापित की गई हो सकती हैं। बस इन फ़ाइलों को हटा देना [...]। अन्य पैकेजों को तोड़ो। " । यही कारण है कि हमने deleted-by-uninstallउन्हें हटाने के बजाए dir और वहां स्थानांतरित फ़ाइलें बनाई हैं।


इस पोस्ट का 99% अन्य उत्तरों में मौजूद था। मैंने अभी-अभी (उम्मीद में) उपयोगी सभी चीज़ों को एकत्रित किया है कि कैसे-कैसे का पालन करें और महत्वपूर्ण विवरणों पर अतिरिक्त ध्यान देने की कोशिश करें (जैसे कि xarg तर्कों को उद्धृत करना और हटाई गई फ़ाइलों का बैकअप रखना)।


METHOD 2 ने मेरे लिए काम किया!
इगोरैक

10

make clean आमतौर पर केवल स्रोत कोड वाली निर्देशिका में निर्मित फ़ाइलों को ही साफ करता है, और शायद ही कभी किसी स्थापित सॉफ़्टवेयर को छूता है।

Makefiles में आम तौर पर अनइंस्टॉल करने का लक्ष्य नहीं होता है - आपको आमतौर पर खुद को उस डायरेक्टरी की फाइलों को हटाकर करना होता है, जिसमें वे इंस्टॉल किए गए थे। उदाहरण के लिए, यदि आप एक कार्यक्रम बनाया गया है और (का उपयोग कर इसे स्थापित make install) में /usr/local, आप के माध्यम से देखने के लिए चाहते हैं /usr/local/bin, /usr/local/libexec, /usr/local/share/man, आदि, और अवांछित फ़ाइलों को हटा दें। कभी-कभी मेकफाइल में ए शामिल होता हैuninstall लक्ष्य , लेकिन हमेशा नहीं।

बेशक, आमतौर पर एक लिनक्स सिस्टम पर आप पैकेज मैनेजर का उपयोग करके सॉफ़्टवेयर इंस्टॉल करते हैं , जो "स्वचालित रूप से" सॉफ़्टवेयर की स्थापना रद्द करने में सक्षम है।


8

"स्टोव" उपयोगिता को इस समस्या को हल करने के लिए डिज़ाइन किया गया था: http://www.gnu.org/software/stow/


5
stowइस समस्या को हल करने के लिए कोई कैसे उपयोग करेगा ?
3D1T0R

स्टोव उपयोगिता आपको प्रत्येक संस्करण को एक अलग स्थान पर स्थापित करने के लिए प्रोत्साहित करती है ताकि आप एक ही मशीन पर कई संस्करणों का प्रबंधन कर सकें। यदि आप ऐसा करते हैं तो अनइंस्टॉल करना पूरे इंस्टॉलेशन डायरेक्टरी को हटाने जैसा सरल हो सकता है।
ब्रूस एडम्स

6

दुर्भाग्य से कोई मानक नहीं है, यह स्रोत से स्थापित होने के खतरों में से एक है। कुछ मेकफाइल्स में "अनइंस्टॉल" शामिल होगा, इसलिए

make uninstall

स्रोत निर्देशिका से काम हो सकता है। अन्यथा, जो कुछ भी मैन्युअल रूप से पूर्ववत करना एक मामला हो सकता हैmake install था उसे ।

make clean आमतौर पर सिर्फ स्रोत निर्देशिका को साफ करता है - उत्पन्न / संकलित फ़ाइलों और पसंद को हटाने, शायद वह नहीं जो आप के बाद हैं।


0

मुझे कुछ पैकेजों का पता है जो "अनइंस्टॉल करें" का समर्थन करते हैं, लेकिन कई और समर्थन मंच स्थापित करने के लिए DESTDIR = xxx स्थापित करते हैं।

आप इसका उपयोग एक पैकेज बनाने के लिए कर सकते हैं जिसे आप स्रोत से सीधे इंस्टॉल करने के बजाय स्थापित करते हैं। मुझे चेक-इन के साथ कोई भाग्य नहीं था लेकिन fpm बहुत अच्छी तरह से काम करता है।

यह आपको मेक इनस्टॉल का उपयोग करके पहले से स्थापित एक पैकेज को हटाने में भी मदद कर सकता है । आप बस अपने बनाये हुए पैकेज को स्थापित किए गए एक पर स्थापित करने के लिए बाध्य करते हैं और फिर इसे अनइंस्टॉल करते हैं।

उदाहरण के लिए, मैंने हाल ही में प्रोटोबुफ़-3.3.0 से निपटने के लिए इसका इस्तेमाल किया। RHEL7 पर:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t rpm -n protobuf -v 3.3.0 \
 --vendor "You Not RedHat" \
 --license "Google?" \
 --description "protocol buffers" \
 --rpm-dist el7 \
 -m you@youraddress.com \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 --rpm-autoreqprov \
 usr

 sudo rpm -i -f protobuf-3.3.0-1.el7.x86_64.rpm
 sudo rpm -e protobuf-3.3.0      

यदि आप कर सकते हैं rpm करने के लिए yum पसंद करते हैं।

डेबियन 9 पर:

make install DESTDIR=dest
cd dest
fpm -f -s dir -t deb -n protobuf -v 3.3.0 \
-C `pwd` \
--prefix / \
--vendor "You Not Debian" \
--license "$(grep Copyright ../../LICENSE)" \
--description "$(cat README.adoc)" \
--deb-upstream-changelog ../../CHANGES.txt \
 --url "http:/somewhere/where/you/get/the/package/oritssource" \
 usr/local/bin \
 usr/local/lib \
 usr/local/include

 sudo apt install -f *.deb
 sudo apt-get remove protobuf

जहाँ आप कर सकते हैं dpkg के लिए उपयुक्त पसंद करते हैं।

मैंने इसका उत्तर भी यहाँ पोस्ट किया है


0

Makeआपको बता सकता है कि यह क्या जानता है और यह क्या करेगा। मान लें कि आपके पास "इंस्टॉल" लक्ष्य है, जो कमांड को निष्पादित करता है जैसे:

cp <filelist> <destdir>/

अपने सामान्य नियमों में, जोड़ें:

uninstall :; MAKEFLAGS= ${MAKE} -j1 -spinf $(word 1,${MAKEFILE_LIST}) install \
              | awk '/^cp /{dest=$NF; for (i=NF; --i>0;) {print dest"/"$i}}' \
              | xargs rm -f

एक समान चाल एक सामान्य कर सकती है make clean


0

प्रस्तावना

नीचे काम हो सकता है या नहीं, यह सब के रूप में दिया गया है, आप और केवल आप ही कुछ नुकसान, डेटा हानि और इतने पर के मामले में जिम्मेदार व्यक्ति हैं। लेकिन मुझे आशा है कि चीजें सुचारु हो जाएंगी!

इसे करने के लिए make installमैं (और मैंने यह किया):

आइडिया: जो भी स्क्रिप्ट इंस्टॉल करता है उसे चेक करें और साधारण बैश स्क्रिप्ट के साथ इसे पूर्ववत करें।

  1. कुछ कस्टम dir पर स्थापित करने के लिए अपने बिल्ड dir को फिर से कॉन्फ़िगर करें। मैं आमतौर पर ऐसा करता हूं --prefix=$PWD/install:। CMake के लिए, आप अपनी बिल्ड dir पर जा सकते हैं, CMakeCache.txt को खोल सकते हैं, और CMAKE_INSTALL_PREFIX मान को ठीक कर सकते हैं।
  2. कस्टम निर्देशिका के लिए प्रोजेक्ट स्थापित करें (बस make installफिर से चलाएँ )।
  3. अब हम धारणा से धक्का देते हैं, यह make installस्क्रिप्ट कस्टम डायर में स्थापित होती है , केवल वही सामग्री जिसे आप कहीं और (आमतौर पर /usr/local) से निकालना चाहते हैं । इसलिए, हमें एक स्क्रिप्ट की जरूरत है। 3.1। स्क्रिप्ट को कस्टम डायर की तुलना करनी चाहिए, डायर के साथ आप स्वच्छ चाहते हैं। मैं इसका उपयोग करता हूं:

anti-install.sh

RM_DIR=$1
PRESENT_DIR=$2

echo "Remove files from $RM_DIR, which are present in $PRESENT_DIR"

pushd $RM_DIR

for fn in `find . -iname '*'`; do
#  echo "Checking $PRESENT_DIR/$fn..."
  if test -f "$PRESENT_DIR/$fn"; then
    # First try this, and check whether things go plain
    echo "rm $RM_DIR/$fn"

    # Then uncomment this, (but, check twice it works good to you).
    # rm $RM_DIR/$fn
  fi
done

popd

3.2। अब बस इस स्क्रिप्ट को चलाएं (यह सूख जाएगा)

bash anti-install.sh <dir you want to clean> <custom installation dir>

उदाहरण के लिए, आप / usr / स्थानीय को साफ नहीं करना चाहते हैं, और आपका कस्टम इंस्टॉलेशन dir /user/me/llvm.build/install है, तो यह होगा

bash anti-install.sh /usr/local /user/me/llvm.build/install

3.3। लॉग की सावधानीपूर्वक जांच करें, यदि कमांड आपके लिए अच्छा है, तो rm $RM_DIR/$fnउसे पुनः चलाएँ और चलाएँ। लेकिन रुकिए! क्या आपने वाकई ध्यान से जांच की? फिर से जाँच हो सकती है?

निर्देशों का स्रोत: https://dyatkovskiy.com/2019/11/26/anti-make-install/

सौभाग्य!

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.