web-dev-qa-db-fra.com

Quel est le minimum que je dois faire pour créer un fichier RPM?

Je veux juste créer un fichier RPM pour distribuer mon "foobar" binaire Linux, avec seulement quelques dépendances. Il a un fichier de configuration, /etc/foobar.conf et devrait être installé dans/usr/bin/foobar.

Malheureusement, le documentation pour RPM compte 27 chapitres et je n'ai vraiment pas une journée pour lire et lire ceci, car je suis également occupé à créer des installateurs .deb et EXE pour d'autres plates-formes.

Quel est le minimum absolu que je dois faire pour créer un RPM? Supposons que le binaire foobar et le fichier foobar.conf se trouvent dans le répertoire de travail en cours.

144
Steve Hanov

Je fais souvent des rpm binaires par packaging d'applications propriétaires - également sous forme de websphere - sous Linux. Donc, mon expérience pourrait être utile aussi à vous, outre qu'il serait préférable de faire un VRAI RPM si vous le pouvez. Mais je m'égare.

Donc, une étape de base pour empaqueter votre programme (binaire) est la suivante - dans lequel je suppose que le programme est toybinprog avec la version 1.0, un conf à installer dans /etc/toybinprog/toybinprog.conf et un dossier à installer dans/usr/bin appelé tobinprog:

1. créez votre env. De construction rpm pour des RPM <4.6,4.7

mkdir -p ~/rpmbuild/{RPMS,SRPMS,BUILD,SOURCES,SPECS,tmp}

cat <<EOF >~/.rpmmacros
%_topdir   %(echo $HOME)/rpmbuild
%_tmppath  %{_topdir}/tmp
EOF

cd ~/rpmbuild

2. créer l'archive de votre projet

mkdir toybinprog-1.0
mkdir -p toybinprog-1.0/usr/bin
mkdir -p toybinprog-1.0/etc/toybinprog
install -m 755 toybinprog toybinprog-1.0/usr/bin
install -m 644 toybinprog.conf toybinprog-1.0/etc/toybinprog/

tar -zcvf toybinprog-1.0.tar.gz toybinprog-1.0/

3. Copier dans le répertoire sources

cp toybinprog-1.0.tar.gz SOURCES/

cat <<EOF > SPECS/toybinprog.spec
# Don't try fancy stuff like debuginfo, which is useless on binary-only
# packages. Don't strip binary too
# Be sure buildpolicy set to do nothing
%define        __spec_install_post %{nil}
%define          debug_package %{nil}
%define        __os_install_post %{_dbpath}/brp-compress

Summary: A very simple toy bin rpm package
Name: toybinprog
Version: 1.0
Release: 1
License: GPL+
Group: Development/Tools
SOURCE0 : %{name}-%{version}.tar.gz
URL: http://toybinprog.company.com/

BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root

%description
%{summary}

%prep
%setup -q

%build
# Empty section.

%install
rm -rf %{buildroot}
mkdir -p  %{buildroot}

# in builddir
cp -a * %{buildroot}


%clean
rm -rf %{buildroot}


%files
%defattr(-,root,root,-)
%config(noreplace) %{_sysconfdir}/%{name}/%{name}.conf
%{_bindir}/*

%changelog
* Thu Apr 24 2009  Elia Pinto <[email protected]> 1.0-1
- First Build

EOF

4. Construire le code source et le régime binaire

rpmbuild -ba SPECS/toybinprog.spec

Et c'est tout.

J'espère que cette aide

173
devzero2000

En tant que distributeur d’applications, fpm semble parfait pour vos besoins . Il y a n exemple ici qui montre comment conditionner une application à partir des sources. FPM peut produire des fichiers deb et des fichiers RPM.

20
timmow

Pour une construction rapide du RPM, consultez Togo:

https://github.com/genereese/togo-rpm

Le projet contient un guide de démarrage rapide et j'ai pu créer un RPM de base en moins de 3 minutes.

Exemple utilisant les données fournies dans la question initiale:

1) Créez le répertoire du projet en utilisant le script:

$ togo project create foobar; cd foobar

2) Créez la structure de répertoires souhaitée sous ./root et copiez-y vos fichiers:

$ mkdir -p root/etc; cp /path/to/foobar.conf root/etc/
$ mkdir -p root/usr/bin; cp /path/to/foobar root/usr/bin/

3) Excluez les répertoires appartenant au système de la propriété de votre RPM:

$ togo file exclude root/etc root/usr/bin

4) (FACULTATIF) Modifiez la spécification générée pour modifier la description/les dépendances de votre paquet, la version, etc., etc.:

$ vi spec/header

5) Construire le RPM:

$ togo build package

-et votre RPM est craché dans le répertoire ./rpms.

16
dadealeus

De même, je devais créer un rpm avec seulement quelques fichiers. Étant donné que ces fichiers étaient contrôlés par la source et que cela semblait idiot, je ne voulais pas les tarir simplement pour que RPM les décompresse. Je suis venu avec ce qui suit:

  1. Configurez votre environnement:

    mkdir -p ~/rpm/{BUILD,RPMS}

    echo '%_topdir %(echo "$HOME")/rpm' > ~/.rpmmacros

  2. Créez votre fichier de spécification, foobar.spec, avec le contenu suivant:

    Summary: Foo to the Bar
    Name: foobar
    Version: 0.1
    Release: 1
    Group: Foo/Bar
    License: FooBarPL
    Source: %{expand:%%(pwd)}
    BuildRoot: %{_topdir}/BUILD/%{name}-%{version}-%{release}
    
    %description
    %{summary}
    
    %prep
    rm -rf $RPM_BUILD_ROOT
    mkdir -p $RPM_BUILD_ROOT/usr/bin
    mkdir -p $RPM_BUILD_ROOT/etc
    cd $RPM_BUILD_ROOT
    cp %{SOURCEURL0}/foobar ./usr/bin/
    cp %{SOURCEURL0}/foobar.conf ./etc/
    
    %clean
    rm -r -f "$RPM_BUILD_ROOT"
    
    %files
    %defattr(644,root,root)
    %config(noreplace) %{_sysconfdir}/foobar.conf
    %defattr(755,root,root)
    %{_bindir}/foobar
    
  3. Construisez votre régime: rpmbuild -bb foobar.spec

Il y a un petit hackery qui spécifie la "source" comme répertoire actuel, mais cela semblait beaucoup plus élégant que l'alternative qui consistait, dans mon cas, à écrire un script séparé pour créer une archive, etc., etc.

Remarque: dans ma situation particulière, mes fichiers étaient classés dans des dossiers en fonction de l'endroit où ils devaient aller, comme ceci:

./etc/foobar.conf
./usr/bin/foobar

et ainsi la section de préparation est devenue:

%prep
rm -rf $RPM_BUILD_ROOT
mkdir -p $RPM_BUILD_ROOT
cd $RPM_BUILD_ROOT
tar -cC %{SOURCEURL0} --exclude 'foobar.spec' -f - ./ | tar xf -

Ce qui est un peu plus propre.

De plus, je suis sur une RHEL5.6 avec les versions 4.4.2.3, alors votre kilométrage peut varier.

15
glickbot

Si make config fonctionne pour votre programme ou si vous avez un script shell qui copie vos deux fichiers à l’emplacement approprié que vous pouvez utiliser checkinstall . Allez simplement dans le répertoire où se trouve votre makefile et appelez-le avec le paramètre -R (pour [~ # ~] rpm [~ # ~] ) et éventuellement avec le script d'installation.

4
js.

Un moyen facile de construire le paquetage rpm à partir de binaires (ces étapes ont été testées avec Fedora 18):

1) Vous devez d’abord installer rpmdevtools, lancez donc ces commandes (attention: exécutez en tant qu’utilisateur normal)

$ Sudo yum install rpmdevtools rpmlint
$ rpmdev-setuptree

2) Dans le dossier ~/rpmbuild/SPECS, créez un nouveau fichier: nom_package.spec.

3) Ouvrez-le avec un éditeur (comme gedit) et écrivez ceci:

Name:           package_name
Version:        1.0
Release:        1
Summary:        Short description (first char has to be uppercase)

License:        GPL
URL:            www. your_website/

BuildRequires:  package_required >= (or ==, or <=) 1.0.3 (for example)

%description
Description with almost 79 characters (first char has to be uppercase)

#This is a comment (just as example)

%files
/usr/bin/binary_file.bin
/usr/share/applications/package_name.desktop
/usr/share/pixmaps/package_name.png

%changelog
* date Packager's Name <packager's_email> version-revision
- Summary of changes

#For more details see: docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/Packagers_Guide/sect-Packagers_Guide-Creating_a_Basic_Spec_File.html

4) Fabriquez ~/rpmbuild/BUILDROOT/nom_package-version-release.i386 et reproduisez les chemins où les fichiers seront placés. Dans ce cas par exemple, créez:

  • ~/rpmbuild/BUILDROOT/nom_package-version-release.i386/usr/bin /
  • ~/rpmbuild/BUILDROOT/nom_package-version-release.i386/usr/share/applications /
  • ~/rpmbuild/BUILDROOT/nom_package-version-release.i386/usr/share/pixmaps /

5) Mettez dans ces dossiers les fichiers que vous voulez insérer dans le paquet:

  • ~/rpmbuild/BUILDROOT/nom_package-version-release.i386/usr/bin/fichier_binaire.bin
  • ~/rpmbuild/BUILDROOT/nom_package-version-release.i386/usr/share/applications/nom_package.desktop
  • ~/rpmbuild/BUILDROOT/nom_package-version-release.i386/usr/share/pixmaps/nom_package.png

usr/share/pixmaps/nom_package.png est l'icône binaire usr/share/applications/nom_package.desktop sont les règles permettant d'insérer le programme dans les entrées de menu

6) nom_package.desktop doit être comme ceci:

[Desktop Entry]
Encoding=UTF-8
Type=Application
Name=example
GenericName=Short description
Comment=Comment of the application
Exec=package_name
Icon=package_name
Terminal=false
Categories=System;

Les catégories sont les suivantes: standards.freedesktop.org/menu-spec/latest/apa.html

7) Run $ rpmbuild -bb ~/rpmbuild/SPECS/package_name.spec

8) Votre paquet a été construit dans le dossier ~/rpmbuild/RPMS

si vous installez ce paquet c'est installer:

  • /usr/bin/binary_file.bin
  • /usr/share/applications/nom_package.desktop
  • /usr/share/pixmaps/nom_package.png

Merci à: losurs.org/docs/tips/redhat/binary-rpms

Pour plus de détails sur la construction de tr/min, jetez un œil à ceci lien .

Interface utilisateur graphique Java permettant de générer rpm: https://sourceforge.net/projects/javarpmbuilder/

4
RobotMan