Pakete in lokales Verzeichnis installieren?

38

Ich möchte Softwarepakete installieren, ähnlich wie apt-get install <foo>:

  1. Ohne sudound
  2. In ein lokales Verzeichnis

Der Zweck dieser Übung besteht darin, unabhängige Builds in meinem Continuous Integration Server zu isolieren .

Es macht mir nichts aus, aus dem Quellcode zu kompilieren, wenn es das ist, aber ich würde natürlich den einfachsten möglichen Ansatz bevorzugen. Ich habe versucht, apt-get source --compile <foo>wie hier erwähnt , aber ich kann es nicht für Pakete wie autoconf zum Laufen bringen. Ich erhalte folgenden Fehler:

dpkg-checkbuilddeps: Unmet build dependencies: help2man

Ich habe help2man in einem lokalen Verzeichnis kompiliert, weiß aber nicht, wie ich apt-get darüber informieren soll. Irgendwelche Ideen?

UPDATE : Ich habe eine Antwort gefunden, die fast unter https://askubuntu.com/a/350/23678 funktioniert . Das Problem dabei chrootist, dass es sudo benötigt. Das Problem dabei apt-get sourceist, dass ich nicht weiß, wie ich Abhängigkeiten auflösen soll. Ich muss sagen, chrootsieht sehr ansprechend aus. Gibt es einen äquivalenten Befehl, der kein sudo benötigt?

Gili
quelle
Ich schlage vor , das ist ein Duplikat dieser Frage: [ askubuntu.com/questions/147654/... [1]: askubuntu.com/questions/147654/...
7
@kamil ist es nicht. Ich versuche nicht, ohne Netzwerkzugriff zu installieren. Ich versuche, ohne sudound in ein Nicht-Systemverzeichnis zu installieren .
Gili
4
Leute, bitte stimmt meine Frage nicht ab, ohne zu erklären, warum . Vielen Dank.
Gili
Wenn Sie kein Root-Konto auf dem System haben, können Sie Abhängigkeiten nicht einfach auflösen . Es ist jedoch manchmal möglich; Sie müssten damit beginnen, die Software bei sich zu Hause zu installieren. Beginnen Sie dabei mit den untersten Abhängigkeiten und ändern Sie Ihren LD_PATH, damit die Programme ihre Bibliotheken finden können. Sie schlagen jedoch fehl, wenn eines der Pakete die Ausführung von root (oder suid) erfordert.
Januar
Im Januar versuche ich, ein Softwareprojekt in einem automatisierten Build-System zu kompilieren. Soweit ich weiß, ist für keine der Abhängigkeiten (die zum Kompilieren erforderlich sind) root erforderlich.
Gili

Antworten:

20

Dies ist im Allgemeinen nicht möglich, da Sie sich mit dem apt dependencies-System herumschlagen würden.

Es gibt zwei Lösungen:

  1. Installieren Sie das Quellpaket, wechseln Sie in das Quellverzeichnis, konfigurieren und installieren Sie das Paket unabhängig von den Paketsystemen manuell in einem Verzeichnis Ihrer Wahl.

    apt-get source <package>
    

    Dies benötigt kein Root, lädt die Paketquelle herunter und entpackt sie in ein Verzeichnis innerhalb des aktuellen Verzeichnisses. Sie können dann in dieses Verzeichnis wechseln, Änderungen an der Quelle vornehmen, die Installation auf einem anderen Ziel konfigurieren usw.

    Die Konfiguration des Installationsverzeichnisses für die Programme hängt jedoch vom jeweiligen Programm ab. Viele Programme verwenden die ./configure --prefix localdir, um die Installation auf localdir auszurichten. Dies ist jedoch bei weitem nicht immer der Fall.

  2. Erstellen Sie eine Chroot-Umgebung, in der Sie die Pakete installieren:

    debootstrap precise myfancyinstall
    

    Jetzt haben Sie eine Dummy-Installation im Verzeichnis myfancyinstall / erstellt

    chroot myfancyinstall
    

    Sie können apt-get install im chroot-Käfig verwenden, um alles zu installieren, was Sie möchten.

Januar
quelle
Das sieht vielversprechend aus. Die Verwendung von apt-get sourcewithout --compilescheint die Warnung vor nicht erfüllten Abhängigkeiten zu unterdrücken (sodass ich sie selbst lösen kann)
Gili
Gibt es eine Möglichkeit, auf diese Weise auch Pakete zu erhalten, die keine Quelle haben?
Soandos
Lösung (2) funktioniert trotzdem. Ansonsten sind Sie auf sich allein gestellt: Vielleicht gibt es eine andere Möglichkeit, das Paket zu installieren. Oder laden Sie die Paketdatei deb und entpacken Sie es mit ar: ar vx mypackage.deb. Analysieren Sie anschließend den Inhalt des Pakets und finden Sie heraus, wie Sie es manuell installieren können.
Januar
14

Wenn Sie eine Bash-Shell verwenden und die Datei "package.deb" abrufen (vorausgesetzt, der Name des Pakets lautet "package"), können Sie den folgenden Befehl ausführen, um das gewünschte Ergebnis zu erzielen: Installieren Sie das Paket, damit Ihr Ausgangsverzeichnis auf die gleiche Weise behandelt wird. "würde in einer normalen Installation behandelt.

Dies ist der Befehl:

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

Möglicherweise treten Fehler auf, z. B. dass $ HOME / var / lib / dpkg / lock fehlt. Erstellen Sie einfach alle fehlenden Dateien, die Sie aufgrund der Fehler erhalten, und die Installation sollte ohne sudo funktionieren.

Beachten Sie, dass wenn "apt-get download" nicht funktioniert, Sie "apt download" oder "apitutde download package" ausprobieren können.

Wenn keine der beiden Methoden funktioniert, können Sie das Paket einfach manuell von http://packages.ubuntu.com/ herunterladen.

Eine andere Methode wäre, den Befehl chroot mit dem Parameter $ HOME auszuführen und dann auf die gleiche Weise wie oben zu installieren, nur ohne --root = $ HOME. Dieser Befehl würde Sie in eine Shell bringen, in der "/" Ihr aktuelles $ HOME ist. um in den normalen Modus zurückzukehren, vergiss nicht "zu beenden"

Viel Glück.

user172681
quelle
Nach dem Erstellen der fehlenden Dateien, über die sich dpkg beschwert hat, hat es gerade mit dem Segfaulting begonnen.
Matt Chambers
0

Wenn Sie sich auf einem gemeinsam genutzten Webhoster mit sshZugriff, aber ohne apt-getRoot usw. oder einem ähnlich eingeschränkten System befinden, funktioniert möglicherweise Folgendes für Sie. Es funktionierte für mich auf einem System, auf dem so uname -aetwas zurückgegeben wurdeSMP 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)"
Ich sage
quelle