क्या मेरे घर निर्देशिका में पैकेज स्थापित करने के लिए एपीटी प्राप्त करने का कोई तरीका है?


42

क्या मेरे घर निर्देशिका में पैकेज स्थापित करने के लिए एपीटी प्राप्त करने का कोई तरीका है ?

मैं परिवर्तन प्रणाली को व्यापक नहीं बनाना चाहता।

वैकल्पिक रूप से, क्या कोई होम-डायरेक्टरी आधारित लिनक्स पैकेज मैनेजर हैं?


जवाबों:


17

Dpkg के पास RPM की --relocate सुविधा नहीं है। यह विचार करने लायक है कि कितने RPM पैकेज उस सुविधा का समर्थन करते हैं। असल में, यह नहीं किया जा सकता है।

यदि आप सिस्टम पर विश्व स्तर पर स्थापित करने से पहले कुछ परीक्षण करना चाहते हैं, तो आप एक क्रोकेट का उपयोग कर सकते हैं। ऐसा करने के लिए, आपको रूट तक पहुंचने में सक्षम होना चाहिए। मूल चेरोट बनाने के लिए पहली बात यह है:

# डेब्यूटस्ट्रैप लेन लेनी-चेरोट

यह lenny-chrootडायरेक्टरी के अंदर एक लेनी चेरोट बनाता है ।

अब हम चुरोट में प्रवेश कर सकते हैं:

# chroot lenny-chroot

अब हम वह कर सकते हैं जो हम कभी भी चाहते हैं और इसे स्थापित करने के बिना कुछ भी स्थापित कर सकते हैं। जब हम पूरी कर लें, बस बाहर निकलें या ctrl-D दबाएँ


8

Linuxbrew लिनक्स के लिए एक और गैर-रूट पैकेज प्रबंधक (ओएस एक्स के लिए लोकप्रिय Homebrew पैकेज प्रबंधन सिस्टम के आधार पर) उस स्रोत से compiles और अपने घर निर्देशिका में बाइनरी रखता है।

डॉक्स को उद्धृत करते हुए, Linuxbrew विशेषताएं हैं:

  • सॉफ़्टवेयर को होम डायरेक्टरी में इंस्टॉल कर सकते हैं और इसलिए उसे sudo की आवश्यकता नहीं होती है
  • मूल वितरण द्वारा पैक नहीं किया गया सॉफ़्टवेयर स्थापित करें
  • मूल वितरण पुराना होने पर सॉफ़्टवेयर के अप-टू-डेट संस्करण स्थापित करें
  • अपने मैक और लिनक्स मशीनों दोनों का प्रबंधन करने के लिए एक ही पैकेज मैनेजर का उपयोग करें

7

जेंटू उपसर्ग वही करता है जो आप चाहते हैं।

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

पुनश्च: यह उबंटू> = 11.04, या मल्टीकार के साथ किसी अन्य डेबियन व्युत्पन्न पर काम नहीं करता है।


1
Gentoo स्रोत से बनाता है, पोस्टर एक विशिष्ट निर्देशिका के लिए पैकेज के माध्यम से स्थापित करना चाहता है। यह वास्तव में एक ही बात नहीं है।
एंड्रयू केस

1
@AndrewCase Gentoo के पैकेज भी मुझे विश्वास है। तथ्य यह है कि वे बाइनरी नहीं हैं अंतिम स्थापना के लिए अप्रासंगिक हैं।
जिगगंजर

4

बस इसे संकलित करने के विकल्प के लिए एक मामूली जोड़ के रूप में, संकलन समय पर एक अलग उपसर्ग विकल्प के साथ एक पैकेज में संकलन करने का आधा-तरफ़ा विकल्प है ("जांच-पड़ताल" या शायद किसी अन्य विधि के साथ)। फायदा यह है कि पैकेज पैकेज मैनेजर जैसे एप्टीट्यूड या सिनैप्टिक पर दिखाई देगा।

इसके अलावा मुझे लगता है कि वास्तविक मामलों को डाउनलोड करने के लिए कुछ मामलों में यह संभव हो सकता है। उनके स्थान के लिए कुछ चर (शाब्दिक स्पष्ट उपसर्ग के बजाय) जिसे आप स्थापित करने से पहले निर्यात करेंगे। मैं इस प्रक्रिया के बारे में कुछ नहीं जानता, हालांकि, "dpkg instdir उपसर्ग" के लिए Google।



1

Rootless GoboLinux वही कर सकता है जो आप पूछ रहे हैं: पैकेज मैनेजर, बिना किसी उन्नत विशेषाधिकार के, अपने घर की निर्देशिका में। उम्मीद है कि आप जानते हैं कि आप क्या कर रहे हैं; जड़ रहित, गोबो का सबसे अच्छी तरह से बनाए रखा स्थापना मोड नहीं है, और जब मैंने कुछ साल पहले इसका इस्तेमाल किया था, तो इसे कुछ tweaks की आवश्यकता थी क्योंकि स्थापना स्क्रिप्ट अन्य Gobo परिवर्तनों के सापेक्ष थोड़ा पुराना था।

वहाँ भी klik है जो काफी कुछ .debs को रीपैकेज करता है , आपके होम डायरेक्टरी में पैकेज स्थापित कर सकता है, और संचालित करने के लिए कोई रूट विशेषाधिकार की आवश्यकता नहीं है ... लेकिन प्रारंभिक सेटअप के लिए रूट की आवश्यकता होती है।


1

मुझे आमतौर पर स्रोत मिलते हैं और "INSTALL" जैसी फ़ाइल की जांच करते हैं। आमतौर पर करने के निर्देश हैं ./configure --prefix=somedir। फिर आपको somedir/binअपने रास्ते से जोड़ना होगा।


यह निर्भरता को अद्यतन करने, संकलित करने और रखने के लिए कठिन हो सकता है।
पाओलो

यह पीछे की तरफ है। सवाल यह है कि पैकेज प्रबंधकों को कैसे प्राप्त किया जाए (जो 1990 के दशक से बेहतर हैं) इस तरह से व्यवहार करना है।
मोनिका

1

नहीं, मुझे नहीं लगता कि आप कर सकते हैं।

अब मैं जो सबसे अच्छा सोच सकता हूं वह है apt-get sourceअपने पैकेज का उपयोग करना और संकलित करना। हो सकता है कि आप अपने घर में पैकेजों को स्थापित करने के लिए किसी भी तरह से प्रक्रिया को कम कर सकते हैं (जो कम या ज्यादा स्वचालित हो सकती है)।

एक और एक dpkg -Xअपनी पसंद की एक निर्देशिका पर इसे निकालने के लिए उपयोग करने के लिए है।


0

ऐसे बहुत कम मामले हैं जहां आपको अपने होम फोल्डर में पैकेज इंस्टॉल करने की आवश्यकता होगी।

हालाँकि आप सॉफ्टवेयर को अपने स्थानीय मशीन पर संकलित और स्थापित कर सकते हैं। बस अनज़िप करें, फिर ./configure --prefix=$HOME/localकिसी अन्य निर्देशिका के साथ कॉन्फ़िगर करें । आप तब makeऔर make installसामान्य रूप से कर सकते हैं । यह उस प्रोग्राम को संकलित और संस्थापित करेगा ~/local/, जैसे आपके द्वारा निष्पादित किया जाने वाला प्रोग्राम अंदर होगा ~/local/bin/programmname


0

अपने स्वयं के अनुभव से मौजूदा डीईबी संकुल को किसी अन्य निर्देशिका में स्थापित करने के लिए उपयोग करने का कोई आसान तरीका नहीं है जो कि चिरोट वातावरण नहीं है। डेबियन / उबंटू इंस्टॉलेशन टूल dpkg / aptitude / dselect सभी को ठीक से काम करने के लिए रूट विशेषाधिकार की आवश्यकता होती है।

अब स्रोत DEB को देखते हुए आप डेबियन / नियम फ़ाइल को पैकेज बनाने और एक अलग निर्देशिका ट्री में स्थापित करने के लिए संशोधित कर सकते हैं, लेकिन तब आप पहले से उपलब्ध बाइनरी पैकेज का उपयोग नहीं कर रहे हैं।

जैसा कि अन्य लोगों ने उल्लेख किया है कि आप डीबूटस्ट्रैप का उपयोग कर सकते हैं और आसानी से चेरोट वातावरण का निर्माण कर सकते हैं , जो मैंने अतीत में 64-बिट होस्ट पर 32-बिट वातावरण बनाने के लिए किया है, लेकिन इसके लिए कम से कम बेस पैकेज के साथ क्रॉओट स्थापित करने की आवश्यकता है। यदि आपके पास जगह है और यह एक व्यवहार्य समाधान है, तो आप इसे चुरोट पर्यावरण के भीतर स्थापित अनुप्रयोगों के आसान निष्पादन की अनुमति देने के लिए dchroot, या इससे भी बेहतर कर सकते schrootहैं।


0

मुझे यह कल्पना करने में परेशानी है कि वितरण से आधिकारिक रिपॉजिटरी के साथ यह कैसे काम करेगा। यह निर्भरता को कैसे हल करना चाहिए? सिस्टम से या अपने घर निर्देशिकाओं से? क्या होगा अगर यह दोनों में अलग-अलग संस्करण पाता है?

सबसे अच्छा मैं सोच सकता हूं कि 64-बिट सिस्टम पर 32-बिट अनुप्रयोगों के लिए लोगों की तरह एक वातावरण होगा। यह अधिक उपरि है क्योंकि आप चेरोट में डिबूटस्ट्रैप कह रहे होंगे, लेकिन कुछ सिम्लिंकिंग , शेल रैपर स्क्रिप्ट मज़ा के साथ, यह वह कर सकता है जो आप चाहते हैं।


0

मैं अभी भी समस्या पर काम कर रहा हूं, लेकिन डेबूटस्ट्रैप मूल रूप से आपको क्या चाहिए, और फ़ेकरूट के साथ काम करना चाहिए। debootstrap शेल स्क्रिप्ट्स का एक समूह है, इसलिए मैं इसे देखने के लिए अलग कर रहा हूं कि यह क्या टिक करता है। एक बार इंस्टॉल होने के बाद हार्ड पार्ट फाइलों को अनइंस्टॉल करने में होगा।


मैं (और अन्य हजारों उपयोगकर्ता) पूरे दिल से इसे प्रोत्साहित करेंगे। कुछ ऐसा जो पहले से मौजूद सिस्टम-वाइड rpm (या apt वैकल्पिक) डेटाबेस के साथ-साथ एक उपयोगकर्ता द्वारा प्रदान किया गया rpm डेटाबेस और उपयोगकर्ता स्थित rpms में टैप करता है। यह आश्चर्यजनक होगा। इसे मेनलाइन में मर्ज भी किया जा सकता है। क्या इस पर पहले कोई शोध किया गया है?
एंड्रयू केस

0

दुर्भाग्य से मैंने किसी भी डिस्ट्रो को इस तरह से कुछ प्रदान करने के बारे में नहीं सुना है (हालांकि मुझे यकीन है कि यह सुपर लोकप्रिय होगा)। आप आरपीएम आधारित डिस्ट्रो की नकल करने में सक्षम हो सकते हैं ... मैंने यह कोशिश नहीं की है, लेकिन आप एक उपयोगकर्ता आधारित आरपीएम डेटाबेस बनाने और फिर आरपीएम को उपयोगकर्ता डेटाबेस में स्थापित करने में सक्षम हो सकते हैं।

एक नया उपयोगकर्ता आधारित डिस्ट्रो सेट करने का प्रयास करें:

rpm --initdb --dbpath DIRECTORY

फिर कई विकल्प हैं जो मदद कर सकते हैं:

  • --prefix
  • --relocate

0

मेरे पास एक समाधान है जो मैंने एक स्कूल डेबियन सर्वर पर सॉफ़्टवेयर पैकेजों को सहयोग करने का एक बड़ा संग्रह स्थापित करने के लिए सफलतापूर्वक उपयोग किया है, जहां मेरे पास कोई रूट एक्सेस नहीं है (दूसरे पैकेज मैनर को स्थापित करने के लिए भी नहीं)। यह 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

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