SISTEMA DE PORTS EN OPENBSD - Fernando Quintero, http://www.openbsdcolombia.org/ SISTEMA DE PORTS EN OPENBSD Autor: Fernando Quintero Correo electrónico: fernando.a.quintero@gmail.com Fecha de creación : 25/12/10 Ultima modificación:06/01/11 Índice de contenido 1.Licencia (BSD)..................................................................................................................................1 2.Introducción.......................................................................................................................................2 3.Paquetes y Ports.................................................................................................................................2 4.¿Por qué se usan los ports?................................................................................................................3 5.¿Cómo consigo los ports?..................................................................................................................4 6.Usando los ports................................................................................................................................5 6.1.Instalando un port......................................................................................................................5 6.2.Listando los paquetes instalados................................................................................................7 6.3.Eliminando un port....................................................................................................................7 7.Conclusiones......................................................................................................................................8 8.Enlaces de interés..............................................................................................................................8 1. Licencia (BSD) Copyright (c) 2010, Fernando Quintero, All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: • • • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the OpenBSD Colombia nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ________________________________________________________________________________ 1.Licencia (BSD) 1/9 SISTEMA DE PORTS EN OPENBSD - Fernando Quintero, http://www.openbsdcolombia.org/ 2. Introducción En este documento explicaremos en palabras menos técnicas lo que es el sistema de ports de OpenBSD, la intención es que este documento haga parte de una serie de documentos que enseñen como crear ports. Los ports o también llamados portes son el sistema por medio del cual se construyen los paquetes en OpenBSD, también permite que aplicaciones de terceros o que fueron programadas para otros sistemas operativos puedan correr de una forma adecuada en el sistema OBSD. Básicamente un port es una estructura de directorios que contienen un archivo principal llamado Makefile1, este archivo contiene las indicaciones necesarias sobre como descargar los archivos fuentes de un software, compilarlos e instalarlos en el sistema. Las Urls principales donde se puede encontrar información adicional son: http://www.openbsd.org/ports.html http://www.openbsd.org/faq/ports/index.html 3. Paquetes y Ports Todos sabemos que la forma más sencilla de instalar aplicaciones en un sistema operativo es usar instaladores binarios, si bien compilar software a mano sigue siendo un proceso válido, también es un proceso mucho mas tedioso, pero el argumento a favor para muchos es que de esta forma se puede garantizar que el software no tenga backdoors u otros códigos maliciosos. No voy a entrar a debatir cual de los dos mecanismos es mas “seguro” o confiable, solo quiero mostrar que en OpenBSD podemos tener los instaladores binarios también llamados paquetes o podemos compilar las aplicaciones usando el sistema de ports. Lo importante que se debe entender aquí es que una vez los ports son compilados, se crearan paquetes a partir de estos, así que la confianza o desconfianza se aumenta o reduce a quien compila las aplicaciones, otros pensaran que entonces es mucho mas seguro compilar cada una de las aplicaciones a usar, sin embargo el solo pensar en compilar mas de 5500 aplicaciones me da dolor de cabeza ;) Los paquetes de OpenBSD generalmente los vamos a identificar porque tienen una extensión .tgz, así: paquete-1.2.3.tgz, donde 1.2.3 corresponde a la versión del mismo. Una pregunta que inmediatamente aparece es, en que se diferencia o como se puede diferenciar una aplicación que esta en su código fuente terminada en .tgz o .tar.gz a un paquete de OpenBSD que usa la misma extensión?. La respuesta la da el comando pkg_info, por ejemplo, veamos la salida de este comando con la aplicación amsn para OpenBSD: # pkg_info amsn-0.98.3p0.tgz Information for amsn-0.98.3p0.tgz Comment: open source MSN Messenger clone 1 https://secure.wikimedia.org/wikipedia/es/wiki/Make ________________________________________________________________________________ 3.Paquetes y Ports 2/9 SISTEMA DE PORTS EN OPENBSD - Fernando Quintero, http://www.openbsdcolombia.org/ Description: aMSN is a Microsoft Messenger clone. It allows you to keep in touch with your friends and exchange instant messages and files, with features such as: * Display pictures * Custom emoticons * Multi-language support (around 40 languages currently supported) * Webcam support * Sign in to more than one account at once * Full-speed File transfers * Group support * Normal, and animated emoticons with sounds * Chat logs * Timestamping * Event alarms * Conferencing support * Tabbed chat windows Maintainer: Azwaw OUSADOU <bsdmaniak@gmail.com> WWW: http://www.amsn-project.net/ Cuando el archivo .tgz sobre el que aplicamos el comando pkg_info NO es un paquete de OpenBSD, no se desplegará información del mismo. Recuerde que siempre será preferible instalar los paquetes .tgz ya creados en el repositorio oficial que intentar instalar un port, esto por el asunto del tiempo que toma compilar algunos paquetes (a veces horas), sin embargo si usted esta buscando una carácteristica especifica del paquete, una librería, plugin o componente que no esta compilado por defecto, deberá buscar los subpaquetes que puedan existir o tendrá que compilarlo a mano usando el sistema de ports. 4. ¿Por qué se usan los ports? OpenBSD tiene aplicaciones instaladas por defecto, en su gran mayoría servicios de red que vienen listos para usar, sin embargo no todos los usuarios trabajan en el ámbito de redes, requiriendo instalar otras aplicaciones que no vienen en la instalación por omisión del sistema operativo. Es aquí cuando los usuarios buscan los proyectos específicos para descargar un binario compatible con OpenBSD, encontrandose con la sorpresa que no existe, sea porque el creador del producto no lo ha hecho o porque la comunidad alrededor del proyecto no ha visto la necesidad de llevarlo a esta plataforma. Esto obviamente puede hacer que muchos usuarios decidan no usar OpenBSD y ________________________________________________________________________________ 4.¿Por qué se usan los ports? 3/9 SISTEMA DE PORTS EN OPENBSD - Fernando Quintero, http://www.openbsdcolombia.org/ busquen otros sistemas mas comerciales como lo son Windows, Linux e incluso MacOSX. Sin embargo muchos otros usuarios toman la decisión de aportarle a las comunidades de software libre tomando el programa que funciona para otros sistemas y haciendo que funcionen sobre OpenBSD, a esto se le llama portar una aplicación, en resumen consiste en hacer que una aplicación Z funcione adecuadamente en OpenBSD cuando la aplicación Z se desarrolló de forma nativa para otra plataforma, generalmente creada para sistemas Linux. Una vez el port es creado y aceptado dentro de la comunidad de OpenBSD, el mismo estará disponible en cada release del sistema operativo siempre y cuando hayan personas encargadas de mantener actualizado el paquete, haciendole las mejoras necesarias y estando en contacto con los desarrolladores del software nativo. La lista de paquetes de OpenBSD se puede descargar desde el servidor FTP y obviamente la cantidad depende de la arquitectura en la que esté trabajando, generalmente se intenta que los ports compilen en todas las arquitecturas donde corra OpenBSD, pero no siempre es posible hacerlo. Listado de paquetes i386: http://openbsd.org.ar/pub/OpenBSD/4.8/packages/i386/index.txt Un lugar donde se pueden encontrar las estadísticas actuales sobre los ports y paquetes es http://openports.se/ En la actualidad hay mas de 5700 paquetes disponibles para OpenBSD. 5. ¿Cómo consigo los ports? Una vez se tenga el sistema operativo instalado y funcionando puede optar por cualquiera de las siguientes tres opciones: Como primera opción esta el CD original que se puede ordenar2 por el sitio web de OpenBSD el cual trae todos los fuentes necesarios para lograr la tarea. Como segunda opción podemos descargar el archivo ports.tar.gz que pesa aproximadamente 18M en la versión 4.8 (Diciembre 2010) y se puede obtener de: ftp://ftp.openbsd.org/pub/OpenBSD/4.8/ Y como tercera opción podemos usar el sistema de CVS. Para esto debemos ir al directorio /usr/ports y ejecutar el siguiente comando: cvs -d anoncvs@anoncvs.ca.openbsd.org:/cvs get -r OPENBSD_4_8 -Pd En este ejemplo estamos hablando de OpenBSD versión 4.8, es posible que usted deba cambiar la información del comando para lograr bajar el árbol de ports adecuado. Recuerde que también existe un árbol de ports llamada snapshot este corresponde a la versión mas actualizada de los ports, en palabras de OpenBSD, corresponde a la versión current. Independiente del camino usado para descargar los ports, es necesario que la estructura quede ubicada en el directorio /usr/ports/. Cuando el procedimiento esté listo, debería ver algo así: # ls /usr/ports/ 2 http://www.openbsd.org/orders.html ________________________________________________________________________________ 5.¿Cómo consigo los ports? 4/9 SISTEMA DE PORTS EN OPENBSD - Fernando Quintero, http://www.openbsdcolombia.org/ .cvsignore audio converters games korean news productivity update CVS benchmarks databases geo lang packages russian www INDEX biology devel graphics mail palm security x11 Makefile books distfiles infrastructure math plan9 shells README cad editors inputmethods misc plist sysutils archivers chinese education japanese multimedia pobj telephony astro comms emulators java net print textproc # Esta salida corresponde a todas las categorías de ports existentes a la fecha en el árbol oficial. 6. Usando los ports Una vez esté el árbol de ports instalado procederemos a trabajar con ellos, por ejemplo podremos instalar, eliminar o extraer información de los ports que tenemos en el sistema. 6.1. Instalando un port Para instalar un port binario (un port binario es un paquete) es necesario tener el archivo .tgz y ejecutar el comando pkg_add. Ejemplo: # pkg_add -v amsn-0.98.3p0.tgz amsn-0.98.3p0:tcl-8.5.8p2: ok amsn-0.98.3p0:tk-8.5.8p1: ok amsn-0.98.3p0:bwidget-1.9.0: ok amsn-0.98.3p0:hicolor-icon-theme-0.12: ok amsn-0.98.3p0:libgamin-0.1.10p3: ok ... Si las dependencias del port existen, este se instalara sin problemas, de lo contrario mostrará una lista de las dependencias requeridas. Ejemplo: # pkg_add -v amsn-0.98.3p0.tgz Can't find desktop-file-utils-0.17 Can't find tk-8.5.8p1 Can't find tcltls-1.5.0p2 Can't find farsight2-0.0.21p0 Can't find jpeg-8b … Otra forma de instalar y quizás la mas sencilla es hacerlo apuntando directamente al repositorio mencionado de paquetes para la versión y la arquitectura en la que estamos trabajando. Ejemplo: ________________________________________________________________________________ 6.Usando los ports 5/9 SISTEMA DE PORTS EN OPENBSD - Fernando Quintero, http://www.openbsdcolombia.org/ # uname -a OpenBSD ports.openbsdcolombia.org 4.8 GENERIC#513 i386 # pkg_add -v ftp://ftp.openbsd.org/pub/OpenBSD/4.8/packages/i386/amsn-0.97.2p3.tgz De esta forma se instalaran todas las dependencias de dicho paquete de forma automática y la velocidad solo dependerá de la conexión a Internet que tenga. En caso de no tener un archivo binario (.tgz) debemos hacer la instalación usando la estructura del árbol de ports entrando en el directorio /usr/ports y buscando el port que nos interesa y luego instalandolo. Para buscar un port especifico ejecutamos el comando make search key=nombre, donde nombre es la palabra clave que queremos buscar (puede pensar en algo asi como el comando apt-cache search en sistemas linux debian/ubuntu). -bash-4.1# make search key=amsn Port: amsn-0.98.3p0 Path: net/amsn Info: open source MSN Messenger clone Maint: Azwaw OUSADOU <bsdmaniak@gmail.com> Index: net x11/tk lang/tcl L-deps: STEM->=0.10.38:devel/gettext converters/libiconv graphics/jpeg graphics/png net/farsight2 B-deps: STEM->=0.10.38:devel/gettext archivers/bzip2 devel/gmake security/tcltls tcl->=8.5,<8.6:lang/tcl/8.5 tk->=8.5,<8.6:x11/tk/8.5 R-deps: STEM->=0.10.38:devel/gettext devel/desktop-file-utils security/tcltls tcl>=8.5,<8.6:lang/tcl/8.5 tk->=8.5,<8.6:x11/tk/8.5 x11/bwidget Archs: any Al ejecutar este comando encontraremos la ruta donde debemos entrar para instalar el port. Una vez ubicados en la ruta de interés ejecutaremos el comando que hará que se descargue el código fuente de la aplicación, se parche y se compile de forma automatizada logrando así generar un paquete en la ruta /usr/ports/packages/ dentro de nuestro sistema. Ejemplo: # cd /usr/ports/net/amsn/ # ls CVS Makefile distinfo patches pkg # make install ===> Checking files for amsn-0.98.3p0 >> Fetch http://downloads.sourceforge.net/sourceforge/amsn/0.98.3/amsn-0.98.3-src.tar.bz2 amsn-0.98.3-src.tar.bz2 4% |******* | 648 KB 01:15 ETA Una vez finalizado el proceso el paquete quedará instalado, generalmente en la ruta /usr/local/bin/. ________________________________________________________________________________ 6.Usando los ports 6/9 SISTEMA DE PORTS EN OPENBSD - Fernando Quintero, http://www.openbsdcolombia.org/ 6.2. Listando los paquetes instalados El comando pkg_info sin parámetros nos dará información sobre todos los paquetes instalados en el sistema. Más información: man pkg_info. Ejemplo: # pkg_info GeoIP-1.4.6 find the country where IP address/hostname originates from ORBit2-2.14.19 atk-1.32.0 high-performance CORBA Object Request Broker accessibility toolkit used by gtk+ avahi-0.6.28 framework for Multicast DNS Service Discovery bash-4.1.9 GNU Bourne Again Shell blas-1.0p4 Basic Linear Algebra Subprograms bwidget-1.9.0 bzip2-1.0.6 cairo-1.10.0p0 high-level widget set for Tcl/Tk block-sorting file compressor, unencumbered vector graphics library … Una opción de la que dispone OpenBSD es la de actualizar los ports o paquetes con el comando pkg_add -ui. Para lograr esto se debe tener la variable de sistema PKG_PATH apuntando a un repositorio de paquetes actualizado, por ejemplo: #export PKG_PATH=http://openbsd.org.ar/pub/OpenBSD/snapshots/packages/i386/ bash-4.1# pkg_info | grep cherokee cherokee-1.0.14 fast, flexible and easy to configure Web Server bash-4.1# pkg_add -uiv cherokee Update candidates: cherokee-1.0.8 -> cherokee-1.0.14 (ok) ... bash-4.1# 6.3. Eliminando un port Para eliminar un port utilizamos el comando pkg_delete, más información: man pkg_delete. Ejemplo: Desinstalado el programa quirks. # pkg_info | grep quirks quirks-1.31 exceptions to pkg_add rules # pkg_delete quirks-1.31 quirks-1.31: ok Read shared items: ok ________________________________________________________________________________ 6.Usando los ports 7/9 SISTEMA DE PORTS EN OPENBSD - Fernando Quintero, http://www.openbsdcolombia.org/ # Si estuviéramos trabajando directamente con el árbol de ports, entonces lo haríamos de esta forma: -bash-4.1# pwd /usr/ports/devel/quirks -bash-4.1# make uninstall ===> Deinstalling for quirks-1.32 quirks-1.32: ok Read shared items: ok -bash-4.1# Se usa el comando make clean=all para eliminar cualquier rastro de dicho paquete. 7. Conclusiones • Quizás el sistema de ports de OpenBSD no es tan simple como otros sistemas manejadores de paquetes que conocemos en el mundo Linux, sin embargo en la actualidad presentan un mecanismo eficaz para administrar el software que se instala sobre el sistema base. • Una forma personal que uso para tener el software que necesito es apuntar constantemente la variable PKG_PATH al ftp de paquetes estables, de esta forma usando el comando pkg_add y el nombre del paquete, este quedará instalado en el sistema con todas sus dependencias. • OpenBSD cuenta con un poco mas de 5700 paquetes disponibles, la verdad es que para los usos que le doy (servidor, firewall, IDS) es mas que suficiente, sin embargo proyectos como FreeBSD tienen alrededor de 22000 ports disponibles, ¿por qué tanta diferencia?. Recordemos que OBSD es mucho mas exigente en la incorporación de software que no sea realmente libre, la máxima excepción que se permite es la licencia GPL, pero la idea es mantener el árbol de ports lo mas libre posible con licencias como MIT y BSD. También hay que recordar que la comunidad de OpenBSD es mucho mas cerrada por lo tanto los mantainers para portar el software son mas escasos. ¿Quieres ser uno?. • Si es la primera vez que se encuentra con el mundo de los ports le puede parecer un poco raro o complicado la forma de usarla, pero solo es cuestión de practica para empezar a disfrutar estas particularidades de los sistemas BSD ;) 8. Enlaces de interés La documentación oficial sobre los ports la pueden encontrar en: http://www.openbsd.org/faq/ports/index.html Mas información acerca del sistema de ports se encuentra en las páginas de manual: • • • • ports(7) - describes the different stages (make targets) of port installation, the use of flavors and subpackages and some other options. bsd.port.mk(5) - in depth information about all the make targets, variables, the fake (installation directory) framework, etc. port-modules(5) - format and conventions used in port modules. packages-specs(7), library-specs(7) - specifications for binary package names and library dependencies, respectively. ________________________________________________________________________________ 8.Enlaces de interés 8/9 SISTEMA DE PORTS EN OPENBSD - Fernando Quintero, http://www.openbsdcolombia.org/ • pkg_create(1) - notation used in packing lists. Larga vida a OpenBSD y Feliz Navidad 2010! ________________________________________________________________________________ 8.Enlaces de interés 9/9