Instalujesz pakiety w lokalnym katalogu?


38

Chciałbym zainstalować pakiety oprogramowania, podobne do apt-get install <foo>:

  1. Bez sudoi
  2. Do lokalnego katalogu

Celem tego ćwiczenia jest wyodrębnienie niezależnych wersji na moim serwerze ciągłej integracji .

Nie mam nic przeciwko kompilacji ze źródła, jeśli tego właśnie potrzeba, ale oczywiście wolałbym najprostsze możliwe podejście. Próbowałem, apt-get source --compile <foo>jak wspomniano tutaj, ale nie mogę go uruchomić dla pakietów takich jak autoconf. Otrzymuję następujący błąd:

dpkg-checkbuilddeps: Unmet build dependencies: help2man

Mam help2man skompilowany w katalogu lokalnym, ale nie wiem, jak poinformować o tym apt-get. Jakieś pomysły?

AKTUALIZACJA : Znalazłem odpowiedź, która prawie działa na https://askubuntu.com/a/350/23678 . Problem chrootpolega na tym, że wymaga sudo. Problem apt-get sourcepolega na tym, że nie wiem, jak rozwiązać zależności. Muszę powiedzieć, chrootwygląda bardzo atrakcyjnie. Czy istnieje równoważne polecenie, które nie wymaga sudo?


Sugeruję, że jest to duplikat tego pytania: [ askubuntu.com/questions/147654/… [1]: askubuntu.com/questions/147654/…

7
@kamil, to nie jest. Nie próbuję instalować bez dostępu do sieci. Próbuję zainstalować bez sudokatalogu i do katalogu niesystemowego.
Gili

4
Chłopaki, proszę nie głosować za moim pytaniem bez wyjaśnienia dlaczego . Dziękuję Ci.
Gili

Jeśli nie masz roota w systemie, nie będziesz w stanie łatwo rozwiązać zależności . Czasami jest to jednak możliwe; musisz zacząć instalować oprogramowanie w domu, zaczynając od najniższych zależności i modyfikując LD_PATH, aby programy mogły znaleźć swoje biblioteki. Jednak nie powiedzie się, jeśli którykolwiek z pakietów wymaga uruchomienia roota (lub suid).
stycznia

@ Stycznia, próbuję skompilować projekt oprogramowania w zautomatyzowanym systemie kompilacji. O ile mi wiadomo, żadna z jego zależności (wymagana do kompilacji) nie wymaga rootowania.
Gili

Odpowiedzi:


20

Zasadniczo nie jest to wykonalne, ponieważ zepsułbyś system zależności apt.

Istnieją dwa rozwiązania:

  1. Zainstaluj pakiet źródłowy, przejdź do katalogu źródłowego, skonfiguruj i zainstaluj pakiet niezależnie od systemów pakowania ręcznie w wybranym katalogu.

    apt-get source <package>
    

    Nie wymaga rootowania, pobiera źródło pakietu, rozpakowuje go w katalogu w bieżącym katalogu. Następnie możesz przejść do tego katalogu, dokonać modyfikacji źródła, skonfigurować instalację w innym celu itp.

    Konfiguracja, do którego katalogu instalacyjnego powinny przejść programy, zależy jednak od konkretnego programu. Wiele programów używa ./configure --prefix localdirdo kierowania instalacji do katalogu lokalnego; ale nie zawsze tak jest.

  2. Utwórz środowisko chroot, w którym zainstalujesz pakiety:

    debootstrap precise myfancyinstall
    

    Teraz utworzyłeś fałszywą instalację w katalogu myfancyinstall /

    chroot myfancyinstall
    

    Możesz użyć apt-get install w klatce chroot, aby zainstalować cokolwiek zechcesz.


To wygląda obiecująco. Używanie apt-get sourcebez --compilewydaje się tłumić ostrzeżenie o niezaspokojonych zależnościach (co pozwala mi je rozwiązać samodzielnie)
Gili

Czy istnieje sposób na uzyskanie pakietów, które również nie mają źródła w ten sposób?
soandos

Rozwiązanie (2) będzie działać niezależnie. W przeciwnym razie jesteś sam: może istnieje inny sposób instalacji pakietu. Lub pobrać plik pakietu deb i rozpakować go z AR: ar vx mypackage.deb. Następnie przeanalizuj zawartość pakietu i dowiedz się, jak zainstalować go ręcznie.
stycznia

14

używając powłoki bash i uzyskując plik „package.deb” (zakładając, że nazwa paczki to „pakiet”), możesz uruchomić następującą komendę, aby osiągnąć to, co chcesz - zainstalować pakiet, aby katalog domowy był traktowany w ten sam sposób ”/ ”będzie traktowane w normalnej instalacji.

To jest polecenie:

apt-get download package; dpkg -i --force-not-root --root=$HOME package.deb

Możesz napotkać pewne błędy, takie jak brak $ HOME / var / lib / dpkg / lock, więc po prostu utwórz wszystkie brakujące pliki, które otrzymasz z błędów, a następnie instalacja powinna działać bez sudo.

zauważ, że jeśli „apt-get download” nie działa, możesz spróbować „apt download” lub „apitutde download package”.

jeśli żadna z metod nie działa, możesz po prostu pobrać pakiet ręcznie ze strony http://packages.ubuntu.com/

inną metodą byłoby uruchomienie komendy chroot z parametrem $ HOME, a następnie zainstalowanie w taki sam sposób jak powyżej tylko bez --root = $ HOME. to polecenie wprowadziłoby cię do powłoki, w której „/” jest twoim bieżącym $ HOME. aby powrócić do normalnego trybu, nie zapomnij „wyjść”

powodzenia.


Po utworzeniu brakujących plików na które narzekał dpkg, właśnie zaczął segfault.
Matt Chambers

0

Jeśli korzystasz z udostępnionego hostingu internetowego z sshdostępem, ale apt-getbez roota itp. Lub w podobnie ograniczonym systemie, poniższe działania mogą być dla Ciebie odpowiednie. To działało dla mnie w systemie, w którym uname -acoś zwróciłoSMP Debian 4.9.65-3+deb9u2~bpo8+1 (2017-01-05) x86_64 GNU/Linux

# examples tried on a shared hoster with ssh access but no apt-get no root etc.
# http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb
# https://github.com/dvorka/hstr/releases/download/1.25/hstr_1.25-1_amd64.deb

debURL="http://mirrors.kernel.org/ubuntu/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb"
# get the filename only, remove all till last slash "/"
# see http://wiki.bash-hackers.org/syntax/pe#substring_removal
debFile=${debURL##*/}
# change to your desired directory for installation/unpacking; here: $HOME
cd $HOME
# get the .deb file (no dependencies checked or resolved here)
curl -OL $debURL 
# unpack only the data part from the .deb file
# see https://en.wikipedia.org/wiki/Deb_%28file_format%29
ar p $debFile data.tar.xz | tar xJv --strip-components=2 -f - 
rm -v $debFile # clean up
echo "Done unpacking $debFile into $(pwd)"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.