verificación google

Mostrando entradas con la etiqueta debian. Mostrar todas las entradas
Mostrando entradas con la etiqueta debian. Mostrar todas las entradas

miércoles, 17 de octubre de 2018

Cómo instalar cvsweb en Debian 9 stretch

Esta entrada tiene relación con la anterior entrada donde hago referencia a la instalación del servidor CVS, podes consultarla y ver el porqué sigo utilizando cvs cuando existen sistemas de control de versiones mucho más potentes y populares como git.

¿Qué es CVSWEB?

Es una aplicación desde la que podemos visualizar nuestro repositorio CVS desde un navegador web. Desde CVSWEB podemos navegar entre las modificaciones que ha sufrido nuestro proyecto, así como ver quién y qué modificó en cada una de las versiones de un fichero.


Esta es una captura de pantalla del formato en el que cvsweb muestra las modificaciones de un fichero. Como podéis ver asigna una versión al fichero, nos muestra la fecha de la modificación, información sobre el usuario que realizó la modificación y en el caso de escribir algún comentario cuando se hizo el commit, se vería aquí también.

Como muchos sistemas de control de versiones también podemos ver diferencias entre las distintas versiones del fichero para ver exactamente qué se modificó.

Instalar CVSWEB

Desde la gestión de paquetes de Debian 9 stretch nos solucionan mucho la tarea de instalación de CVSWEB, simplemente tenemos que instalar el paquete cvsweb con la siguiente instrucción. 
root@desarrollo:~# apt-get install cvsweb
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias   
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes adicionales:
  apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libconvert-binhex-perl libicu57
  libio-pty-perl libio-socket-ssl-perl libipc-run-perl libldap-2.4-2 libldap-common liblua5.2-0 libmailtools-perl libmime-tools-perl
  libnet-smtp-ssl-perl libnet-ssleay-perl libnghttp2-14 libperl5.24 libsasl2-2 libsasl2-modules-db libtimedate-perl liburi-perl libxml2 perl
  perl-modules-5.24 perl-openssl-defaults rcs
Paquetes sugeridos:
  www-browser apache2-doc apache2-suexec-pristine | apache2-suexec-custom cvsgraph enscript libmime-types-perl zip libwww-perl perl-doc
  libterm-readline-gnu-perl | libterm-readline-perl-perl make
Paquetes recomendados:
  ssl-cert libauthen-sasl-perl libsasl2-modules xml-core rename
Se instalarán los siguientes paquetes NUEVOS:
  apache2 apache2-bin apache2-data apache2-utils cvsweb libapr1 libaprutil1 libaprutil1-dbd-sqlite3 libaprutil1-ldap libconvert-binhex-perl
  libicu57 libio-pty-perl libio-socket-ssl-perl libipc-run-perl libldap-2.4-2 libldap-common liblua5.2-0 libmailtools-perl libmime-tools-perl
  libnet-smtp-ssl-perl libnet-ssleay-perl libnghttp2-14 libperl5.24 libsasl2-2 libsasl2-modules-db libtimedate-perl liburi-perl libxml2 perl
  perl-modules-5.24 perl-openssl-defaults rcs
0 actualizados, 32 nuevos se instalarán, 0 para eliminar y 0 no actualizados.
Se necesita descargar 19,1 MB de archivos.
Se utilizarán 85,3 MB de espacio de disco adicional después de esta operación.
¿Desea continuar? [S/n]
Des:1 http://deb.debian.org/debian stretch/main amd64 perl-modules-5.24 all 5.24.1-3+deb9u4 [2.724 kB]
Des:2 http://deb.debian.org/debian stretch/main amd64 libperl5.24 amd64 5.24.1-3+deb9u4 [3.522 kB]
Des:3 http://deb.debian.org/debian stretch/main amd64 perl amd64 5.24.1-3+deb9u4 [218 kB]
Des:4 http://deb.debian.org/debian stretch/main amd64 libapr1 amd64 1.5.2-5 [96,6 kB]
Des:5 http://deb.debian.org/debian stretch/main amd64 libaprutil1 amd64 1.5.4-3 [85,8 kB]
Des:6 http://deb.debian.org/debian stretch/main amd64 libaprutil1-dbd-sqlite3 amd64 1.5.4-3 [19,3 kB]
Des:7 http://deb.debian.org/debian stretch/main amd64 libsasl2-modules-db amd64 2.1.27~101-g0780600+dfsg-3 [68,2 kB]
Des:8 http://deb.debian.org/debian stretch/main amd64 libsasl2-2 amd64 2.1.27~101-g0780600+dfsg-3 [105 kB]
Des:9 http://deb.debian.org/debian stretch/main amd64 libldap-common all 2.4.44+dfsg-5+deb9u2 [85,5 kB]
Des:10 http://deb.debian.org/debian stretch/main amd64 libldap-2.4-2 amd64 2.4.44+dfsg-5+deb9u2 [219 kB]
Des:11 http://deb.debian.org/debian stretch/main amd64 libaprutil1-ldap amd64 1.5.4-3 [17,4 kB]
Des:12 http://deb.debian.org/debian stretch/main amd64 liblua5.2-0 amd64 5.2.4-1.1+b2 [110 kB]
Des:13 http://deb.debian.org/debian stretch/main amd64 libnghttp2-14 amd64 1.18.1-1 [79,1 kB]
Des:14 http://deb.debian.org/debian stretch/main amd64 libicu57 amd64 57.1-6+deb9u2 [7.700 kB]
Des:15 http://deb.debian.org/debian stretch/main amd64 libxml2 amd64 2.9.4+dfsg1-2.2+deb9u2 [920 kB]
Des:16 http://deb.debian.org/debian stretch/main amd64 apache2-bin amd64 2.4.25-3+deb9u5 [1.186 kB]
Des:17 http://deb.debian.org/debian stretch/main amd64 apache2-utils amd64 2.4.25-3+deb9u5 [217 kB]
Des:18 http://deb.debian.org/debian stretch/main amd64 apache2-data all 2.4.25-3+deb9u5 [162 kB]
Des:19 http://deb.debian.org/debian stretch/main amd64 apache2 amd64 2.4.25-3+deb9u5 [236 kB]
Des:20 http://deb.debian.org/debian stretch/main amd64 rcs amd64 5.9.4-3 [206 kB]
Des:21 http://deb.debian.org/debian stretch/main amd64 libio-pty-perl amd64 1:1.08-1.1+b2 [33,6 kB]
Des:22 http://deb.debian.org/debian stretch/main amd64 libipc-run-perl all 0.94-1+deb9u1 [99,1 kB]
Des:23 http://deb.debian.org/debian stretch/main amd64 libconvert-binhex-perl all 1.125-1 [30,5 kB]
Des:24 http://deb.debian.org/debian stretch/main amd64 libtimedate-perl all 2.3000-2 [42,2 kB]
Des:25 http://deb.debian.org/debian stretch/main amd64 perl-openssl-defaults amd64 3 [6.782 B]
Des:26 http://deb.debian.org/debian stretch/main amd64 libnet-ssleay-perl amd64 1.80-1 [285 kB]
Des:27 http://deb.debian.org/debian stretch/main amd64 libio-socket-ssl-perl all 2.044-1 [195 kB]
Des:28 http://deb.debian.org/debian stretch/main amd64 libnet-smtp-ssl-perl all 1.04-1 [6.184 B]
Des:29 http://deb.debian.org/debian stretch/main amd64 libmailtools-perl all 2.18-1 [88,5 kB]
Des:30 http://deb.debian.org/debian stretch/main amd64 libmime-tools-perl all 5.508-1 [212 kB]
Des:31 http://deb.debian.org/debian stretch/main amd64 liburi-perl all 1.71-1 [88,6 kB]
Des:32 http://deb.debian.org/debian stretch/main amd64 cvsweb all 3:3.0.6-8 [60,7 kB]
Descargados 19,1 MB en 1s (10,1 MB/s)
Extrayendo plantillas para los paquetes: 100%
Seleccionando el paquete perl-modules-5.24 previamente no seleccionado.
(Leyendo la base de datos ... 27169 ficheros o directorios instalados actualmente.)
Preparando para desempaquetar .../00-perl-modules-5.24_5.24.1-3+deb9u4_all.deb ...
Desempaquetando perl-modules-5.24 (5.24.1-3+deb9u4) ...
Seleccionando el paquete libperl5.24:amd64 previamente no seleccionado.
Preparando para desempaquetar .../01-libperl5.24_5.24.1-3+deb9u4_amd64.deb ...
Desempaquetando libperl5.24:amd64 (5.24.1-3+deb9u4) ...
Seleccionando el paquete perl previamente no seleccionado.
Preparando para desempaquetar .../02-perl_5.24.1-3+deb9u4_amd64.deb ...
Desempaquetando perl (5.24.1-3+deb9u4) ...
Seleccionando el paquete libapr1:amd64 previamente no seleccionado.
Preparando para desempaquetar .../03-libapr1_1.5.2-5_amd64.deb ...
Desempaquetando libapr1:amd64 (1.5.2-5) ...
Seleccionando el paquete libaprutil1:amd64 previamente no seleccionado.
Preparando para desempaquetar .../04-libaprutil1_1.5.4-3_amd64.deb ...
Desempaquetando libaprutil1:amd64 (1.5.4-3) ...
Seleccionando el paquete libaprutil1-dbd-sqlite3:amd64 previamente no seleccionado.
Preparando para desempaquetar .../05-libaprutil1-dbd-sqlite3_1.5.4-3_amd64.deb ...
Desempaquetando libaprutil1-dbd-sqlite3:amd64 (1.5.4-3) ...
Seleccionando el paquete libsasl2-modules-db:amd64 previamente no seleccionado.
Preparando para desempaquetar .../06-libsasl2-modules-db_2.1.27~101-g0780600+dfsg-3_amd64.deb ...
Desempaquetando libsasl2-modules-db:amd64 (2.1.27~101-g0780600+dfsg-3) ...
Seleccionando el paquete libsasl2-2:amd64 previamente no seleccionado.
Preparando para desempaquetar .../07-libsasl2-2_2.1.27~101-g0780600+dfsg-3_amd64.deb ...
Desempaquetando libsasl2-2:amd64 (2.1.27~101-g0780600+dfsg-3) ...
Seleccionando el paquete libldap-common previamente no seleccionado.
Preparando para desempaquetar .../08-libldap-common_2.4.44+dfsg-5+deb9u2_all.deb ...
Desempaquetando libldap-common (2.4.44+dfsg-5+deb9u2) ...
Seleccionando el paquete libldap-2.4-2:amd64 previamente no seleccionado.
Preparando para desempaquetar .../09-libldap-2.4-2_2.4.44+dfsg-5+deb9u2_amd64.deb ...
Desempaquetando libldap-2.4-2:amd64 (2.4.44+dfsg-5+deb9u2) ...
Seleccionando el paquete libaprutil1-ldap:amd64 previamente no seleccionado.
Preparando para desempaquetar .../10-libaprutil1-ldap_1.5.4-3_amd64.deb ...
Desempaquetando libaprutil1-ldap:amd64 (1.5.4-3) ...
Seleccionando el paquete liblua5.2-0:amd64 previamente no seleccionado.
Preparando para desempaquetar .../11-liblua5.2-0_5.2.4-1.1+b2_amd64.deb ...
Desempaquetando liblua5.2-0:amd64 (5.2.4-1.1+b2) ...
Seleccionando el paquete libnghttp2-14:amd64 previamente no seleccionado.
Preparando para desempaquetar .../12-libnghttp2-14_1.18.1-1_amd64.deb ...
Desempaquetando libnghttp2-14:amd64 (1.18.1-1) ...
Seleccionando el paquete libicu57:amd64 previamente no seleccionado.
Preparando para desempaquetar .../13-libicu57_57.1-6+deb9u2_amd64.deb ...
Desempaquetando libicu57:amd64 (57.1-6+deb9u2) ...
Seleccionando el paquete libxml2:amd64 previamente no seleccionado.
Preparando para desempaquetar .../14-libxml2_2.9.4+dfsg1-2.2+deb9u2_amd64.deb ...
Desempaquetando libxml2:amd64 (2.9.4+dfsg1-2.2+deb9u2) ...
Seleccionando el paquete apache2-bin previamente no seleccionado.
Preparando para desempaquetar .../15-apache2-bin_2.4.25-3+deb9u5_amd64.deb ...
Desempaquetando apache2-bin (2.4.25-3+deb9u5) ...
Seleccionando el paquete apache2-utils previamente no seleccionado.
Preparando para desempaquetar .../16-apache2-utils_2.4.25-3+deb9u5_amd64.deb ...
Desempaquetando apache2-utils (2.4.25-3+deb9u5) ...
Seleccionando el paquete apache2-data previamente no seleccionado.
Preparando para desempaquetar .../17-apache2-data_2.4.25-3+deb9u5_all.deb ...
Desempaquetando apache2-data (2.4.25-3+deb9u5) ...
Seleccionando el paquete apache2 previamente no seleccionado.
Preparando para desempaquetar .../18-apache2_2.4.25-3+deb9u5_amd64.deb ...
Desempaquetando apache2 (2.4.25-3+deb9u5) ...
Seleccionando el paquete rcs previamente no seleccionado.
Preparando para desempaquetar .../19-rcs_5.9.4-3_amd64.deb ...
Desempaquetando rcs (5.9.4-3) ...
Seleccionando el paquete libio-pty-perl previamente no seleccionado.
Preparando para desempaquetar .../20-libio-pty-perl_1%3a1.08-1.1+b2_amd64.deb ...
Desempaquetando libio-pty-perl (1:1.08-1.1+b2) ...
Seleccionando el paquete libipc-run-perl previamente no seleccionado.
Preparando para desempaquetar .../21-libipc-run-perl_0.94-1+deb9u1_all.deb ...
Desempaquetando libipc-run-perl (0.94-1+deb9u1) ...
Seleccionando el paquete libconvert-binhex-perl previamente no seleccionado.
Preparando para desempaquetar .../22-libconvert-binhex-perl_1.125-1_all.deb ...
Desempaquetando libconvert-binhex-perl (1.125-1) ...
Seleccionando el paquete libtimedate-perl previamente no seleccionado.
Preparando para desempaquetar .../23-libtimedate-perl_2.3000-2_all.deb ...
Desempaquetando libtimedate-perl (2.3000-2) ...
Seleccionando el paquete perl-openssl-defaults:amd64 previamente no seleccionado.
Preparando para desempaquetar .../24-perl-openssl-defaults_3_amd64.deb ...
Desempaquetando perl-openssl-defaults:amd64 (3) ...
Seleccionando el paquete libnet-ssleay-perl previamente no seleccionado.
Preparando para desempaquetar .../25-libnet-ssleay-perl_1.80-1_amd64.deb ...
Desempaquetando libnet-ssleay-perl (1.80-1) ...
Seleccionando el paquete libio-socket-ssl-perl previamente no seleccionado.
Preparando para desempaquetar .../26-libio-socket-ssl-perl_2.044-1_all.deb ...
Desempaquetando libio-socket-ssl-perl (2.044-1) ...
Seleccionando el paquete libnet-smtp-ssl-perl previamente no seleccionado.
Preparando para desempaquetar .../27-libnet-smtp-ssl-perl_1.04-1_all.deb ...
Desempaquetando libnet-smtp-ssl-perl (1.04-1) ...
Seleccionando el paquete libmailtools-perl previamente no seleccionado.
Preparando para desempaquetar .../28-libmailtools-perl_2.18-1_all.deb ...
Desempaquetando libmailtools-perl (2.18-1) ...
Seleccionando el paquete libmime-tools-perl previamente no seleccionado.
Preparando para desempaquetar .../29-libmime-tools-perl_5.508-1_all.deb ...
Desempaquetando libmime-tools-perl (5.508-1) ...
Seleccionando el paquete liburi-perl previamente no seleccionado.
Preparando para desempaquetar .../30-liburi-perl_1.71-1_all.deb ...
Desempaquetando liburi-perl (1.71-1) ...
Seleccionando el paquete cvsweb previamente no seleccionado.
Preparando para desempaquetar .../31-cvsweb_3%3a3.0.6-8_all.deb ...
Desempaquetando cvsweb (3:3.0.6-8) ...
Configurando libapr1:amd64 (1.5.2-5) ...
Configurando perl-modules-5.24 (5.24.1-3+deb9u4) ...
Configurando libperl5.24:amd64 (5.24.1-3+deb9u4) ...
Configurando libnghttp2-14:amd64 (1.18.1-1) ...
Configurando libldap-common (2.4.44+dfsg-5+deb9u2) ...
Configurando perl-openssl-defaults:amd64 (3) ...
Configurando libsasl2-modules-db:amd64 (2.1.27~101-g0780600+dfsg-3) ...
Configurando libsasl2-2:amd64 (2.1.27~101-g0780600+dfsg-3) ...
Configurando apache2-data (2.4.25-3+deb9u5) ...
Configurando libicu57:amd64 (57.1-6+deb9u2) ...
Configurando libxml2:amd64 (2.9.4+dfsg1-2.2+deb9u2) ...
Configurando rcs (5.9.4-3) ...
Configurando perl (5.24.1-3+deb9u4) ...
update-alternatives: utilizando /usr/bin/prename para proveer /usr/bin/rename (rename) en modo automático
Procesando disparadores para libc-bin (2.24-11+deb9u3) ...
Configurando libldap-2.4-2:amd64 (2.4.44+dfsg-5+deb9u2) ...
Configurando liburi-perl (1.71-1) ...
Configurando libaprutil1:amd64 (1.5.4-3) ...
Procesando disparadores para systemd (232-25+deb9u4) ...
Procesando disparadores para man-db (2.7.6.1-2) ...
Configurando liblua5.2-0:amd64 (5.2.4-1.1+b2) ...
Configurando libconvert-binhex-perl (1.125-1) ...
Configurando libaprutil1-ldap:amd64 (1.5.4-3) ...
Configurando libio-pty-perl (1:1.08-1.1+b2) ...
Configurando libaprutil1-dbd-sqlite3:amd64 (1.5.4-3) ...
Configurando libtimedate-perl (2.3000-2) ...
Configurando libnet-ssleay-perl (1.80-1) ...
Configurando apache2-utils (2.4.25-3+deb9u5) ...
Configurando apache2-bin (2.4.25-3+deb9u5) ...
Configurando libio-socket-ssl-perl (2.044-1) ...
Configurando libipc-run-perl (0.94-1+deb9u1) ...
Configurando libnet-smtp-ssl-perl (1.04-1) ...
Configurando apache2 (2.4.25-3+deb9u5) ...
Enabling module mpm_event.
Enabling module authz_core.
Enabling module authz_host.
Enabling module authn_core.
Enabling module auth_basic.
Enabling module access_compat.
Enabling module authn_file.
Enabling module authz_user.
Enabling module alias.
Enabling module dir.
Enabling module autoindex.
Enabling module env.
Enabling module mime.
Enabling module negotiation.
Enabling module setenvif.
Enabling module filter.
Enabling module deflate.
Enabling module status.
Enabling module reqtimeout.
Enabling conf charset.
Enabling conf localized-error-pages.
Enabling conf other-vhosts-access-log.
Enabling conf security.
Enabling conf serve-cgi-bin.
Enabling site 000-default.
Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service → /lib/systemd/system/apache2.service.
Created symlink /etc/systemd/system/multi-user.target.wants/apache-htcacheclean.service → /lib/systemd/system/apache-htcacheclean.service.
Configurando libmailtools-perl (2.18-1) ...
Configurando libmime-tools-perl (5.508-1) ...
Configurando cvsweb (3:3.0.6-8) ...
Procesando disparadores para libc-bin (2.24-11+deb9u3) ...
Procesando disparadores para systemd (232-25+deb9u4) ...
Como podemos ver en la salida del comando, este paquete tiene muchas dependencias, entre otras el servidor Apache2. Que será el encargado de publicar cvsweb desde cgi. Sin que tengamos que instalar nada más el paquete cvsweb nos desplegará todo lo necesario para su funcionamiento. No obstante en esta última versión de Debian 9 stretch, no incorpora la configuración correcta y tendremos que hacer algunas configuraciones manuales.

Recuerdo utilizar hace años este mismo paquete y no tener que tocar nada en absoluto. Todo funcionó a la primera y sin tonar ninguna configuración extra. El propio paquete incorporaba la toda la configuración necesaria para su correcto despliegue.

Configuración de apache para CGI

Es importante que carguemos los modulos necesarios para el funcionamiento del paquete. Estos enlaces activarán los módulos necesarios para su funcionamiento.
cd /etc/apache2/mods-enabled/ && ln -s ../mods-available/cgi.load
cd /etc/apache2/mods-enabled/ && ln -s ../mods-available/cgid.conf
cd /etc/apache2/mods-enabled/ && ln -s ../mods-available/cgid.load
En mi caso estos dos enlaces ya existían previamente. No obstante verifica que existan antes de continuar.

cd /etc/apache2/mods-enabled/ && ln -s ../mods-available/alias.load
cd /etc/apache2/mods-enabled/ && ln -s ../mods-available/alias.conf

Por otro lado hay que crear este ultimo enlace para que las hojas de estilo e imágenes sean publicadas para una mejor visualización de cvsweb.
cd /var/www/ &&  ln -sd /usr/share/cvsweb/
Tras todos estos ajustes ahora únicamente nos falta reiniciar el servidor Apache2 para verlo todo funcionando correctamente.
/etc/init.d/apache2 restart


lunes, 15 de octubre de 2018

Servidor para el control de versiones de código fuente

Qué es CVS

Concurrent Versions System o simplemente CVS, es una aplicación que implementa un sistema de control de versiones: mantiene el registro de todo el desarrollo y los cambios en los ficheros (código fuente principalmente, en un único archivo para cada fichero correspondiente),​ que forman un proyecto (de programa) y permite que distintos desarrolladores colaboren. CVS se ha hizo popular en el mundo del software libre. Sus desarrolladores difunden el sistema bajo la licencia GPL.

Su primera versión fue liberada en 1986. Desde 2008 no se publican nuevas versiones.

¿Porqué ahora CVS?

A qué viene ahora hablar de CVS cuando todo el mundo habla de GIT. Pues llevo años trabajando en un proyecto donde históricamente se estaba trabajando con CVS y hace unos días se murió el servidor de desarrollo y hemos tenido de volver a instalar el sistema de control de versiones en una nueva máquina.

Muchos pensareis que sería recomendable abandonar CVS y pasar a GIT, y sí está entre mis prioridades cambiar el sistema de control de versiones. Pero planificado y organizado, no deprisa y corriendo provocado por la caída de un sistema. Lo principal es dejar los sistemas funcionado tal y como estaba funcionando y después planificar las migraciones.

Por otro lado, no creo que se migren todos los proyectos a GIT cuando planifiquemos la migración. Tenemos proyectos que se quedarán en CVS a modo de reliquias.

Instalando servidor CVS en Debian 9 stretch

Para el funcionamiento de un servidor CVS, necesitaremos instalar los paquete cvs y xinetd. Necesitamos el paquete xinetd para permitir publicar nuestro servidor CVS en la red. Con el paquete cvs podríamos trabajar únicamente en local con el control de versiones.
root@miservidordedesarrollo:~# apt-get install cvs 
Reading package lists... Done
Building dependency tree     
Reading state information... Done
Suggested packages:
  mksh rcs
The following NEW packages will be installed:
  cvs
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 2779 kB of archives.
After this operation, 4681 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian stretch/main amd64 cvs amd64 2:1.12.13+real-22+deb9u1 [2779 kB]
Fetched 2779 kB in 0s (9564 kB/s)
Selecting previously unselected package cvs.
(Reading database ... 27062 files and directories currently installed.)
Preparing to unpack .../cvs_2%3a1.12.13+real-22+deb9u1_amd64.deb ...
Unpacking cvs (2:1.12.13+real-22+deb9u1) ...
Setting up cvs (2:1.12.13+real-22+deb9u1) ...
Allowing use of questionable username.
Adding group `_cvsadmin' (GID 111) ...
Done.
Processing triggers for man-db (2.7.6.1-2) ...
root@miservidordedesarrollo:~# apt-get install xinetd
Reading package lists... Done
Building dependency tree     
Reading state information... Done
Recommended packages:
  update-inetd
The following NEW packages will be installed:
  xinetd
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 133 kB of archives.
After this operation, 316 kB of additional disk space will be used.
Get:1 http://deb.debian.org/debian stretch/main amd64 xinetd amd64 1:2.3.15-7 [133 kB]
Fetched 133 kB in 0s (1978 kB/s)
Selecting previously unselected package xinetd.
(Reading database ... 27137 files and directories currently installed.)
Preparing to unpack .../xinetd_1%3a2.3.15-7_amd64.deb ...
Unpacking xinetd (1:2.3.15-7) ...
Setting up xinetd (1:2.3.15-7) ...
Processing triggers for systemd (232-25+deb9u4) ...
Processing triggers for man-db (2.7.6.1-2) ...

Configurar servidor CVS

Ahora tenemos que configurar nuestro servidor, en primer lugar vamos a crear el directorio donde desplegaremos el repositorio. Realmente no importa demasiado el lugar donde lo despliegues, simplemente tendrás que definir la ruta elegida en los ficheros de configuración.
root@miservidordedesarrollo:~# mkdir /var/lib/cvs   
Tras crear el directorio hay que inicializar el directorio para que el servidor CVS lo interprete como raíz de repositorio de datos.
root@miservidordedesarrollo:~# cvs -d /var/lib/cvs init
Simplemente con estos pasos tendrás funcionando en tu sistema un servidor CVS para el control de versiones de tus proyectos. No obstante únicamente podrás utilizarlo de forma local y no podrás compartir tus proyectos con otros desarrolladores.

Publicar CVS en red con xinetd

Esto es un poco absurdo, en cualquier proyecto necesitarás trabajar con más desarrolladores y necesitarás un servidor para el control de versiones en red para poder de forma fácil trabajar con otros desarrolladores.

Tendrás que crear el fichero /etc/xinetd.d/cvs
root@miservidordedesarrollo:~# nano /etc/xinetd.d/cvs
Escribir el siguiente contenido:
service cvspserver
{
     port = 2401
     socket_type = stream
     protocol = tcp
     user = root
     wait = no
     type = UNLISTED
     server = /usr/bin/cvs
     server_args = -f --allow-root /var/lib/cvs pserver
     disable = no
}
Finalmente reiniciar el servidor xinetd para que coja la configuración definida.
root@miservidordedesarrollo:~# /etc/init.d/xinetd restart

viernes, 14 de septiembre de 2018

Cómo instalar el cliente "no-ip" en GNU/Linux Debian 9 Stretch e iniciar en el arranque

logo https://www.noip.com


En esta nueva entrada vamos a realizar la instalación de un DUC (Dynamic Update Client). En concreto se trata de un cliente para la actualización de nuestra IP en un registrador de dominios correspondiente a la marca noip (https://www.noip.com) en  GNU/Linux Debian 9 Stretch y hacer que inicie automáticamente al iniciar la máquina.




Cuando es necesario utilizar un DNS dinámico (Dynamic DNS)

Un DNS dinámico se utiliza cuando no dispones de una dirección IP fija en tu conexión a internet. Esto quiere decir que cada vez que tu router se desconecte tu proveedor de internet le asiganará una dirección IP nueva.

Esto es lo normal y no tiene porqué ser ningún problema. Pero cuando queremos correr algún servicio (web, correo, ftp, ldap, etc.) y queremos publicarlo en internet entonces sí es un problema. Puesto que no podremos configurar ningún dominio apuntando a nuestra IP para publicar el servicio.

Algunas empresas como www.noip.com nos facilitan esto con el uso de DNS dinámicos. El sistema es simple, corremos un servicio dentro de nuestra red que le envíe peticiones a los servidores de www.noip.com, estos servidores identifican esa petición y vinculan la IP desde la que viene la petición con el dominio que hemos configurado.

De esta forma "siempre"* tendremos acceso a los servicios que hemos publicado en nuestra red con salida a internet con IP dinámica.

* digo "siempre" entrecomillado porque este servicio no deja de ser un proceso que cada cierto tiempo envía una petición a los servidores de www.noip.com, puede que tu proveedor de internet por alguna razón cambie tu IP y el dominio configurado en www.noip.com pase algunos minutos sin apuntar correctamente a la dirección IP correcta. Hasta que vuelva a despertarse el servicio y actualice los datos. Por esta razón no aconsejo utilizar este tipo de utilidades para servicios críticos. Si tienes un servicio critico, contrata con tu proveedor de internet una dirección ip fija.

Por otro lado he encontrado algunos routers desde los que se pueden establecer estas configuraciones, de forma que cada vez que cambia de IP le envía la actualización al servidor de www.noip.com. Este método es algo más seguro. Mira si tu router dispone de esta opción.

Instalando el cliente de www.noip.com

Abrimos un terminal identificamos como root, necesitaremos permisos de administrador para realizar todas estas operaciones. Si no tenemos instalado gcc, lo instalamos con este comando:
apt install build-essential gcc
Una vez instalado bajamos el cliente en el directorio /usr/local/src:
cd /usr/local/src
Bajamos el cliente a instalar:
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
Lo descomprimimos:
tar xzf noip-duc-linux.tar.gz
Entramos en el directorio resultante de la descompresión:
cd noip-2.1.9-1
Ejecutamos los 2 siguientes comandos:
make
make install
Si te aparece un mensaje como "make not found" o "missing gcc" es que no has instalado el gcc. Tendrás que instalar un paquete llamado build-essential que es el que contiene todas las utilidades necesarias para realizar las operaciones de compilado de un código fuente. Y posiblemente no has ejecutado el primer paso.

Configurando el cliente

Antes de configurar el cliente es necesario que tengas una cuenta activa en www.noip.com, si aún no la tienes creala. Los tres primeros host son gratis bajo un subdominio que ellos te facilitarán.

Seguimos como root y ejecutamos este comando:
/usr/local/bin/noip2 -C
La "C" tiene que ser mayúscula, con esto empieza el asistente de configuración propiamente dicho y pedirá el correo con el que nos registramos y la contraseña. Luego viene una pregunta importante "Do you wish to update ALL hosts?". Si tenemos varios host creados y respondemos "Yes" nos va a actualizar todos ellos, si respondemos "No" nos va a ir preguntando uno a uno cuales queremos actualizar y luego cada cuantos minutos queremos actualizar.

Ahora ya tenemos el cliente instalado y configurado, podemos ejecutarlo, se quedará funcionando en background:
/usr/local/bin/noip2

Iniciar el cliente con el arranque

Ya tenemos funcionando el cliente, pero nos interesa que cada vez que arranquemos el equipo no tener que ejecutar el comando manualmente, automatizarlo. Para ello creamos un script dentro de "/etc/init.d" con este comando:
nano /etc/init.d/noip2
Y pegamos en él este código:
#! /bin/sh
# /etc/init.d/noip2
# Supplied by no-ip.com
# Modified for Debian GNU/Linux by Eivind L. Rygge <eivind@rygge.org>
# Updated by David Courtney to not use pidfile 130130 for Debian 6.
# Updated again by David Courtney to "LSBize" the script for Debian 7.
### BEGIN INIT INFO
# Provides:     noip2
# Required-Start: networking
# Required-Stop:
# Should-Start:
# Should-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start noip2 at boot time
# Description: Start noip2 at boot time
### END INIT INFO
# . /etc/rc.d/init.d/functions  # uncomment/modify for your killproc
DAEMON=/usr/local/bin/noip2
NAME=noip2
test -x $DAEMON || exit 0
case "$1" in
    start)
    echo -n "Starting dynamic address update: "
    start-stop-daemon --start --exec $DAEMON
    echo "noip2."
    ;;
    stop)
    echo -n "Shutting down dynamic address update:"
    start-stop-daemon --stop --oknodo --retry 30 --exec $DAEMON
    echo "noip2."
    ;;
    restart)
    echo -n "Restarting dynamic address update: "
    start-stop-daemon --stop --oknodo --retry 30 --exec $DAEMON
    start-stop-daemon --start --exec $DAEMON
    echo "noip2."
    ;;
    *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
esac
exit 0

Salimos guardando los cambios y le damos permisos de ejecución:
chmod +x /etc/init.d/noip2
Lo añadimos al inicio con el comando:
cd /etc/init.d/ && update-rc.d noip2 defaults 
Después de reiniciar podemos comprobar que está funcionando con el comando:
ps aux --forest 
Donde podemos ver el proceso de noip2 ejecutándose correctamente.
ps aux --forest
O este otro propio de noip2:
/usr/local/bin/noip2 -S
Que nos devolverá algo parecido a esto:
1 noip2 process active.
Process 135, started as noip2, (version 2.1.9)
Using configuration from /usr/local/etc/no-ip2.conf
Last IP Address set *.*.*.*
Account jmruiz@openhr.cloud
configured for:
host  midominio.ddns.net
Updating every 30 minutes via /dev/eth0 with NAT enabled.

martes, 21 de agosto de 2018

Actualizar de Proxmox 4 a Proxmox 5, Debian 8 Jessie a Debian 9 Stretch



Si recientemente has actualizado tu Proxmox 4 habrás visto el mensaje "Support for Proxmox VE 4.4
ends on June 30, 2018". Así que ha llegado el momento de actualizar a la última versión Proxmox 5.

Este artículo está basado en la fuente principal en la web de www.proxmox.com en su wiki de soporte: https://pve.proxmox.com/wiki/Upgrade_from_4.x_to_5.0 consúltalo para más ayuda.

En términos generales, existen dos posibilidades para pasar de Proxmox 4 a Proxmox 5.
  1. La primera opción es realizar una nueva instalación en hardware nuevo para posteriormente restauración de máquinas virtuales desde la copia de seguridad. 
  2. La segunda opción es realizar una actualización en a través de apt, paso a paso.
En cualquier caso, será necesario que vacíes la memoria caché del navegador después de la actualización y vuelvas a cargar la página de la GUI o existe la posibilidad de que veas muchas fallas.

Seguramente si utilizas tu servidor de virtualización Proxmox como laboratorio de pruebas como lo hago yo, es muy probable que no tengas disponible nuevo hardware para realizar una nueva instalación y realizar una migración de todas las máquinas virtualizadas.

Así pues en nuestro caso vamos a poner en practica la opción de actualizar; nos disponemos a actualizar Proxmox desde el repositorio de APT. Vamos a aclarar que esta actualización en Debian de proxmox va asociada a la versión de Debian que corremos. Proxmox 4 está asociado a la versión Debian 8 (Jessie) mientras que Proxmox 5 está asociado a la versión Debian 9 (Stretch), por tanto principalmente lo que haremos para hacer la actualización de Proxmox es una actualización de repositorios para utilizar la última versión de Debian  9 (Stretch). 

IMPORTANTE: Tal y como especifican en el manual oficial de Proxmox; debes saber antes de comenzar si usa ceph, actualice su clúster Ceph a la versión Luminous antes de actualizar, siguiendo el artículo Ceph Jewel to Luminous.

Antes de actualizar

Principalmente nos tenemos que asegurar antes de actualizar de cumplir los siguientes puntos:
  • Tenemos copia de seguridad de todas las máquinas virtuales.
  • Todo el sistema está funcionando correctamente. 
  • Todas las máquinas virtuales están correctamente apagadas. 
  • Asegurarnos de estar en la última versión (Proxmox 4.4) antes de iniciar el proceso de actualización a Proxmox 5, para ello ejecutar: 
    • apt-get update && apt-get dist-upgrade
  • Mi ultima recomendación personal es reiniciar el sistema con todas las máquinas sin iniciar (start on boot OFF).

Comenzamos la actualización: 

Los pasos para la actualización sin pocos y simples como puedes ver. 

1. Cambiar en nuestro sources.list de nombre de versión, cambiando de jessie a stretch. Puede que no estemos utilizando el nombre de la versión en nuestro sources.list asegúrate. 
sed -i 's/jessie/stretch/g' /etc/apt/sources.list
1.1. Igualmente hay que cambiar el nombre de la versión en nuestro fichero pve-enterprise.list, en mi caso tenía el repositorio de Proxmox en el propio sources.list, puesto que este Proxmox venía de una versión anterior donde el repositorio simplemente se añadía en el sources.list principal.
sed -i 's/jessie/stretch/g' /etc/apt/sources.list.d/pve-enterprise.list
2. Actualizar nuestra lista de repositorios con la actual Stretch.
apt-get update
3. Descargar e instalar las nuevas versiones de paquetes.
apt-get dist-upgrade

Este último paso en el proceso de actualización será el más largo y también dependerá mucho de nuestra linea de acceso a internet. Puesto que tiene que descargar todos los paquetes necesarios para la actualización y posteriormente desempaquetarlos e instalarlos.

Además durante el proceso de instalación algunos paquetes requieren de la intervención del usuario, para solicitar la confirmación de reinicio de algunos servicios esenciales para el sistema (ssh, postfix, ...) o para solicitar confirmación de instalación de los ficheros de configuración del desarrollador o bien mantener los existentes. 

IMPORTANTE: Actualizar desde terminal ssh

Si pretendes hacer la actualización desde un terminal ssh no ejecutes el comando "apt-get dist-upgrade" directamente en el terminal ssh. Podrías perder la conexión por cualquier motivo y no sabrás cómo/cuando terminó el proceso de actualización o si el proceso solicita de tu intervención, el proceso de actualización quedará paralizado y puede dejar el sistema en un estado inestable. 

Siempre que necesito ejecutar un proceso largo o con cierto nivel de riesgo para la estabilidad del sistema en mis sistemas, utilizo "screen". Este comando nos permite "virtualizar" un terminal que cuelga del raíz de procesos del sistema, es decir, pese a ejecutar screen desde un terminal ssh el proceso colgará fuera del proceso ssh y si perdemos la conexión nuestros procesos seguirán su curso y podremos volver a recuperarlos cuando lo necesitemos. 

Puedes visitar un artículo que escribí hace tiempo en este blog sobre screen, pero te dejo los comandos básicos de screen aquí como ayuda:
  • Crear un terminal: screen -dmS ProcesoUpgrade
  • Acceder al terminal con el nombre ProcesoUpgrade: screen -r ProcesoUpgrade
  • Atajo de teclado para salir del terminal screen sin cerrar el proceso que hemos ejecutado: ctrl+a+d

jueves, 19 de julio de 2018

Limpiar paquetes nvidia en debian


Desinstalar todo rasto de paquetes nvidia.

El primer paso es localizar los paquetes con relación nvidia he utilizado:
aptitude search nvidia | grep ^i
En la instalación de Ubuntu por defecto no está instalado el paquete aptitude. Para instalar apt-get install aptitude.

Simplemente hacemos un aptitude remove de todos los paquetes que hemos obtenido en el listado anterior.

Ahora ha llegado el momento de instalar los nuevos drivers.

Descargamos el drivers para Linux 64bit desde nvidia.com; wget http://es.download.nvidia.com/XFree86/Linux-x86_64/310.19/NVIDIA-Linux-x86_64-310.19.run

jmruiz@jmruiz-Aspire-V3-571G:~/Descargas$ wget http://es.download.nvidia.com/XFree86/Linux-x86_64/310.19/NVIDIA-Linux-x86_64-310.19.run
--2012-11-17 11:46:06--  http://es.download.nvidia.com/XFree86/Linux-x86_64/310.19/NVIDIA-Linux-x86_64-310.19.run
Resolviendo es.download.nvidia.com (es.download.nvidia.com)... 217.212.238.51, 217.212.238.64, 217.212.238.59
Conectando con es.download.nvidia.com (es.download.nvidia.com)[217.212.238.51]:80... conectado.
Petición HTTP enviada, esperando respuesta... 200 OK
Longitud: 68022245 (65M) [application/octet-stream]
Grabando a: “NVIDIA-Linux-x86_64-310.19.run”
100%[=======================================================================================================>] 68.022.245  3,84M/s   en 20s  
2012-11-17 11:46:26 (3,24 MB/s) - “NVIDIA-Linux-x86_64-310.19.run” guardado [68022245/68022245]

sudo stop lightdm

chmod 775 NVIDIA-Linux-x86_64-310.19.run

(sudo) ./NVIDIA-Linux-x86_64-310.19.run





viernes, 22 de noviembre de 2013

RAID status not OK. Exiting Debian 7.2


Jugando con un RAID software montado en Debian 7.2 me encontré que todo funcionaba bien, pero uno de los RAID que tenía montado no funcionaba bien. El RAID donde estaba montado el sistema funcionaba perfectamente porque tras unas pruebas de ruptura, lo había recuperado. Pero el que me producía el error correspondía al RAID destinado a la memoria de intercambio (swap).


Me di cuenta del error en el arranque del sistema, justo cuando comenzaba a arrancar Debian lo primero que hace es montar los RAID y este proceso devolvía un error. Puesto que el problema estaba en el RAID destinado a memoria de intercambio no notaba nada en el sistema. Para confirmar el error monté "bootlogd" para ver algo más de información, en la pantalla de carga no me daba tiempo a leer nada, simplemente vi un "FAIL" y me puse a investigar de donde venía.

Para el que no esté familiarizado con "bootlogd" en su día escribí un pequeño artículo sobre como instalarlo y configurarlo.

Tras la instalación simplemente tienes que ver el contenido de "/var/log/boot" y yo me encontré con "RAID status not OK. Exiting", así que efectivamente algo no estaba cargando bien en el RAID.

Para verificar el estado de los RAID utilizaremos el comando "mdadm" indicando el RAID que queremos verificar, en mi caso tengo dos RAID; /dev/md0 y /dev/md1. Cuando verifiqué el estado de /dev/md1 efectivamente encontré "State : clean, resyncing (PENDING)" en lugar de un simple "State : clean".
root@debian:~# mdadm --detail /dev/md1
/dev/md1:
        Version : 1.2
  Creation Time : Thu Nov 14 12:13:46 2013
     Raid Level : raid1
     Array Size : 14744448 (14.06 GiB 15.10 GB)
  Used Dev Size : 14744448 (14.06 GiB 15.10 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent
    Update Time : Thu Nov 14 12:39:40 2013
          State : clean, resyncing (PENDING)  Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0
           Name : debian:1  (local to host debian)
           UUID : 58db8a25:19229d31:ec4eb31f:6dc16a4a
         Events : 3
    Number   Major   Minor   RaidDevice State
       0       8        2        0      active sync   /dev/sda2
       1       8       18        1      active sync   /dev/sdb2
Así pues hay que lanzar un "mdadm --readwrite /dev/md1" para que comience el proceso de recuperación. Este comando lanzará un proceso backgrund, es decir, no nos bloqueará el terminal desde el que lancemos el proceso con el consecuente miedo de que se cierre y perdamos el proceso.
root@debian:~# mdadm --readwrite /dev/md1
Para tener una estimación del tiempo que va a tardar en terminar el proceso debemos visualizar el contenido del fichero "/proc/mdstat":
root@debian:~#  cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda2[0] sdb2[1]
      14744448 blocks super 1.2 [2/2] [UU]
      [====>................]  resync = 22.6% (3337408/14744448) finish=2.9min speed=64360K/sec
   
md0 : active raid1 sda1[3] sdb1[2]
      473500480 blocks super 1.2 [2/2] [UU]
   
unused devices:
Finalmente el proceso llegará a su fin; sin hace nada más el RAID funcionará correctamente, ya no volveremos a ver errores en el inicio del sistema. Nuestro RAID ha sido recuperado.
root@debian:~#  cat /proc/mdstat
Personalities : [raid1]
md1 : active raid1 sda2[0] sdb2[1]
      14744448 blocks super 1.2 [2/2] [UU]
   
md0 : active raid1 sda1[3] sdb1[2]
      473500480 blocks super 1.2 [2/2] [UU]
   
unused devices:


jueves, 21 de noviembre de 2013

Crear RAID 1 Software Debian

Esta entrada en mi blog no es original mía. La he sacado de "http://www.lintips.com/?q=node/88" pero no es la primera vez que hago referencia a algún manual externo y éste termina por desaparecer por una u otra razón, ya sea por problemas temporales en el servidor donde está alojado o porque el dueño del documento decidió eliminarlo. 

Para evitar estos problemas que puede ser bastante incómodo, replicado el post dentro de mi blog. Esta replica la realizo para apoyar mi entrada sobre recuperación de RAID software. Y que siempre que alguien acceda a la recuperación de RAID software, también pueda tener acceso a este manual sobre como montar el RAID desde la instalación de Debian.

Iniciamos la instalación de Debian como siempre y al llegar a la pantalla "Particionado de discos" seleccionamos el modo Manual.

Seleccionamos el primer disco duro y he indicamos que cree una nueva tabla de particiones.



Repetimos el mismo paso para el disco secundario.
Creamos, en el primer disco, las particiones que necesitemos y las definimos de tipo "volumen físico para RAID". En este caso los discos son de 85.9GB y voy a crear 2 particiones primarias: sda1 de 83,9 GB (será el volumen donde irá la /) y sda2 de 2GB (será el volumen swap o "área de intercambio").

Repetimos los mismos pasos para el segundo disco, asegurándonos que las particiones las definimos exactamente con el mismo tamaño. Tras este paso nos quedará algo como esto:
Ahora desde esa misma pantalla seleccionamos la primera opción "Configurar RAID por software"
y indicamos que escriba los cambios en los dispositivos.
Nos aparecerá el menú de configuración de multi-discos (MD) y RAID por software, donde seleccionamos la acción Crear un dispositivo MD
De tipo RAID 1, con 2 dispositivos activos y 0 libres (spare discs).
Y selecciono la partición de cada disco físico que se va a utilizar para este primer MD (md0).
Repito estos pasos para el segundo volumen (md1) y una vez definidos todos los MD, seleccionamos Terminar para que se creen. Con lo que en la utilidad de Particionado ya aparecen los dos dispositivos RAID.
Solo faltara definir en estos volúmenes el sistema de ficheros a utilizar, el uso que le vamos a dar (punto de montaje) y formatearlos. Con ello ya hemos terminado y continuamos la instalación de Debian como si fuese un disco real.
Como nota final deciros que es muy importarte que la partición swap también este en un volumen raid, como he definido aquí, si solo esta en un disco y este falla el sistema se bloquearía.

lunes, 18 de noviembre de 2013

Proxmox "The requested URL returned error: 401"

Como ya sabréis Proxmox ha dejado de ser gratuito, ahora si no estas suscrito, tienes que utilizar los repositorios de test, no recomendados para servidores en explotación. Pero no obstante yo tenía configurado el servidor de test en mi /etc/apt/sources.list y tenía este error al ejecutar un "aptitude update" o "apt-get update".
Err https://enterprise.proxmox.com wheezy/pve-enterprise amd64 Packages
  The requested URL returned error: 401
Ign https://enterprise.proxmox.com wheezy/pve-enterprise Translation-es_ES
Ign https://enterprise.proxmox.com wheezy/pve-enterprise Translation-es
Ign https://enterprise.proxmox.com wheezy/pve-enterprise Translation-en
94% [Trabajando]W: Se produjo un fallo al descargar https://enterprise.proxmox.com/debian/dists/wheezy/pve-enterprise/binary-amd64/Packages: The requested URL returned error: 401
E: Some index files failed to download. They have been ignored, or old ones used instead.
E: No se pudo reconstruir el almacén de paquetes
Al final el error está en la carga del fichero "/etc/apt/sources.list.d/pve-enterprise.list" por alguna razón ha cargado el repositorio enterprise y hay que comentarlo para evitar este error 401.

Simplemente comentamos la linea que aparece en el fichero "/etc/apt/sources.list.d/pve-enterprise.list" y volvemos a ejecutar el "update" y todo funcionará correctamente.
#deb https://enterprise.proxmox.com/debian wheezy pve-enterprise

sábado, 16 de noviembre de 2013

Selección kernel por defecto inicio grub Debian

¿Alguna vez has necesitado seleccionar un nuevo kernel en el arranque de tu Debian y no estás frente a la máquina para poder seleccionar con los cursores en la pantalla de selección de kernels de grub? Pues durante la instalación de Proxmox yo lo he necesitado.

Es bastante simple, en primer lugar tenemos que ver cuál es el kernel que queremos iniciar. Con el comando "grep menuentry /boot/grub/grub.cfg" podemos ver los que tenemos disponibles en la pantalla de carga de grub.

En mi ejemplo aparecen dos kernel; 3.2.0 amd64 y 2.6.32 pve, con sus correspondientes "recovery mode"; si contamos tenemos 4 lineas.
root@debian:~# grep menuentry /boot/grub/grub.cfg
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 3.2.0-4-amd64 (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-26-pve' --class debian --class gnu-linux --class gnu --class os {
menuentry 'Debian GNU/Linux, with Linux 2.6.32-26-pve (recovery mode)' --class debian --class gnu-linux --class gnu --class os {
Desde el fichero "/etc/default/grub" podemos modificar el parámetros "GRUB_DEFAULT=2" donde definiremos el kernel que queremos que se seleccione por defecto. Cuando abrimos el fichero por primera vez "GRUB_DEFAULT" tendrá valor "0", que corresponde con el primer kernel de la lista.

Por tanto el contador de kernel comienza a contar en "0"; si queremos seleccionar el kernel "Debian GNU/Linux, with Linux 2.6.32-26-pve" que está en la tercera linea, tendremos que darle valor "2".
Tras modificar el fichero únicamente nos queda refrescar la configuración de grub con el comando "update-grub". Ahora cuando reiniciemos nuestro sistema aparecerá la tercera opción seleccionada por defecto.
root@debian:~# update-grub
Tenemos que tener cuidado con futuras actualizaciones o instalaciones/desinstalaciones de kernels. Estas acciones modificarán el orden de nuestros kernels en el listado de carga y es muy probable que el valor de "GRUB_DEFAULT" no corresponda con el kernel que queremos iniciar.

En mi caso tras cargar el kernel "Debian GNU/Linux, with Linux 2.6.32-26-pve" voy a desinstalar "Debian GNU/Linux, with Linux 3.2.0-4-amd64" y ahora "2.6.32-26-pve" pasará a la primera posición de la lista. Es muy importante volver a poner el valor de "GRUB_DEFAULT=0" para que cargue correctamente.

viernes, 15 de noviembre de 2013

bootlogd Debian 7.2

En más de una ocasión he necesitado leer detenidamente lo que se carga en el arranque del sistema sin estar delante de la pantalla del servidor. Con bootlogd se puede solucionar este problema. Devuelve a un fichero de log todo lo que sucede en el inicio del sistema. Con esta herramienta podemos averiguar si tenemos algún problema en la carga inicial del sistema.

Para ponerlo en funcionamiento es bastante simple. Simplemente instalamos el paquete "bootlogd":
aptitude install bootlogd
Después creamos el fichero "/etc/default/bootlogd" con añadiendo la linea "BOOTLOGD_ENABLE=yes", ahora solo nos falta reiniciar y ver el contenido del fichero "/var/log/boot" para ver qué ha pasado en el inicio del sistema.

https://wiki.debian.org/bootlogd

domingo, 25 de agosto de 2013

Modo recuperación Debian

Recientemente he necesitado recuperar un servidor y descubrí una grata sorpresa que no había visto antes o la han incorporado recientemente. Es un modo recuperación en los CDs de instalación de Debian.

Las capturas que adjunto las he sacado del cd netinstall de debian 7.1, pero supongo que en cualquier debian 7.1 también podréis encontrar estas opciones.


En la primera pantalla que nos aparece cuando iniciamos el cd netinstall, seleccionamos la tercera opción "Avanced options" y en la siguiente pantalla "Rescue mode".




Esto da la sensación de que está comenzando una instalación de Debian estándar, pero no es así. Está recogiendo datos básicos de configuración del sistema para la consola de recuperación.







Aquí vemos algo diferente al instalador de Debian, no pide una partición donde montar el sistema raíz. En la máquina donde estaba haciendo las pruebas no tenía disco duro, así que no me muestra ningún sistema raíz disponible.

De todos modos esto no es necesario para entrar en la consola de recuperación. Y si lo que quieres es pasar un fsck al disco principal, este no debe estar montado.

Simplemente no montamos ningún sistema y continuamos.




Y finalmente se ejecuta la consola de recuperación, ahora ya podemos entrar en el sistema como si de un cdlive se tratara para realizar nuestras tareas de administración.


jueves, 22 de agosto de 2013

Crear Debian usb booteable

Esto es un resumen rápido para crear un dispositivo usb que se pueda iniciar y así poder acceder a un sistema "roto" y realizar tareas de administración. Si necesitas más información os recomiendo buscar el wiki de debian, hay un articulo específico sobre este tema. Pero creo que este método que yo explico es más simple y rápido.

Para crear nuestro dispositivo usb que podamos iniciar un sistema Debian, necesitaremos:
Es posible que cuando leas este artículo existan nuevas versiones de los ficheros a los que hago referencia o que esos enlaces dejen de estar disponibles.

Respecto al fichero boot.img.tgz, lo podrás encontrar en cualquier repositorio de Debian, normalmente en el directorio "main/installer-i386/current/images/hd-media/".

La ISO puedes descargar cualquiera (os dejo un enlace con las isos cds de Debian 7.1), yo dejo el enlace de la netinstall para i386 porque es la que menos pesa, es la arquitectura que necesito y para cosas básicas es más que suficiente.

En primer lugar conectamos el dispositivo a nuestra máquina; no lo he comentado pero necesitamos  que nuestra máquina tenga un sistema operativo GNU/Linux. Los comandos que utilizaremos son muy estándar y están en todas las distribuciones GNU/Linux.

Dependiendo del la distribución que utilicemos puede que nos monte el dispositivo usb simplemente por conectarlo. Necesitamos que esté desmontado; puedes hacerlo desde el entorno de escritorio o desde linea de comandos con un "umount /dev/sdx1".

Es muy importante que nos aseguremos del nombre que el sistema le ha dado a nuestro dispositivo usb, /dev/sda suele ser el disco duro principal, si no tenemos más discos duros lo normal es que /dev/sdb sea nuestro nuevo dispositivo usb. Para asegurar puedes utilizar el comando "dmesg" tras conectar el dispositivo y al final del listado veremos algo así:
[ 7416.604129] usb 2-1: new high-speed USB device number 3 using ehci-pci
[ 7417.324920] usb 2-1: New USB device found, idVendor=090c, idProduct=1000
[ 7417.324932] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 7417.324940] usb 2-1: Product: Flash Disk
[ 7417.324947] usb 2-1: Manufacturer: USB
[ 7417.324953] usb 2-1: SerialNumber: FB08091700089215
[ 7418.012644] Initializing USB Mass Storage driver...
[ 7418.013058] scsi5 : usb-storage 2-1:1.0
[ 7418.013460] usbcore: registered new interface driver usb-storage
[ 7418.013462] USB Mass Storage support registered.
[ 7419.013550] scsi 5:0:0:0: Direct-Access     USB      Flash Disk       1100 PQ: 0 ANSI: 0 CCS
[ 7419.014893] sd 5:0:0:0: Attached scsi generic sg2 type 0
[ 7419.018379] sd 5:0:0:0: [sdb] 1957888 512-byte logical blocks: (1.00 GB/956 MiB)
[ 7419.019514] sd 5:0:0:0: [sdb] Write Protect is off
[ 7419.019518] sd 5:0:0:0: [sdb] Mode Sense: 43 00 00 00
[ 7419.020717] sd 5:0:0:0: [sdb] No Caching mode page present
[ 7419.020721] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[ 7419.026348] sd 5:0:0:0: [sdb] No Caching mode page present
[ 7419.026352] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[ 7419.028671]  sdb: sdb1
[ 7419.032739] sd 5:0:0:0: [sdb] No Caching mode page present
[ 7419.032743] sd 5:0:0:0: [sdb] Assuming drive cache: write through
[ 7419.033480] sd 5:0:0:0: [sdb] Attached SCSI disk
Como podemos ver en mi caso ha llamado sdb al dispositivo usb. Así pues "umount /dev/sdb1" para desmontarlo. Si ejecutamos simplemente "mount" nos mostrará los dispositivos montados, tenemos que asegurarnos de que nuestro usb no esté montado.

Ahora vamos a hacer que nuestro usb sea booteable, para ello utilizaremos la imagen boot.img.tgz. Desde el directorio donde tengamos la imagen, ejecutaremos el siguiente comando. Prestad atención porque es /dev/sdb y no /dev/sdb1, no es necesario especificar la partición.

IMPORTANTE: Por si no lo suponías, esta acción borrará toda la información del dispositivo.
zcat boot.img.tgz > /dev/sdb 
Tras realizar esta operación, que puede tardar algunos minutos. Tenemos que montar el dispositivo con el comando "mount /dev/sdb /mnt/". Aquí podemos ver el contenido del dispositivo ahora.

root@test:~# mount /dev/sdb /mnt/
root@test:~# ls -l /mnt/
total 33436
-rwxr-xr-x 1 root root      361 jun 13 21:45 adgtk.cfg
-rwxr-xr-x 1 root root      259 jun 13 21:45 adtxt.cfg
-rwxr-xr-x 1 root root       62 jun 13 21:45 disk.lbl
-rwxr-xr-x 1 root root       56 jun 13 21:45 exithelp.cfg
-rwxr-xr-x 1 root root      568 jun 13 21:45 f10.txt
-rwxr-xr-x 1 root root      881 jun 13 21:45 f1.txt
-rwxr-xr-x 1 root root      665 jun 13 21:45 f2.txt
-rwxr-xr-x 1 root root      852 jun 13 21:45 f3.txt
-rwxr-xr-x 1 root root      486 jun 13 21:45 f4.txt
-rwxr-xr-x 1 root root      806 jun 13 21:45 f5.txt
-rwxr-xr-x 1 root root     1212 jun 13 21:45 f6.txt
-rwxr-xr-x 1 root root      916 jun 13 21:45 f7.txt
-rwxr-xr-x 1 root root     1041 jun 13 21:45 f8.txt
-rwxr-xr-x 1 root root      765 jun 13 21:45 f9.txt
-rwxr-xr-x 1 root root   159629 jun 13 21:45 g2ldr
-rwxr-xr-x 1 root root     8192 jun 13 21:45 g2ldr.mbr
-rwxr-xr-x 1 root root      132 jun 13 21:45 gtk.cfg
-rwxr-xr-x 1 root root 24459775 jun 13 21:45 initrdg.gz
-rwxr-xr-x 1 root root  6355044 jun 13 21:45 initrd.gz
-r-xr-xr-x 1 root root    32256 jun 13 21:45 ldlinux.sys
-rwxr-xr-x 1 root root  2510272 jun 13 21:45 linux
-rwxr-xr-x 1 root root      647 jun 13 21:45 menu.cfg
-rwxr-xr-x 1 root root      190 jun 13 21:45 prompt.cfg
-rwxr-xr-x 1 root root      154 jun 13 21:45 rqgtk.cfg
-rwxr-xr-x 1 root root      118 jun 13 21:45 rqtxt.cfg
-rwxr-xr-x 1 root root   366350 jun 13 21:45 setup.exe
-rwxr-xr-x 1 root root      141 jun 13 21:45 spkgtk.cfg
-rwxr-xr-x 1 root root    78821 jun 13 21:45 splash.png
-rwxr-xr-x 1 root root      691 jun 13 21:45 stdmenu.cfg
-rwxr-xr-x 1 root root       87 jun 13 21:45 syslinux.cfg
-rwxr-xr-x 1 root root      128 jun 13 21:45 txt.cfg
-rwxr-xr-x 1 root root   155792 jun 13 21:45 vesamenu.c32
-rwxr-xr-x 1 root root      196 jun 13 21:45 win32-loader.ini
Por último copiaremos la iso en la raiz del dispositivo "cp debian-7.1.0-i386-netinst.iso /mnt/", tras esta operación podemos desmontar el dispositivo usb y conectarlo a una máquina para poder iniciarla desde nuestro nuevo debian usb.

Recuerda que el inicio desde usb puede que no esté activado en la maquina, para ello tendrás que entrar  en la bios y activar el inicio desde dispositivos usb.

Finalmente ya puedes iniciar Debian desde el usb y puedes utilizar el modo recuperación para obtener una consola básica donde realizar algunas gestiones de administración.


jueves, 27 de junio de 2013

Compilar PostgreSQL en Debian


Llevo trabajando unos años con PostgreSQL y no he tenido problemas, pero tenía la necesidad de utilizar funcionalidades de PostgreSQL 9 en un sistema que aún no lo incorporaba en su repositorio de paquetes y me aventuré a compilarlo. Descubrí que es bastante simple y adquiere aún más robustez si es posible. 

Para poder compilar el código fuente de postgresql necesitamos descargar de http://www.postgresql.org/ftp/source/  el paquete de postgresql que quieras instalar en tu sistema. En principio todos deben seguir el mismo procedimiento de instalación. Pero este manual lo he realizado con la versión 9.2.2 y probado con versiones posteriores (9.2.3 y 9.2.4).

Requisitos


Antes de comenzar con la instalación de PostgreSQL compilando el código fuente, es necesario instalar algunos paquetes.
aptitude install bison
aptitude install libreadline-dev libreadline5-dev libreadline6-dev
aptitude install flex
aptitude install zlib1g-dev

 Configurar, compilar e instalar

Simplemente con estos comandos ya tendremos nuestro postgres listo para comenzar a funcionar. Obiamente es necesario crear el directorio "/opt/postgresql-9.2.2" para ubicar ahí nuestro motor de base de datos.
./configure --prefix=/opt/postgresql-9.2.2
make
make install

Puesta en explotación

Creamos el usuario postgres que será el encargado de iniciar el sistema, así como el directorio contenedor de la instancia de la base de datos y le asignamos como propietario al usuario postgres.

adduser postgres --home /opt/postgresql-9.2.2
mkdir /opt/postgresql-9.2.2/data
chown -R postgres:postgres /opt/postgresql-9.2.2

Inicializar la base de datos.

Para iniciar la base de datos utilizaremos el usuario postgres, antes hay que inicializar la instancia de la base de datos.
su postgres
/opt/postgresql-9.2.2/bin/initdb -D /opt/postgresql-9.2.2/data
/opt/postgresql-9.2.2/bin/initdb --pgdata=/opt/postgresql-9.2.2/data

Iniciar la base de datos.

su postgres 
/opt/postgresql-9.2.2/bin/pg_ctl -D /opt/postgresql-9.2.2/data -l logfile start

Test de funcionamiento

Ya tenemos funcionando el motor de base de datos y probamos a crear una base de datos y conectarnos a ella.
/opt/postgresql-9.2.2/bin/createdb test
/opt/postgresql-9.2.2/bin/psql test

Script iniciar/parar/recargar

Un script bastante simple para el inicio y paro del sistema.
#!/bin/bash
### BEGIN INIT INFO
# Provides:             postgresql
# Required-Start:       $local_fs $remote_fs $network $time
# Required-Stop:        $local_fs $remote_fs $network $time
# Should-Start:         $syslog
# Should-Stop:          $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    PostgreSQL RDBMS server
### END INIT INFO

case "$1" in
    start)
        su postgres -c "/opt/postgresql-9.2.2/bin/pg_ctl --pgdata /opt/postgresql-9.2.2/data --log /opt/postgresql-9.2.2/logfile start"
        ;;
    stop)
        su postgres -c "/opt/postgresql-9.2.2/bin/pg_ctl stop --pgdata /opt/postgresql-9.2.2/data -m fast"
        ;;
    status)
        su postgres -c "/opt/postgresql-9.2.2/bin/pg_ctl status --pgdata /opt/postgresql-9.2.2/data"
        ;;
    restart)
        $0 stop
        sleep 2
        $0 start
        ;;
    reload)
        su postgres -c "/opt/postgresql-9.2.2/bin/pg_ctl reload --pgdata /opt/postgresql-9.2.2/data"
        ;;
    *)
        echo "Usage: $0 {start|stop|restart|reload|status} "
        exit 1

        ;;
esac

exit 0

Primeros pasos


Ya podemos utilizar nuestra nueva instalación de postgres, aquí os dejo como crear vuestro primer usuario.
postgres@miequipo:/opt/postgresql-9.2.2$ echo "create user miusuario with password 'miclave' " | bin/psql template1
CREATE ROLE

Rotado de log

Escribí un artículo sobre el rotado de log para un xampp, basándome en ese artículo; recomiendo encarecidamente meter el fichero de log dentro del sistema de rotación de log. Es muy simple, únicamente tardarás unos minutos y puede quitarte quebraderos de cabeza posteriores.

Simplemente crea el fichero "/etc/logrotate.d/postgres" con el contenido:
/opt/postgresql-9.2.2/logfile {
    copytruncate
    compress
    dateext
    rotate 365
    size=+100M
    olddir /opt/postgresql-9.2.2/log/
    notifempty
    missingok
}
Tendrás que crear el directorio "/opt/postgresql-9.2.2/log/" donde se almacenará el histórico de log comprimidos. Para terminar solo nos falta ejecutar el procesado del fichero por primera vez para ver que todo está correcto.
logrotate --force /etc/logrotate.d/postgres




lunes, 30 de agosto de 2010

Problemas al descomprimir rar multi fichero en Debian lenny

He tenido problemas al intentar descomprimir un .rar compuesto por un montón de ficheros .rar que fue separado en partes pequeñas (de 100MB) para hace más cómodo el traslado a dispositivos ópticos.

El problema es que no consigue descomprimir el fichero, pero encontré la solución. Pasa por modificar el fichero /etc/apt/sources.list y añadir la etiqueta non-free en el repositorio principal de Debian (donde se encuentra el paquete unrar).

Una vez añadida la etiquete tendremos que ejecutar aptitude update para que vuelva a capturar la lista nueva de paquetes y después tendremos que volver a ejecutar la instalación de unrar (aptitude install unrar) y esta vez se traerá la versión non-free.

Una vez más intenta descomprimir el .rar con multipartes que tenías problemas y ahora sí será descomprimido.

martes, 22 de septiembre de 2009

VBoxGuestAdditions para Debian

Es muy útil instalar VBoxGuestAdditions (cliente de virtual box para máquinas virtuales) en las máquinas virtuales que tengas corriendo en un servidor de VirtualBox. Así facilitarás la comunicación entre el Kernel de la máquina virtual y el servidor de máquinas virtuales.

Para instalarlo lo primero que tenemos que hacer es comprobar el Kernel que estamos utilizando en la máquina virtualizada. Para ello ejecutamos:
# uname -a
Linux Debian5Nagios 2.6.26-2-686 #1 SMP Thu Mar 26 01:08:11 UTC 2009 i686 GNU/Linux

Una vez sabemos el Kernel que estamos utilizando ejecutaremos el script correspondiente, en nuestro caso:
# ./VBoxLinuxAdditions-x86.run

Es posible que obtengamos el siguiente error:
Verifying archive integrity... All good.
Uncompressing VirtualBox 2.2.2 Guest Additions for Linux installation.................................................................
VirtualBox 2.2.2 Guest Additions installation
Please install the build and header files for your current Linux kernel.
The current kernel version is 2.6.26-2-686
This system does not seem to have support for OpenGL direct rendering.
VirtualBox requires Linux 2.6.27 or later for this. Please see the log
file /var/log/vboxadd-install.log if your guest uses Linux 2.6.27 and you still see this message.
Problems were found which would prevent the Guest Additions from installing.
Please correct these problems and try again.

Esto es porque necesitas las cabeceras del Kernel para poder compilar un modulo, para instalar las cabeceras de nuestro Kernel: (RECUERDA QUE TENDRÁS QUE INSTALAR LAS CABECERAS DEL KERNEL QUE ESTÉS UTILIZANDO)
# aptitude install linux-headers-2.6-686
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Se instalarán los siguiente paquetes NUEVOS:
cpp-4.1{a} gcc-4.1{a} gcc-4.1-base{a} linux-headers-2.6-686 linux-headers-2.6.26-2-686{a}
linux-headers-2.6.26-2-common{a} linux-kbuild-2.6.26{a}
0 paquetes actualizados, 7 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 7254kB de ficheros. Después de desempaquetar se usarán 41,3MB.
¿Quiere continuar? [Y/n/?]
Escribiendo información de estado extendido... Hecho
Des:1 http://ftp.rediris.es lenny/main gcc-4.1-base 4.1.2-25 [207kB]
Des:2 http://ftp.rediris.es lenny/main cpp-4.1 4.1.2-25 [2317kB]
Des:3 http://ftp.rediris.es lenny/main gcc-4.1 4.1.2-25 [417kB]
Des:4 http://ftp.rediris.es lenny/main linux-headers-2.6.26-2-common 2.6.26-19 [3718kB]
Des:5 http://ftp.rediris.es lenny/main linux-kbuild-2.6.26 2.6.26-3 [194kB]
Des:6 http://ftp.rediris.es lenny/main linux-headers-2.6.26-2-686 2.6.26-19 [398kB]
Des:7 http://ftp.rediris.es lenny/main linux-headers-2.6-686 2.6.26+17+lenny1 [2474B]
Descargados 7254kB en 10s (699kB/s).
Seleccionando el paquete gcc-4.1-base previamente no seleccionado.
(Leyendo la base de datos ...
29434 ficheros y directorios instalados actualmente.)
Desempaquetando gcc-4.1-base (de .../gcc-4.1-base_4.1.2-25_i386.deb) ...
Seleccionando el paquete cpp-4.1 previamente no seleccionado.
Desempaquetando cpp-4.1 (de .../cpp-4.1_4.1.2-25_i386.deb) ...
Seleccionando el paquete gcc-4.1 previamente no seleccionado.
Desempaquetando gcc-4.1 (de .../gcc-4.1_4.1.2-25_i386.deb) ...
Seleccionando el paquete linux-headers-2.6.26-2-common previamente no seleccionado.
Desempaquetando linux-headers-2.6.26-2-common (de .../linux-headers-2.6.26-2-common_2.6.26-19_i386.deb) ...
Seleccionando el paquete linux-kbuild-2.6.26 previamente no seleccionado.
Desempaquetando linux-kbuild-2.6.26 (de .../linux-kbuild-2.6.26_2.6.26-3_i386.deb) ...
Seleccionando el paquete linux-headers-2.6.26-2-686 previamente no seleccionado.
Desempaquetando linux-headers-2.6.26-2-686 (de .../linux-headers-2.6.26-2-686_2.6.26-19_i386.deb) ...
Seleccionando el paquete linux-headers-2.6-686 previamente no seleccionado.
Desempaquetando linux-headers-2.6-686 (de .../linux-headers-2.6-686_2.6.26+17+lenny1_i386.deb) ...
Procesando disparadores para man-db ...
Configurando gcc-4.1-base (4.1.2-25) ...
Configurando cpp-4.1 (4.1.2-25) ...
Configurando gcc-4.1 (4.1.2-25) ...
Configurando linux-headers-2.6.26-2-common (2.6.26-19) ...
Configurando linux-kbuild-2.6.26 (2.6.26-3) ...
Configurando linux-headers-2.6.26-2-686 (2.6.26-19) ...
Configurando linux-headers-2.6-686 (2.6.26+17+lenny1) ...
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Escribiendo información de estado extendido... Hecho
Leyendo las descripciones de las tareas... Hecho

Una vez instaladas las cabeceras correspondientes a tu Kernel, no tendrías que tener ningún error al ejecutar:
# ./VBoxLinuxAdditions-x86.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 2.2.2 Guest Additions for Linux installation.......................................................................
VirtualBox 2.2.2 Guest Additions installation
This system does not seem to have support for OpenGL direct rendering.
VirtualBox requires Linux 2.6.27 or later for this. Please see the log
file /var/log/vboxadd-install.log if your guest uses Linux 2.6.27 and you still see this message.
Building the VirtualBox Guest Additions kernel module...
Building the shared folder support kernel module...
Installing the VirtualBox Guest Additions...

Could not find X.org or XFree86 on the guest system. The X Window drivers
will not be installed.

Y después de reiniciar la máquina virtual y ejecutar un "# ps aux", podrás ver un proceso correspondiente al modulo recién compilado.
/usr/sbin/vboxadd-timesync --daemonize

Ahora el Kernel de tu máquina virtual Debian se comunicará más fácilmente con el Kernel de tu máquina servidora de máquinas virtuales.