it-swarm.com.de

Erstellen Sie RPM, um nur Dateien zu installieren

Ich muss ein RPM erstellen, mit dem einzigen Zweck, ein paar Schriftarten zu installieren. Ich habe mehrere Tutorials darüber gelesen, aber jeder scheint etwas anderes vorzuschlagen, und ich habe nicht in der Lage sein können, so etwas wie ein sehr einfaches Setup zu finden, um das zu tun.

Ist es möglich, nur auf die Dateien im Abschnitt% files der Spezifikation zu verweisen? Ich habe jedoch versucht, rpm versucht immer, die Dateien im tmp-Verzeichnis zu finden. Muss ich einen bestimmten Build-Schritt hinzufügen, der alles, was ich brauche, in das tmp-Verzeichnis kopiert?

Sollten diese Dateien beim Erstellen der RPM in das Verzeichnis SOURCE oder BUILD verschoben werden? Ich habe viele verschiedene Informationen dazu gefunden. Einige schlagen vor, einen Tarball zu erstellen, der die Dateien enthält, und diesen im SOURCE-Verzeichnis abzulegen. Dies scheint jedoch irgendwie falsch zu sein, da Schriftdateien für mich keine eigentlichen Quelldateien sind.

Im Idealfall möchte ich einfach alle Schriftdateien im Ordner BUILD unter einer Verzeichnisstruktur wie './usr/share/fonts/' ablegen und diese dann im Abschnitt% file der SPEC referenzieren und RPM seine Magie ausführen lassen. Vermutlich fehlt mir hier etwas oder ich verstehe es falsch.

Erwartet der Abschnitt% files immer, dass die Quelldateien im Verzeichnis tmp gefunden werden, oder stimmt etwas mit meinem Setup nicht? Ich habe ~/.rpmmacros erstellt, die enthält

%_topdir             /Users/user/rpm

dies ist das Root-Build-Verzeichnis und enthält die Verzeichnisse BUILD, RPMS, SOURCES, SPECS und tmp.

Ich wäre froh, wenn jemand bereitstellen könnte, welche Elemente in der Spezifikationsdatei am wenigsten benötigt werden, damit dies sauber funktioniert.

Bearbeiten

Den Vorschlägen von user3159253 folgend verwende ich die folgende Spezifikationsdatei:

Name: test
Version: 1.0.0
Release: 1
Copyright: Copyright info
Group: Applications/System
BuildArch: noarch

%description
Brief description of software package.

%prep

%build

%install
mkdir -p %{buildroot}/usr/share/fonts
cp ./usr/share/fonts/* %buildroot/usr/share/fonts/

%clean

%files
/usr/share/fonts/*

Ich habe die Schriften in das Verzeichnis BUILD/usr/share/fonts/kopiert. Wenn ich die rpm nach einer Liste von Dateien abfrage, sind alle Schriftarten dort. Wenn ich jedoch die rpm installiere, beschwert es sich darüber

/usr/share/fonts is needed by test-1.0.0-1.noarch

Es spielt jedoch keine Rolle, ob dieses Verzeichnis vorhanden ist oder nicht. Ich vermute, rpm beschwert sich, dass diese Ressource nicht in seiner Datenbank aufgeführt ist.

Ich konnte dieses Problem beheben, indem ich den Abschnitt% file in: änderte.

/usr/
/usr/share/
/usr/share/fonts/
/usr/share/fonts/*

Ich bezweifle jedoch, dass dies eine so gute Idee ist. Gibt es eine bessere Möglichkeit, dies zu beheben?

11

wenn Sie Dateien im Abschnitt %files auflisten, werden diese Dateien voraussichtlich im Verzeichnis% {buildroot} gespeichert. Wie in der Fedora-Dokumentation heißt, müssen Sie, da Fedora 10 Buildroot nicht neu definiert werden kann in der Spezifikation eine erforderliche Dateisystemhierarchie innerhalb von% buildroot erstellen, dort Ihre Schriftartdateien kopieren und diese dann in %files erwähnen:

...
%install

mkdir -p %{buildroot}/usr/share/fonts
cp /path/to/existing/MyFont.ttf %buildroot/usr/share/fonts/
...

%files
%defattr(0644, root,root)
/usr/share/fonts/*

ihre Distribution enthält wahrscheinlich handliche Makros für die Standardspeicherorte von Schriftdateien, deren ordnungsgemäße Registrierung im System bei der Installation der U/min usw., aber die meisten dieser Makros sind herstellerspezifisch. Außerdem sollten Sie Ihre Schriftartdateien in das Unterverzeichnis SOURCES/kopieren und diese im Tag Source: (Source<N>:) in der rpm-Spezifikation erwähnen (nur ein Beispiel, eine Zahl kann eine beliebige sein):

Name: myfonts
Summary: my fonts package
...
Source5: MyFont.ttf
...

Dann können Sie im Abschnitt %install so etwas verwenden:

cp %{SOURCE5} %buildroot/usr/share/fonts/

anstelle eines vollständigen Pfads zu MyFont.ttf.

Update : Bei fehlenden Abhängigkeiten haben Sie Recht: Es handelt sich nicht um Artefakte (Dateien, Verzeichnisse usw.) im Dateisystem, sondern um Einträge in der RPM-Datenbank (in/var/lib/rpm). Um das Problem zu lösen, müssen Sie mit dieser Datenbank arbeiten.

Wenn Sie also unbefriedigte Abhängigkeiten im generierten RPM-Paket haben, haben Sie zwei Möglichkeiten:

  1. wenn Sie nur eine bequeme Methode zum Verteilen weniger Dateien ohne enge Integration mit Standardsystemfunktionen (siehe unten) wünschen, können Sie einfach alle automatischen rpmname__-Abhängigkeitsberechnungen deaktivieren. Verwenden Sie AutoReqProv: no, um all diese Dinge vollständig zu deaktivieren.
  2. Möglicherweise müssen Sie jedoch ein Paket mit einer besseren Integration in das restliche Betriebssystem erstellen. Beispielsweise können Schriftarten eine Registrierung in geeigneten Systemeinrichtungen erfordern, z. fontconfigname__. Leider haben verschiedene Linux-RPM-Distributionen etwas unterschiedliche Sitten. Eigentlich müssen Sie überprüfen, wie dieser Vorgang in Ihrer Distribution in bereits vorhandenen Font-Paketen organisiert ist. Sie können ein geeignetes Quell-RPM-Paket nehmen (überprüfen Sie http://rpmfind.net oder http://rpm.pbone.net RPM-Suchmaschinen), die .spec-Datei extrahieren und untersuchen, wie %prein Die Abschnitte %postin, %preun und %postun der Spezifikation sind organisiert. Offensichtlich tragen Schriftpakete normalerweise -fonts- im Namen :)

Schließlich können Sie Abhängigkeiten anzeigen und ein deinstalliertes RPM-Paket mit rpm --query --requires --package </path/to/file.rpm> und rpm --query --provides --package </path/to/file.rpm> bereitstellen. Die Deps der installierten Pakete werden mit rpm --query --requires <rpm_name> usw. angezeigt.

6
user3159253

Als Antwort auf Ihre bearbeitete Frage können Sie die folgende Antwort suchen:

Name: test
Version: 1.0.0
Release: 1
Copyright: Copyright info
Group: Applications/System
BuildArch: noarch

%description
Brief description of software package.

%prep

%build

%install
mkdir -p %{buildroot}/
cp -r ./* %buildroot/

%clean

%files
/*

Hier betrachten wir jede Datei im BUILD-Verzeichnis als Teil des Pakets. Dies geschieht, indem Sie /* unter %files setzen.

Ich hoffe, dies beantwortet Ihre Frage richtig.

0
fury.slay