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?

Gili
źródło
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.

styczeń
źródło
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.

użytkownik172681
źródło
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)"
iolsmit
źródło