153 votes

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

Je veux juste créer un fichier RPM pour diffuser mes binaire Linux "foobar", avec seulement un couple de dépendances. Il dispose d'un fichier de configuration, /etc/foobar.conf et doit être installé dans /usr/bin/foobar.

Malheureusement, la documentation TR / min est de 27 chapitres et je n'ai pas vraiment d'un jour de s'asseoir et de lire ça, parce que je suis aussi occupé à faire .deb et EXE installateurs pour d'autres plates-formes.

Stackoverflow: Quel est le minimum absolu que j'ai à faire pour créer un RPM? Assumer les foobar binaire et foobar.conf sont dans le répertoire de travail courant.

179voto

devzero2000 Points 606

Je le fais souvent rpm binaire par emballage exclusif des applications aussi moster que websphere - sur linux. Donc, mon expérience pourrait être utile également, outre qu'il serait mieux de faire un VRAI TR / min si vous le pouvez. Mais je m'égare.

De sorte que le pas de base pour l'emballage de votre (binaire) programme de suivi dans lequel je suppose que le le programme est toybinprog avec la version 1.0, ont une conf pour être installé dans /etc/toybinprog/toybinprog.conf et d'avoir un bac pour être installé dans /usr/bin appelé tobinprog :

1. créer votre rpm construire env pour 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 les sources dir

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 <devzero2000@rpm5.org> 1.0-1
- First Build

EOF

4. la construction de la source et les binaires rpm

rpmbuild -ba SPECS/toybinprog.spec

Et c'est tout.

Espérons que cette aide

21voto

timmow Points 1625

En tant que distributeur d’applications, fpm semble parfaitement adapté à vos besoins . Voici un exemple qui montre comment conditionner une application à partir des sources. FPM peut produire des fichiers deb et des fichiers RPM.

16voto

glickbot Points 99

De même, j'avais besoin de créer un rpm avec juste quelques fichiers. Étant donné que ces fichiers ont été source contrôlée, et parce qu'il me semblait idiot, je n'ai pas envie de passer par de tarage jusqu'juste pour avoir rpm décompresser. Je suis venu avec les éléments suivants:

  1. Configurer votre environnement:

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

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

  2. Créer votre fichier spec, 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. Construire votre rpm: rpmbuild -bb foobar.spec

Il y a un peu hackery y précisant la "source" de votre répertoire courant, mais il semblait beaucoup plus élégant, alors l'alternative, qui a été, dans mon cas, écrire un script séparé pour créer une archive, etc, etc.

Remarque: Dans mon cas en particulier, mes fichiers ont été classés dans des dossiers selon l'endroit où ils devaient aller, comme ceci:

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

et donc la préparation de la section 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.

Aussi, il m'arrive d'être sur un RHEL5.6 avec rpm versions 4.4.2.3, de sorte que votre kilométrage peut varier.

16voto

dadealeus Points 21

Rapide TR / min bâtiment, découvrez Togo:

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

Le projet a un guide de Démarrage Rapide et j'ai été en mesure de créer une base de RPM en moins de 3 minutes.

Exemple en utilisant les données fournies dans la question d'origine:

1) Créer le répertoire du projet à l'aide du script:

$ togo -c foobar; cd foobar

2) Faites votre choix structure de répertoire ./racine et copie vos fichiers dans:

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

3) système de Drapeau appartenant à des répertoires à exclure de votre RPM propriété:

$ togo -f root/etc
$ togo -f root/usr/bin

-la sélection de l'option 1 pour les exclure de votre TR / min.

4) Modifier la spécification de changer votre description de l'emballage/dépendances, etc.:

$ vi spec/header

5) Construire le RPM:

$ togo -bp

-et votre TR / min est de cracher dans la ./rpm répertoire.

5voto

RobotMan Points 91

Moyen simple de construire un package rpm binaire (ces étapes ont été testés avec Fedora 18):

1) vous devez d'Abord installer rpmdevtools, afin d'exécuter ces commandes (à l'attention de: exécuter en tant qu'utilisateur normal)

$ sudo yum install rpmdevtools rpmlint
$ rpmdev-setuptree

2) Dans le ~/rpmbuild/SPECS dossier créer un nouveau fichier: nom_du_paquet.spec

3) l'Ouvrir avec un éditeur de texte (comme gedit) et écrire 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) Faire ~/rpmbuild/BUILDROOT/nom_du_paquet-version-de.i386 et de reproduire les chemins d'accès où les fichiers seront placés Donc, dans ce cas, par exemple, créer:

  • ~/rpmbuild/BUILDROOT/nom_du_paquet-version-de.i386/usr/bin/
  • ~/rpmbuild/BUILDROOT/nom_du_paquet-version-de.i386/usr/share/applications/
  • ~/rpmbuild/BUILDROOT/nom_du_paquet-version-de.i386/usr/share/pixmaps/

5) Mettre dans ces dossiers, les fichiers que vous souhaitez insérer dans le package:

  • ~/rpmbuild/BUILDROOT/nom_du_paquet-version-de.i386/usr/bin/binary_file.bin
  • ~/rpmbuild/BUILDROOT/nom_du_paquet-version-de.i386/usr/share/applications/nom_du_paquet.bureau
  • ~/rpmbuild/BUILDROOT/nom_du_paquet-version-de.i386/usr/share/pixmaps/nom_du_paquet.png

usr/share/pixmaps/nom_du_paquet.png est l'icône de l'option binaire usr/share/applications/nom_du_paquet.de bureau sont les règles pour insérer le programme dans le menu entrées

6) nom_du_paquet.de bureau 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 présentes: standards.freedesktop.org/menu-spec/latest/apa.html

7) Exécuter $ rpmbuild -bb ~/rpmbuild/SPECS/package_name.spec

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

si vous installez ce package d'installation:

  • /usr/bin/binary_file.bin
  • /usr/share/applications/nom_du_paquet.bureau
  • /usr/share/pixmaps/nom_du_paquet.png

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

Pour plus de détails à construire tr / min, voir: www.fedoraproject.org/wiki/How_to_create_an_RPM_package www.docs.fedoraproject.org/en-US/Fedora_Draft_Documentation/0.1/html/Packagers_Guide/sect-Packagers_Guide-Creating_a_Basic_Spec_File.html

Interface graphique du logiciel java pour construire des rpm: https://sourceforge.net/projects/javarpmbuilder/

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X