Erstellen verteilbarer Binärdateien in Unix

545
Sayan

Meine Absicht ist es, verteilbare Binärdateien zu generieren - ich mache eine ./configure - make - make - Installation in meiner Build - Maschine, und ich archivierte den Inhalt des Installationsverzeichnisses (das, dem ich ein Präfix gegeben habe, während. ./Configure und install ) und zum Testen auf einen anderen Computer unter einem anderen Benutzer verschoben. Beim Testen sehe ich, dass die kopierten Dateien immer noch versuchen, auf einige Dateien unter einem Pfad zuzugreifen, der sich auf meiner Build-Maschine befand - und daher eine permissions deniedFehlermeldung angezeigt wird. Früher habe ich gedacht, dass es tarbeim Extrahieren ein Problem sein könnte, aber dank Daniel Beck, der mir half zu realisieren, dass es nichts mit dem Archivierungsprozess zu tun hat.

Ich habe keine root / sudo-Berechtigungen. Der entscheidende Punkt ist: Wie baue ich eine Maschine ein und verwende die Installationsdateien in vielen anderen, ohne auf Probleme mit Berechtigungen zu stoßen? Wie lauten die Regeln, um universell verteilbare Tarballs zu erstellen?

Vielen Dank.

0
Sghosh ist ein Benutzername. Ist es user_01 oder user_02? Daniel Beck vor 12 Jahren 0
Entschuldigung, mein Fehler, ja, Sie haben Recht. Ich wollte sagen, dass ich Dateien aus meinem Benutzerraum in einen anderen verschieben werde Sayan vor 12 Jahren 0
OK - und was ist die Ausgabe von 'ls -l' und 'ls -ln' nach dem Extrahieren auf dem Zielhost? Daniel Beck vor 12 Jahren 0
Dies ist also die Ausgabe von 'ls -ln' - `drwxr-xr-x 2 10036 501 4096 11. November 04:52 bin` und` ls -l` ergibt `drwxr-xr-x 2 user_02 staff 4096 11. November 04:52 bin` Sayan vor 12 Jahren 0
Ist dies die Ausgabe für eine Datei (oder einen Ordner) `user_02`, auf die der Zugriff verweigert wird? Daniel Beck vor 12 Jahren 0
Ja, du hast recht, user_02 bekommt eine Berechtigung verweigert. Der Tarball ist eigentlich eine Compiler-Installation ... Wenn user_02 versucht, ein Programm mit den Dateien zu kompilieren, lautet der Fehler wie folgt: `cc1: Fehler: /home/sghosh/rpmbuild/buildroot/open64-gcc-4.2.0/include : Permission denied` - Dies ist der Weg zu den Quellen unter meinem Zuhause - ich weiß nicht, wie dies verbreitet wird. Sayan vor 12 Jahren 0
Endlich kommen wir irgendwo hin. Haben Sie auf Ihrer ersten Maschine ". /" Konfiguriert und vergessen, dies auf der zweiten Maschine oder so zu tun? Daniel Beck vor 12 Jahren 0
Nun, ich habe eine ./configure auf der ersten Maschine gemacht, binaries (das Installationsverzeichnis) erstellt und bin nur das Installationsverzeichnis. Ich baue also überhaupt keine zweite Maschine ein, sondern benutze das Installationsverzeichnis nach dem Auspacken. Sayan vor 12 Jahren 0
Sie müssen wissen, dass dies nichts mit der tar-Datei zu tun hat oder wie Sie sie erstellen oder extrahieren. Ihre Programminstallation hat bestimmte Pfade hartcodiert und funktioniert ohne diese nicht. Ich glaube nicht, dass dies möglich ist, wenn Sie das Programm nicht irgendwo installieren möchten, da es allen Benutzern auf beiden Systemen zur Verfügung steht. // Wenn Sie es dennoch versuchen möchten, sollten Sie Ihre Frage vollständig überarbeiten und alles, was gerade da ist, besonders "tar", wegwerfen. Stattdessen fragen Sie, wie Sie das betreffende Programm kompilieren, damit das Ergebnis auf einem anderen Computer mit unterschiedlichen Pfaden wieder verwendet werden kann . Daniel Beck vor 12 Jahren 0
Ja, mir ist jetzt klar, dass es mit meiner Bauweise zusammenhängt. Ich würde die Frage überarbeiten und danke Ihnen für all Ihre Hilfe. Sayan vor 12 Jahren 0

2 Antworten auf die Frage

1
Fabel

Das Problem ist, dass viele Unix-Programme nicht verlagerbar sind. Sie suchen immer nach Dateien in dem Pfad, den Sie für die Konfiguration angeben (nicht relativ zum eigenen Speicherort). Wenn Sie möchten, dass es verlagerbar ist, kann es in einem beliebigen Benutzerverzeichnis (oder an einem anderen Ort) installiert werden und die Dateien finden. Es gibt keine andere Möglichkeit, als das Programm so zu ändern, dass es sich so verhält.

Es gibt keine generischen Regeln für das Erstellen allgemein verteilbarer Tarballs, insbesondere für Programme, die aus dem Quellcode installiert werden sollen. Die meisten Unix-Distributionen verfügen über ein spezielles Paketsystem zur Verteilung von Binärdateien. Das Beste ist, das / die zu benutzen. Die meisten kommerziellen Anwendungen, die als Binärdateien in Tarballs geliefert werden, verwenden eine Umgebungsvariable, um ihre Dateien zu lokalisieren, und verwenden ein Wrapper-Shell-Skript, das diese Variable festlegt (indem sie beispielsweise nach den Dateien relativ zum eigenen Pfad sucht). Dann müssen Sie wahrscheinlich das Programm ändern, um sich auf diese Weise zu verhalten.

0
Daniel Beck

Verwenden Sie tar --no-same-owner(für die GNU-Version) beim Auspacken des Tarballs. --no-same-permissionskönnte auch nützlich sein.

Ich bekomme immer noch die gleichen Fehler. Sayan vor 12 Jahren 0
@Sayan, wer besitzt diese Dateien? Sie sollten dem extrahierenden Benutzer gehören, wenn diese Option gegeben wird. Verwenden Sie gnu tar, der diese Option hat, oder etwas anderes? Daniel Beck vor 12 Jahren 0
Ähm, bitte helfen Sie mir zu verstehen - ich tar eine Reihe von Dateien mit + x -Optionen ... und lade sie dann auf eine Website hoch, auf die jeder Benutzer sie herunterladen und verwenden kann; Wie lege ich also den Besitz / die Berechtigung für alle Benutzer fest, die das Archiv herunterladen? Ja, ich benutze Gnu Teer. Sayan vor 12 Jahren 0
@ Sayan Sie nicht. Während Sie mit dem Argument "--mode" die Berechtigung "chmod" für GNU "tar" festlegen können, ist der extrahierende Benutzer dafür verantwortlich, den ursprünglichen Besitz der Dateien in der Tarball zu verwerfen. Zum Beispiel habe ich heute OpenSSH-Quellcode heruntergeladen. "tar tzvf dateiname.tar.gz" listet die Dateien auf, die dem "snap" -Benutzer gehören, "tar tzvf --numeric-owner Dateiname.tar.gz" zeigt seine numerische Benutzer-ID 1018. Auf meinem System gibt es keine solche Nutzer. Als Benutzer, der das Archiv extrahiert, muss ich darauf achten, `--no-same-owner` oder` --owner MyUserName` anzugeben. Daniel Beck vor 12 Jahren 1
@Sayan Dies geschieht nur, wenn Sie als root extrahieren, da andere Benutzer keine Dateien erstellen können, die zu einem anderen Benutzer gehören. Es wäre hilfreich, wenn Sie im Detail erklären würden, wie Sie das tar-Archiv erstellen und extrahieren, und eine (teilweise) "tar tv" -Auflistung mit den Berechtigungen und Benutzern / Gruppen in der tar-Kugel enthalten. Daniel Beck vor 12 Jahren 0
Danke für die Erklärung. Wollen Sie damit sagen, dass nur eine Person mit Root-Privilegien die Möglichkeit hat, die Eigentumsrechte zu ändern? Ich habe meine Frage aktualisiert. Sayan vor 12 Jahren 0
@Ssayan: eigentlich das Gegenteil Daniel Beck vor 12 Jahren 0