MacPorts, раніше відомий як DarwinPorts, — це менеджер пакунків для macOS та Darwin. Це проект з відкритим кодом, метою якого є спрощення встановлення іншого програмного забезпечення з відкритим кодом. За функціями він подібний до Fink та колекції портів BSD.
MacPorts підтримує універсальні бінарні файли для версій macOS на базі PowerPC, Intel та Apple Silicon,. Водночас під час переходу з інсталяції MacPorts на PowerPC до версії на Intel-Mac необхідно перевстановити всі встановлені порти.
Використання
Оновлення програмного забезпечення Існує три основні режими використання команди port, які допомагають оновлювати встановлене програмне забезпечення:
sync оновлює локальне дерево портів. Ця команда не оновлює встановлені пакунки, а лише отримує інформацію про нові та оновлені програми. За функцією вона подібна до brew update або apt update. selfupdate має ту саму функціональність, що й sync, але також оновлює саму систему MacPorts. У більшості випадків рекомендується використовувати саме цю команду замість простого sync, і бажано запускати її щоразу перед використанням MacPorts. upgrade оновлює всі встановлені порти та їхні залежності до найновішої версії, доступної в локальному дереві портів. За функціональністю вона подібна до apt upgrade.
Наприклад, одним із поширених завдань є оновлення застарілих портів. Це можна зробити, виконавши таку команду:sudo port selfupdate sudo port upgrade outdated
MacPorts підтримує логічні оператори, and, or та not, , а також glob-шаблони (увімкнені за замовчуванням) і регулярні вирази (їх можна увімкнути за допомогою параметра --regex ). Наприклад, щоб оновити застарілі порти, виключивши всі версії PHP, наведену вище команду можна змінити так:sudo port selfupdate sudo port upgrade outdated and not php*
Встановлення програмного забезпечення Користувачі можуть вказати один або кілька пакунків, які вони хочуть встановити, використовуючи режим install, після чого MacPorts спробує встановити їх разом із необхідними залежностями. Наприклад, LibreOffice та Texmaker можна встановити, виконавши наступну команду:sudo port install libreoffice texmakerЗверніть увагу, що буде встановлено найновішу версію, зазначену в локальному дереві портів. Попередній запуск команди selfupdate гарантує, що завантажений пакунок буде найновішою версією, доступною в MacPorts.
Варіанти Варіанти (variants) надають різні опції, які можна використовувати під час встановлення порту. Зазвичай вони дозволяють додавати або вилучати залежності, а також змінювати параметри збирання. Вони надають додаткову функціональність, яка може бути не потрібною для всіх користувачів, але може бути корисною для інших.
Наприклад, порт youtube-dl має варіант з ffmpeg, який увімкнено за замовчуванням. У результаті додавання двох додаткових залежностей це дозволяє витягувати аудіо. Варіанти можна вмикати або вимикати за допомогою символів + або -, тому варіант ffmpeg можна вимкнути, виконавши таку команду:sudo port install youtube-dl -ffmpegКілька варіантів можна вказувати один за одним, розділяючи їх пробілом. Наприклад, у порту apache2 можна вимкнути типовий prefork MPM на користь worker MPM:sudo port install apache2 -preforkmpm +workermpmВаріанти порту можна визначити, виконавши команду port variants назва_пакунку, або знайшовши відповідний порт на сайті MacPorts.
Графічні інтерфейси
Вебсайт Сайт портів MacPorts було створено під час програми Google Summer of Code 2019 .Значні покращення користувацького інтерфейсу також були зроблені в межах цієї ж програми у 2020 році. На сайті відображається інформація про окремі порти, зокрема статистика встановлень і історія збирання. Ця статистика також доступна через API. Користувачі можуть за бажанням увійти в систему, щоб отримувати сповіщення, коли певний порт було оновлено.
Існує також окрема головна сторінка MacPorts, яка містить інформацію про проєкт та інструкції щодо його встановлення.
Історія
Проєкт MacPorts було розпочато у 2002 році за участю кількох співробітників Apple, зокрема Лендона Фуллера, Кевіна Ван Вехтена та Джордана Хаббарда. Спочатку проєкт називався DarwinPorts, що походить від назв Darwin та FreeBSD Ports. Він розпочався як частина проєкту OpenDarwin і мав на меті допомогти користувачам macOS і Darwin встановлювати Unix-пакунки.
OpenDarwin був закритий у 2006 році. DarwinPorts тоді розмістили на Mac OS Forge, сервісі хостингу з відкритим кодом, створеному та підтримуваному Apple для сторонніх проєктів, які не підтримуються Apple. Щоб підкреслити орієнтацію проєкту на macOS, його назву змінили на MacPorts.
Коли Apple закрила Mac OS Forge у 2016 році, проєкт перенесли на GitHub. У рамках цього переходу для контролю версій почали використовувати git, хоча Trac досі віддавали перевагу для управління завданнями (ticket management) замість GitHub issues.
Версія 1.0 була випущена 28 квітня 2005 року. У грудні 2005 року проєкт досяг важливої позначки, перевищивши 3 000 портів. Тоді встановлення пакунків передбачало завантаження та компіляцію вихідного коду на машині кінцевого користувача. Версія 2.0, випущена у 2011 році, додала підтримку попередньо зібраних бінарних архівів; за замовчуванням порти встановлюються з готового бінарного архіву, якщо він доступний, і збираються з вихідного коду в іншому випадку. Станом на березень 2026 року, у MacPorts налічується понад 40 300 портів, а підтримка на рівні «best-effort» може надаватися спільнотою.
Реалізація MacPorts встановлює програмне забезпечення поверх операційної системи, надаючи новіші версії вже встановлених пакунків або програмне забезпечення, яке не входить до складу macOS. Це відрізняється від інших систем керування пакунками, таких як APT та DNF, які є частиною самої операційної системи. З цієї причини MacPorts іноді називають overlay-дистрибутивом. Іншими прикладами є Fink та Homebrew.
На відміну від FreeBSD Ports Collection, яка встановлює своє програмне забезпечення до каталогу /usr/local, MacPorts за замовчуванням зберігає свої дані в каталозі /opt/local, хоча це можна змінити під час компіляції MacPorts із вихідного коду.
Причина такого підходу полягає в тому, що інші системи керування пакунками можуть перезаписати програмне забезпечення, встановлене MacPorts, або навпаки. Використання окремого каталогу допомагає уникнути цієї проблеми.
Fink використовує подібний підхід, встановлюючи свої дані за замовчуванням у каталог /sw.
Бінарні архіви Buildbot використовується для попереднього збирання портів, щоб користувачам не потрібно було компілювати пакунок локально. Результат цього називається бінарним архівом, і це допомагає зменшити час, необхідний для встановлення. Подібно до Homebrew, MacPorts використовує підхід із різними системами збирання для різних версій операційної системи та архітектур.
Однак інколи може виникнути потреба зібрати пакунок із вихідного коду локально, якщо бінарну версію не вдалося зібрати або якщо ліцензія порту не дозволяє поширення бінарних файлів. Якщо бінарний архів не вдалося створити, це зазначається на сайті MacPorts для відповідного порту, а його супровідник отримує сповіщення. Також можна переглядати нещодавні події buildbot на спеціальній сторінці активності.
Бінарні архіви також створюються локально щоразу, коли користувач збирає порт із вихідного коду. Їх також можна створити вручну, виконавши команду sudo port archive packagename.
Portfiles MacPorts зберігає інструкції, необхідні для збирання порту, у файлі опису порту, який називається portfile. Це подібно до того, як AUR використовує shell-скрипти під назвою PKGBUILD, або як Homebrew використовує скрипти мовою Ruby у вигляді формул. Portfile є повноцінними програмами мовою TCL і виконуються за допомогою інтерпретатора TCL. Вони використовують прості параметри у форматі ключ-значення для визначення властивостей порту.
Наприклад, це portfile для Hashcat:# -*- coding: utf-8; mode: _tcl; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- vim:fenc=utf-8:ft=tcl:et:sw=2:ts=2:sts=2
PortSystem 1.0 PortGroup github 1.0 PortGroup makefile 1.0
github.setup hashcat hashcat 6.2.3 v github.tarball_from archive
categories security license MIT platforms darwin maintainers @gaming-hacker openmaintainer
description World's fastest and most advanced password recovery utility.
long_description hashcat is the world's fastest and most advanced \ password recovery utility, supporting five unique modes \ of attack for over 200 highly-optimized hashing algorithms. \ hashcat currently supports CPUs, GPUs, and other hardware \ accelerators on Linux, Windows, and macOS, and has \ facilities to help enable distributed password cracking
homepage https://hashcat.net/hashcat/
build.target {}
checksums rmd160 8bb501834a320aaac3de149c5ab39c2eb89ee968 \ sha256 c0be1c6693ee1f35c7bef1f79bf9e30a954f717ef42d00e37787aaeff3271e51 \ size 6222424
Кожен portfile має заздалегідь визначені етапи (phases), які можна вручну налаштовувати через сам portfile. До них належать такі:
Fetch
На цьому етапі MacPorts отримує та завантажує всі необхідні файли для порту з upstream. Ці файли називаються distfiles. У випадку з hashcat вони завантажуються з GitHub. Після завершення встановлення ці файли разом із тимчасовими файлами збирання видаляються.
Checksum
Контрольні суми завжди визначаються у portfile, оскільки вони різні для різних файлів. Контрольні суми завантажених файлів порівнюються з тими, що вказані у portfile, щоб перевірити, чи вони збігаються.
Для Hashcat завантажується лише один стиснений файл, тому в portfile потрібна тільки одна контрольна сума.
Patch
Іноді код потрібно змінити, щоб зробити можливим його встановлення через MacPorts. Це може бути з різних причин, наприклад, якщо за замовчуванням програма встановлюється у неправильне місце. Файли патчів можуть використовуватися для модифікації вихідного коду у читабельному форматі.
У наведеному вище portfile Hashcat не потребує жодних змін у коді для коректного встановлення. Тому файли патчів не потрібні. Якщо патчі потрібні, файл патча зберігається разом із portfile і посилається приблизно так (приклад із wget): patchfiles prefix.patch
Configure
Скрипт configure проєкту запускається для підготовки процесу збирання. Частиною цього процесу є перевірка наявності необхідних бібліотек. Для портів, які не мають configure-скрипта, цей етап (а також інші за потреби) може бути вимкнений.
Оскільки етап configure не згадується у Portfile, hashcat використовує стандартну конфігурацію, визначену MacPorts. Вона передбачає запуск configure-скрипта за допомогою ./configure.
Build
Інструкції в portfile потім використовуються для збирання порту. Команди, що виконуються, можуть відрізнятися залежно від мови програмування.
Portfile для hashcat показує, що його слід обробляти як проєкт із Makefile. Тому збирання виконується командою make.
Test
Деякі порти визначають тест для перевірки того, що збирання завершилося успішно. Це необов’язковий етап, який запускається лише тоді, коли користувач виконує port test packagename. Тому під час встановлення порту він не виконується.
У цьому порті hashcat етап тестування не визначений. Якщо його визначити, це може виглядати приблизно так (приклад із ImageMagick): test.run yes test.target check test.env DYLD_LIBRARY_PATH=${worksrcpath}/magick/.libs
Destroot
Етап destroot є першим кроком у переміщенні зібраних файлів у правильне місце. MacPorts використовує підхід, за якого встановлення спочатку виконується у проміжну директорію (destroot), а вже потім файли розміщуються у своїх остаточних місцях (install). Однією з переваг цього підходу є можливість легко зафіксувати, які файли були створені, що дозволяє коректно їх видалити під час деінсталяції.
Наприклад, файл, який зазвичай встановлюється у /opt/local/lib/libfoo.a, може спочатку бути встановлений у /tmp/stage/opt/local/lib/libfoo.a під час етапу destroot, зберігаючи ту саму структуру директорій.