[PYTHON] emballage rpm

emballage rpm

C'est le premier message de Qiita. Cet article est un rappel sur le packaging rpm! Je l'ai écrit avec le sentiment que je devrais être capable de comprendre le grand cadre. Je vais résumer les détails dans un autre article! (Je vais ...) Si vous faites une erreur, veuillez vous précipiter.

Qu'est-ce que l'emballage rpm en premier lieu?

rpm - >> Système de gestion de progiciels développé par Red Hat Emballage - >> Lors du développement d'une application (?) Etc., rassemblez ce dont vous avez besoin afin qu'elle puisse être utilisée dans n'importe quel environnement. C'est comme ça? Eh bien, avec l'emballage rpm, vous pouvez facilement distribuer vos créations et bénéficier d'une utilisation facile dans n'importe quel environnement. Je dois essayer ça! Voyons donc quel type de structure il a!

Structure du répertoire

[Répertoire ①]

rpmtest
  ├──BUILD
  ├──BUILDROOT
  ├──Makefile
  ├──README.md
  ├──RPMS
  ├──SOURCES
  ├──SPECS/
        ∟test.spec
  ├──SRPMS
  ├──hello-test-0.9/
     ├ Makefile
        ∟hello.sh

Supposons que cette structure de répertoires soit complète cette fois. Lorsque topdir est rpmtest, seul Makefile README.md SOURCES SPECS hello-test-0.9 est créé par vous-même. D'autres répertoires sont automatiquement créés en exécutant une certaine commande.

Par conséquent, après tout, la structure de répertoires que vous préparez en premier est la suivante,

[Répertoire ②]

rpmtest
  ├──Makefile
  ├──README.md
  ├──SOURCES
  ├──SPECS/
        ∟test.spec
  ├──hello-test-0.9/
     ├ Makefile
        ∟hello.sh

En exécutant une certaine commande après avoir créé cette structure, cela devient comme [Répertoire ②]. (Insistant,)

Jetons un œil au [Répertoire ①] terminé dans l'ordre du haut. --BUILD-> Répertoire de travail utilisé lors de la création de packages rpm --BUILDROOT-> Le répertoire racine pour l'installation virtuelle des applications --Makefile-> Vous pouvez utiliser la commande make dans le répertoire supérieur (rpmtest dans ce cas) pour faciliter les choses. --README.md-> Description de ce que vous voulez empaqueter --RPPS-> Répertoire où se trouve le package rpm terminé --SOURCES-> Le répertoire où vous mettez le code source à inclure dans le package rpm (dans ce cas, le répertoire hello-test-0.9 est ce que vous voulez package, mais au lieu de mettre le code source dans SOURCES depuis le début, bonjour-test lors de l'exécution de la commande -0.9 Je veux mettre une collection de répertoires, donc je vais d'abord laisser le contenu de SOURCES vide) --SPECS-> rpm Répertoire pour mettre le fichier de spécification utilisé pour créer le package (comment écrire le fichier de spécification sera décrit plus tard) --SRPMS-> Répertoire où se trouve le fichier srpm terminé --Hello-test-0.9 Makefile-> fichier de spécifications Requis dans la section% install au démarrage --hello.sh de hello-test-0.9-> Code source que vous voulez empaqueter cette fois

C'est difficile à voir, mais ça ressemble à ça. (Je veux le réparer ici d'une manière facile à comprendre)

Essayez d'écrire du code pour l'empaquetage de rpm

Entrons enfin dans le sujet principal! En principe, ce que je veux empaqueter cette fois est hello-world-0.9 / hello.sh. Le contenu est le suivant

#!usr/bin/env bash

echo "hello world!"

Lorsque vous l'exécutez, il dit bonjour le monde!, Ce qui est extrêmement simple, n'est-ce pas? alors! En premier lieu, le but cette fois est d'exécuter la commande make rpm et vous pouvez empaqueter ce script shell! !! Hou la la! !! C'est vrai! (maintenant,,,) Je n'ai pas à oser empaqueter une chose aussi simple qui se présente comme bonjour le monde!, Mais quand la chose que je veux empaqueter a une structure plus compliquée, juste une commande de make rpm Lorsque l'emballage est complet, c'est trop divin! !! Voilà pourquoi. Oui, revenons à l'histoire. Lorsque j'exécute la commande ./hello.sh dans rpmtest / hello-world-0.9, cela indique que je n'ai pas la permission, mais c'est très bien. Le fichier de spécifications de génie fera quelque chose plus tard. J'expliquerai hello-world-0.9 / Makefile plus tard.

Jetons ensuite un coup d'œil à SPEC / test.spec, qui joue un rôle de premier plan dans l'empaquetage de rpm. Ce fichier de spécifications est un génie et c'est incroyable! Le fichier spec cette fois est le suivant. [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

Je l'ai rendu aussi simple que possible. Passons à l'explication.

À propos, le fichier de spécification a la structure suivante.

Voyons comment test.spec fonctionne pour le moment. <%prep> Prêt à emballer. Il est gênant si la version précédente de BUILD ROOT reste, alors supprimez-la avec rm au cas où. <%setup> (1) Supprimer le répertoire Nom-Version (en considérant la possibilité que le code source de la version précédente reste) (2) Décompressez le fichier spécifié dans Source0 avec gzip et extrayez-le avec tar (un répertoire Nom-Version est également créé). ③ Accédez au répertoire Nom-Version ④ Changement des autorisations (Le problème qui apparaît lorsque vous exécutez la commande ci-dessus sans autorisation est résolu ici !!) *** [[Alors d'où vient le fichier spécifié dans ②! !! ]] *** Bonne question! Makefile (rpmtest / Makefile) dans le répertoire supérieur résout la question ici! !! Il y a des parties que je n'ai pas encore utilisées, mais je vais toutes les écrire pour l'instant. [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*

Pour le moment, la partie déploiement est pertinente. Dans ce Makefile, lorsque make rpm est exécuté, make deploy est exécuté puis rpmbuild est exécuté (le fichier de spécification s'exécute). La *** question précédente *** comment déployer le résoudra! Alors, que fait-on exactement avec make deploy? ❶ Consolidez le répertoire appelé hello-world-0.9 avec tar ❷ Déplacez le fichier tar consolidé dans le répertoire SOURCES Ces deux tâches sont en cours. alors! !! Cela a résolu la question précédente. Quand j'exécute rpmbuild (même si j'essaye d'exécuter le fichier spec), avant cela, make deploy est lancé et le hello-world-0.9 durci par le tar est déplacé vers SOURCES! <%build> Complétez le processus pour créer le package. Le point de départ de cette section est de passer à la version de nom (hello-world-0.9) développée par% setup plus tôt. <%install> Comme pour% build, le point de départ de cette section est de passer à la version de nom (hello-world-0.9) développée par% setup. Eh bien, vous avez trouvé make ici aussi. Présentation de Makefile à nouveau. Cette fois, le Makefile est 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

Cette installation est une installation virtuelle. Beaucoup d'entre vous ont peut-être pensé que l'explication de BUILD ROOT qui apparaissait au début n'avait pas de sens. Le BUILD ROOT ici est comparé à la racine réelle. Puisqu'il s'agit d'une variable, elle est polyvalente et facile à utiliser. (Je veux le réécrire un peu plus clairement ici)

Allons! !! Maintenant, pip installez les fichiers dans RPMS et tout sera résolu! !! Yatta Merci d'avoir lu même si c'est long. Il y a encore beaucoup de parties brutes, donc je vais bientôt la réécrire ...

Recommended Posts

emballage rpm
miam et rpm