14 nov. 2011

Creación de paquete Debian que contiene un archivo cron con config-package-dev

El paquete config-package-dev facilita la creación de un paquete Debian que contenga un archivo de configuración de cron.

Para este caso se creará un archivo cron para el programa logcheck. Este programa estará como Pre-Depends para que este instalado y configurado antes de instalar el paquete con la configuración de logcheck en el cron.



Instalar logcheck:
apt-get install logcheck

El archivo cron para logcheck contendrá lo siguiente:

# /etc/cron.d/logcheck: crontab entries for the logcheck package

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

@reboot         logcheck    if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck -R; fi
* * * * *       logcheck    if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck; fi

# EOF

Procedimiento para la creación del paquete:

1. Creación del directorio de trabajo y del directorio Debian:
mkdir -p canaima-cron-logcheck-0.1
mkdir -p canaima-cron-logcheck-0.1/debian

2. Se crea el archivo debian/changelog
canaima-cron-logcheck (0.1) unstable; urgency=low

  * Initial release.

 -- Ernesto Nadir Crespo Avila <ecrespo@gmail.com>  Mon, 14 Nov 2011 21:48:20 -0430

3. Se crea el archivo compat con el valor de 7.

4. Se crea el archivo control y control.in con lo siguiente:
Se coloca logcheck como predependencia, se define el standar version con valor 3.9.2.
Source: canaima-cron-logcheck
Section: config
Priority: extra
Maintainer: Ernesto Nadir Crespo Avila <ecrespo@gmail.com>
Build-Depends: cdbs (>= 0.4.23-1.1), debhelper (>= 4.2.0), config-package-dev (>= 4.5~)
Standards-Version: 3.9.2

Package: canaima-cron-logcheck
Architecture: all
Depends: cdbs, ${misc:Depends}
Pre-Depends: logcheck
Provides: ${diverted-files}
Conflicts: ${diverted-files}
Description: Configuracion de cron para logcheck
 Configuracion de cron para logcheck.

5. Se crea el archivo debian/copyright:
Se mantiene el autor del paquete ya que se está usando tal cual el ejemplo de cron para logcheck de config-package-dev.
canaima-cron-logcheck.
Example config-package-dev package.

Author: Tim Abbott <tabbott@mit.edu>

Copyright © 2008 Tim Abbott <tabbott@mit.edu>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

6. Se crea el archivo debian/canaima-cron-logcheck.cron.d con el contenido del cron para logcheck:
# /etc/cron.d/logcheck: crontab entries for the logcheck package

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

@reboot         logcheck    if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck -R; fi
* * * * *       logcheck    if [ -x /usr/sbin/logcheck ]; then nice -n10 /usr/sbin/logcheck; fi

# EOF

7. Se crea el archivo debian/rules con el siguiente contenido:
#!/usr/bin/make -f

DEB_DIVERT_EXTENSION = .canaima

# This will remove /etc/cron.d/logcheck
DEB_REMOVE_FILES_canaima-cron-logcheck += \
        /etc/cron.d/logcheck

# We will install (using dh_installcron, by placing the new cron job
# at debian/canaima-cron-logcheck.cron.d) a new version that runs
# every minute, rather than every 30 minutes.  This will generate a
# lot of mail.  Note that we cannot install a new file to the path
# /etc/cron.d/logcheck from which a file was removed using
# DEB_REMOVE_FILES.

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/rules/config-package.mk

8. Se le agrega permiso de ejecución al archivo debian/rules:
chmod a+x debian/rules

9. Al final se tienen los siguientes archivos:
ecrespo@jewel:~/canaima/canaima-cron-logcheck-0.1$ ls -l debian/
total 28
-rw-r--r-- 1 ecrespo ecrespo  347 nov 14 22:02 canaima-cron-logcheck.cron.d
-rw-r--r-- 1 ecrespo ecrespo  157 nov 14 21:50 changelog
-rw-r--r-- 1 ecrespo ecrespo    2 nov 14 21:50 compat
-rw-r--r-- 1 ecrespo ecrespo  481 nov 14 21:55 control
-rw-r--r-- 1 ecrespo ecrespo  481 nov 14 21:55 control.in
-rw-r--r-- 1 ecrespo ecrespo 1169 nov 14 22:01 copyright
-rwxr-xr-x 1 ecrespo ecrespo  612 nov 14 22:06 rules

10. Se crea y se firma el paquete canaima-cron-logcheck-0.1:
dpkg-buildpackage -rfakeroot -kC97E7015

11. Al final se creán los siguientes archivos:
ls -l canaima-cron-logcheck*
-rw-r--r-- 1 ecrespo ecrespo 2902 nov 14 22:08 canaima-cron-logcheck_0.1_all.deb
-rw-r--r-- 1 ecrespo ecrespo  876 nov 14 22:08 canaima-cron-logcheck_0.1.dsc
-rw-r--r-- 1 ecrespo ecrespo 1551 nov 14 22:09 canaima-cron-logcheck_0.1_i386.changes
-rw-r--r-- 1 ecrespo ecrespo 1807 nov 14 22:08 canaima-cron-logcheck_0.1.tar.gz

12. Se verifica si el paquete cumple con las políticas de Debian con lintian:
lintian -i canaima-cron-logcheck_0.1.dsc

13. Se instala el paquete:
dpkg -i canaima-cron-logcheck_0.1_all.deb

14. El archivo del cron se encuentra ya instalado:
ls -l /etc/cron.d
total 12
-rw-r--r-- 1 root root 244 nov  1  2009 anacron
-rw-r--r-- 1 root root 347 nov 14 22:08 canaima-cron-logcheck
-rw-r--r-- 1 root root 544 sep 13 05:59 php5


13 nov. 2011

Como crear un metapaquete de configuración con config-package-dev

Anteriormente se explico como crear un metapaquete con equivs, se tiene también el paquete config-package-dev el cual permite crear paquetes de configuración donde se puede cambiar la configuración de otros archivos dentro del directorio /etc/ .

Este artículo se basa en el tutorial del MIT sobre creación de paquetes de configuración para Debian y una guía en el wiki de Debian. El proceso de como adoptar un paquete y empaquetar se explica en una guía que se encuentra en el wiki de Debian.


Como ejemplo se usará el paquete openssh-server que crea un archivo con el nombre  /etc/ssh/sshd_config . Este archivo contiene la configuración necesaria para arrancar un servidor ssh.


Instalando openssh-server:
apt-get install openssh-server config-package-dev

El contenido del archivo es el siguiente:
Port 22
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
UsePrivilegeSeparation yes
KeyRegenerationInterval 3600
ServerKeyBits 768
SyslogFacility AUTH
LogLevel INFO
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
IgnoreRhosts yes
RhostsRSAAuthentication no
HostbasedAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server

Este archivo tiene el siguiente hash md5.
8caefdd9e251b7cc1baa37874149a870  /etc/ssh/sshd_config

La idea es modificar este archivo para que no permita que el usuario root se conecte por ssh y no permitir reenvio de aplicaciones gráficas.

 Procedimiento para crear paquete de configuración sshd-config:
1.Crear el directorio de trabajo
mkdir canaima-sshd-config-0.1
2. Cambiarse a dicho directorio
cd canaima-sshd-config-0.1
3. Crear los directorios debian y files
mkdir -p debian files
4. En files crear el directorio etc, luego dentro de el, el directorio ssh y copiar el archivo sshd_config de /etc/ssh/ al directorio creado.
mkdir -p files/etc
mkdir -p files/etc/ssh
cp /etc/ssh/sshd_config ./files/etc/ssh/sshd_config.canaima

5. Modificar el archivo para que el usuario root no pueda acceder al servidor ssh y que no se pueda reenviar paquetes de X11. Las líneas son:
PermitRootLogin no
X11Forwarding no

6. Dentro del directorio debian se creo el archivo changelog con el siguiente contenido:
canaima-sshd-config (0.1) unstable; urgency=low

  * Initial release.

 -- Ernesto Nadir Crespo Avila <ecrespo@gmail.com>  Sun, 13 Nov 2011 10:22:48 -0430


7. Se crea el archivo debian/compat  con el valor 7.
8. Se crea el archivo debian/control y debian/control.in con la siguiente información:
Source: canaima-sshd-config
Section: config
Priority: extra
Maintainer: Ernesto Nadir Crespo Avila <ecrespo@gmail.com>
Build-Depends: cdbs (>= 0.4.23-1.1), debhelper (>= 4.2.0), config-package-dev (>= 4.5~)
Standards-Version: 3.9.2

Package: canaima-sshd-config
Architecture: all
Pre-Depends: openssh-server
Depends: cdbs, ${misc:Depends}
Provides: ${diverted-files}
Conflicts: ${diverted-files}
Description: Archivo de configuracion de ssh
 Archivo de configuracion del servidor ssh.

En este caso se coloca el párametro Pre-Depends ya que se necesita tener el servidor openssh instalado y bien configurado para poder agregarle cambios al archivo /etc/ssh/sshd_config .

9. Se crea el archivo debian/copyright, en este caso se está usando el mismo copyright de los archivos de ejemplo de config-package-dev:
canaima-ssh-config package.

Author: Ernesto Nadir Crespo Avila <ecrespo@gmail.com>

Copyright © 2011 Ernesto Nadir Crespo Avila <ecrespo@gmail.com>

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

10. Se crea el archivo debian/canaima-sshd-config.install . Este archivo define donde se va a tomar los archivos de configuración y a donde se van a copiar.
files/* /





11. Se crea el archivo debian/rules. En este archivo se define la extensión .canaima, la cual permite diferenciar de los paquetes base de Debian de la meta distribución canaima, además se define el archivo a modificar y luego los include de los cdbs:

#!/usr/bin/make -f

DEB_DIVERT_EXTENSION = .canaima
# Replace some base files with simple replacements.
DEB_DIVERT_FILES_canaima-sshd-config += \
        /etc/ssh/sshd_config.canaima        
# These files are installed via dh_install from the files/ directory
# (see debian/canaima-sshd-config.install)

include /usr/share/cdbs/1/rules/debhelper.mk
include /usr/share/cdbs/1/rules/config-package.mk

12. Crear el paquete debian y firmarlo con la llave gpg:
dpkg-buildpackage -rfakeroot -kC97E7015

Al ejectuar un ls  se puede ver los archivos creados:
ls -l canaima-sshd*
-rw-r--r-- 1 ecrespo ecrespo 3948 nov 13 16:09 canaima-sshd-config_0.1_all.deb
-rw-r--r-- 1 ecrespo ecrespo  864 nov 13 16:09 canaima-sshd-config_0.1.dsc
-rw-r--r-- 1 ecrespo ecrespo 1521 nov 13 16:09 canaima-sshd-config_0.1_i386.changes
-rw-r--r-- 1 ecrespo ecrespo 2745 nov 13 16:09 canaima-sshd-config_0.1.tar.gz


13. Se verifica que el paquete Debian cumple con el policy de Debian:
lintian -i canaima-sshd-config_0.1.dsc

14. Verificar la instalación del paquete Debian.
sudo dpkg -i canaima-sshd-config_0.1_all.deb
[sudo] password for ecrespo:
Selecting previously unselected package canaima-sshd-config.
(Leyendo la base de datos ... 418546 ficheros o directorios instalados actualmente.)
Desempaquetando canaima-sshd-config (de canaima-sshd-config_0.1_all.deb) ...
Configurando canaima-sshd-config (0.1) ...
Añadiendo `desviación de /etc/ssh/sshd_config a /etc/ssh/sshd_config.canaima-orig por canaima-sshd-config'

15. Al ejecutar un ls -l en el directorio /etc/ssh/sshd_config* se verá que se crea un enlace al archivo original y se muestra los archivos agregados de la extensión canaima:
root@jewel:/etc/ssh# ls -l sshd_config*
lrwxrwxrwx 1 root root   19 nov 13 16:16 sshd_config -> sshd_config.canaima
-rw-r--r-- 1 root root 2487 nov 13 10:15 sshd_config.canaima
-rw-r--r-- 1 root root 2489 nov 13 13:20 sshd_config.canaima-orig

16. Al revisar el archivo se nota que el campo para permitir a root conectarse al servidor ssh se encuentra en no, igual caso para el párametro de reenvio de X11. Se revisa el hash md5 del archivo y se nota que del archivo original al actual son diferenteste:
a358d423fa6b8bf640a7fd1e06731ea3  sshd_config

Al crear paquetes de configuración de esta forma (una forma limpia de modificar archivos de configuración) y al eliminar el paquete de configuración los archivos originales se vuelven a usar:
 apt-get remove -f canaima-sshd-config

root@jewel:/etc/ssh# md5sum sshd_config
8caefdd9e251b7cc1baa37874149a870  sshd_config


Se tienen varios ejemplos para usar config-package-dev como por ejemplo paquetes binarios, configuración de cron, etc.

AddThis