Введение
Во FreeBSD я обнаружил два способа централизованной установки программ. Первый способ — установка программ из готовых пакетов, хранящихся на специальном сервере-репозитории, а второй способ — сборка программы из исходников-портов.
Пакет — архив txz, содержащий всё необходимое для работы программы. Плюс в скорости установки, но минус в неполном соответствии локальному железу. Я хочу сказать, что программа в пакете, возможно, скомпилирована под древний Intel 80486 процессор, тогда как на целевом сервере трудятся два ксеона. Работать будет, но не в полную силу. Ещё один минус, как мне кажется, заключается в несвоевременности получения заплаток к найденным дыркам в приложениях. Придётся подождать, пока добрые самаритяне произведут сборку пакета с применением заплатки.
Порт — представляет собой отдельную папку с файлами, содержащими исходные коды программы и инструкции для автоматической сборки. Эту совокупность файлов необходимо собрать в программу на локальном компьютере. Огромный минус, особенно для медленных машин, в скорости установки. Компиляция может затянуться на несколько дней. А плюс тот, что программа компилируется на железе, на котором будет работать, а значит, как мне кажется, при сборке будут учтены все особенности локального железа. То есть, если программа, которую я устанавливаю из пакета, возможно скомпилирована для Intel 486 с целью максимальной совместимости с многообразием возможного железа, то при сборке этой программы из портов на сервере с двумя ксеонами, вероятно будут использованы все современные технологии, реализованные на установленном железе. Также, огромный плюс в том, что при появлении заплатки для приложения, не нужно ждать доброго дядю-компилятора и выпуска обновлённого пакета, а можно самому своевременно применить заплатку. И ещё один плюс заключается в возможности сборки программы из порта с определёнными опциями, тогда как в пакете мы получаем программу с опциями по умолчанию?
Я пользую оба способа. Алгоритм предпочтения пока мне самому не вполне ясен. Чаще собираю из портов, но и pkgng исользую.
4.5.1 Получение Коллекции Портов
Перед тем, как вы сможете устанавливать порты, вы сначала должны установить коллекцию
портов—она представляет собой в основном набор файлов Makefile, патчей, файлов описаний, и она размещается в каталоге /usr/ports.
При установке вашей системы FreeBSD утилита Sysinstall
запрашивает, требуется ли вам установка коллекции портов. Если вы ответили отрицательно,
то можете следовать следующим указаниям для установки коллекции портов:
Метод с использованием Sysinstall
В этом методе повторно используется sysinstall для ручной
установки коллекции портов.
-
Работая как пользователь root, запустите /stand/sysinstall
так, как это показано ниже:# /stand/sysinstall
-
Опуститесь вниз и выберите Configure, нажмите Enter
-
Опуститесь вниз и выберите Distributions, затем
нажмите Enter -
Опуститесь вниз к пункту ports, нажмите клавишу Пробел
-
Поднимитесь вверх к Exit, нажмите Enter
-
Выберите желаемый носитель для установки, например, CDROM, FTP и так далее.
-
Перейдите на пункт меню Exit и нажмите Enter.
-
Нажмите X для выхода из sysinstall.
Альтернативный метод получения и постоянной актуализации вашей коллекции портов
заключается в использовании CVSup. Посмотрите на файл CVSup из портов, /usr/share/examples/cvsup/ports-supfile. Прочтите раздел Использование CVSup (Section A.5) для
получения более полной информации об использовании CVSup и
этого файла.
External links[edit]
- OpenBSD Porter’s Handbook
- OpenBSD ports
- The OpenBSD ports manpage
- FreeBSD Ports
- pkgsrc: The NetBSD Packages Collection
- The ideas behind Compile
vtePackage managers (format) | ||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||
|
Файлы Makefile «портов»
В начале файла Makefile можно найти множество строк, описывающих «порт»:
Это «порт» с именем apache (1), соответствующий версии 2.2.4 (2) этой программы. Это вторая версия (3) «порта» для данной версии программы, поэтому в /var/db/pkg он называется apache-2.2.4_2. В системе FreeBSD этот порт хранится в категории /var/ports/www (4). Переменная обычно содержит список интернет-сайтов, откуда можно загрузить программу. Дистрибутив веб-сервера Apache хранится на множестве зеркал, и во многих «портах» указывается их список. Чтобы не обновлять десятки и сотни «портов» всякий раз, когда появляется или исчезает какое-либо зеркало, система «портов» определяет внутреннюю переменную (5), которая содержит список зеркал, чтобы обновлять его в одном месте. содержит базовую часть имени файла дистрибутива, распространяемого разработчиком, a — полное имя. Например, все файлы с исходным кодом Apache именуются в соответствии со схемой: httpd-<что-то_еще> (6), а httpd-<вepсия>.tar.bz2 (7) — фактический файл с конкретным номером версии.
Далее в файле Makefile можно найти переменные с адресом электронной почты производителя, кратким описанием «порта» и т. д. За ними следуют такие строки:
Операторы — это настройки сборки «порта». Первая строка в данном примере — это переменная, которую надо установить, чтобы получить соответствующую функциональность. Я не знаю, что такое exception hook (ловушка исключений) (1), и, честно говоря, меня это совершенно не волнует. Но если вы ближе знакомы с Apache, для вас этот параметр может иметь значение. FreeBSD позволяет вам легко включить эту функцию при сборке. Подобным образом, если требуется включить поддержку LDAP — при сборке Apache задайте в командной строке параметр (2), но тогда при сборке «порта» он потребует установить OpenLDAP как одну из зависимостей.
Утомительно? Да, но в результате вы узнаете, какие дополнительные параметры предлагает автор программного обеспечения, и научитесь их настраивать. Опытные системные администраторы, правда, могут настраивать свои любимые программы с закрытыми глазами. Но даже им не запомнить, как это делается для всех пакетов в коллекции «портов», которых больше 17 000.
Если для сборки «порта» вы используете команды, предшествующие команде (например, и затем ), вам придется включать дополнительные параметры на каждом таком этапе. В противном случае «порт» может быть собран неправильно. Например, если требуется собрать Apache с поддержкой LDAP, предварительно наложив собственную заплатку, выполните команду:
И затем команду:
В противном случае можно наложить заплатку на программное обеспечение, подразумевающее поддержку LDAP, но в действительности собрать его без такой поддержки. В результате может нарушиться внутренняя целостность программы.
Самая сложная часть в сборке программы — решить, какие параметры применять. К сожалению, для этого вопроса нет простого ответа, поэтому для принятия решения лучше всего изучить руководство по этой программе или зайти на соответствующий веб-сайт. Мне самому не раз случалось установить какое-то программное обеспечение, а затем, прочтя документацию, удалить его и переустановить — уже с корректными параметрами.
Страницы: 1
Комментарии
Alex Snet
Спасибо, то что нужно. Как раз сервер новый ставил на фяхе. Задолбался тарболы качать и компилировать вручную.
adw0rd
Рад что пригодилось! Спасибо за каммент!
vasa_c
Ничего в этом не понимаю, но зачот
Eugen
Позволю себе пару уточнений по поводу портов:
1) make clean не удаляет скачанные файлы, это делает make distclean
2) без make config настройка будет производиться не по дефолтам, а по сохраненной при предыдущей сборке конфигурации
Neolot
Уже давно portupgrade перенесли из sysutils в ports-mgmt:
/usr/ports/ports-mgmt/portupgrade
adw0rd
Neolot, ну да, однако всеравно ссылается со старого места…
adw0rd
Спасибо за ценные поправки!
Mox
напишите, что для portupgrade зависимостью является ruby. Это многих остановит =) есть простейшая альтернатива монстру portupgrade и называается portmaster
mvalery
А вот я вам про одну вкусную вещичку расскажу.
Допустим, ты с помощью portupgrade апгрейдишь некую программу.
Программа построена, стерлась старая версия, начала ставиться новая.
А тут ап — неудача. Не удается поставить.
Оказывается, прежде чем стирать старую версию программы, portupgrade делает временный пакет
Если манипуляции с новой версией закончатся крахом, то из этого пакета будет автоматически восстановлена старая, рабочая версия.
Для меня это очень важно т.к. на наших серваках уйма софта
И серваков много. Проблем хватает. И за то что у меня одна из проблем решается автоматически, я не жалею, что немножко места на диске занимает ruby. Это совсем не страшно.
adw0rd
Mox, почитал прошлогодние отзывы по portmaster, много негатива.
И как сказал mvalery, немного памяти для руби не так страшно!
Андрей
Спасибо за хорошою статейку
Мне она очень помогла как новечку
adw0rd
Андрей, искренне рад что помогла
Дмитрий
Спасибо, щас всё чистинько поставлю )))
mario
Эд, а при обновлении портов, можно как то исключить часть портов? Ну например я совсем не пользуюсь иксами, так же порты аудио,гамес и тому подобные… Может быть их как то можно исключить?)
adw0rd
Ну а чем они тебе мешают? Я думаю ты например не пользуешся альтернативными ядрами, но и не удаляеь их ведб Они тебе не мешают почемуто… Я просто не вижу смысла, но ты можешь банально удалить каталог
mario
ну насколько я понял, то снэпшот строиться из того какие у меня порты стоят?
Да и вчера когда делал обновление портов, то основное время ушло на эти папки
adw0rd
Ты по обновления дерева портов или про обновления установленных портов? А то я тебя что-то уж не понимаю…
mario
обновления дерева портов
adw0rd
Поправил, сенк
Назар
у меня фреебсд 7.0 утанавливает ПО уже 4 часа ето нормально???
adw0rd
Смотря какое ПО, вполне может быть что нормально. А характеристики машины можете сообщить? Какое ПО ставите?
Назар
Intel core duo 2.5 i 2.5 1gb ram inet 15mb на входе 2 на выходе! вообщем обновляю в первый раз! походу все ПО которое есть ! я скачал все пакеты задал постснап чтоб установил все установленое ПО! но спустя 6 час. он так и неустановил! я ресетнул! и Хсы уже незапускаются! я что то нетак делаю?
adw0rd
Как обновляли то? Покажите последовательность инструкций.
Думаю вы прервали обновление, что очень плохо. Графическая часть системы массивна и долго обновляется, это впорядке вещей (иксы, среда рабочего стола и т.д.)…
Что такое постснап? Вы имели ввиду портснап? Он не обновляет установленое ПО, он обновляет дерево портов
Назар
portugrade -a -u и он долго все устанавливает ! перед етим portsnap fetch update! думаю мне просто нехватило терпения=)
Назар
извиняюсь portupgrate!
Andrey
Спасибо. Очень удобно изложена информация
PandraBox2007
блин раньше находил а сейчас немогу вспомнить название проги
короче альтернативный openssh сервак от германских разработчиков с высоким scalability, производительностью и пулями и уменьшеным потреблением памяти
PandraBox2007
хотя вот нашел lsh-server
PandraBox2007
хотя он дырявый .. не пойдет
Ссылки [ править ]
- ^ «Журнал CVS для портов / Mk / bsd.port.mk» . Проект FreeBSD.
- ^ «Журнал CVS для src / usr.sbin / pkg_install / Makefile» . Проект FreeBSD. Архивировано из оригинала на 2013-04-14.
- ^ «Документация по пакетам Joyent — установка на macOS» . Джойент . Проверено 10 октября 2018 .
- ^ «Документация по пакетам Joyent — установка в Linux» . Джойент . Проверено 10 октября 2018 .
- ^ Диллон, Мэтью. «PKGSRC будет официально поддерживаться в следующем выпуске» . Проверено 23 января 2008 .
- ^ Шерилл, Джастин. «Планирование выпуска DragonFly 3.4» .
- ^ «GitHub — DragonFlyBSD / DPorts: Специальная система сборки приложений для DragonFly BSD» .
- ^ Йодловски, Уильям. «4.6-стабильные порты» . Архивировано из оригинала 2011-06-12 . Проверено 29 декабря 2009 .
- ^ «ports.openbsd.nu — интерфейс к портам» . OpenBSD Journal . 2006-08-09.
- ^ Эспи, Марк (2013-06-07). «Re: Почему нет pkg_find (1)?» .
- ^ «Introducing ports.su — ports-readmes mirror and ports search». OpenBSD Journal. 2013-05-02.
Пакеты [ править ]
Предварительно скомпилированные (бинарные) порты называются пакетами . Пакет можно создать из соответствующего порта с помощью команды make package ; предварительно созданные пакеты также доступны для загрузки из репозиториев пакетов, размещенных во FreeBSD. Пользователь может установить пакет, передав имя пакета команде pkg install . Это загружает соответствующий пакет для установленной версии выпуска FreeBSD., затем устанавливает приложение, включая все программные зависимости, которые оно может иметь. По умолчанию пакеты загружаются из основного репозитория пакетов FreeBSD (pkg.freebsd.org), но если после обновления пакетов возникнут какие-либо проблемы, предыдущая версия пакетов не может быть установлена, поскольку репозиторий запрещает индексацию вложенных папок. В этом случае пользователь должен обновить версию ОС до последней версии и установить последние пакеты.
FreeBSD поддерживает ферму сборки, называемую кластером точек, в которой собираются все пакеты для всех поддерживаемых архитектур и основных выпусков . Журналы сборки и известные ошибки для всех портов, встроенных в пакеты через этот кластер, доступны в базе данных а еженедельные журналы сборки также доступны в архивах списков рассылки.
Эти предварительно скомпилированные пакеты разделены на категории по архитектурам, для которых они доступны. Пакеты далее разделены на несколько каталогов «релизов», по одному для каждого текущего производственного выпуска, созданного из коллекции портов и поставляемого вместе с выпуском. Эти каталоги производственных выпусков никогда не обновляются.
Есть также стабильные и текущие каталоги для нескольких основных веток выпуска. Они обновляются более или менее еженедельно. В большинстве случаев пакет, созданный для более старой версии FreeBSD, можно без проблем установить и использовать в новой системе, поскольку по умолчанию включена обратная двоичная совместимость между основными выпусками.
Система упаковки для бинарных пакетов называется заменило систему управления пакетами в FreeBSD 10.
Prepping the Ports Tree
The ports tree is the name of the hierarchy that exists beneath the directory. This hierarchy contains directories that correspond to port categories, within which are other directories that correspond to individual ports.
Before we begin manipulating any ports, we should ensure that this hierarchy is up-to-date. Forgetting to refresh the ports hierarchy can result in build failures as the ports try to fetch and build files that may not be valid anymore.
We can update the ports tree using a utility called . This tool queries the FreeBSD ports servers for changes.
Making Note of Our Last Update
Before we execute the actual update command, we need to take note of the timestamp on a specific file within our ports tree called . We can use the tool to see the various timestamps associated with the file:
You should see output that looks like this:
There is a chance that you will instead receive an error like this:
If you see this, it means that you do not have a ports tree initialized on your system. If this is the case, continue onto the next section to learn how to extract an initial ports tree onto your system using .
The values we want to pay attention to are the “Modify” and “Change” times, which are highlighted in the output above. In this instance, the “Modify” timestamp will be the most recent time that a ports maintainer modified the file with important information. The “Change” timestamp will be the last time that the file was synced to your server.
We need to remember the timestamp so that we know which updating notes we need to pay attention to after we refresh our ports tree. We can save these to a file in our home directory by typing:
Now that we have this information recorded, we can go ahead and update our ports tree.
Updating the Ports Tree with Portsnap
Once you have a good idea of when the ports tree was last updated, you can sync your ports tree with the most recent information from the FreeBSD project’s site. To do this, we will use a tool called .
If you do not have any information in the directory (if you encountered the error we mentioned in the last section), you can download and extract the entire ports tree to that directory with . This process can take quite a long time, but it is only necessary if your directory is empty, a situation that should only happen once. If your FreeBSD server is on DigitalOcean, your ports tree should already be initialized:
This will download and extract the entire ports tree to the directory.
If you already have a ports tree built in the directory (if you were able to record the timestamps in the last section), you can update the files to their most recent versions with this command:
This command will only extract those files which differ from the ones within the structure, so it will take significantly less time than the variant of the command. This is the format that should be used in day-to-day updates of the ports tree.
Once your ports tree is built or updated, you can begin to manage and work with ports on your system.
Интегрированные настройки «портов»
Многие программные пакеты обладают широчайшими возможностями настройки параметров сборки. Настроить эти параметры для каждого программного пакета в отдельности не так сложно, но универсального метода, определяющего их сразу для всех пакетов, нет. В одном случае может потребоваться редактировать Makefile, в другом эти параметры могут настраиваться с помощью ключей сценария configure. Изучение принципов внесения таких изменений требует времени и может оказаться скучным занятием. Система «портов» FreeBSD предлагает два способа настройки этих параметров в системе.
Самый новый и более предпочтительный метод основан на команде . Она выводит на экран диалоговое окно, похожее на то, что вы уже видели в процессе установки FreeBSD. Например, популярный программный продукт Snort, позволяющий обнаружить несанкционированное вторжение в систему, включает поддержку ведения протоколов в различных базах данных, интеграцию с динамическими правилами сетевой защиты и т. д. Если перейти в каталог /usr/port/security/snort и ввести команду , на экране появится меню, (рис. 11.1).
Рис. 11.1. Настройка параметров «порта»
Для выбора параметра служит клавиша пробела, для перемещения — стрелки и клавиша табуляции. Чтобы завершить работу с диалогом, нажмите клавишу Enter, предварительно выбрав кнопку OK или Cancel (отмена). Выбранные значения будут записаны в файл /var/db/ports/<имя_порта>/options, чтобы можно было использовать их при обновлении или повторной сборке программы. Snort — отличный пример применения этого способа настройки, потому что у этой программы много часто используемых параметров. Многие администраторы протоколируют события Snort с помощью различных баз данных.
Однако этот удобный графический интерфейс выбора параметров появился в системе FreeBSD совсем недавно и работает не во всех «портах». Многие «порты» по-прежнему объявляют о дополнительных возможностях при первом запуске команды . Например, при запуске процедуры сборки OpenOffice.org на экран выводится следующее сообщение:
На самом деле список доступных параметров гораздо длиннее, но идею вы поняли. Если, увидев это объявление, вы желаете воспользоваться одной из предоставляемых особенностей, нажмите CtrL-C, чтобы прервать сборку. После этого можно установить выбранные параметры в командной строке:
Данная команда изменяет ход сборки «порта», включая поддержку отладочной информации, что повысит качество отчетов об ошибках, которые вы сможете отправлять группе разработчиков проекта ООо. Это одно из больших преимуществ «портов» перед пакетами. Выполнить подобную настройку в пакетах невозможно.
Однако не все «порты» сами предлагают все доступные параметры настройки. Если вам действительно любопытно узнать о них, загляните в файл Makefile «порта». Давайте вместе посмотрим, что находится внутри Makefile.
Managing Different Types of FreeBSD Software
The FreeBSD team maintains the base FreeBSD operating system as a coherent unit. Its components are updated using a tool called and their behavior is controlled primarily through configuration files located within the directory. While you can install and use alternatives to the bundled software, you cannot easily or safely remove the ones that are included in the base system as these are considered functionally essential parts of the operating system.
In contrast, optional software is managed using different processes, tools, and locations within the filesystem. Unlike software from the base system, optional software is configured within the directory. FreeBSD provides two sanctioned methods for downloading and installing additional software onto the system.
The ports system, which we will be describing in this guide, is managed through a filesystem hierarchy located at that categorizes each available piece of software that FreeBSD knows how to build. Within this directory, the first level subdirectory categorizes software primarily according to function or language. Within these directories, folders exist for each individual piece of software. Software can be downloaded, configured, compiled, and installed either through simple commands or through available helper utilities. The software in the ports collection includes all patches necessary to build and run the application on a FreeBSD system.
The other type of installation supported by the system is packages, which are software binaries compiled from the ports collection using reasonable defaults. This is a good method of quickly acquiring software, but it forfeits the level of customization provided by the ports system. You can learn more about how to manage software packages in this guide.