Dies ist Qiitas erster Beitrag. Dieser Artikel erinnert an die RPM-Verpackung! Ich schrieb es mit dem Gefühl, dass ich den großen Rahmen verstehen sollte. Ich werde die Details in einem anderen Artikel zusammenfassen! (Ich gehe ...) Wenn Sie einen Fehler machen, beeilen Sie sich bitte.
rpm - >> Von Red Hat entwickeltes Softwarepaket-Management-System Verpackung - >> Stellen Sie bei der Entwicklung einer Anwendung (?) Usw. zusammen, was Sie benötigen, damit es in jeder Umgebung verwendet werden kann. Ist es so Mit der RPM-Verpackung können Sie Ihre Kreationen problemlos verteilen und von der einfachen Verwendung in jeder Umgebung profitieren. Ich muss das versuchen! Mal sehen, welche Struktur es hat!
[Verzeichnis ①]
rpmtest
├──BUILD
├──BUILDROOT
├──Makefile
├──README.md
├──RPMS
├──SOURCES
├──SPECS/
∟test.spec
├──SRPMS
├──hello-test-0.9/
├ Makefile
∟hello.sh
Nehmen wir an, dass diese Verzeichnisstruktur diesmal vollständig ist. Wenn topdir rpmtest ist, wird nur Makefile README.md SOURCES SPECS hello-test-0.9 von Ihnen selbst erstellt. Andere Verzeichnisse werden automatisch durch Ausführen eines bestimmten Befehls erstellt.
Daher lautet die Verzeichnisstruktur, die Sie zuerst vorbereiten, wie folgt:
[Verzeichnis ②]
rpmtest
├──Makefile
├──README.md
├──SOURCES
├──SPECS/
∟test.spec
├──hello-test-0.9/
├ Makefile
∟hello.sh
Wenn Sie nach dem Erstellen dieser Struktur einen bestimmten Befehl ausführen, wird dieser wie [Verzeichnis ②]. (Beharrlich)
Schauen wir uns das fertige [Verzeichnis ①] in der Reihenfolge von oben an. --BUILD-> Arbeitsverzeichnis, das beim Erstellen von RPM-Paketen verwendet wird --BUILDROOT-> Das Stammverzeichnis für die virtuelle Installation von Anwendungen --Makefile-> Sie können den Befehl make im obersten Verzeichnis (in diesem Fall rpmtest) verwenden, um die Arbeit zu vereinfachen. --README.md-> Beschreibung dessen, was Sie verpacken möchten --RPPS-> Verzeichnis, in dem sich das fertige RPM-Paket befindet --SOURCES-> Das Verzeichnis, in das Sie den Quellcode einfügen, der in das RPM-Paket aufgenommen werden soll (in diesem Fall möchten Sie das Verzeichnis hello-test-0.9 verpacken, aber anstatt den Quellcode von Anfang an in SOURCES zu platzieren, hallo-test, wenn Sie den Befehl ausführen -0.9 Ich möchte eine Sammlung von Verzeichnissen einfügen, damit der Inhalt von SOURCES zunächst leer bleibt. --SPECS-> rpm Verzeichnis zum Speichern der Spezifikationsdatei, die zum Erstellen des Pakets verwendet wurde (Wie die Spezifikationsdatei geschrieben wird, wird später beschrieben). --SRPMS-> Verzeichnis, in dem sich die fertige srpm-Datei befindet --Hello-test-0.9 Makefile-> spec-Datei Erforderlich beim Start im Abschnitt% install --hello.sh von hello-test-0.9-> Quellcode, den Sie dieses Mal packen möchten
Es ist schwer zu sehen, aber es sieht so aus. (Ich möchte es hier auf leicht verständliche Weise beheben)
#!usr/bin/env bash
echo "hello world!"
Kommen wir endlich zum Hauptthema! Als Prämisse möchte ich diesmal hallo-world-0.9 / hello.sh verpacken. Der Inhalt ist so einfach wie Hallo Welt! Wenn Sie ihn ausführen, richtig? Zunächst einmal besteht das Ziel dieses Mal darin, den Befehl "make rpm" auszuführen, und Sie können dieses Shell-Skript packen! !! Beeindruckend! !! Korrekt! (Jetzt ...) Ich muss es nicht wagen, eine so einfache Sache zu verpacken, die als Hallo Welt herauskommt! Aber wenn die Sache, die ich verpacken möchte, eine kompliziertere Struktur hat, "mache Drehzahl" Wenn das Verpacken mit nur einem Befehl abgeschlossen wird, wäre es zu göttlich! !! Deshalb. Ja, kommen wir zurück zur Geschichte. Wenn ich den Befehl ./hello.sh in rpmtest / hello-world-0.9 ausführe, heißt es, dass ich keine Berechtigung habe, aber das ist in Ordnung. Die Genius-Spezifikationsdatei wird später etwas dagegen tun. Ich werde hallo-world-0.9 / Makefile später erklären.
Schauen wir uns als nächstes SPEC / test.spec an, das der Hauptakteur bei der Drehzahlverpackung ist. Diese Spezifikationsdatei ist ein Genie und es ist erstaunlich! Die Spezifikationsdatei lautet diesmal wie folgt. [test.spec]
Summary: hellocommand
Name: hello-world
Version: 0.9
Release: 1
License: proprietary
Source0: hello-world-%{version}.tar.gz
%description
hello world
%prep
rm -rf %{buildroot}
%setup
%build
%install
echo %{buildroot}
make install BUILDROOT=%{buildroot} BINDIR=%{_bindir}
%clean
rm -rf %{buildroot}
%files
%attr(0755,root,root) %{_bindir}/hello
%changelog
* DAY YOUR NAME <YOUR MAIL ADDRESS> - 0.9-1
- Initial release
Ich habe es so einfach wie möglich gemacht. Fahren wir mit der Erklärung fort.
Die Spezifikationsdatei hat übrigens die folgende Struktur.
Mal sehen, wie test.spec vorerst funktioniert. <%prep> Bereit zum Verpacken. Es ist problematisch, wenn die vorherige Version von BUILD ROOT erhalten bleibt. Löschen Sie sie daher für alle Fälle mit rm. <%setup> (1) Löschen Sie das Verzeichnis Name-Version (unter Berücksichtigung der Möglichkeit, dass der Quellcode der vorherigen Version erhalten bleibt). (2) Entpacken Sie die in Source0 angegebene Datei mit gzip und extrahieren Sie sie mit tar (es wird auch ein Name-Version-Verzeichnis erstellt). ③ Wechseln Sie in das Verzeichnis Name-Version ④ Änderung der Berechtigungen (Das Problem, das auftritt, wenn Sie den obigen Befehl ohne Berechtigung ausführen, wird hier behoben !!) *** [[Woher kommt dann die angegebene Datei in ②? !! ]] *** Gute Frage! Makefile (rpmtest / Makefile) im obersten Verzeichnis löst die Frage hier! !! Es gibt einige Teile, die ich noch nicht verwendet habe, aber ich werde sie jetzt alle schreiben. [Makefile]
STR = .
LIB = /var/lib
.PHONY: deploy
deploy:
tar zcf hello-world-0.9.tar.gz hello-world-0.9
mv hello-world-0.9.tar.gz SOURCES
.PHONY: rpm
rpm:
make deploy
rpmbuild -ba --define="_topdir ${PWD}" SPEC/test.spec
.PHONY: clean
clean:
rm -rf RPMS SRPMS BUILD BUILDROOT SOURCES/hello-world*
Im Moment ist der Bereitstellungsteil relevant.
Wenn in diesem Makefile "make rpm" ausgeführt wird, wird "make deploy" ausgeführt und dann "rpmbuild" ausgeführt (Spezifikationsdatei wird ausgeführt).
Die vorherige *** Frage ***, wie die Bereitstellung es lösen wird!
Was genau wird mit make deploy
gemacht?
❶ Konsolidieren Sie das Verzeichnis mit dem Namen hello-world-0.9 mit tar
❷ Verschieben Sie die konsolidierte TAR-Datei in das Verzeichnis SOURCES
Diese beiden Aufgaben werden erledigt.
damit! !! Dies hat die vorherige Frage gelöst.
Wenn ich rpmbuild
ausführe (auch wenn ich versuche, die Spezifikationsdatei auszuführen), wird vorher make deploy
ausgeführt und die teergehärtete Hallo-Welt-0.9 wird in SOURCES verschoben!
<%build>
Füllen Sie den Prozess aus, um das Paket zu erstellen.
Der Ausgangspunkt für diesen Abschnitt ist die Umstellung auf die Name-Version (Hallo-Welt-0.9), die zuvor um% setup erweitert wurde.
<%install>
Wie bei% build besteht der Ausgangspunkt für diesen Abschnitt darin, zur um% setup erweiterten Namensversion (hallo-world-0.9) zu wechseln. Nun, Sie haben auch hier make gefunden.
Makefile wieder vorstellen. Dieses Mal ist das Makefile rpmtest / hello-world-0.9 / Makefile.
[Makefile]
BUILDROOT = .
BINDIR = /bin
.PHONY: install
install:
install -d -m 0755 ${BUILDROOT}${BINDIR}/
install -m 0755 hello.sh ${BUILDROOT}${BINDIR}/hello
Diese Installation ist eine virtuelle Installation. Viele von Ihnen haben vielleicht gedacht, dass die Erklärung von BUILD ROOT, die zu Beginn erschien, keinen Sinn ergab. Die BUILD ROOT hier wird mit der tatsächlichen Wurzel verglichen. Da es sich um eine Variable handelt, ist sie vielseitig und einfach zu bedienen. (Ich möchte es hier etwas klarer umschreiben)
Komm schon! !! Jetzt installiere pip die Dateien in RPMS und alles wird gelöst! !! Yatta Vielen Dank für das Lesen, obwohl es lang ist. Es gibt immer noch viele raue Teile, also werde ich es bald umschreiben ...