Monthly Archives: April 2012

Creacion de un paquete rpm a partir del src.rpm

Creacion de un paquete rpm a partir del src.rpm

Antes que nada deberiamos instalar el grupo correspondiente para Desarrollo:

sudo yum groupinstall “Development Tools”

La primera estructura que deberiamos crear es la siguiente :

mkdir $HOME/rpmbuild ;for i in BUILD BUILDROOT RPMS SOURCES SPECS SRPMS tmp; do echo "Creando el directorio $HOME/rpmbuild/$i " ; mkdir $HOME/rpmbuild/$i; done

Nota: hacerlo como usuario normal.

Generamos nuestro macro:

vi $HOME/rpmbuild/.rpmmacro
#%_topdir /home/adrian/rpmbuild
%{_topdir} %{getenv:HOME}/rpmbuild
%_builddir %{_topdir}/BUILD
%_rpmdir %{_topdir}/RPMS
%_sourcedir %{_topdir}/SOURCES
%_specdir %{_topdir}/SPECS
%_srcrpmdir %{_topdir}/SRPMS
%_buildrootdir %{_topdir}/BUILDROOT
%_tmppath %{_topdir}/tmp
%packager Rino Rondan <villadalmine@fedoraproject.org>
%vendor Rino Rondan <villadalmine@fedoraproject.org>

En el archivo creado vamos a poner informacion util a la hora de la creacion de nuestros paquetes.

Luego nos bajamos algun paquete en este caso el siguiente


wget http://alvesadrian.fedorapeople.org/jupiter-0.1.4+svn04112012-1.fc16.src.rpm -O $HOME/rpmbuild/SOURCES/jupiter-0.1.4+svn04112012-1.fc16.src.rpm

Una vez que bajamos el src.rpm procedemos a instalarlo.

yum install HOME/rpmbuild/SOURCES/jupiter-0.1.4+svn04112012-1.fc16.src.rpm

Luego si hacemos un ls a :

ls -l $HOME/rpmbuild/SPECS

Vamos a ver que tenemos un archivo que se llama jupiter.spec donde tenemos justamente toda la info que vamos a utilizar para crear el paquete. Por ahora es necesario que entendamos como funciona la creacion luego mas adelante y con mas practica habra tiempo para chequear cada punto de este importante archivo.

Ahora con este paso realizado podemos crear el paquetes vamos a ver tres formas.

rpmbuild -b[asb] paquete.spec

Con la opcion a nos genera los archivos correspondientes en SRPMS y RPMS
Con la opcion b nos genera los archivos correspondientes en RPMS
Con la opcion s nos genera los archivos correspondientes en SRPMS

Procedamos a ver cada caso en particular.

cd $HOME/rpmbuild/SPECS

[restauracion@...crond1/rpmbuild/SPECS $] rpmbuild -ba jupiter.spec
Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.89AZcO
+ umask 022
+ cd /home/crond1/rpmbuild/BUILD
+ LANG=C
+ export LANG
+ unset DISPLAY
+ cd /home/crond1/rpmbuild/BUILD
+ rm -rf jupiter-0.1.4+svn04112012
+ /usr/bin/gzip -dc /home/crond1/rpmbuild/SOURCES/jupiter-0.1.4+svn04112012.tar.gz
+ /bin/tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd jupiter-0.1.4+svn04112012
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.z6HrH1
+ umask 022
+ cd /home/crond1/rpmbuild/BUILD
+ cd jupiter-0.1.4+svn04112012
+ LANG=C
+ export LANG
+ unset DISPLAY
+ exit 0
Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.IXSAcf
+ umask 022
+ cd /home/crond1/rpmbuild/BUILD
+ '[' /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64 '!=' / ']'
+ rm -rf /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64
++ dirname /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64
+ mkdir -p /home/crond1/rpmbuild/BUILDROOT
+ mkdir /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64
+ cd jupiter-0.1.4+svn04112012
+ LANG=C
+ export LANG
+ unset DISPLAY
+ rm -rf /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64
+ install -d /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/etc/pm /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/etc/xdg /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/etc/pm/power.d /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/etc/xdg/autostart
+ install -d /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/usr/share/applications /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/usr/share/pixmaps
+ install -d /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/var/jupiter
+ install -d /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/usr /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/usr/bin
+ install -d /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/usr/lib /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/usr/lib/jupiter /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/usr/lib/jupiter/scripts /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/usr/lib/jupiter/kernel
+ install pm/power.d/00-jupiter-cpu /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/etc/pm/power.d/
+ install xdg/autostart/jupiter-startup.desktop xdg/autostart/jupiter.desktop /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/etc/xdg/autostart/
+ install usr/share/applications/jupiter.desktop /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/usr/share/applications/
+ install usr/share/pixmaps/bluetooth.png usr/share/pixmaps/bolt1.png usr/share/pixmaps/bolt2.png usr/share/pixmaps/bolt3.png usr/share/pixmaps/bolt4.png usr/share/pixmaps/camera-web.png usr/share/pixmaps/devices.png usr/share/pixmaps/display.png usr/share/pixmaps/gnome-dev-wavelan.png usr/share/pixmaps/input-tablet.png usr/share/pixmaps/jupiter.png usr/share/pixmaps/ondemand.png usr/share/pixmaps/overclock.png usr/share/pixmaps/performance.png usr/share/pixmaps/powersave.png usr/share/pixmaps/resolution.png usr/share/pixmaps/rotate.png /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/usr/share/pixmaps/
+ install usr/lib/jupiter/scripts/bluetooth usr/lib/jupiter/scripts/cpu-control usr/lib/jupiter/scripts/jupiter usr/lib/jupiter/scripts/notify usr/lib/jupiter/scripts/resolutions usr/lib/jupiter/scripts/rotate usr/lib/jupiter/scripts/state usr/lib/jupiter/scripts/touchpad usr/lib/jupiter/scripts/vga-out usr/lib/jupiter/scripts/wifi /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/usr/lib/jupiter/scripts/
+ install usr/lib/jupiter/kernel/battery usr/lib/jupiter/kernel/power /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/usr/lib/jupiter/kernel/
+ install usr/bin/jupiter /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64/usr/bin/
+ /usr/lib/rpm/find-debuginfo.sh --strict-build-id /home/crond1/rpmbuild/BUILD/jupiter-0.1.4+svn04112012
find: `debug': No such file or directory
+ /usr/lib/rpm/check-buildroot
+ /usr/lib/rpm/redhat/brp-compress
+ /usr/lib/rpm/redhat/brp-strip-static-archive /usr/bin/strip
+ /usr/lib/rpm/brp-python-bytecompile /usr/bin/python 1
+ /usr/lib/rpm/redhat/brp-python-hardlink
+ /usr/lib/rpm/redhat/brp-java-repack-jars
Processing files: jupiter-0.1.4+svn04112012-1.fc16.noarch
warning: File listed twice: /etc/pm/power.d
warning: File listed twice: /etc/pm/power.d/00-jupiter-cpu
warning: File listed twice: /usr/lib/jupiter/kernel
warning: File listed twice: /usr/lib/jupiter/scripts
warning: File listed twice: /var/jupiter
Requires(interp): /bin/sh /bin/sh
Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1
Requires(post): /bin/sh
Requires(preun): /bin/sh
Requires: /bin/bash /bin/sh /usr/bin/env
Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64
Wrote: /home/crond1/rpmbuild/SRPMS/jupiter-0.1.4+svn04112012-1.fc16.src.rpm
Wrote: /home/crond1/rpmbuild/RPMS/noarch/jupiter-0.1.4+svn04112012-1.fc16.noarch.rpm
Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.tfcrM4
+ umask 022
+ cd /home/crond1/rpmbuild/BUILD
+ cd jupiter-0.1.4+svn04112012
+ /bin/rm -rf /home/crond1/rpmbuild/BUILDROOT/jupiter-0.1.4+svn04112012-1.fc16.x86_64
+ exit 0
[02:31:17]
[restauracion@...crond1/rpmbuild/SPECS $]

Es bueno entender toda la salida porque nos va a facilitar muchas cosas pero siempre debemos instalar los paquetes para probarlo como corresponde.

Miremos el contenido de los directorios que se modificaron al crear el paquete:

Aca podemos ver que en el directorio SRPMS nos deja el paquete fuente, por cada paquete que creamos vamos a tener el fuente que genere aqui.

[restauracion@…crond1/rpmbuild/SPECS $] ls $HOME/rpmbuild/SRPMS
jupiter-0.1.4+svn04112012-1.fc16.src.rpm

En el siguiente directorio podemos ver que tenemos el paquete para la arquitecutra correspondiente, en este caso al ser un paquete de python no utiliza una arquitectura en particular porque utiliza la maquina virtual de python.

[restauracion@…crond1/rpmbuild/SPECS $] ls $HOME/rpmbuild/RPMS
noarch


Una vez adentro del directorio noarch encontramos el binario del paquete listo para instalar.

[restauracion@~$] ls $HOME/rpmbuild/RPMS/noarch
jupiter-0.1.4+svn04112012-1.fc16.noarch.rpm

Vamos a borrar los archivos creados para probar con la siguiente opcion:

[restauracion@...crond1/rpmbuild/SPECS $] rm -rf $HOME/rpmbuild/RPMS/
[03:16:42]
[restauracion@...crond1/rpmbuild/SPECS $] rm -rf $HOME/rpmbuild/SRPMS/

Al borrar nuestros viejos paquetes generamos damos pie para generarlo devuelta con esta opcion:

[restauracion@…crond1/rpmbuild/SPECS $] rpmbuild -bs jupiter.spec
Wrote: /home/crond1/rpmbuild/SRPMS/jupiter-0.1.4+svn04112012-1.fc16.src.rpm

Luego procedemos a chequear y vemos que en este directorio seguimos teniendo los fuentes creados mediante la creacion del paquete.

[restauracion@…crond1/rpmbuild/SPECS $] ls $HOME/rpmbuild/SRPMS
jupiter-0.1.4+svn04112012-1.fc16.src.rpm

En este directorio no tenemos nada dado que al elegir la opcion -bs solo crea los sources.


[restauracion@...crond1/rpmbuild/SPECS $] ls $HOME/rpmbuild/RPMS
[03:38:55]
[restauracion@...crond1/rpmbuild/SPECS $]

Vamos a borrar el paquete que generamos para probar la ultima opcion:

restauracion@…crond1/rpmbuild/SPECS $] rm -r $HOME/rpmbuild/SRPMS/
[03:54:39]


Generamos devuelta el paquete pero esta vez con la opcion -bb.

[restauracion@…crond1/rpmbuild/SPECS $] rpmbuild -bb jupiter.spec

Como vemos al utilizar la opcion anterior no estoy generando los sources .

[restauracion@…crond1/rpmbuild/SPECS $] ls -l $HOME/rpmbuild/SRPMS
total 0
[03:57:20]


Luego listamos el directorio RPMS para ver que ahora si tenemos los binarios correspondientes.


[restauracion@...crond1/rpmbuild/SPECS $] ls -l $HOME/rpmbuild/RPMS
total 4
drwxr-xr-x 2 crond1 crond1 4096 Apr 29 03:54 noarch
[03:57:25]
[restauracion@...crond1/rpmbuild/SPECS $] ls -l $HOME/rpmbuild/RPMS/noarch
total 48
-rw-rw-r-- 1 crond1 crond1 45181 Apr 29 03:54 jupiter-0.1.4+svn04112012-1.fc16.noarch.rpm
[03:57:29]
[restauracion@...crond1/rpmbuild/SPECS $]

Ahora vamos a realizar la instalacion del paquete creado.


[restauracion@...crond1/rpmbuild/SPECS $] sudo yum install $HOME/rpmbuild/RPMS/noarch/jupiter-0.1.4+svn04112012-1.fc16.noarch.rpm
Loaded plugins: fastestmirror, ibm-repository, langpacks, presto, refresh-packagekit, tidy-cache
Examining /home/crond1/rpmbuild/RPMS/noarch/jupiter-0.1.4+svn04112012-1.fc16.noarch.rpm: jupiter-0.1.4+svn04112012-1.fc16.noarch
Marking /home/crond1/rpmbuild/RPMS/noarch/jupiter-0.1.4+svn04112012-1.fc16.noarch.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package jupiter.noarch 0:0.1.4+svn04112012-1.fc16 will be installed
--> Finished Dependency Resolution

Dependencies Resolved

==========================================================================================================================================================================================================
Package Arch Version Repository Size
==========================================================================================================================================================================================================
Installing:
jupiter noarch 0.1.4+svn04112012-1.fc16 /jupiter-0.1.4+svn04112012-1.fc16.noarch 68 k

Transaction Summary
==========================================================================================================================================================================================================
Install 1 Package

Total size: 68 k
Installed size: 68 k
Is this ok [y/N]: y
Downloading Packages:
Running Transaction Check
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Installing : jupiter-0.1.4+svn04112012-1.fc16.noarch 1/1
warning: group jupiter does not exist - using root
Adding Jupiter group
Adding users to Jupiter group: crond1
Adding jupiter to sudoers

Altering sudo tty permissions
Setting permissions..
Verifying : jupiter-0.1.4+svn04112012-1.fc16.noarch 1/1

Installed:
jupiter.noarch 0:0.1.4+svn04112012-1.fc16

Complete!
[04:10:27]
[restauracion@/home/crond1/rpmbuild/SPECS $]

 

Podemos ver que contiene:


[restauracion@/home/crond1/rpmbuild/SPECS $] rpm -ql jupiter
/etc/pm/power.d
/etc/pm/power.d/00-jupiter-cpu
/etc/xdg/autostart/jupiter-startup.desktop
/etc/xdg/autostart/jupiter.desktop
/usr/bin/jupiter
/usr/lib/jupiter/kernel
/usr/lib/jupiter/kernel/battery
/usr/lib/jupiter/kernel/power
/usr/lib/jupiter/scripts
/usr/lib/jupiter/scripts/bluetooth
/usr/lib/jupiter/scripts/cpu-control
/usr/lib/jupiter/scripts/jupiter
/usr/lib/jupiter/scripts/notify
/usr/lib/jupiter/scripts/resolutions
/usr/lib/jupiter/scripts/rotate
/usr/lib/jupiter/scripts/state
/usr/lib/jupiter/scripts/touchpad
/usr/lib/jupiter/scripts/vga-out
/usr/lib/jupiter/scripts/wifi
/usr/share/applications/jupiter.desktop
/usr/share/pixmaps/bluetooth.png
/usr/share/pixmaps/bolt1.png
/usr/share/pixmaps/bolt2.png
/usr/share/pixmaps/bolt3.png
/usr/share/pixmaps/bolt4.png
/usr/share/pixmaps/camera-web.png
/usr/share/pixmaps/devices.png
/usr/share/pixmaps/display.png
/usr/share/pixmaps/gnome-dev-wavelan.png
/usr/share/pixmaps/input-tablet.png
/usr/share/pixmaps/jupiter.png
/usr/share/pixmaps/ondemand.png
/usr/share/pixmaps/overclock.png
/usr/share/pixmaps/performance.png
/usr/share/pixmaps/powersave.png
/usr/share/pixmaps/resolution.png
/usr/share/pixmaps/rotate.png
/var/jupiter
[04:10:54]
[restauracion@/home/crond1/rpmbuild/SPECS $]

Mas informacion:


[restauracion@/home/crond1/rpmbuild/SPECS $] rpm -qi jupiter
Name : jupiter
Version : 0.1.4+svn04112012
Release : 1.fc16
Architecture: noarch
Install Date: Sun 29 Apr 2012 04:10:23 AM ART
Group : X11/Applications
Size : 69714
License : GPL
Signature : (none)
Source RPM : jupiter-0.1.4+svn04112012-1.fc16.src.rpm
Build Date : Sun 29 Apr 2012 03:54:48 AM ART
Build Host : restauracion
Relocations : (not relocatable)
URL : http://www.jupiterapplet.org/
Summary : Jupiter Control System for Computers
Description :
Hardware Control Interface for Computers
[04:11:20]
[restauracion@/home/crond1/rpmbuild/SPECS $]

Ahora vamos a ver como funciona dado que es primordial hacer esto porque debemos testear que funcione bien:


En la imagen de la izquierda tenemos los dos iconos significativos de Jupiter que nos va a gestionar el ahorro de energia, el primero es una notify de alerta que nos avisa que esta en modo de alto perfomance de ahorro de energia, el siguiete al hacerle click tenemos la configuracion de este. Luego a la derecha informacion acerca del programa.

Deberiamos poder probar si no tenemos problemas al eliminar el paquete :


[restauracion@/home/crond1/rpmbuild/RPMS/noarch $] sudo yum remove jupiter
Loaded plugins: fastestmirror, ibm-repository, langpacks, presto, refresh-packagekit, tidy-cache
Resolving Dependencies
--> Running transaction check
---> Package jupiter.noarch 0:0.1.4+svn04112012-1.fc16 will be erased
--> Finished Dependency Resolution

Dependencies Resolved

==========================================================================================================================================================================================================
Package Arch Version Repository Size
==========================================================================================================================================================================================================
Removing:
jupiter noarch 0.1.4+svn04112012-1.fc16 @/jupiter-0.1.4+svn04112012-1.fc16.noarch 68 k

Transaction Summary
==========================================================================================================================================================================================================
Remove 1 Package

Installed size: 68 k
Is this ok [y/N]: y
Downloading Packages:
Running Transaction Check
Running Transaction Test
Transaction Test Succeeded
Running Transaction
Erasing : jupiter-0.1.4+svn04112012-1.fc16.noarch 1/1
Verifying : jupiter-0.1.4+svn04112012-1.fc16.noarch 1/1

Removed:
jupiter.noarch 0:0.1.4+svn04112012-1.fc16

Complete!
[04:31:43]
[restauracion@/home/crond1/rpmbuild/RPMS/noarch $]

Chequeamos si esta :


[restauracion@/home/crond1/rpmbuild $] rpm -qa |grep jupiter
[04:33:08]
[restauracion@/home/crond1/rpmbuild $]

Si ahora utilizamos un archivo test que contiene la salida del comando rpm -ql jupiter que ejecutamos antes de removerlo, vamos a tener las rutas que se instalaron.


[restauracion@/home/crond1/rpmbuild $] cat test | xargs ls -l
ls: cannot access /etc/pm/power.d/00-jupiter-cpu: No such file or directory
ls: cannot access /etc/xdg/autostart/jupiter-startup.desktop: No such file or directory
ls: cannot access /etc/xdg/autostart/jupiter.desktop: No such file or directory
ls: cannot access /usr/bin/jupiter: No such file or directory
ls: cannot access /usr/lib/jupiter/kernel: No such file or directory
ls: cannot access /usr/lib/jupiter/kernel/battery: No such file or directory
ls: cannot access /usr/lib/jupiter/kernel/power: No such file or directory
ls: cannot access /usr/lib/jupiter/scripts: No such file or directory
ls: cannot access /usr/lib/jupiter/scripts/bluetooth: No such file or directory
ls: cannot access /usr/lib/jupiter/scripts/cpu-control: No such file or directory
ls: cannot access /usr/lib/jupiter/scripts/jupiter: No such file or directory
ls: cannot access /usr/lib/jupiter/scripts/notify: No such file or directory
ls: cannot access /usr/lib/jupiter/scripts/resolutions: No such file or directory
ls: cannot access /usr/lib/jupiter/scripts/rotate: No such file or directory
ls: cannot access /usr/lib/jupiter/scripts/state: No such file or directory
ls: cannot access /usr/lib/jupiter/scripts/touchpad: No such file or directory
ls: cannot access /usr/lib/jupiter/scripts/vga-out: No such file or directory
ls: cannot access /usr/lib/jupiter/scripts/wifi: No such file or directory
ls: cannot access /usr/share/applications/jupiter.desktop: No such file or directory
ls: cannot access /usr/share/pixmaps/bluetooth.png: No such file or directory
ls: cannot access /usr/share/pixmaps/bolt1.png: No such file or directory
ls: cannot access /usr/share/pixmaps/bolt2.png: No such file or directory
ls: cannot access /usr/share/pixmaps/bolt3.png: No such file or directory
ls: cannot access /usr/share/pixmaps/bolt4.png: No such file or directory
ls: cannot access /usr/share/pixmaps/camera-web.png: No such file or directory
ls: cannot access /usr/share/pixmaps/devices.png: No such file or directory
ls: cannot access /usr/share/pixmaps/display.png: No such file or directory
ls: cannot access /usr/share/pixmaps/gnome-dev-wavelan.png: No such file or directory
ls: cannot access /usr/share/pixmaps/input-tablet.png: No such file or directory
ls: cannot access /usr/share/pixmaps/jupiter.png: No such file or directory
ls: cannot access /usr/share/pixmaps/ondemand.png: No such file or directory
ls: cannot access /usr/share/pixmaps/overclock.png: No such file or directory
ls: cannot access /usr/share/pixmaps/performance.png: No such file or directory
ls: cannot access /usr/share/pixmaps/powersave.png: No such file or directory
ls: cannot access /usr/share/pixmaps/resolution.png: No such file or directory
ls: cannot access /usr/share/pixmaps/rotate.png: No such file or directory
/etc/pm/power.d:
total 0

/var/jupiter:
total 20
-rwxrwxr-x 1 root jupiter 43 Apr 29 04:14 available_resolutions
-rw-r--r-- 1 root root 6 Apr 29 04:14 cpu_mode
-rw-r--r-- 1 root root 6 Apr 29 04:14 power
-rw-r--r-- 1 root root 9 Apr 29 04:14 rotation_saved
-rw-r--r-- 1 root root 6 Apr 29 04:14 vga_saved
[04:33:50]

 

Vemos que el directorio /var/jupiter quedo y contiene archivos creados porque lo ejecutamos una vez.

Como vemos nos queda la pregunta , ¿ Esta bien que no borre esos archivos ?, la vamos a dejar pendiente para un proximo post cuando hablemos mas sobre el tema.
Por ahora lo mejor es bajarse otros paquetes src.rpm y probar generar el paquete.
Ya tenemos nuestra estructura de directorio ahora tan solo basta bajar otro src.rpm y colocarlo en $HOME/rmpbuild/SOURCES/.

El paquete generado tambien lo pueden bajar de aca tambien.

Prueben hacer lo mismo pero con este paquete que fue empaquetado por la misma persona del primer ejemplo.[1]
http://alvesadrian.fedorapeople.org/encuentro-0.5-7.fc16.src.rpm

Ahora si quisieramos bajar algun paquete src deberiamos habilitar el repo correspondiente de sources.

Editamos el archivo /etc/yum.repos.d/fedora.repo y donde dice enabled=0 lo cambiamos por 1.


[root@restauracion yum.repos.d]# yum --disablerepo=\* --enablerepo=fedora-source repolist
Loaded plugins: fastestmirror, ibm-repository, langpacks, presto, refresh-packagekit, tidy-cache
Loading mirror speeds from cached hostfile
* fedora-source: fedora.mirrorcatalogs.com
repo id repo name status
fedora-source Fedora 16 - Source 0
repolist: 0
[root@restauracion yum.repos.d]#

Luego procedemos a bajar un paquete en especial.

[root@restauracion yum.repos.d]# yum --disablerepo=\* --enablerepo=fedora-source search wget
Loaded plugins: fastestmirror, ibm-repository, langpacks, presto, refresh-packagekit, tidy-cache
Loading mirror speeds from cached hostfile
* fedora-source: fedora.mirrorcatalogs.com
=========================================================================================== N/S Matched: wget ============================================================================================
wget.x86_64 : A utility for retrieving files using the HTTP or FTP protocols

Name and summary matches only, use "search all" for everything.
[root@restauracion yum.repos.d]#

Procedemos a bajar el fuente:

[restauracion@/home/crond1/rpmbuild/SOURCES $] yumdownloader –source wget
Loaded plugins: fastestmirror, ibm-repository, langpacks, presto, refresh-packagekit
Loading mirror speeds from cached hostfile
* fedora: mirror.metrocast.net
* fedora-source: mirror.metrocast.net
* updates: mirror.cc.vt.edu
Enabling updates-source repository
updates-source/metalink | 12 kB 00:00
updates-source | 3.3 kB 00:00
updates-source/primary_db | 1.0 MB 00:01
Enabling rpmfusion-nonfree-updates-source repository
rpmfusion-nonfree-updates-source | 2.7 kB 00:00
rpmfusion-nonfree-updates-source/primary_db | 26 kB 00:00
Enabling rpmfusion-nonfree-source repository
rpmfusion-nonfree-source | 2.7 kB 00:00
rpmfusion-nonfree-source/primary_db | 33 kB 00:00
Enabling rpmfusion-free-updates-source repository
rpmfusion-free-updates-source | 2.7 kB 00:00
rpmfusion-free-updates-source/primary_db | 69 kB 00:00

wget-1.12-4.fc16.src.rpm | 1.6 MB 00:02
[05:05:08]
[restauracion@/home/crond1/rpmbuild/SOURCES $]

Luego procedemos a instalar el paquete (dentro de $HOME/rmpbuild/SOURCES):


rpm -ivh wget-1.12-4.fc16.src.rpm
rpm -Uvh wget-1.12-4.fc16.src.rpm
yum install wget-1.12-4.fc16.src.rpm

Luego nos vamos al directorio $HOME/rpmbuild/SPECS :

[restauracion@/home/crond1/rpmbuild/SPECS $] ls
jupiter.spec wget.spec
[05:08:14]
[restauracion@/home/crond1/rpmbuild/SPECS $]

Ahora generamos el paquete instalador .


[restauracion@/home/crond1/rpmbuild/SPECS $] rpmbuild -bb wget.spec
error: Failed build dependencies:
openssl-devel is needed by wget-1.12-4.fc16.x86_64
[05:10:17]
[restauracion@/home/crond1/rpmbuild/SPECS $]

Como veran no cumplio con los requerimientos por lo cual se necesita esa libreria para poder empaquetarlo, procedamos a instalarla.


sudo yum install openssl-devel

Luego de instalarla ahora si probemos generar el a paquete:


[restauracion@/home/crond1/rpmbuild/SPECS $] rpmbuild -bb wget.spec
[restauracion@/home/crond1/rpmbuild/SPECS $] ls -l ../RPMS/
total 8
drwxr-xr-x 2 crond1 crond1 4096 Apr 29 03:54 noarch
drwxr-xr-x 2 crond1 crond1 4096 Apr 29 05:13 x86_64
[restauracion@/home/crond1/rpmbuild/SPECS $] ls -l ../RPMS/x86_64/wget-
wget-1.12-4.fc16.x86_64.rpm wget-debuginfo-1.12-4.fc16.x86_64.rpm
[05:13:56]
[restauracion@/home/crond1/rpmbuild/SPECS $] ls -l ../RPMS/x86_64/wget-*
-rw-rw-r-- 1 crond1 crond1 487649 Apr 29 05:12 ../RPMS/x86_64/wget-1.12-4.fc16.x86_64.rpm
-rw-rw-r-- 1 crond1 crond1 599325 Apr 29 05:13 ../RPMS/x86_64/wget-debuginfo-1.12-4.fc16.x86_64.rpm
[05:14:06]
[restauracion@/home/crond1/rpmbuild/SPECS $]

 

La salida sera u poco grande pero tuvimos el resultado esperado, tenemos nuestro paquete binario listo para instalar.
Ahora pueden empezar a probar a bajarse paquetes src.rpm y empezar a crear sus propios paquetes ademas tambien pueden mirar los spec files para ir enteniendo un poco mas acerca de ellos.

Queria terminar este post agradeciendo a Adrian Alves que es developer para Fedora y gracias a el este post pudo ser escrito con la idea de plasmar todos los conocimeintos que voy adquiriendo de su enseñanza.

Espero que como me paso a mi esto les abra las puertas a un mundo nuevo….

[1]http://alvesadrian.fedorapeople.org/ https://fedoraproject.org/wiki/User:Alvesadrian

Configurando nuestro prompt en bash

En este breve post vamos a ver como personalizar nuestra terminal para poder tener entre otras cosas, colores.
Lo primero que deberiamos mirar es el siguiente link para poder entender acerca de las diferentes posibilidades que tenemos:
ANSI ESCAPE CODE

Lo primero que deberiamos repasar es la variable mas significativa para el uso del prompt ( PS1 ).
Utilizando los siguientes valores de la tabla de ANSI podremos cambiar el color del a letra y el fondo:


Esc[Value;...;Valuem Set Graphics Mode

Foreground colors
30 Black
31 Red
32 Green
33 Yellow
34 Blue
35 Magenta
36 Cyan
37 White

Background colors
40 Black
41 Red
42 Green
43 Yellow
44 Blue
45 Magenta
46 Cyan
47 White

Utilizando algunos ejemplos:

[crond1@restauracion /etc]$ PS1="[\u-\V]\n[\w]$"
[crond1-4.2.24]
[/etc]$

En el ejemplo descripto arriba hemos seteado nuestro prompt para que nos de el nombre de usuario seguido de la version de bash, luego debajo tenemos el directorio donde estamos trabajando y el signo $ para terminar nuestro prompt.

Ahora podriamos ponerle algun color segun la norma ANSI:


[/etc]$LRED="\[\e[01;31m\]"
[crond1-4.2.24]
[/etc]$PS1="[${LRED}\u-\V]\n[\w]$"
[crond1-4.2.24]
[/etc]$

En este caso definimos una variable local que nos da el color rojo y aplica a todo lo que viene despues, por eso nos queda todo el prompt rojo salvo el primero corchete que dado que esta detras de la variable RED, los valores que estan dentro de la variable red tienen que ver con la forma que se escriben segun la tabla de ANSI.
Tener en cuenta que ahora todo lo que escribamos sera rojo, por eso conviene al final agregarle un valor por defecto como DEFAULT=”\[\e[0m\]” , quedando asi mi variable PS1=”[${LRED}\u-\V]\n[\w]$ ${DEFAULT} ”

[/etc]$DEFAULT="\[\e[0m\]"
[crond1-4.2.24]
[/etc]$PS1="[${LRED}\u-\V]\n[\w]$ ${DEFAULT} "
[crond1-4.2.24]
[/etc]$ pwd

Ahi lo tenemos configurado para que escriba todo lo demas con el color blanco.
Podriamos generar algun archivo con funciones para poder utilizar y cargar nuestros valores, pero primero vamos a probar algunos ejemplos:


[/etc]$ echo -e "${LRED}prueba"
\[\]prueba
[crond1-4.2.24]
[/etc]$ LRED="\[\e[01;31m\]"
[crond1-4.2.24]
[/etc]$ echo -e "${LRED}prueba"
\[\]prueba
[crond1-4.2.24]
[/etc]$
[/etc]$ LRED="\[\e[04;31m\]"
[crond1-4.2.24]
[/etc]$ echo -e "${LRED}prueba"
\[\]prueba
[crond1-4.2.24]
[/etc]$
[crond1-4.2.24]
[/etc]$ LRED="\[\e[07;31m\]"
[crond1-4.2.24]
[/etc]$ echo -e "${LRED}prueba"
\[\]prueba
[crond1-4.2.24]
[/etc]$

En los ejemplos anteriores lo que hicimos fue mostrar el texto con diferentes atributos:

Text attributes
0 All attributes off
1 Bold on
4 Underscore (on monochrome display adapter only)
5 Blink on
7 Reverse video on
8 Concealed on

Tambien nuestro bash interpreta ciertos codigos para mostrarnos algunos valores especificos utilizando los siguientes ejemplos:

Bash permite que esas cadenas de prompts sean personalizadas al insertar un
número de carácteres especiales de barra invertida de escape que son
decodificados como sigue:

\a un caracter de campana ASCII (07)
\d la fecha en formato "Día Mes Fecha" (p.ej., "Tue May 26" - Mar May 26)
\D{format} el formato es pasado a strftime(3) y el resultado
es insertado en la cadena del prompt. un formato vacío
resulta en un tiempo de representación específico del locale.
Se requieren los tirantes
\e un carácter de escape ASCII (033)
\h el nombre de anfitrión hasta el primer `.'
\H el nombre de anfitrión
\j la cantidad de trabajos actualmente manejados por el shell
\l el nombre base del nombre de dispositivo de la terminal del shell
\n línea nueva
\r retorno de carro
\s el nombre del shell, el nombre base de $0 (la porción siguiendo
la barra final)
\t el tiempo actual en un formato de 24-horas HH:MM:SS
\T el tiempo actual en un formato de 12-horas HH:MM:SS
\@ el tiempo actual en un formato de 12-horas am/pm
\A el tiempo actual en un formato de 24-horas HH:MM
\u el nombre de usuario del usuario actual
\v la versión de bash (p.ej., 2.00)
\V la liberación de bash, versión + nivel de parche (p.ej., 2.00.0)
\w el directorio de trabajo actual, con $HOME abreviado con una tilde
\W el nombre base del directorio de trabajo actual, con $HOME
abreviado con una tilde
\! el número de historial de este comando
\# el número de comando de éste comando
\$ si el UID efectivo es 0, un #, de lo contrario un $
\nnn el carácter correspondiendo al número octal nnn
\\ una barra inversa
\[ comienza una secuencia de carácteres no imprimibles, los cuales podrían ser usados
para embeber una secuencia de control de terminal en el prompt
\] terminar una secuencia de carácteres no imprimibles


Con estos codigos podemos hacer que nuestro prompt nos devuelva informacion importante segun el uso que le quiseramos dar.

Teniendo en cuenta todo lo anterior podriamos armarnos nuestras reglas en nuestro profile para utilizar el prompt como deseemos.

Creamos el siguiente archivo en nuestro $HOME.

ARCHIVO --> .prompt
#!/bin/bash

prompt_path_set()
{
CWD=${PWD}

local COUNT_SPACE_OVER=$((${#CWD}-${PATH_WIDTH}+3))
if [ ${COUNT_SPACE_OVER:-0} -ge 0 ] ; then
TMP=''
while [ ${COUNT_SPACE_OVER:-0} -ne 0 ]
do
COUNT_SPACE_OVER=$((${COUNT_SPACE_OVER}-1))
TMP="?${TMP}"
done

CWD="...${CWD#${TMP}}"
fi
}

PROMPT_COMMAND=precmd
precmd()
{
#############
#COLOR CODES#
#############
local PATH_WIDTH=$((${COLUMNS:-80} / 4))
local DEFAULT="\[\e[0m\]"
local BOLD="\[\e[1m\]"
local HIDDEN="\[\e[8m\]"
local BLACK="\[\e[00;30m\]"
local GRAY="\[\e[01;30m\]"
local RED="\[\e[00;31m\]"
local LRED="\[\e[01;31m\]"
local GREEN="\[\e[00;32m\]"
local LGREEN="\[\e[01;32m\]"
local BROWN="\[\e[00;33m\]"
local YELLOW="\[\e[01;33m\]"
local BLUE="\[\e[00;34m\]"
local LBLUE="\[\e[01;34m\]"
local PURPLE="\[\e[00;35m\]"
local LPURPLE="\[\e[01;35m\]"
local CYAN="\[\e[00;36m\]"
local LCYAN="\[\e[01;36m\]"
local LGRAY="\[\e[00;37m\]"
local WHITE="\[\e[01;37m\]"
local BARRAPESOS="\\$"
local CWD
local TMP

prompt_path_set

PS1="${CYAN}[${LGRAY}\t${CYAN}]\n${CYAN}[${WHITE}${BOLD}\h${YELLOW}@${LBLUE}${CWD} ${LCYAN}${BARRAPESOS}${CYAN}]${DEFAULT} "

# ESC DESCRIPTION
# \a an ASCII bell character (07)
# \d the date in "Weekday Month Date" format (e.g., "Tue May 26")
# \e an ASCII escape character (033)
# \h the hostname up to the first `.'
# \H the hostname
# \j the number of jobs currently managed by the shell
# \l the basename of the shell's terminal device name
# \n newline
# \r carriage return
# \s the name of the shell, the basename of $0 (the portion following the final slash)
# \t the current time in 24-hour HH:MM:SS format
# \T the current time in 12-hour HH:MM:SS format
# \@ the current time in 12-hour am/pm format
# \u the username of the current user
# \v the version of bash (e.g., 2.00)
# \V the release of bash, version + patchlevel (e.g., 2.00.0)
# \w the current working directory
# \W the basename of the current working directory
# \! the history number of this command
# \# the command number of this command
# \$ if the effective UID is 0, a #, otherwise a $
# \nnn the character corresponding to the octal number nnn
# \\ a backslash
# \[ begin a sequence of non-printing characters, which could be used to embed a terminal control sequence into the prompt
# \] end a sequence of non-printing characters
}

Luego en nuestro .bashrc agregamos la siguiente linea:


echo ". ${HOME}/.prompt" >> $HOME/.bashrc

Mirando mas profundamente la documentacion vemos que son muchas las variantes que podemos hacer pero lo ideal es ir probando lo mas basico para ir asimilando como funciona asi luego avanzar con los parametros mas avanzados.

Fuentes:
ANSI ESCAPE CODE
Bash Tutorial
TLDP
Bash-How-To
PS1 Examples
Color_Bash_Prompt/es
bash-power-prompt