Pregunta

Sólo quiero crear un archivo RPM para distribuir mi Linux binario "foobar", con sólo un par de dependencias. Tiene un archivo de configuración, /etc/foobar.conf y debe ser instalado en / / bin / usr foobar.

Desafortunadamente la documentación rel="noreferrer"> href="http://docs.fedoraproject.org/drafts/rpm-guide-en/" es de 27 capítulos de largo y realmente don 't tiene un día para sentarse y leer esto, porque también soy .deb y EXE instaladores ocupado haciendo para otras plataformas.

¿Cuál es el mínimo absoluto que tengo que hacer para crear un RPM? Asumir el binario foobar y foobar.conf se encuentran en el directorio de trabajo actual.

¿Fue útil?

Solución

hago a menudo rpm binario por envase aplicaciones propietarias - también moster como websphere - en Linux. Así que mi experiencia podría ser útil también que, además de que sería mejor hacer un RPM TRUE si se puede. Pero estoy divagando.

Así que el un paso básico para el envasado de su programa (binario) es el siguiente - en el que supongo que la programa se toybinprog con la versión 1.0, tienen una conf para ser instalado en /etc/toybinprog/toybinprog.conf y tiene un bin para ser instalado en / usr / bin llamado tobinprog:

1. crear su acumulación rpm env para 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. crear el archivo tar de su proyecto

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. Copiar en las fuentes 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. construir la fuente y el rpm binario

rpmbuild -ba SPECS/toybinprog.spec

Y eso es todo.

Espero que esto ayuda

Otros consejos

Como distribuidor de aplicaciones, pies por minuto suena perfecto para sus necesidades . Hay un ejemplo aquí que muestra cómo empaquetar una aplicación de la fuente. FPM puede producir ambos archivos deb y archivos RPM.

Para la construcción RPM rápida, visita Togo:

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

El proyecto cuenta con una guía de inicio rápido, y yo era capaz de crear un RPM básica en menos de 3 minutos.

Ejemplo utilizando los datos proporcionados en la pregunta original:

1) Crear el directorio del proyecto utilizando la secuencia de comandos:

$ togo project create foobar; cd foobar

2) Haga su estructura de directorios que desee bajo ./root y copiar los archivos en ella:

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

3) Excluir directorios propios del sistema y la propiedad de su RPM:

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

4) (opcional) Modificar la especificación generada a cambiar su descripción del paquete / dependencias / versión / lo que sea, etc:.

$ vi spec/header

5) Construir el RPM:

$ togo build package

-y su RPM se escupió en el directorio ./rpms.

Del mismo modo, necesitaba crear un rpm con sólo unos pocos archivos. Dado que estos archivos eran de origen controlada, y porque parecía tonto, yo no quería pasar por el tarado a ellos sólo para tener rpm untar ellos. Se me ocurrió lo siguiente:

  1. Configure su entorno:

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

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

  2. Crea tu archivo de especificaciones, foobar.spec, con el siguiente contenido:

    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. Construir su rpm: rpmbuild -bb foobar.spec

Hay un pequeño hackery no especifica la 'fuente' como el directorio actual, pero parecía mucho más elegante entonces la alternativa, que era, en mi caso, escribir una secuencia de comandos independiente para crear un fichero, etc, etc.

Nota: En mi situación particular, mis archivos se organizan en carpetas de acuerdo a donde tienen que ir, así:

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

y así se convirtió en la sección de preparación:

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

¿Qué es un poco más limpio.

Además, da la casualidad que en un RHEL5.6 con las versiones 4.4.2.3 rpm, por lo que su experiencia puede variar.

Si make config que funciona para su programa o si tiene un script que copia los dos archivos para el lugar correspondiente se puede utilizar checkinstall . Sólo tienes que ir al directorio donde el archivo MAKE está en y llamarlo con el -R parámetro (por RPM ) y opcionalmente con el script de instalación.

Easy manera de construir paquete rpm de binario (estos pasos se ensayaron con Fedora 18):

1) En primer lugar hay que instalar rpmdevtools, por lo que ejecutar estos comandos (atención: ejecutar como un usuario normal)

$ sudo yum install rpmdevtools rpmlint
$ rpmdev-setuptree

2) En la carpeta ~ / rpmbuild / SPECS crear nuevo archivo: package_name.spec

3) Abrir con un editor (como gedit) y escribir lo siguiente:

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) Hacer ~ / rpmbuild / BUILDROOT / package_name-versión-release.i386 y reproducir los caminos donde se colocarán los archivos Así pues, en este caso, por ejemplo, crear:

  • ~ / rpmbuild / BUILDROOT / package_name-versión-release.i386 / usr / bin /
  • ~ / rpmbuild / BUILDROOT / package_name-versión-release.i386 / usr / share / applications /
  • ~ / rpmbuild / BUILDROOT / package_name-versión-release.i386 / usr / share / pixmaps /

5) Poner en estas carpetas los archivos que desea insertar en el paquete:

  • ~ / rpmbuild / BUILDROOT / package_name-versión-release.i386 / usr / bin / binary_file.bin
  • ~ / rpmbuild / BUILDROOT / package_name-versión-release.i386 / usr / share / applications / package_name.desktop
  • ~ / rpmbuild / BUILDROOT / package_name-versión-release.i386 / usr / share / pixmaps / package_name.png

usr / share / pixmaps / package_name.png es el icono del binario usr / share / applications / package_name.desktop son las reglas para insertar el programa en las entradas del menú

6) package_name.desktop debe ser como este:

[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;

Las categorías son las siguientes: standards.freedesktop.org/menu-spec/latest/apa.html

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

8) El paquete fue construido en la carpeta ~ / rpmbuild / RPMS

si instala este paquete que es instalar:

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

Gracias a: losurs.org/docs/tips/redhat/binary-rpms

Para más detalles para construir rpm miren este .

software de Java GUI para construir rpm: https://sourceforge.net/projects/javarpmbuilder/

Si está familiarizado con Maven también rpm-maven-plugin que simplifica la toma de RPM: usted tiene que escribir solamente pom.xml que se utiliza para construir RPM. RPM entorno de compilación se crea de forma implícita por el plugin.

proceso de generación de RPM desde el archivo fuente:

  1. fuente de descarga de archivos with.gz extensión.
  2. instalar rpm-build y rpmdevtools de yum install. (Se generará carpeta rpmbuild ... características, FUENTES, RPMS .. carpetas se debe generarse dentro de la carpeta rpmbuild).
  3. copiar el code.gz fuente a la carpeta de fuentes. (Rpmbuild / SOURCES)
  4. Descomprimir el balón alquitrán utilizando el siguiente comando. ir a la carpeta FUENTES: rpmbuild / SOURCES donde está presente archivo tar. comando: tar por ejemplo -xvzf httpd-2.22.tar.gz httpd-2,22 carpeta se genera en el mismo camino.
  5. Ir a la carpeta extraída y escriba a continuación comando: ./configure --prefix = / usr / local / apache2 --with-included-abr --enable-proxy proxy-enable-balanceador locales --with-mpm = trabajador --enable-mods-estática = all (.Configure puede variar de acuerdo con la fuente para la cual RPM tiene que built-- he hecho por HTTPD Apache que necesita paquete dependencia APR y apr-util).
  6. ejecutar a continuación una vez que el comando de configuración tiene éxito: make
  7. después de la ejecución exitosa od hacer instrucción ejecutada: checkinstall en Tha misma carpeta. (Si usted no tiene el software checkinstall por favor descarga la última versión desde el sitio) También tiene el software checkinstall fallo que puede ser resuelto por la siguiente manera ::::: checkinstallrc localizar y luego vuelva a colocar TRADUZCA = 1 para traducir = 0 con el comando vim. También puedes ver para excluir paquete: EXCLUDE = "/ selinux"
  8. checkinstall pedirá opción (tipo I si desea construir tp rpm durante archivo de origen)
  9. .rpm Hecho se construirá en la carpeta de archivos dentro de RPMS rpmbuild / RPMS ... Todo lo mejor ....

RPM se construyen generalmente de origen, no los binarios.

Es necesario para escribir el archivo de especificaciones que cubre cómo configurar y compilar la aplicación; También, qué archivos incluir en su RPM.

Un rápido vistazo al manual muestra que la mayor parte de lo que necesita está cubierto en el Capítulo 8 -. También, como la mayoría de las distribuciones basadas en RPM tienen fuentes disponibles, hay, literalmente, un trillón de ejemplos de diferentes enfoques usted podría mirar a

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top