MacPorts , anteriormente DarwinPorts , [4] es un gestor de paquetes para macOS y Darwin . Es un proyecto de software de código abierto que tiene como objetivo simplificar la instalación de otro software de código abierto. [5] Es similar en función a Fink y las colecciones de ports BSD .
MacPorts admite binarios universales para versiones de macOS basadas en PowerPC, Intel [ 6] y Apple Silicon [7] [8], pero migrar desde una instalación de MacPorts en PowerPC a una versión en una Mac Intel requiere reinstalar todos los puertos instalados. [9]
Hay tres modos de uso principales port
que ayudan a actualizar el software instalado:
sync
Actualiza el árbol de puertos local. No actualiza ningún paquete instalado, sino que recupera información sobre software nuevo y actualizado. Su función es similar a la brew update
de o apt update
. [10]selfupdate
tiene la misma funcionalidad que sync
el sistema MacPorts, pero también lo actualiza. [11] En la mayoría de los casos, esto se debe usar en lugar de simplemente ejecutarse sync
por sí solo, [10] y se recomienda ejecutarlo cada vez antes de usar MacPorts. [12]upgrade
Actualiza los puertos instalados y sus dependencias a la última versión que se encuentra en el árbol de puertos local. Su función es similar a apt upgrade
. [13]Por ejemplo, una tarea habitual es actualizar los puertos obsoletos. Esto se puede hacer ejecutando lo siguiente: [14]
sudo port autoactualizaciónLa actualización del puerto
sudo está desactualizada
MacPorts admite operadores lógicos como and , or y not, [15] así como patrones glob (habilitados de manera predeterminada) y regex (habilitados a través de --regex
). [16] Por ejemplo, para actualizar puertos obsoletos excluyendo todas las versiones de PHP , cambie el comando anterior por el siguiente: [15]
sudo port autoactualizaciónLa actualización del puerto
sudo está desactualizada y no es php*
Los usuarios pueden indicar uno o más paquetes que desean instalar a través del install
modo, y MacPorts intentará instalarlos junto con sus dependencias. [17] Por ejemplo, tanto LibreOffice como Texmaker se pueden instalar ejecutando lo siguiente: [12] [18]
sudo port install libreoffice texmaker
Tenga en cuenta que esto instalará la última versión, tal como lo indica el árbol de puertos locales. Si lo ejecuta selfupdate
antes, se asegurará de que el paquete descargado sea la versión más reciente en MacPorts. [11]
Las variantes proporcionan distintas opciones que pueden invocarse al instalar un port. Las acciones más comunes incluyen agregar o eliminar dependencias y cambiar los argumentos de compilación. [19] Proporcionan funciones adicionales que pueden no ser necesariamente útiles para todos los usuarios, pero que pueden ser útiles para otros.
Por ejemplo, el puerto youtube-dl proporciona una variante de ffmpeg que está habilitada de forma predeterminada. A cambio de agregar dos dependencias adicionales, esto permite extraer el audio. [20] [21] Las variantes se pueden incluir o eliminar utilizando los símbolos +
o -
, por lo que la variante de ffmpeg se puede deshabilitar ejecutando lo siguiente:
sudo port install youtube-dl -ffmpeg
Se pueden enumerar varias variantes una tras otra separándolas con un espacio. Como ejemplo, es posible deshabilitar el MPM prefork predeterminado en el puerto apache2 a favor del MPM worker: [22]
sudo puerto install apache2 -preforkmpm +workermpm
Las variantes de un puerto se pueden determinar ejecutando o buscando el puerto en el sitio web MacPorts. [22] [23]port variants packagename
El sitio web de puertos MacPorts se implementó durante Google Summer of Code 2019, [24] con importantes mejoras en la interfaz de usuario realizadas dentro del mismo programa en 2020. [25] [26] Muestra información sobre puertos individuales, como estadísticas de instalación e historial de compilación. [24] Estas estadísticas también están disponibles a través de una API . [27] Los usuarios pueden iniciar sesión opcionalmente para recibir una notificación cuando se haya actualizado un puerto. [25]
También hay una página de inicio separada de MacPorts, que proporciona información sobre el proyecto, así como instrucciones sobre cómo instalarlo. [28]
MacPorts se inició en 2002 con la participación de varios empleados de Apple Inc. , incluidos Landon Fuller, Kevin Van Vechten y Jordan Hubbard . [29] Originalmente se conocía como DarwinPorts, cuyo nombre proviene de Darwin and FreeBSD Ports . Comenzó como parte del proyecto OpenDarwin , con el objetivo de ayudar a los usuarios de macOS y Darwin a instalar software Unix . [31] [32]
OpenDarwin cerró en 2006. DarwinPorts se alojó en Mac OS Forge, un servicio de alojamiento de código abierto creado y mantenido por Apple Inc. para proyectos de terceros que no eran compatibles con Apple. [33] Para indicar el énfasis del proyecto en macOS, su nombre se cambió a MacPorts. [31]
Cuando Apple cerró Mac OS Forge en 2016, el proyecto se trasladó a GitHub. [34] Como parte de este cambio, se utilizó Git como el nuevo sistema de control de versiones , aunque Trac todavía se prefería para la gestión de tickets sobre los problemas de GitHub. [35]
La versión 1.0 se lanzó el 28 de abril de 2005. [36] En diciembre de 2005, el proyecto alcanzó un hito, superando los 3000 puertos. [37] En ese momento, la instalación del paquete implicaba que el código fuente se descargara y compilara en la máquina del usuario final. La versión 2.0, lanzada en 2011, introdujo soporte para archivos binarios precompilados; de forma predeterminada, los puertos se instalan utilizando el archivo binario precompilado si está disponible y se construyen a partir de la fuente en caso contrario. [38] [39] A partir de mayo de 2023 [actualizar], MacPorts tiene más de 33.600 puertos [40] y se puede obtener soporte de la comunidad. [41]
MacPorts instala software sobre el sistema operativo , proporcionando versiones más nuevas de paquetes preinstalados o software que no está incluido en macOS. Esto contrasta con otros sistemas de administración de paquetes, como APT y DNF , que son parte del sistema operativo. Por esta razón, a veces se conoce a MacPorts como una distribución superpuesta. Otros ejemplos incluyen Fink y Homebrew . [42]
A diferencia de la colección de puertos de FreeBSD, que instala su software en /usr/local
, [43] MacPorts almacena sus datos en /opt/local
de forma predeterminada, [44] aunque esto se puede modificar al compilar MacPorts desde el código fuente. [45] La razón dada para este cambio es que otros sistemas de empaquetado podrían sobrescribir lo que MacPorts ha instalado, o viceversa. Un directorio dedicado ayuda a superar este problema. [46] Fink sigue un enfoque similar, instalando sus datos en /sw
de forma predeterminada. [47]
Los Buildbots se utilizan para crear puertos con antelación, de modo que los usuarios no tengan que compilar el paquete localmente. El resultado de esto se conoce como archivo binario y ayuda a reducir el tiempo necesario para la instalación. [48] De forma similar a Homebrew, MacPorts adopta el enfoque de tener diferentes compiladores para diferentes versiones y arquitecturas de sistemas operativos. [49] [50] Sin embargo, a veces puede ser necesario compilar desde el código fuente localmente si los binarios no se pueden compilar o la licencia del puerto no permite la distribución binaria. [51] Si no se puede compilar un binario, esto se notificará en el sitio web de MacPorts para ese puerto individual y se alertará al mantenedor. [52] [53] También es posible ver eventos recientes de Buildbot en una página de actividad dedicada. [54]
Los archivos binarios se crean localmente cada vez que un usuario crea un puerto desde el código fuente. También se pueden crear manualmente ejecutando . [51]sudo port archive packagename
MacPorts almacena las instrucciones necesarias para construir un puerto en un archivo de descripción de puerto, también conocido como portfile. [55] Esto es similar a cómo AUR usa scripts de shell conocidos como PKGBUILD, [56] o cómo Homebrew usa scripts de Ruby como fórmula. [57] Los portfiles son programas TCL completos con acceso al intérprete TCL . Hacen uso de opciones de pares clave-valor simples para definir atributos.
MacPorts utiliza un lenguaje de programación real, concretamente TCL, para crear descripciones de puertos. Esto le da al escritor de puertos mucha más flexibilidad para manejar algunos de los fragmentos de software más complejos que existen y toda la noción de ganchos de acción (pre/post fetch, build, install, etc.) es mucho más clara en MacPorts [en comparación con FreeBSD].
— Jordan Hubbard , La invención del sistema de puertos de FreeBSD, sus inconvenientes y las ventajas de MacPorts
Por ejemplo, este es el archivo de puerto para Hashcat : [21]
# -*- codificación: utf-8; modo: _tcl; ancho de tabulación: 2; modo de sangría de tabulaciones: nulo; desplazamiento básico de c: 2 -*- vim:fenc=utf-8:ft=tcl:et:sw=2:ts=2:sts=2PortSystem 1.0 PortGroup github 1.0 Archivo make de PortGroup 1.0 github.setup hashcat hashcat 6.2 .3 v github.tarball_from archivo categorías seguridad licencia MIT plataformas darwin mantenedores @gaming-hacker openmaintainerDescripción La utilidad de recuperación de contraseñas más rápida y avanzada del mundo . hashcat es la utilidad de recuperación de contraseñas más rápida y avanzada del mundo , que admite cinco modos de ataque únicos para más de 200 algoritmos de hash altamente optimizados . hashcat actualmente admite CPU, GPU y otros aceleradores de hardware en Linux , Windows y macOS, y tiene funciones para ayudar a habilitar el descifrado distribuido de contraseñas . Página de inicio https://hashcat.net/hashcat/construir.objetivo {} sumas de comprobación rmd160 8 bb501834a320aaac3de149c5ab39c2eb89ee968 \ sha256 c0be1c6693ee1f35c7bef1f79bf9e30a954f717ef42d00e37787aaeff3271e51 \ tamaño 6222424
Cada archivo de puerto tiene etapas predefinidas que se pueden configurar manualmente a través del archivo de puerto. [58] Estas incluyen las siguientes:
Buscar
En primer lugar, MacPorts recupera y descarga todos los archivos relevantes para el puerto desde upstream . Estos se conocen como distfiles. En el caso de hashcat, estos archivos se recuperan desde GitHub . [61] Se eliminan, junto con los archivos de compilación temporales, cuando se completa la instalación.
Suma de comprobación
Las sumas de comprobación siempre se definen dentro del archivo de puerto, ya que son diferentes para los distintos archivos. Las sumas de comprobación de los archivos descargados se comparan con las del archivo de puerto para ver si coinciden. [58]
Solo se descarga un archivo comprimido para Hashcat, por lo que solo se requiere una suma de comprobación en el archivo de puerto.
Parche
A veces, puede ser necesario modificar el código para que se pueda instalar a través de MacPorts. Esto puede deberse a diversos motivos, como que se instale en la ubicación incorrecta de forma predeterminada. Se pueden utilizar archivos de parche para modificar el código fuente en un formato legible. [62]
En el archivo de puerto anterior, Hashcat no requiere ningún cambio en el código para que la instalación funcione. Por lo tanto, no se requieren archivos de parches. Cuando se requieren parches, el archivo de parches se almacenará con el archivo de puerto y se hará referencia a él de la siguiente manera (desde wget ): [63]
prefijo de archivos de parche.patch
Configurar
El script de configuración del proyecto se ejecuta para preparar el proceso de compilación. Parte de esto implica determinar si las bibliotecas requeridas están presentes. Para los puertos que no tienen un script de configuración, esta etapa (así como otras cuando sea necesario) se puede deshabilitar.
Dado que la etapa de configuración no está referenciada en el Portfile, hashcat utiliza la configuración predeterminada definida por MacPorts. Esto implica ejecutar el script de configuración a través de ./configure
. [64]
Construir
Las instrucciones del archivo de puerto se utilizan para crear el puerto. Los comandos que se ejecutan pueden variar según el idioma .
El archivo de puerto de hashcat muestra que debe tratarse como un proyecto Makefile . Por lo tanto, se compilará ejecutando make
.
Prueba
Algunos puertos definen una prueba para verificar que la compilación se ha realizado correctamente. Esta es una fase opcional que solo se ejecuta si el usuario ejecuta . Por lo tanto, no se ejecuta al instalar un puerto. [58]port test packagename
Este puerto hashcat no ha definido una etapa de prueba. Cuando se defina, podría verse como lo siguiente (de ImageMagick ): [65]
prueba.ejecutar sí prueba.objetivo comprobar prueba.env DYLD_LIBRARY_PATH = ${worksrcpath} / magick / .libs
Destruir
La etapa de destroot es el primer paso para mover los archivos creados a la ubicación correcta. MacPorts adopta el enfoque de primero preparar la instalación en una ubicación intermedia (destroot) antes de colocar los archivos en sus posiciones correctas (install). Una ventaja de esto es que facilita el registro de los archivos que se crearon, lo que permite desinstalarlos sin problemas. [58]
A modo de ejemplo, un archivo que normalmente se instalaría en /opt/local/lib/libfoo.a
podría instalarse primero en /tmp/stage/opt/local/lib/libfoo.a
durante la etapa de destrucción, manteniendo la estructura de directorio relativa. [66]
Para hashcat, esto se hace ejecutando make install
, donde uno de los argumentos ( DESTDIR
) especifica dónde almacenar temporalmente los archivos.
Tenga en cuenta que en la mayoría de los casos, solo las etapas siguientes se llevan a cabo en la máquina del usuario. Esto se debe a que los archivos binarios de los puertos están precompilados, por lo que no es necesario compilarlos desde la fuente localmente. [67] [68]
Instalar
Los archivos destruidos se archivan de forma segura. Como estos archivos aún no se han activado, esto permite archivar varias versiones diferentes del mismo puerto sin que interfieran entre sí. [69]
Activar
Al activar un puerto, los archivos del directorio destroot se mueven a su ubicación correcta, lo que los hace accesibles al usuario y completa el proceso de instalación. [58]
Si desean probar una versión diferente del port, pueden desactivar su versión actual y activar la nueva. Esto no desinstala el port antiguo, ya que se puede volver a activar fácilmente desde los archivos comprimidos. [69] [12]
Al actualizar un puerto, MacPorts desactiva pero no desinstala la versión actual como medida de seguridad. Esto permite al usuario volver fácilmente a la versión anterior si la actualización provoca cambios importantes. [70]
Los paquetes son responsabilidad de los encargados individuales de su mantenimiento, que se mencionan en el archivo del port. Se espera que actualicen el port y apliquen correcciones de errores cuando sea necesario. Cualquiera que desee modificar un archivo del port debe avisar al encargado de su mantenimiento antes de aplicar los cambios, aunque esto no siempre es necesario para modificaciones menores. [72] [73]
Cualquiera puede contribuir a MacPorts, generalmente a través de solicitudes de extracción , y los contribuyentes pueden solicitar derechos de confirmación después de un buen historial como mantenedores. [74] Un equipo de miembros de MacPorts, conocidos como gerentes de proyecto, ayudan a liderar y coordinar el proyecto. [75]
Desde 2016, se han celebrado reuniones ocasionales una vez al año. [76] Normalmente tienen lugar en Eslovenia y permiten a los miembros de MacPorts trabajar en el desarrollo futuro. [71]
De forma predeterminada, MacPorts no recopila ninguna estadística. Sin embargo, los usuarios pueden enviar información opcionalmente ejecutando sudo port install mpstats
. Esto envía detalles una vez a la semana sobre qué puertos están instalados, así como varias propiedades del sistema. La información se utiliza luego para determinar qué hardware es compatible y para comprender con qué rapidez se adoptan las nuevas versiones de MacPorts. [77]
Los usuarios pueden ver datos analíticos en el sitio web MacPorts. [78]