PostgreSQL en OpenBSD 5

Tengo un VPS corriendo OpenBSD 5.0 y necesito instalar PostgreSQL. Algunas veces es necesario escribir para no olvidar, sobre todo en cuestiones triviales.

La forma mas fácil es instalar PostgreSQL en OpenBSD es via paquetes binarios, existe una forma a través de ports, mediante un conjuntos de makefiles para compilar paquetes desde los fuentes; Si tienes instalado ports, la forma de hacerlo es:

  $ cd /usr/ports/databases/postgresql
  $ sudo make install clean

Y a través de binarios:

 $ export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/5.0/packages/i386
 $ sudo pkg_add -v postgresql-server-9.0.4p1.tgz

La versión server, automáticamente resolverá dependencias e instalara la versión cliente, una vez instalada tendremos que iniciar el cluster donde PostgreSQL almacenara las bases de datos y solo es posible con usuario _postgresql

 $ sudo su - _postgresql
 $ /usr/local/bin/initdb -D /var/postgresql/data

Lo anterior prepara el directorio /var/postgresql/data para poder ser usado mas adelante y a continuacion iniciamos el demonio para poder empezar a trabajar.

 $ /usr/local/bin/pg_ctl -D /var/postgresql/data -l logfile start
   server starting

Vamos a crear un usuario para poder crear bases de datos;

 $ psql postgres
 postgres=# create role db_admin login password 'algun_passw' createdb  
            valid until 'infinity';
CREATE ROLE
postgres=#

Adicionalmente, editamos el archivo /var/postgresql/data/pg_hba.conf para agregar seguridad a nivel de usuario a la base de datos, usando el metodo md5, postgresql debe estar detenido.

local   all             all                                     md5

Es necesario dejar el usuario _postgresql y salir para probar nuestro trabajo, de esta manera el usuario db_admin y el password ‘algun_password’ fue creado, la forma de acceder ahora es de la sig. manera.

  $ createdb -U db_admin book   
  $ psql -U db_admin book
  psql (9.0.4)
  Type "help" for help.
 
  book=>

Con esto hacemos una parte de la configuración básica, PostgreSQL es un sistema de base de datos avanzado, profesional y libre compite con cualquier DBMS comercial actual.

El sitio web de PostgreSQL contiene mas información sobre todos los detalles de este sistema.

Si tu como yo estas usando OpenBSD, espero y esto pueda ayudarte un poco en esa tarea.

Mas informacion:

  • Sitio web de OpenBSD
  • Documentacion PostgreSQL
  • Borrando paquetes en OpenBSD

    Algunas veces, borrar un numero determinado de paquetes en OpenBSD puede ser un trabajo arduo;
    pkg_delete aun no puede usar comodines para poder filtrar un patron de paquetes que no deseamos mas en nuestro sistema.
    OpenBSD, esta pensando en personas que quiza tienen un nivel distinto a los demas, y piensa que pueden escribir sus propias rutinas, para hacer X o Y cosas con el sistema.

    Por ejemplo: $ pkg_delete -ax ruby-*.* no funciona aun;

    Sin embargo, podemos escribir un script que de manera automatica nos permita hacer la tarea que queremos; a mi manera, quiza alguien tenga otra mejor,
    Yo deseo quitar todos los paquetes del lenguaje Ruby en mi sistema, no necesito mas esto, el pkg_info revela una lista de mas de 20 paquetes instalados.

     $ pkg_info | grep ruby | awk '{print $1}'

    La instruccion anterior en el shell de OpenBSD, nos proporciona una lista de todas las coincidencias con ruby, usando solo el nombre del paquete, y con ello puedo iterar a traves de la lista.

    1
    2
    3
    4
    5
    6
    7
    
    #!/bin/sh
    packages=`pkg_info | grep ruby | awk '{print $1}'`
    for i in $packages
    do
            pkg_delete  -ax $i
            echo "deleting: $i ..." 
    done

    El código anterior, permite consultar, almacenar en una variable e iterar a través de la lista para borrar uno a uno los paquetes en cuestión.

    No se si haya una forma mas fácil de hacerlo, pero fue lo que tuve a la mano en el momento de la urgencia.

    Solarized VIM

    Solarized es un paleta de dieciseis colores diseñado para su uso en la terminal (xterm, gterminal, etc) y la interfaz grafica de usuario.
    – tomado del website:

    Vim es mi editor favorito, corriendo bajo X podemos cambiar la configuracion de colores en la edicion usando el proyecto Solarized.

    Requisitos:
    * Vim instalado
    * Git
    * Consola

    Descargamos solarized para vim desde Github.

    % git clone git://github.com/altercation/vim-colors-solarized.git

    Esto creara un subdirectorio llamado vim-colors-solarized en nuestro /home y nosotros crearemos los directorios necesarios para usar la nueva configuracion de colores.

    % mkdir ~/.vim
    % mkdir ~/.vim/colors ~/.vim/autoload
    % cp ~/vim-colors-solarized/colors/solarized.vim ~/.vim/colors
    % cp ~/vim-colors-solarized/autoload/toglebg.vim ~/.vim/autoload

    Un sencillo ~/.vimrc queda de la siguiente forma.

    syntax enable
    set background=dark
    colorscheme solarized

    De esta forma tenemos una mejor combinacion de colores al momento de editar programas, usando gvim tambien suele ser muy comodo.

    Disfrutalo.

    oh-my-zsh

    He venido usando zsh desde hace un tiempo como mi shell preferido en BSD.
    Hace un par de meses descubrí Oh-my-zsh y empeze a usarlo en mi laptop.

    Que es precisamente Oh-my-zsh ? La pagina del proyecto en github, lo denomina un framework para manejar tu configuracion personal de este shell, incluye mas de 40 plugins mas 80 temas y una utileria para actualizarse periodicamente.

    Para configurar Oh-my-zsh en OpenBSD 5.0
    hice lo siguiente (lo mismo aplica a NetBSD, FreeBSD, excepto la instalacion de paquetes).

    Paquetes necesarios: Git y zsh

    export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/5.0/packages/i386
    $ sudo pkg_add -v zsh-4.3.12 git-1.7.6p0 
    

    Cambiamos el shell a zsh

    $ chsh -s /usr/local/bin/zsh
    

    Obtenemos Oh-my-zsh via github en nuestro directorio local, renombramos el directorio creado y copiamos un .zshrc a nuestro home.

    $ git clone git://github.com/robbyrussell/oh-my-zsh.git
    $ mv oh-my-zsh .oh-my-zsh
    $ cp .oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc  
    

    Reiniciamos nuestra sesion, o en sucaso ejecutamos zsh directamente.
    Basta modificar nuestro .zshrc y elegir el Tema dentro de los mas de 50 existentes y reiniciar el shell.

    Zsh es bueno, pero extenso, quiza alguien diga lo contrario, quiza no, a mi me gusta y por ello comparto esta experiencia.

    zshroadmap(1) es una pagina de manual para un rapido repaso a lo mas importante de ZSH.

    Introduccion a Perl

    Recientemente fui invitado a la semana academica que celebra el Instituto Tecnologico de Pinotepa con motivo de su aniversario.
    Fue para mi grato poder hablar de lo que me gusta a los estudiantes de Ingenieria y Licenciatura respectivamente. Hablé de , una introduccion al lenguaje.
    Lo sorprendente es que pocos, habian oido hablar de este lenguaje tan poderoso y bien conocido en la comunidad.
    Hable de sus origenes, elementos basicos, porque usarlo y los actuales frameworks escritos en Perl.

    Dejo aqui los slides, el codigo fuente en Latex y el .pdf:
    El codigo fuente esta en Latex con Beamer Class viene comprimido con gzip, para descomprimirlo, por favor usa:

     $ gunzip -d perl.tex.gz 

    Introduccion a Perl – PDF
    Introduccion a Perl – fuentes en Latex

    Espero que esto contribuya un poco a la comunidad.

    Perl Vive !

    Paquetes binarios en NetBSD

    Uno de los principales incovenientes de los que muchos usuarios suelen quejarse al probar NetBSD es su sistema de paquetes (pkgsrc), ya que cada programa necesita ser compilado desde los fuentes y probado  lo que llega a ser tardado y algunas veces frustrante, el tiempo de compilacion e instalacion llegar a ser critico tratandose de meta-programas; Por ejemplo; compilar OpenOffice 3  quiza tarde unas seis horas o mas dependiendo del equipo, consumiendo recursos y tiempo y en ocasiones pueden presentarse problemas de compilacion, es posible que despues de esto detalles, dejemos el sistema y sigamos con lo que estamos acostumbrado a usar.

    Afortunadamente ahora existe pkgin, una utileria al estilo “apt-get” o “yum” para instalar paquetes binarios bajo NetBSD. Es una forma atractiva, facil y elimina el mito aquel o el dolor de compilar desde fuentes.

    Puedes bajar el binario de pkgin desde el sitio ftp e instalarlo manualmente con pkg_add(1) y despues proceder con la configuracion anterior.

    pkgin usa un simple archivo .conf ubicado en /usr/pkg/etc/pkgin/repositories.conf, este archivo acepta lineas apuntando a servidores ftp o http con depositos de paquetes binarios de NetBSD para una version determinada, por ejemplo:

    ftp://ftp.fr.netbsd.org/pub/pkgsrc/packages/NetBSD/i386/5.0/All

    Esta linea contiene paquetes binarios para NetBSD 5.0 y la plataforma i386.
    Un simple: $ sudo pkgin update creara una lista de paquetes y sus dependecias en una base de datos sqlite3, listos para ser instalados; por ejemplo para instalar apache2 y sus dependencias.

     $ sudo pking install apache-2.2.17

    Para buscar mysql en la base de datos:

     $ sudo pkgin se mysql 

    Para ver las las opciones de pkgin solo ejecuta el programa sin argumentos.

    Realmente tener un sistema NetBSD con los paquetes necesarios, es realmente sencillo con esta utileria, lo mismo para meta-paquetes como gnome, xfce4, kde, e incluso puedes tener un servidor AMP (Apache, MySQL, Perl/PHP) en cuestion de minutos sin esfuerzo, con el soporte del extraordinario pkgsrc.

    Nota: Los binarios normalmente se compilan para una version determinada, si usas una version -current quiza tengas algunos resultados inesperados, aunque NetBSD es el rey de la estabilidad.

    Espero que este post pueda romper el mito de los paquetes binarios y te animes a probar NetBSD.

    Agregando un disco a NetBSD

    Tengo en casa un servidor corriendo NetBSD 5.1 stable en un disco SCSI 36gb conectado a una controladora SYMBIOS que soporta siete dispositivos. Es mi necesidad poder en ocasiones compilar pkgsrc/, asi que me decidi a montar un disco extra solo para ese proposito, a continuacion detallo el proceso.

    $ dmesg | grep scsibus
    scsibus0 at esiop0: 16 targets, 8 luns per target
    scsibus0: waiting 2 seconds for devices to settle...
    sd0 at scsibus0 target 1 lun 0: <FUJITSU, MAP3367NP, 0106> disk fixed
    sd1 at scsibus0 target 2 lun 0: <IBM, DDYS-T36950N, S96H> disk fixed

    disklabel(8) nos permite crear la etiqueta de nuestra particion en el disco nuevo.

    $ disklabel -i -I sd1
    $ sudo newfs /dev/rsd1e
    /dev/rsd1e: 35003.6MB (71687340 sectors) block size 16384, fragment size 2048
            using 190 cylinder groups of 184.23MB, 11791 blks, 23296 inodes.
    super-block backups (for fsck_ffs -b #) at:
    
    $ sudo fsck -f /dev/rsd1e
    $ sudo mkdir /usr/pkgsrc
    $ vi /etc/fstab
    
    /dev/sd1e               /usr/pkgsrc ffs rw,log          1 2
    
    $ sudo mount -va
    $ df -h
    /dev/sd1e          34G        34M        32G   0% /usr/pkgsrc

    La instalacion es simple y  ahora tenemos un disco aunque de no gran tamaño, bien nos sirve para hacer compilacion de paquetes, sin congestionar nuestro disco del sistema base.

    Algunas ocasiones necesitamos limpiar el disco, llenar con ceros, para ello usamos:

    # dd if=/dev/zero of=/dev/sd1 bs=8k

    Disfruta tu nuevo disco.

    Configuracion de pf en NetBSD 5.1

    PF (packet filter) es un filtro de paquetes proveniente de OpenBSD; Incorporado en el sistema base desde NetBSD 4.0 y puede ser usado para implementar firewalls.

    NetBSD 5.1 incorpora la version 4.2 de pf, por lo que  es importante leer la  FAQ correspondiente;

    En esta ocasion, tengo un servidor corriendo ssh/web/dns y varios intentos de login via ssh, asi que decidi implementar una solucion para mitigar los intentos, para ello use PF y NetBSD 5.1; a continuacion detallo el proceso simple;

    Editamos /etc/lkm.conf y anexamos:

    /usr/lkm/pf.o   -   -   -   -  BEFORENET

    En /etc/rc.conf

    lkm=YES
    pf=YES
    pflogd=YES

    y manualmente iniciamos el modulo lkm para pf

    $ sudo modload /usr/lkm/pf.o

    Una vez realizado el proceso, editamos a conveniencia el archivo /etc/pf.conf y agregamos lo necesario, en mi caso:

    int_if = "fxp0"
    localnet = $int_if:network
    
    tcp_services = "{ ssh, smtp, domain, www, pop3, auth, https }"
    udp_services = "{ domain }"
    
    table  <bruteforce> persist
    
    block quick from <bruteforce>
    
    pass inet proto tcp to $localnet port $tcp_services \
            keep state (max-src-conn 100, max-src-conn-rate 15/5, \
            overload <bruteforce> flush global)

    persist: Mantiene la tabla en memoria, aunque no haya reglas que refieran a ella.
    max-src-conn : Indica el numero de conexiones simultaneas provenientes de un host, puedes incrementar o disminuir este valor segun sea el caso.
    max-src-conn-rate: Indica la tasa de transferencia permitida por conexion, aqui es 15 conexiones cada 5 segundos, expresada: 15/5
    Overload: Toda conexion que exceda la condicion anterior, sera agregada a la tabla bruteforce, y sera bloqueado todo el contenido de la tabla.

    Para ver la lista de IP baneadas, usa la siguiente linea:

     $ sudo /sbin/pfctl -t bruteforce -T show 

    Con estas adiciones podemos bloquear intentos fallidos via ssh hacia nuestro servidor.

    Genesis

    Despues de algún tiempo de inactividad revivo este blog.

    Esta bitacora contendra post relativos a mi trabajo en la fotografia, los sistemas BSD Unix y sobre todo en mi ministerio en la Iglesia de Cristo.

    Espero tener el tiempo para escribir lo que quiero, hacerlo con destreza y que mas personas puedan en algun momento beneficiarse de ello.

    Dedico este esfuerzo a Jesus nuestro señor primeramente  y a mis dos amores, Isabel y Constanza.