{"id":1466,"date":"2016-07-07T18:30:07","date_gmt":"2016-07-07T16:30:07","guid":{"rendered":"https:\/\/www.my-it-brain.de\/wordpress\/?p=1466"},"modified":"2016-10-21T23:27:33","modified_gmt":"2016-10-21T21:27:33","slug":"mein-erstes-rpm-paket","status":"publish","type":"post","link":"https:\/\/www.my-it-brain.de\/wordpress\/mein-erstes-rpm-paket\/","title":{"rendered":"Mein erstes RPM-Paket"},"content":{"rendered":"<h2>Vorwort<\/h2>\n<p>Der Inhalt dieses Artikels ist nicht zur Nachahmung empfohlen. Ich halte an dieser Stelle fest, wie ich mein erstes RPM-Paket erstellt habe. Dieses funktioniert zwar und tut was es soll, doch ist es aus qualitativer Sicht noch ein weiter Weg, bis ich es selbst als gut bezeichnen w\u00fcrde. Der Artikel ist daher eher als ein Hilferuf zu verstehen. Ich freue mich, wenn mir geduldige, erfahrene Paketbauer in den Kommentaren Tipps geben, wie ich es besser machen kann.<\/p>\n<h2>Was habe ich getan?<\/h2>\n<p>Um die Installation des Tivoli TSM-Backup-Client 7.1.6 unter RHEL\/CentOS\/Fedora zu vereinfachen, habe ich f\u00fcr die Installation ein RPM-Paket erstellt. Der TSM-Backup-Client selbst wird vom Hersteller als TAR-Archiv bereitgestellt, welches die zur Installation ben\u00f6tigten RPM-Pakete enth\u00e4lt. Dazu gibt es eine Dokumentation, welche weitere z.T. optionale Abh\u00e4ngigkeiten auff\u00fchrt. Darunter z.B. die Installation einiger Bibliotheken und eines Oracle JRE 1.7 oder h\u00f6her.<\/p>\n<p>All diese Dinge habe ich zusammen mit einem Skript, welches die initiale Installation und Konfiguration vornimmt, in ein RPM-Paket gepackt. Dieses Paket l\u00e4sst sich auf dem Zielsystem installieren und durch die anschlie\u00dfende Ausf\u00fchrung des (selbst erstellten) Skripts tsm_init.sh werden die ben\u00f6tigten RPM-Pakete und Abh\u00e4ngigkeiten installiert.<\/p>\n<p>Meine SPEC-Datei sieht wie folgt aus:<\/p>\n<pre>#---------------------------------------------------------------#\r\n# version for using createRPM_* script\r\n#---------------------------------------------------------------#\r\nName:      tsm-backup-client\r\nVersion:   7.1.6\r\nRelease:   1%{?dist}\r\nPackager:  Tronde\r\nGroup:     Applications\/System\r\nSummary:   Tivoli TSM Backup Client for Linux\r\n\r\nLicense:   non-free\r\nURL:       http:\/\/example.com\r\n\r\nBuildArch: x86_64\r\nBuildRoot: %{_tmppath}\/%{name}-%{version}\r\n\r\n# $RPM_SOURCE_DIR : Variable of rpmbuild SOURCE dir\r\n# $RPM_BUILD_DIR  : Variable of rpmbuild BUILD dir\r\n# $RPM_BUILD_ROOT : Variable of rpmbuild BUILDROOT dir\r\n#%define <var> \r\n\r\n#BuildRequires:\r\nRequires: libXrender\r\nRequires: libXtst\r\nRequires: libXp\r\nRequires: xorg-x11-xauth\r\n\r\n%description\r\nThis package installs the required packages and scripts for the\r\ninstallation of the Tivoli TSM Backup Client for Linux.\r\n\r\nThe package contains:\r\n * bacli\r\n * tsm_init.sh\r\n * jre-8u91-linux-x64.tar.gz\r\n\r\n#---------------------------------------------------------------#\r\n# not used sections should be be set to comment\r\n#---------------------------------------------------------------#\r\n# The section '%prep' to extract the sourcefile 'Source0'\r\n#%prep\r\n\r\n# The section '%build' to build binaries from sources\r\n#%build\r\n\r\n# copy files to $RPM_BUILD_ROOT for using in the %files section\r\n%install\r\ncd $RPM_BUILD_ROOT\r\ntar xvzf $RPM_SOURCE_DIR\/%{name}.tgz\r\nmv %{name}\/* .\r\nrmdir %{name}\r\n\r\n# this files will be included in the rpm package\r\n# with path on target host\r\n%files\r\n%defattr(-,root,root)\r\n%doc\r\n\/root\/bin\/tsm_init.sh\r\n\/root\/bin\/start-tivoli-gui.sh\r\n\/data\/bacli\/gskcrypt64-8.0.50.66.linux.x86_64.rpm\r\n\/data\/bacli\/gskssl64-8.0.50.66.linux.x86_64.rpm\r\n%doc \/data\/bacli\/README_api_enu.htm\r\n%doc \/data\/bacli\/README_enu.htm\r\n%doc \/data\/bacli\/README\r\n\/data\/bacli\/cat_README.sh\r\n\/data\/bacli\/TIVsm-API64.x86_64.rpm\r\n\/data\/bacli\/TIVsm-APIcit.x86_64.rpm\r\n\/data\/bacli\/TIVsm-BAcit.x86_64.rpm\r\n\/data\/bacli\/TIVsm-BAhdw.x86_64.rpm\r\n\/data\/bacli\/TIVsm-BA.x86_64.rpm\r\n\/data\/bacli\/TIVsm-filepath-7.1.6-0-rhel59.x86_64.rpm\r\n\/data\/bacli\/TIVsm-filepath-7.1.6-0-rhel64.x86_64.rpm\r\n\/data\/bacli\/TIVsm-filepath-7.1.6-0-rhel7.x86_64.rpm\r\n\/data\/bacli\/TIVsm-filepath-7.1.6-0-sles11sp2.x86_64.rpm\r\n\/data\/bacli\/TIVsm-filepath-source.tar.gz\r\n\/data\/bacli\/TIVsm-JBB.x86_64.rpm\r\n\/data\/jre-8u91-linux-x64.tar.gz\r\n\r\n%clean\r\nrm -rf %{buildroot}\r\n\r\n# The section '%pre', for code to be executed prior to install\r\n#%pre\r\n\r\n# The section '%prerun' for code to be executed prior to uninstall\r\n%preun\r\n\r\n# the section '%post', for code to be executed after install\r\n# normal sh script, prefs variables and macros can be used\r\n%post\r\n\r\n# The section '%postun' for code to be executed after uninstall\r\n#%postun\r\n\r\n%changelog\r\n*Tue Jul 05 2016  Tronde 7.1.6-1\r\n-- Initial Build.\r\n<\/var><\/pre>\n<h3>Bisher erkannte M\u00e4ngel<\/h3>\n<p>Mir sind bisher folgende M\u00e4ngel aufgefallen:<\/p>\n<ol>\n<li>Nach der Installation des Pakets m\u00fcssen die enthaltenen RPM-Pakete durch ein weiteres Skript installiert werden.<\/li>\n<li>Das Installationsskript muss manuell auf dem Zielsystem gestartet werden.<\/li>\n<li>Bei der Deinstallation werden die vom tsm_init.sh-Skript installierten RPM-Pakete nicht mit entfernt.<\/li>\n<\/ol>\n<p>Meine Idee das tsm_init.sh-Skript in die Sektion %post zu packen hat leider nicht funktioniert, da ich die Paketverwaltung damit in einen Deadlock schicke. YUM ist noch durch den Installationsprozess blockiert, welcher mein RPM-Paket installiert und wartet darauf, dass der YUM-Aufruf aus meinem tsm_init.sh-Skript beendet werden kann. So geht es also nicht.<\/p>\n<h2>Was m\u00f6chte ich eigentlich erreichen?<\/h2>\n<p>Erreichen m\u00f6chte ich, dass durch die Installation eines RPM-Paktes die folgenden RPM-Pakete auf dem Zielsystem installiert werden:<\/p>\n<ul>\n<li>gskcrypt64-8.0.50.66.linux.x86_64.rpm<\/li>\n<li>gskssl64-8.0.50.66.linux.x86_64.rpm<\/li>\n<li>TIVsm-API64.x86_64.rpm<\/li>\n<li>TIVsm-BA.x86_64.rpm<\/li>\n<\/ul>\n<p>Das Skript tsm_init.sh soll anschlie\u00dfend nur noch dazu verwendet werden, um den installierten TSM-Backup-Client mit einer initialen Konfiguration zu versehen. Ein zweites Skript soll an einem Ort abgelegt werden, von dem aus es ausgef\u00fchrt werden kann.<\/p>\n<p>Bisher ist meine einzige Idee, diese Aufgabe zu l\u00f6sen, die vier genannten RPM-Pakete in ein YUM-Repository zu legen. In meiner SPEC-Datei kann ich sie dann als Abh\u00e4ngigkeiten definieren:<\/p>\n<pre>#BuildRequires:\r\nRequires: gskcrypt64-8.0.50.66.linux.x86_64.rpm\r\nRequires: gskssl64-8.0.50.66.linux.x86_64.rpm\r\nRequires: TIVsm-API64.x86_64.rpm\r\nRequires: TIVsm-BA.x86_64.rpm\r\n<\/pre>\n<p>Allerdings frage ich mich, ob es nicht auch eine M\u00f6glichkeit gibt, eine Art Meta-RPM zu erstellen, welches die ben\u00f6tigten RPMs enth\u00e4lt und diese Installiert. Ich k\u00f6nnte die Software auf diesem weg \u00fcber ein einziges Paket bereitstellen.<\/p>\n<p>Falls ihr Ideen oder Hinweise geben k\u00f6nnt, wie die Anforderung am besten umzusetzen ist, freue ich mich \u00fcber eure Kommentare unter diesem Artikel.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vorwort Der Inhalt dieses Artikels ist nicht zur Nachahmung empfohlen. Ich halte an dieser Stelle fest, wie ich mein erstes RPM-Paket erstellt habe. Dieses funktioniert zwar und tut was es soll, doch ist es aus qualitativer Sicht noch ein weiter Weg, bis ich es selbst als gut bezeichnen w\u00fcrde. Der Artikel ist daher eher als<span class=\"continue-reading\"> <a href=\"https:\/\/www.my-it-brain.de\/wordpress\/mein-erstes-rpm-paket\/\">[Weiterlesen&#8230;]<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_metis_text_type":"","_metis_text_length":0,"_post_count":0,"footnotes":""},"categories":[51],"tags":[430,305,404,405],"class_list":["post-1466","post","type-post","status-publish","format-standard","hentry","category-linux","tag-osbn","tag-planet","tag-rpm","tag-rpmbuild"],"_links":{"self":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1466","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/comments?post=1466"}],"version-history":[{"count":2,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1466\/revisions"}],"predecessor-version":[{"id":1468,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/posts\/1466\/revisions\/1468"}],"wp:attachment":[{"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/media?parent=1466"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/categories?post=1466"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.my-it-brain.de\/wordpress\/wp-json\/wp\/v2\/tags?post=1466"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}