क्या मेरे घर निर्देशिका में पैकेज स्थापित करने के लिए एपीटी प्राप्त करने का कोई तरीका है ?
मैं परिवर्तन प्रणाली को व्यापक नहीं बनाना चाहता।
वैकल्पिक रूप से, क्या कोई होम-डायरेक्टरी आधारित लिनक्स पैकेज मैनेजर हैं?
क्या मेरे घर निर्देशिका में पैकेज स्थापित करने के लिए एपीटी प्राप्त करने का कोई तरीका है ?
मैं परिवर्तन प्रणाली को व्यापक नहीं बनाना चाहता।
वैकल्पिक रूप से, क्या कोई होम-डायरेक्टरी आधारित लिनक्स पैकेज मैनेजर हैं?
जवाबों:
Dpkg के पास RPM की --relocate सुविधा नहीं है। यह विचार करने लायक है कि कितने RPM पैकेज उस सुविधा का समर्थन करते हैं। असल में, यह नहीं किया जा सकता है।
यदि आप सिस्टम पर विश्व स्तर पर स्थापित करने से पहले कुछ परीक्षण करना चाहते हैं, तो आप एक क्रोकेट का उपयोग कर सकते हैं। ऐसा करने के लिए, आपको रूट तक पहुंचने में सक्षम होना चाहिए। मूल चेरोट बनाने के लिए पहली बात यह है:
# डेब्यूटस्ट्रैप लेन लेनी-चेरोट
यह lenny-chroot
डायरेक्टरी के अंदर एक लेनी चेरोट बनाता है ।
अब हम चुरोट में प्रवेश कर सकते हैं:
# chroot lenny-chroot
अब हम वह कर सकते हैं जो हम कभी भी चाहते हैं और इसे स्थापित करने के बिना कुछ भी स्थापित कर सकते हैं। जब हम पूरी कर लें, बस बाहर निकलें या ctrl-D दबाएँ
Linuxbrew लिनक्स के लिए एक और गैर-रूट पैकेज प्रबंधक (ओएस एक्स के लिए लोकप्रिय Homebrew पैकेज प्रबंधन सिस्टम के आधार पर) उस स्रोत से compiles और अपने घर निर्देशिका में बाइनरी रखता है।
डॉक्स को उद्धृत करते हुए, Linuxbrew विशेषताएं हैं:
जेंटू उपसर्ग वही करता है जो आप चाहते हैं।
यह सभी पैकेजों को एक निर्दिष्ट निर्देशिका में स्थापित करता है। किसी रूट की आवश्यकता नहीं है। अगर आप इससे छुटकारा पाना चाहते हैं, तो बस बेस डायरेक्टरी को हटा दें।
पुनश्च: यह उबंटू> = 11.04, या मल्टीकार के साथ किसी अन्य डेबियन व्युत्पन्न पर काम नहीं करता है।
बस इसे संकलित करने के विकल्प के लिए एक मामूली जोड़ के रूप में, संकलन समय पर एक अलग उपसर्ग विकल्प के साथ एक पैकेज में संकलन करने का आधा-तरफ़ा विकल्प है ("जांच-पड़ताल" या शायद किसी अन्य विधि के साथ)। फायदा यह है कि पैकेज पैकेज मैनेजर जैसे एप्टीट्यूड या सिनैप्टिक पर दिखाई देगा।
इसके अलावा मुझे लगता है कि वास्तविक मामलों को डाउनलोड करने के लिए कुछ मामलों में यह संभव हो सकता है। उनके स्थान के लिए कुछ चर (शाब्दिक स्पष्ट उपसर्ग के बजाय) जिसे आप स्थापित करने से पहले निर्यात करेंगे। मैं इस प्रक्रिया के बारे में कुछ नहीं जानता, हालांकि, "dpkg instdir उपसर्ग" के लिए Google।
आप नकलीचोट का उपयोग कर सकते हैं - उनकी वेबसाइट पर डेमो देखें।
Rootless GoboLinux वही कर सकता है जो आप पूछ रहे हैं: पैकेज मैनेजर, बिना किसी उन्नत विशेषाधिकार के, अपने घर की निर्देशिका में। उम्मीद है कि आप जानते हैं कि आप क्या कर रहे हैं; जड़ रहित, गोबो का सबसे अच्छी तरह से बनाए रखा स्थापना मोड नहीं है, और जब मैंने कुछ साल पहले इसका इस्तेमाल किया था, तो इसे कुछ tweaks की आवश्यकता थी क्योंकि स्थापना स्क्रिप्ट अन्य Gobo परिवर्तनों के सापेक्ष थोड़ा पुराना था।
वहाँ भी klik है जो काफी कुछ .deb
s को रीपैकेज करता है , आपके होम डायरेक्टरी में पैकेज स्थापित कर सकता है, और संचालित करने के लिए कोई रूट विशेषाधिकार की आवश्यकता नहीं है ... लेकिन प्रारंभिक सेटअप के लिए रूट की आवश्यकता होती है।
मुझे आमतौर पर स्रोत मिलते हैं और "INSTALL" जैसी फ़ाइल की जांच करते हैं। आमतौर पर करने के निर्देश हैं ./configure --prefix=somedir
। फिर आपको somedir/bin
अपने रास्ते से जोड़ना होगा।
नहीं, मुझे नहीं लगता कि आप कर सकते हैं।
अब मैं जो सबसे अच्छा सोच सकता हूं वह है apt-get source
अपने पैकेज का उपयोग करना और संकलित करना। हो सकता है कि आप अपने घर में पैकेजों को स्थापित करने के लिए किसी भी तरह से प्रक्रिया को कम कर सकते हैं (जो कम या ज्यादा स्वचालित हो सकती है)।
एक और एक dpkg -X
अपनी पसंद की एक निर्देशिका पर इसे निकालने के लिए उपयोग करने के लिए है।
ऐसे बहुत कम मामले हैं जहां आपको अपने होम फोल्डर में पैकेज इंस्टॉल करने की आवश्यकता होगी।
हालाँकि आप सॉफ्टवेयर को अपने स्थानीय मशीन पर संकलित और स्थापित कर सकते हैं। बस अनज़िप करें, फिर ./configure --prefix=$HOME/local
किसी अन्य निर्देशिका के साथ कॉन्फ़िगर करें । आप तब make
और make install
सामान्य रूप से कर सकते हैं । यह उस प्रोग्राम को संकलित और संस्थापित करेगा ~/local/
, जैसे आपके द्वारा निष्पादित किया जाने वाला प्रोग्राम अंदर होगा ~/local/bin/programmname
।
अपने स्वयं के अनुभव से मौजूदा डीईबी संकुल को किसी अन्य निर्देशिका में स्थापित करने के लिए उपयोग करने का कोई आसान तरीका नहीं है जो कि चिरोट वातावरण नहीं है। डेबियन / उबंटू इंस्टॉलेशन टूल dpkg / aptitude / dselect सभी को ठीक से काम करने के लिए रूट विशेषाधिकार की आवश्यकता होती है।
अब स्रोत DEB को देखते हुए आप डेबियन / नियम फ़ाइल को पैकेज बनाने और एक अलग निर्देशिका ट्री में स्थापित करने के लिए संशोधित कर सकते हैं, लेकिन तब आप पहले से उपलब्ध बाइनरी पैकेज का उपयोग नहीं कर रहे हैं।
जैसा कि अन्य लोगों ने उल्लेख किया है कि आप डीबूटस्ट्रैप का उपयोग कर सकते हैं और आसानी से चेरोट वातावरण का निर्माण कर सकते हैं , जो मैंने अतीत में 64-बिट होस्ट पर 32-बिट वातावरण बनाने के लिए किया है, लेकिन इसके लिए कम से कम बेस पैकेज के साथ क्रॉओट स्थापित करने की आवश्यकता है। यदि आपके पास जगह है और यह एक व्यवहार्य समाधान है, तो आप इसे चुरोट पर्यावरण के भीतर स्थापित अनुप्रयोगों के आसान निष्पादन की अनुमति देने के लिए dchroot
, या इससे भी बेहतर कर सकते schroot
हैं।
मुझे यह कल्पना करने में परेशानी है कि वितरण से आधिकारिक रिपॉजिटरी के साथ यह कैसे काम करेगा। यह निर्भरता को कैसे हल करना चाहिए? सिस्टम से या अपने घर निर्देशिकाओं से? क्या होगा अगर यह दोनों में अलग-अलग संस्करण पाता है?
सबसे अच्छा मैं सोच सकता हूं कि 64-बिट सिस्टम पर 32-बिट अनुप्रयोगों के लिए लोगों की तरह एक वातावरण होगा। यह अधिक उपरि है क्योंकि आप चेरोट में डिबूटस्ट्रैप कह रहे होंगे, लेकिन कुछ सिम्लिंकिंग , शेल रैपर स्क्रिप्ट मज़ा के साथ, यह वह कर सकता है जो आप चाहते हैं।
मैं अभी भी समस्या पर काम कर रहा हूं, लेकिन डेबूटस्ट्रैप मूल रूप से आपको क्या चाहिए, और फ़ेकरूट के साथ काम करना चाहिए। debootstrap शेल स्क्रिप्ट्स का एक समूह है, इसलिए मैं इसे देखने के लिए अलग कर रहा हूं कि यह क्या टिक करता है। एक बार इंस्टॉल होने के बाद हार्ड पार्ट फाइलों को अनइंस्टॉल करने में होगा।
दुर्भाग्य से मैंने किसी भी डिस्ट्रो को इस तरह से कुछ प्रदान करने के बारे में नहीं सुना है (हालांकि मुझे यकीन है कि यह सुपर लोकप्रिय होगा)। आप आरपीएम आधारित डिस्ट्रो की नकल करने में सक्षम हो सकते हैं ... मैंने यह कोशिश नहीं की है, लेकिन आप एक उपयोगकर्ता आधारित आरपीएम डेटाबेस बनाने और फिर आरपीएम को उपयोगकर्ता डेटाबेस में स्थापित करने में सक्षम हो सकते हैं।
एक नया उपयोगकर्ता आधारित डिस्ट्रो सेट करने का प्रयास करें:
rpm --initdb --dbpath DIRECTORY
फिर कई विकल्प हैं जो मदद कर सकते हैं:
--prefix
--relocate
मेरे पास एक समाधान है जो मैंने एक स्कूल डेबियन सर्वर पर सॉफ़्टवेयर पैकेजों को सहयोग करने का एक बड़ा संग्रह स्थापित करने के लिए सफलतापूर्वक उपयोग किया है, जहां मेरे पास कोई रूट एक्सेस नहीं है (दूसरे पैकेज मैनर को स्थापित करने के लिए भी नहीं)। यह deboostrap
किसी भी पैकेज प्रबंधक का उपयोग नहीं करता है और न ही।
विधि आंशिक रूप से मैनुअल है, लेकिन मैंने इसे सुविधाजनक बनाने के लिए अपना सर्वश्रेष्ठ किया है।
यह इस स्क्रिप्ट का उपयोग करता है जिसे मैंने बुलाया है install
(इसे मत भूलना chmod +x
):
#!/bin/bash
# PREFIX is the installation root, i.e. a directory you have write access to
PREFIX=$HOME
# unpack the archive to $PREFIX
ar p "$1" data.tar.xz | tar xJ -C $PREFIX
# go through all unpacked text files and search for occurences of /usr/...
# we're gonna replace some of them with $PREFIX/usr
files=$(dpkg --contents $1 | grep '^-' | awk '{print $6}' | sed 's/^..//' | sort | uniq)
for f in $files; do
file="${PREFIX}${f}"
if grep -Iq . "$file"; then
if grep -q '/usr' "$file"; then
# interactively ask for each occurence, if it should be replaced
vim -c '%s#/usr#'$PREFIX'/usr#gc' -c 'wq' "$file"
fi
else
echo "Leaving binary file $file unmodified"
fi
done
इसलिए आमतौर पर मैं पहली बार डिबेट फाइल डाउनलोड करता हूं apt-get download package_name
। फिर मैं चलाता हूं ./install package_name_blabla.deb
, और मैन्युअल रूप /usr
से अनपैक्ड फ़ाइलों में प्रत्येक घटना के बारे में निर्णय लेता हूं , अगर इसे प्रतिस्थापित किया जाना चाहिए $PREFIX/usr
या नहीं।
यह निर्णय पूरी तरह से इस बात पर निर्भर करता है कि कौन से पैकेज सिस्टम-इंस्टॉल किए गए हैं और जो इस पद्धति का उपयोग करके इंस्टॉल किए गए हैं। आमतौर पर, उदाहरण के लिए, pkg-config फ़ाइलों को इस प्रतिस्थापन की आवश्यकता होती है, जबकि शेबबंग लाइनें #!/usr/bin/perl
ऐसा नहीं करती हैं। अंगूठे का सामान्य नियम परिणामी पथ एक मौजूदा फ़ाइल को इंगित करना चाहिए।
इस तरह से स्थापित किए गए पैकेजों के साथ, आपको स्पष्ट रूप से किसी अन्य प्रोग्राम को उनके बारे में बताना होगा। यह करने के लिए सही मान जोड़कर पूरा किया जा सकता LD_LIBRARY_PATH
, PATH
, PYTHONPATH
, PKG_CONFIG_PATH
, CMAKE_MODULES_PATH
, CMAKE_PREFIX_PATH
आदि
इस दृष्टिकोण में एक चेतावनी है, कि निर्भरता डाउनलोड नहीं होती है / स्वचालितता स्थापित नहीं होती है; आपको उन्हें स्वयं ट्रैक करना होगा।
इसके अलावा APT को इन पैकेजों के बारे में स्पष्ट रूप से पता नहीं है, इसलिए यह हमेशा के लिए उन्हें गायब दिखाएगा। लेकिन यह समझ में आता है - जो एक उपयोगकर्ता की स्थापना पर निर्भर करता है एक प्रणाली चौड़ा अनुप्रयोग स्थापित करना चाहते हैं।
यदि आप किसी प्रोग्राम को अनइंस्टॉल करना चाहते हैं, तो आप उपयोग कर रहे डीब आर्काइव की सामग्री को सूचीबद्ध कर सकते हैं ar p "$1" data.tar.xz | tar tJ
और फिर इन सभी फ़ाइलों को हटा सकते हैं PREFIX
।