Программы для fedora linux
Fedora Linux считается более сложной в использовании операционной системой по сравнению с Ubuntu, Linux Mint и другими, более удобными для пользователя операционными системами. Вместо того, чтобы ориентироваться на обычных пользователей, он в первую очередь нацелен на разработчиков, системных администраторов и опытных пользователей Linux. По этой причине многие новые пользователи боятся Fedora Linux и сталкиваются с трудностями при установке программного обеспечения в Fedora.
Понятно, почему Fedora пугает новых пользователей. Дело в том, что многие новые пользователи Linux имеют опыт работы только с такими дистрибутивами Linux на основе Debian, как Ubuntu. В результате установка программ в Fedora Linux кажется запутанной и пугающей. В этом руководстве мы раскроем тайну установки программ на нем, показав вам, как использовать диспетчер пакетов DNF для установки программного обеспечения в Fedora. Мы также расскажем, как устанавливать приложения через Gnome Software и KDE Discover.
Установка программ — терминал Linux
Установка программ в Fedora Linux через терминал — это двухэтапный процесс. Во-первых, вы должны найти нужную программу с помощью команды поиска. Затем, когда вы определились с названием приложения, которое хотите установить, вы можете использовать команду install, чтобы загрузить его. Например, чтобы найти веб-браузер Chromium, вы должны сделать следующее.
Примечание: в качестве примера мы используем Chromium. Обязательно возьмите этот пример и замените chromium любой программой, которую вы хотите установить в Fedora через DNF.
Оттуда Dnf распечатает результаты поиска в терминале с описанием каждого доступного пакета. Просмотрите результаты по названию пакета, который вы хотите установить. Затем используйте команду установки, чтобы загрузить его.
Чтобы удалить пакет, установленный с помощью диспетчера пакетов Dnf, используйте команду remove.
Установка программ — Gnome Software
Fedora Linux славится самым чистым и полным опытом работы с Gnome Shell в Linux. В результате большинство пользователей Fedora Linux имеют доступ к Gnome Software, популярному приложению для просмотра программного обеспечения для системы Gnome, и с легкостью используют его для установки множества различных программ в своих системах Fedora Linux.
Установка программного обеспечения в Fedora через Gnome Software работает точно так же, как и в любой другой операционной системе Linux, которая его использует. Чтобы загрузить приложение и запустить его на ПК с Fedora Linux, выполните следующие действия.
Шаг 1: Запустите приложение Gnome Software. Вы можете открыть его, нажав клавишу Windows на клавиатуре, набрав «Программное обеспечение» в поле поиска и выбрав значок корзины.
Шаг 3. После того, как вы нашли программу в браузере категорий или в результатах поиска в Gnome Software, щелкните по ней мышью. Вскоре после этого вы попадете на страницу программного обеспечения приложения.
Шаг 4: На странице программного обеспечения приложения найдите кнопку «Установить» и щелкните по ней с помощью мыши. При выборе кнопки установки вам будет предложено ввести системный пароль. Затем, после правильного ввода пароля, Gnome Software выйдет и установит программу.
Шаг 5: Когда Gnome Software завершит установку вашего приложения, вы увидите кнопку «запустить». Щелкните его, чтобы использовать только что установленное приложение.
Установка программ — KDE Discover
Хотя основное внимание Fedora уделяется Gnome Shell, операционная система также имеет надежную версию KDE Plasma 5. Как и Gnome, KDE поставляется с собственным простым в использовании приложением для просмотра программ. Если вы новичок в среде KDE в Fedora и хотите узнать, как устанавливать из нее программы, следуйте пошаговым инструкциям ниже.
Шаг 1. Запустите приложение KDE Discover. Для этого нажмите клавишу Windows на клавиатуре и выполните поиск по запросу «Обнаружить». Запустите приложение со значком корзины.
Шаг 2. Когда магазин программного обеспечения KDE Discover завершит открытие на вашем компьютере с Fedora, вы увидите страницу «Рекомендуемое». Не стесняйтесь проверить предлагаемые приложения. Или, если вам нужно конкретное приложение, нажмите кнопку «Приложения» слева.
Шаг 3. При нажатии кнопки «Приложения» в KDE Discover вы попадете в область браузера приложения. Отсюда вы можете найти программы для установки по категориям программ. Или воспользуйтесь окном поиска, чтобы найти конкретное приложение.
Шаг 4. Найдя программу, которую вы хотите установить в KDE Discover, щелкните по ней мышью, чтобы перейти на страницу информации о приложении. Затем найдите кнопку «Установить» и щелкните по ней, чтобы начать процесс установки программы.
Шаг 5: Когда KDE Discover завершит установку вашего приложения, вы увидите кнопку «запустить» на странице информации. Щелкните его мышью, чтобы запустить.
Существует огромное множество программных пакетов, доступных в Fedora Linux из репозитория, предоставленного проектом Fedora. Помимо этого, вы также можете включить другие сторонние репозитории, такие как COPR или RPM Fusion, для установки дополнительных приложений.
Как и другие дистрибутивы Linux, Fedora использует систему управления пакетами (DNF) для установки, обновления и удаления пакетов программного обеспечения и компонентов. Система управления пакетами Fedora использует пакеты RPM формата.
В этой статье, мы объясним как найти и установить приложения в дистрибутиве Fedora Linux с помощью графической утилиты и командной строки (CLI). Мы также затронем сторонние репозитории для установки пакетов с использованием исходного кода и расскажем о других методах установки.
Для облегчения установки ПО в Fedora — воспользуемся графической утилитой. Она позволяет просматривать, находить и устанавливать приложения. Вам обязательно нужно иметь root права для установки любого пакета в Fedora (в принципе, как и в любом другом дистрибутиве Linux).
На стандартном рабочем столе, GNOME, перейдите в меню “Activities”, далее “Software”, как показано на скриншоте:
В соответствующих категориях вы найдёте нужное вам ПО, например, Productivity или Editor’s Picks.
Выберите любое, интересующее вас, приложение и нажмите на “Install”, так как показано ниже.
Второй, требующий определённых умений работы в Fedora, способ подразумевает установку ПО через командную строку с помощью утилиты DNF, которая используется для управления пакетами (т.е. для их установки, удаления и обновления) в Fedora (начиная с версии 22), это приложение более высокого уровня, построенное на RPM.
Войдите как root-пользователь и установите пакеты в Fedora, используя DNF, как указано ниже.
Для поиска пакетов — воспользуйтесь следующей командой (вместо glances введите название интересующего вас приложения):
После чего, установите выбранный вами пакет (в нашем случае glances) при помощи следующей команды (если понадобится, то ответьте y на любые запросы):
Как мы ранее упоминали, Fedora предоставляет вам большую часть ПО, необходимого для успешной работы системы. Однако, в случае отсутствия пакета, скорее всего, вы найдёте сторонний репозиторий, который вы можете добавить, чтобы можно было управлять установкой с помощью встроенного менеджера пакетов.
Существует ряд сторонних программных репозиториев для Fedora, которые обычно используются большинством пользователей и не конфликтуют друг с другом:
-
— предоставляет ПО, которое Fedora Project или Red Hat не хотят поставлять; — дополнение к RPM Fusion; — простая в использовании система сборки, которая предоставляет репозиторий пакетов.
Важно: не рекомендуется устанавливать большое количество сторонних репозиториев, так как они могут конфликтовать друг с другом и таким образом вызовут нестабильность в работе системы, затрудняя отладку проблем.
Время от времени происходят ситуации, когда пакет не найден ни в одном репозитории или разрабатывается внутри компании, или вам необходимо установить пакет с пользовательскими настройками. В таких случаях, вы можете установить его из источника. Разработчики пакетов обычно оставляют инструкции по установке приложений из исходного кода.
Замечание: установка подобных приложений может значительно усложнить управление вашей системой, к тому же, менеджер пакетов не будет знать об установленном ПО. Всё это может привести к усложнению процесса обновления пакетов.
Несмотря на то, что предпочтительным вариантом является установка приложений с использованием систем управления пакетами Fedora, иногда вам потребуется устанавливать пакеты с помощью других инструментов управления пакетами, особенно систем пакетов языков программирования, таких как:
Какой менеджер пакетов используется в настоящее время?¶
Dnf, являющийся, в свою очередь, форком Yum.
Могу ли я использовать Yum в Fedora?¶
Начиная с Fedora 24, yum присутствует в Fedora лишь как символическая ссылка на dnf, сохранённая для обратной совместимости.
Что такое Flatpak пакеты?¶
Flatpak – это современный прогрессивный формат самодостаточных пакетов для GNU/Linux. Он поддерживает рантаймы, изоляцию внутри песочниц, установку без наличия прав суперпользователя и многое другое.
Какие преимущества и недостатки у Flatpak пакетов?¶
поддерживает динамическую линковку с большим количеством библиотек из рантаймов, что решает проблемы с лицензированием, их поддержкой в актуальном состоянии и исправлением в них ошибок, а также уязвимостей;
библиотеки, для которых нет рантаймов, могут быть упакованы непосредственно внутрь флатпака и подгружаться по мере необходимости;
Flatpak позволяет установить разные версии приложений одновременно;
для установки не требуются права суперпользователя;
поддерживается контейнерная изоляция приложения внутри собственной песочницы;
приложению могут быть выданы только необходимые права доступа и разрешения;
могут использоваться на любом дистрибутиве GNU/Linux без перекомпиляции и перекомпоновки;
лёгкое создание и хостинг собственных репозиториев.
из-за того, что Flatpak пакеты по определению должны запускаться на разных дистрибутивах, они содержат в себе все зависимости либо в виде рантаймов, либо внутри флатпака;
в публичных репозиториях (например Flathub) мейнтейнеры не занимаются обновлением своих пакетов до актуальных рантаймов, из-за чего уже при установке нескольких приложений в системе появится куча различных версий одних и тех же рантаймов, что тратит очень много места на диске впустую;
из-за использования разных рантаймов полноценно не используется разделяемая память библиотек, т.е. каждое приложение загружает все свои зависимости в собственное адресное пространство;
отсутствует возможность использования общесистемных настроек среды для контейнеризированных приложений;
отсутствует возможность использования уже установленных в системе библиотек.
Можно ли устанавливать программы посредством make install?¶
Категорически не рекомендуется, ибо:
make install порождает в системе кучу никем и ничем не отслеживаемых файлов: бинарников, конфигов, прочих файлов. Это в большинстве случаев приведёт к множеству проблем при обновлении или удалении;
make install не учитывает файлы других пакетов и может запросто перезаписать или удалить в системе что-то важное, т.к. действие выполняется с правами суперпользователя;
make install не ведёт никакого журнала действий, поэтому всё, что оно произвело, невозможно полноценно откатить;
установленные через make install приложения очень часто невозможно удалить вообще, т.к. многие разработчики не делают правило make uninstall, что, в принципе, верно ибо оно не нужно большинству, а если и делают, то оно способно лишь удалить скопированные файлы. Изменения конфигов, других файлов и пр. откатить оно не способно.
Установка пакетов штатным пакетным менеджеров имеет множество преимуществ:
при установке пакетный менеджер разрешает все зависимости, добавляет нужные, устраняет конфликты;
перед выполнением установки пакетный менеджер проверяет, чтобы устанавливаемый пакет не вмешивался в работу других, а также самой системы. Если это так, он не будет установлен;
во время установки все изменения, сделанные пакетом, вносятся в специальную базу данных пакетного менеджера и при удалении или обновлении будут учтены;
при удалении пакета производится полный откат действий, предпринятых при установке (даже если были изменены какие-то конфиги, эти действия будут откачены полностью, т.к. хранится diff внутри базы ПМ);
при обновлении перезаписываются только изменённые файлы. Более того, может быть скачан и установлен только дифф. изменений;
если при обновлении пакета возникает конфликт какого-то конфига, он не будет молча перезаписан, а будет применён патч на существующий, либо, если это невозможно, будет запрошено действие у пользователя.
Можно ли использовать PIP или NPM для установки программ и модулей?¶
Нет. Глобальная установка чего-либо через pip (pip2, pip3) либо npm по своей деструктивности аналогична make install .
Нужной Python библиотеки нет в репозиториях. Как можно безопасно использовать PIP?¶
В таком случае рекомендуется либо локальная установка модулей посредством pip с параметром --user , либо использование Python Virtual Environment :
Установленные таким способом модули будут размещены в домашнем каталоге пользователя и не помешают работе системы.
Как правильно применять Python Virtual Environment?¶
Установим пакеты python3-virtualenv и python3-setuptools:
Создадим виртуальное окружение:
Теперь внутри него допускается использовать любые механизмы установки пакетов Python: pip, install.py и т.д.
Здесь foo-bar – название venv контейнера. Допускается создавать неограниченное их количество.
Как удалить установленные пакеты из Python Virtual Environment?¶
Создадим и экспортируем в файл foo-bar-installed.txt список установленных пакетов из PIP:
Удалим данные пакеты:
Как правильно обновлять систему?¶
Fedora поддерживает два вида обновлений: через консоль средствами пакетного менеджера dnf , либо через графические менеджеры, основанные на PackageKit.
Обновление системы средствами dnf:
При этом настоятельно не рекомендуется запускать процесс в эмуляторах терминала графической среды.
Как часто следует устанавливать обновления системы?¶
Чем чаще устанавливаются обновления, тем меньше проблем будет при этом за счёт плавной миграции между файлами конфигурации приложений, сервисов и т.д.
Мы рекомендуем устанавливать обновления системы ежедневно.
Можно ли автоматизировать установку критических обновлений?¶
Да. Установим специальный сервис для автоматической проверки и установки обновлений:
Все параметры могут быть тонко настроены в конфигурационном файле /etc/dnf/automatic.conf .
Как мне обновить Fedora до новой версии?¶
Процесс обновления стандартен и максимально безопасен:
Весь процесс установки будет выполнен во время следующей загрузки системы.
Если произошёл какой-то конфликт, то рекомендуется очистить все кэши dnf:
Возможно ли сделать откат к предыдущей версии Fedora?¶
Нет, это действие официально не поддерживается.
Для отката на предыдущую версию необходимо восстановить созданную ранее резервную копию.
Как мне обновить Fedora до Rawhide?¶
Допускается обновление с любой поддерживаемой версии Fedora до Rawhide. Следует помнить, что это действие необратимо. Пути назад на стабильный выпуск без полной переустановки системы уже не будет.
Весь процесс установки будет выполнен во время следующей загрузки системы.
Возможно ли откатиться с Rawhide назад на обычный релиз?¶
Можно ли обновляться через несколько версий?¶
Официально поддерживается лишь обновление с текущей на следующую версию. Если требуется выполнить обновление сразу через несколько релизов дистрибутива, то настоятельно рекомендуется делать это последовательно (например F27 -> F28 -> F29 -> F30 и т.д.).
Когда лучше выполнять обновление при выходе новой версии дистрибутива?¶
Рекомендуется обновлять систему до новой версии Fedora в течение месяца после её официального релиза.
При обновлении dnf ругается на дубликаты пакетов.¶
Установим утилиту package-cleanup:
Удалим дубликаты и повреждённые пакеты:
База RPM оказалась повреждена. Как восстановить?¶
Для запуска пересборки базы данных RPM следует выполнить:
Настоятельно рекомендуется сделать резервную копию каталога /var/lib/rpm перед этим действием.
Dnf сохраняет старые ядра. Это нормально?¶
Да. По умолчанию dnf сохраняет 3 последних ядра, чтобы в случае сбоя была возможность загрузки в более старое для разрешения проблем и восстановления работы системы.
Как можно уменьшить количество сохраняемых ядер?¶
Откроем файл /etc/dnf/dnf.conf в текстовом редакторе:
Изменим значение переменной installonly_limit :
Минимально допустимое значение – 2 (будут сохраняться два ядра: текущее и предыдущее).
Как настроить работу dnf через прокси?¶
Откроем файл /etc/dnf/dnf.conf в текстовом редакторе:
Изменим значение переменной proxy (при отсутствии добавим):
Если используемый прокси-сервер требует проверки подлинности (аутентификации), то укажем также и авторизационные данные для подключения:
Здесь LOGIN – логин пользователя на прокси-сервере, а PASSWORD – его пароль.
Здесь METHOD – название метода аутентификации, используемого прокси-сервером.
Список часто используемых методов:
Подробнее о поддерживаемых методах аутентификации см. в документации.
Как отключить установку слабых зависимостей?¶
Откроем файл /etc/dnf/dnf.conf в текстовом редакторе:
Изменим значение переменной install_weak_deps (при отсутствии добавим):
Как мне запретить установку обновлений для ряда пакетов?¶
Классический способ¶
Откроем файл /etc/dnf/dnf.conf в текстовом редакторе:
Изменим значение переменной exclude (при отсутствии добавим):
Здесь вместо примера укажем нужные пакеты, разделяя их пробелом. Допускаются стандартные символы подстановки.
Современный способ¶
Установим плагин versionlock для dnf:
Отметим пакеты, версии которых будут закреплены:
Отметим пакеты, которые будут игнорироваться в любых транзакциях:
Что такое Delta RPM?¶
Технология Delta RPM позволяет сократить расход трафика при регулярной установке обновлений за счёт того, что скачиваться будет не новая версия целиком, а лишь разница между ней и установленной в системе.
К сожалению, на медленных устройствах: HDD, eMMC, SD и т.д., это значительно замедляет процесс установки обновлений , поэтому функцию можно отключить .
Как отключить использование Delta RPM?¶
Откроем файл /etc/dnf/dnf.conf в текстовом редакторе:
Изменим значение переменной deltarpm (при отсутствии добавим):
Как можно вручную удалить старое ядро?¶
Для ручного удаления старого ядра можно выполнить:
Здесь 5.15.5 – это версия удаляемого ядра.
Какие сторонние репозитории лучше всего подключать?¶
Как работать с Flatpak пакетами в Fedora?¶
В системе нет кодеков мультимедиа. Как их установить?¶
Для начала следует подключить репозиторий RPM Fusion , после чего установить кодеки из группы multimedia и sound-and-video:
Как отключить автообновление кэшей dnf?¶
Что лучше: dkms или akmods?¶
Конечно akmods, т.к. он автоматически собирает и устанавливает полноценные RPM пакеты.
Каким способом можно обновить пакет из тестовых репозиториев?¶
Чтобы установить обновление из Fedora Testing, необходимо временно подключить соответствующий репозиторий:
Репозиторий updates-testing подключается однократно только для данного сеанса работы dnf.
Как получить список файлов установленного пакета?¶
Как узнать в каком пакете находится конкретный файл?¶
Для этого можно воспользоваться плагином dnf repoquery:
Для поиска бинарников и динамических библиотек можно применять альтернативный метод:
Можно ли установить несколько версий Java в систему?¶
Да, это возможно. В настоящее время поддерживаются следующие версии Java. Допускается их одновременная установка.
Я хочу создать пакет для Fedora. Что мне следует знать?¶
Как собрать RPM пакет в mock?¶
Как добавить свой пакет в репозиторий Fedora и стать мейнтейнером?¶
Что такое Koji?¶
Fedora Koji – это автоматизированная среда для сборки пакетов для Fedora.
Хочу внести свои правки в пакет и пересобрать его для личных нужд. Как проще это сделать?¶
Установим утилиты fedpkg и mock:
Скачаем исходники необходимого пакета foo-bar:
Перейдём в каталог с загруженными исходниками и переключимся на ветку для конкретной версии Fedora (если нужна версия из Rawhide – следует использовать master):
Внесём свои правки, сделаем коммит в репозиторий:
Как создать tarball с исходниками из Git репозитория?¶
Если проект по какой-либо причине не поставляет готовые тарболы и отсутствует возможность их скачать напрямую с хостинга VCS, можно создать их из Git.
Клонируем репозиторий источника:
Создадим архив с исходниками:
Здесь HEAD – указатель на актуальный коммит (вместо этого можно использовать SHA1 хеш любого коммита, а также имя тега или ветки), foo-bar – название проекта, а 1.0.0 – его версия.
Как переопределить пакет в Koji репозитория RPM Fusion?¶
Создание build override для репозитория f35-free:
Удаление build override для репозитория f35-free:
Как обновить кэши репозиториев Koji в RPM Fusion?¶
Запустим обновление кэшей репозиториев для free:
Запустим обновление кэшей репозиториев для nonfree:
Как настроить Git для работы с почтовым сервисом Gmail?¶
Для того, чтобы использовать функцию git send-mail с почтовым сервисом Gmail, необходимо:
включить двухфакторную аутентификацию в настройках Google аккаунта;
в настройках безопасности почтового ящика Gmail разрешить использование «небезопасных приложений» (под небезопасными Google понимает любые, не поддерживающие OAuth2);
там же включить доступ к почте посредством POP3 или IMAP (это активирует также и необходимый для нас протокол SMTP);
в настройках безопасности сгенерировать новый пароль для приложения;
указать в файле ~/.gitconfig параметры почтового сервиса;
когда будет запрошен пароль, ввести созданный ранее пароль приложения.
Пример файла ~/.gitconfig для работы с почтовым сервисом Gmail:
Правильно ли использовать dlopen для загрузки динамических библиотек в приложении?¶
Для загрузки динамических библиотек в приложении использовать dlopen допускается, но мы настоятельно рекомендуем избегать этого и использовать полноценную линковку по следующим причинам:
в каждом дистрибутиве GNU/Linux именование библиотек, особенно если у них нет чётко установленной апстримом SOVERSION константы, ложится на плечи мейнтейнеров. К примеру есть популярная libcurl. Во всех дистрибутивах она линкуется с openssl и называется libcurl.so, а в Debian и Ubuntu была переименована в libcurl-gnutls.so из-за линковки с gnutls;
нет никакой гарантии, что загрузится именно необходимая версия библиотеки, имеющая необходимую функцию, а отсутствии оной приложение будет аварийно завершено с ошибкой сегментирования;
если существует несколько версий библиотеки с разными SOVERSION, необходимо самостоятельно их искать на диске и подгружать с рядом хаков ибо имя libfoo.so без указанной SOVERSION в большинстве дистрибутивов представляет собой символическую ссылку и доступен лишь после установки соответствующего development пакета. Соответственно на машинах обычных пользователей он отсутствует;
о библиотеках, подгружаемых динамически, не в курсе LD, а следовательно он не сможет при загрузке образа приложения подгрузить их в память;
в случае корректной линковки LD перед запуском приложения осуществит автоматический поиск необходимых экспортируемых функций во всех указанных библиотеках. При их отсутствии приложение не будет запущено;
при сборке пакета динамически подгружаемые через dlopen библиотеки не будут определены и прописаны в качестве зависимостей пакета, что может вызвать проблемы у пользователей и падение приложения;
Как получить полный список установленных переменных окружения в текущем терминале?¶
Получить список установленных переменных окружения можно посредством выполнения утилиты env:
Как получить полный список установленных переменных для запущенного процесса?¶
Получение списка установленных переменных окружения для запущенных процессов:
Здесь $PID – PID процесса, информацию о котором необходимо получить.
Как задать переменную окружения?¶
Вариант 1. Запуск процесса с заданной переменной окружения:
Вариант 2. Экспорт переменной окружения в запущенном терминале и дальнейший запуск приложения:
Вариант 3. Модификация директивы Exec= в ярлыке запуска приложения:
Как удалить переменную окружения?¶
Вариант 1. Удаление экспортированной переменной окружения при помощи команды оболочки unset:
Вариант 2. Удаление экспортированной переменной окружения в запущенном терминале и дальнейший запуск приложения:
Вариант 3. Модификация директивы Exec= в ярлыке запуска приложения:
Как правильно настроить Git для работы?¶
Сначала укажем своё имя и адрес электронной почты:
Если проект хостится на одном из популярных сервисов (GitHub, BitBucket или GitLab), сначала войдём в свой аккаунт (при осутствии создадим) и сделаем форк репозитория.
Осуществим базовую настройку Git клиента если это ещё не было сделано ранее.
Клонируем наш форк:
Создадим ветку new_feature для наших изменений (для каждого крупного изменения следует создавать отдельную ветку и ни в коем случае не коммитить в master):
Внесём свои правки в проект, затем осуществим их фиксацию:
В появившемся текстовом редакторе укажем подробное описание всех наших изменений на английском языке. Несмотря на то, что параметр -s является опциональным, большинство проектов требуют его использования для автоматического создания подписи вида:
Многие проекты обновляются слишком быстро, поэтому потребуется осуществить синхронизацию наших изменений с актуальной веткой апстрима. Для этого подключим к нашем форку оригинальный репозиторий:
Скачаем актуальные изменения и выполним rebase основной ветки нашего форка с апстримом:
Осуществим rebase ветки с нашими изменениями с основной:
Отправим наши изменения на сервер:
Создадим новый Pull Request.
Как скомпилировать простую программу на языке C++ из консоли?¶
Установим компилятор GCC-C++ (G++) и ряд вспомогательных компонентов:
Создадим простейший пример helloworld.cpp :
Скомпилируем и слинкуем его:
Здесь g++ – запускающий файл файл компилятора, helloworld.cpp – файл с исходным кодом (если их несколько, то разделяются пробелом), helloworld – имя результирующего бинарника, -lstdc++ – указание компоновщику на необходимость линковки со стандартной библиотекой C++.
Корректные флаги компиляции и компоновки вставляются автоматически из соответствующих макросов RPM.
Запустим результат сборки:
Приложение падает. Как мне его отладить?¶
Для начала рекомендуется (хотя и не обязательно) установить отладочную информацию для данного пакета:
После завершения процесса отладки символы можно снова удалить.
Чтобы получить бэктрейс падения, нужно выполнить в терминале:
Далее в интерактивной консоли отладчика ввести: handle SIGPIPE nostop noprint и затем run , дождаться сегфолта и выполнить bt full для получения бэктрейса. Теперь можно прописать quit для выхода из режима отладки.
Далее получившийся файл ~/backtrace.log следует загрузить на любой сервис размещения текстовых файлов.
Также рекомендуется ещё сделать трассировку приложения до момента падения:
Полученный файл ~/trace.log также следует загрузить на сервис.
Безопасно ли использовать LD_PRELOAD для загрузки сторонних библиотек?¶
Нет, это не безопасно, т.к. существует возможность создания внутри библиотек суперглобальных конструкторов, которые будут выполняться в момент присоединения библиотеки до запуска приложения.
Создадим и скомпилируем простой пример example.c :
Данный метод содержит сразу два суперглобальных конструктора с указанием приоритетов. Чем ниже приоритет, тем скорее данный метод будет исполнен.
Скомпилируем и слинкуем наш пример:
Внедрим нашу библиотеку в известный доверенный процесс, например whoami:
Оба суперглобальных метода будут немедленно исполнены с правами запускаемого приложения и изменят его вывод:
Разумеется, вместо безобидных вызовов функции printf() может находиться абсолютно любой код, в т.ч. вредоносный.
Как активировать LTO-оптимизации при сборке пакета?¶
Актуальные релизы Fedora автоматически включают LTO оптимизации для всех собираемых пакетов.
Если в проекте применяются статические библиотеки (в т.ч. для внутренних целей), то экспортируем ряд переменных окружения внутри секции %build :
В случае использования системы сборки cmake, воспользуемся штатной функцией переопределения встроенных параметров:
В противном случае появится ошибка plugin needed to handle lto object.
Как запретить LTO-оптимизации при сборке пакета?¶
При необходимости LTO-оптимизации допускается отключить.
Определим переменную _lto_cflags и установим ей пустое значение:
Как вывести список установленных пакетов, от которых никто не зависит?¶
В настоящее время данная функциональность отсутствует в dnf «из коробки», поэтому напишем и скомпилируем небольшую программу на языке C, реализующую это средствами библиотеки libsolv.
Установим компилятор и необходимые для сборки библиотеки:
Создадим файл rpm-unneeded.c с исходным текстом программы:
Скомпилируем и слинкуем приложение:
Запустим приложение ./rpm-unneeded и получим список установленных пакетов, от которых никто не зависит.
Можно ли использовать cpack для сборки пакетов для GNU/Linux?¶
Нет, использовать cpack категорически не рекомендуется по следующим причинам:
создаёт RPM и DEB пакеты в виде архивов;
не добавляет метаданные в создаваемые пакеты;
не прописывает зависимости от библиотек и других пакетов;
не экспортирует provides;
не обрабатывает mime-типы ;
не добавляет обязательные скриптлеты;
не соблюдает гайдлайны дистрибутивов.
Вместо cpack следует собирать нативные пакеты .
Приложение собрано со старой версией библиотеки. Как заставить его работать?¶
Если приложение было собрано со старой версией библиотеки foo-bar, которой уже нет в репозиториях и его требуется запустить, существует два способа:
LD_PRELOAD – небезопасный – библиотека (или библиотеки) напрямую инъектируется в процесс средствами интерпретатора динамических библиотек LD до его непосредственного запуска;
LD_LIBRARY_PATH – более безопасный – список каталогов, в которых интерпретатор динамических библиотек LD ищет соответствующие so, расширяется на указанные пользователем значения.
Рассмотрим второй способ с переопределением переменной окружения LD_LIBRARY_PATH .
Скачаем RPM пакет foo-bar необходимой версии из любого источника (лучшим вариантом будет конечно же репозитории старых версий Fedora), распакуем его например в ~/lib/foo-bar и извлечём необходимые динамические библиотеки (.so файлы).
Создадим shell-скрипт run-foo.sh для запуска бинарника:
Здесь foo – имя бинарника, который требуется запустить, а /path/to/binary – каталог, в котором он находится. В качестве разделителя путей LD_LIBRARY_PATH применяется двоеточие. Закрывающий слэш не ставится.
Установим скрипту разрешение не запуск и запустим его:
Если всё сделано верно, приложение успешно стартует.
Проекты под какими лицензиями допускается распространять в репозиториях?¶
В каком порядке запускаются процессы через канал (пайп)?¶
Если запускается несколько процессов с передачей данных через канал (пайп; pipe), то все они стартуют одновременно, затем начинает выполняться первый, а остальные уходят в состояние ожидания ввода.
Можно ли использовать собственные флаги компиляции при сборке пакета?¶
Для любых официальных сборок следует использовать исключительно стандартные для дистрибутива флаги, предоставляемые макросами % (флаги компилятора) и % (флаги компоновки).
Какую IDE использовать для разработки на C++ в Fedora?¶
Мы рекомендуем Qt Creator, которая одинаково хорошо подходит как для разработки на C++ (с Qt и без него), так и чистого C.
Установим данную IDE, а также компилятор C++ и ряд необходимых библиотек и средств для сборки проектов:
При необходимости установим также документацию Qt и готовые примеры стандартных приложений:
Если Qt Creator при попытке загрузить документацию выдаёт ошибку Error loading: qthelp://org.qt-project.qtcreator.472/doc/index.html, выберем пункт меню Tools – Options – Help – Documentation – Add, затем вручную добавим следующие файлы:
Изменения вступят в силу после перезапуска IDE.
Если Qt Creator не смог самостоятельно обнаружить установленный в системе фреймворк Qt, а также компилятор, то необходимо добавить их самостоятельно.
Для этого войдём в настройки IDE, затем сначала добавим компилятор GCC /usr/bin/gcc , а затем тулчейн Qt – /usr/bin/qmake-qt5 . После этого на вкладке Kits создадим новый набор из данных компонентов.
Сохраним изменения в настройках и добавим созданный Kit к своему проекту.
Использование Fedora означает согласие с тем, что стороннее программное обеспечение для Linux, которое вы используете ежедневно, никогда не будет включено по умолчанию. Это неудобно, но не конец света. Это потому, что есть несколько отличных сервисов и ресурсов, которые помогают пользователям добавлять сторонние репозитории и RPM в Fedora, чтобы получить то, что им нужно.
Первый сервис, который мы рассмотрим, — Fedora Copr. Copr это новая технология, но с тех пор, как она появилась, пользователи обращались к ней, чтобы найти программное обеспечение, обычно не входящее в состав Fedora. Систему Copr можно рассматривать как систему «PPA» Fedora или версию Redhat службы Open SUSE Build. Причина? Пользователи и разработчики могут легко использовать Copr и создавать собственные репозитории программного обеспечения, чтобы легко распространять программное обеспечение среди пользователей Fedora.
Это, безусловно, лучший ресурс для стороннего программного обеспечения. Вот как им пользоваться. Для начала откройте терминал. Терминал — единственный способ сделать это, поскольку Copr включает взаимодействие с диспетчером пакетов DNF (программа терминала).
Выберите результат, который кажется полезным. Обратите внимание, что существует много дублирующих репозиториев Copr для Steam. Лучший способ выбрать — прочитать каждую страницу и определить, какая из них наиболее активна. В этом случае наиболее активным репозиторием Copr для Steam является: alunux / linux-steam-integration
Перейдите на страницу и прочтите инструкцию. Сопровождающие репо обычно достаточно любезны, чтобы сказать вам именно то, что вам нужно знать. В этом случае репо Steam Alunux требует, чтобы сначала включить репо негативный17:
Затем включите репозиторий Copr.
Затем просто установите Steam, как любое другое программное обеспечение в Fedora. Это возможно двумя способами. Первый из них включает поиск Gnome Software по запросу «Steam» и нажатие кнопки установки. Альтернативно:
Вам также может потребоваться интеграция со Steam Linux:
RPMFusion
Еще один способ серьезно улучшить исходные коды программного обеспечения Fedora — включить RPMFusion. Это хорошо известный сервис, который специализируется на добавлении стороннего программного обеспечения (например, проприетарных драйверов Nvidia и других платных инструментов, таких как Skype, Discord и т. Д.).
Если вы не хотите возиться с Copr (или не можете там что-то найти), хороший способ — добавить это в свою систему. Лучше всего то, что RPM Fusion существует уже много лет и всегда актуален. Когда появится новая версия Fedora, RPM Fusion будет работать с ней. Вот как это сделать.
Текущий выпуск Fedora на момент написания — 26. Если вы читаете это в будущем, перейдите здесь чтобы скачать несвободные пакеты.
Для версии 26 откройте терминал и:
Когда этот пакет завершит установку, перейдите в программное обеспечение Gnome. Вы заметите, что доступно гораздо больше программного обеспечения. Или откройте терминал и выполните:
RPM Pbone
Еще один хороший ресурс RPM: RPM Pbone . Это поисковая система, которая просматривает в Интернете (с помощью поисковых запросов) пакеты RPM. Это довольно простой веб-сайт. Однако пользователи должны знать, что другие дистрибутивы Linux используют формат пакета Redhat RPM, и в результате вы можете найти пакеты из OpenSUSE, CentOS и т. Д.
Поскольку эти форматы пакетов схожи, установить пакет OpenSUSE в Fedora не составит труда.
Второй ресурс — это OBS. OBS в основном предназначен для пользователей SUSE, но отлично работает с Fedora. Это происходит по двум причинам:
OBS поддерживает Suse, который использует файлы RPM. Fedora также использует RPM, поэтому пользователи могут легко установить Suse RPM в свою установку Fedora (хотя это не рекомендуется).
Поскольку Fedora и Suse используют общий формат пакета, Fedora обычно постоянно поддерживается в OBS. При поиске программ на сайте пользователи увидят кнопку загрузки Fedora.
Вывод
Fedora — отличная операционная система, которая всегда находится на переднем крае в мире Linux. Многие новые технологии начинаются в Fedora, а затем перемещаются в другие места. Все это говорит о том, что они печально известны тем, что запрещают «несвободные программы». Для сторонников свободного программного обеспечения это хорошо. Однако, если вы обычный пользователь, который хочет легко установить Discord, у вас будут плохие времена. Вот почему важно знать, к каким ресурсам пользователи Fedora могут обращаться за сторонним программным обеспечением.
Читайте также: