Понимание исполняемых форматов Linux и пакетов распространения программного обеспечения

8

У меня проблемы с пониманием исполняемых форматов Linux и пакетов распространения программного обеспечения. Существует так много разных дистрибутивов самого Linux, и кажется, что каждый программный пакет был скомпилирован отдельно для каждого дистрибутива. Почему это? Я понимаю, что некоторые "пакеты" предназначены для установки на разных дистрибутивах, но отличается ли формат исполняемого файла для программного обеспечения?

Кроме того, почему многие пользователи Linux предпочитают версии приложений из командной строки, а не версии с графическим интерфейсом? Я понимаю потребность в маленьких элементах, но даже приложения с графическим интерфейсом могут иметь небольшие элементы, если они правильно закодированы.

Билл
источник

Ответы:

13

Менеджеры пакетов и зависимости

Большинство дистрибутивов Linux используют менеджеры пакетов для установки и удаления программного обеспечения. Менеджеры пакетов предоставляют некоторые преимущества, такие как возможность использования центрального репозитория, из которого (почти) можно загрузить любое программное обеспечение, организация частей программного обеспечения в пакеты, которые могут быть установлены как одна связная группа, и основные преимущества: автоматический обработка зависимостей и отслеживание изменений, вносимых пакетами, чтобы их можно было удалить.

Определенные части программного обеспечения могут требовать, чтобы определенные библиотеки или другие программы выполняли обязанности, которые были бы излишними, если бы они были повторно реализованы в этой части программного обеспечения. Пакеты позволяют выражать эти зависимости.

Отличия: форматы пакетов и стратегии

Существует несколько разных менеджеров пакетов. Каждый был создан потому, что существующие не отвечали потребностям некоторых людей. Каждый менеджер пакетов требует пакетов в своем собственном формате.

Кроме того, разные дистрибутивы имеют разные требования к программному обеспечению, которое включено. Существует ряд программ, которые могут иметь различные возможности в зависимости от параметров, которые предоставляются при его компиляции из исходного кода в исполняемый файл компьютера. Некоторые дистрибутивы хотят предоставить полный набор функций и богатый опыт, в то время как другие хотят предоставить как можно более простой и простой опыт, и между ними есть все. Кроме того, дистрибутив может решить по-разному форматировать свою структуру каталогов или использовать другую систему инициализации. Они могут решить связать программное обеспечение по-разному: может быть пакет под названием «dev-utils» в двух разных дистрибутивах, но одна версия включает в себяyaccв то время как другой нет. Из-за этих разных потребностей дистрибутивы выбирают компиляцию программного обеспечения по-разному.

Вот почему, даже если у вас есть пакет в правильном формате для вашего менеджера пакетов, он может не работать, если пакет был предназначен для другого дистрибутива. Например, этот пакет может зависеть от yaccустановки, и он выразил эту зависимость через требование пакета «dev-utils», но ваши «dev-utils» не включают yacc. Теперь установлен пакет с неудовлетворенной зависимостью.

Это на самом деле не проблема.

Большая часть дистрибутива Linux - это поддержка центрального хранилища программного обеспечения. Дистрибутив позаботится о сохранении всего этого для вас. Это на самом деле делает установку программного обеспечения очень простой. Обычно вы используете менеджер пакетов для поиска и выбора некоторых пакетов, а затем говорите им об их установке; он позаботится об остальном для вас. Процесс установки программного обеспечения Windows включает в себя поиск программного обеспечения на сторонних веб-сайтах, попытку найти подходящую ссылку для загрузки, загрузку, проверку на вирусы и запуск программы установки, которая затем задает вам кучу ненужных вопросов. Весь этот беспорядок не является стандартом для Linux.

Хранилище не может включать в себя все

Теперь могут быть случаи, когда требуемая часть программного обеспечения отсутствует в репозитории вашего дистрибутива. Пакеты, предоставляемые репозиторием программного обеспечения, являются одной из отличительных особенностей дистрибутивов. Когда вы не можете найти нужное программное обеспечение в репозиториях вашего дистрибутива, есть три возможных пути (на самом деле, два плюс способ действительно все испортить).

Репозитории Сообщества

Многие дистрибутивы имеют неофициальные репозитории, которые поддерживаются людьми, не связанными с дистрибутивом. Ubuntu называет их PPA, Fedora называет их Fedora People Repositories. Arch Linux не имеет конкретного имени для сторонних репозиториев , но у него есть свой AUR, который представляет собой набор «рецептов» для пакетов (примечание: существует только один AUR). Сначала вы можете попробовать установить пакет из одного из этих источников, поскольку их легко удалить, если они не работают.

Компилировать из источника

Если вы не можете найти неофициальный репозиторий с тем, что вам нужно, компиляция из исходного кода не составит труда. Вам необходимо установить пакет разработки вашего дистрибутива; это включает в себя базовые вещи, такие как компилятор, компоновщик, парсер и другие инструменты, которые обычно необходимы для компиляции программного обеспечения. Затем вы найдете исходный код проекта (который почти всегда упакован в .tgzили или .tbz(называется «tarball»)). Загрузите его в свой собственный каталог, извлеките его (используя tar -xf filename.tgz, и обычно перейдите в тот каталог, который он создал. этот каталог может быть файлом с именем READMEили INSTALL. Если он существует, продолжайте и читайте его; большинство из них говорят вам сделать то же самое. Следующие несколько шагов выполняются в командной строке. Запустите lsи найдите исполняемый файл с именемconfigure, Если он существует, запустите его, выполнив ./configure; иногда это может занять пару минут. Обычно это запускает несколько тестов, чтобы выяснить, как настроен ваш дистрибутив, и убедиться, что у вас есть инструменты, необходимые для компиляции этого программного обеспечения. Следующим шагом является запуск make. Это фактически компилирует программное обеспечение, и, вероятно, это займет некоторое время - от нескольких минут до часов, в зависимости от размера программного обеспечения, которое вы компилируете. Как только это будет сделано, вы бежите make install. Это устанавливает программное обеспечение, которое включает в себя копирование продуктов компиляции в соответствующие места в вашей файловой системе. После этого программа становится доступной для использования.

Это был длинный раздел, но он кратко обозначен как «README, ./configure, make, make install» . Это рутина, чтобы помнить.

Установите пакет из другого дистрибутива (не делайте этого)

Я перечисляю это только потому, что это и альтернатива, но это почти наверняка не закончится хорошо. Можно установить пакеты для других дистрибутивов, и вы можете захотеть это сделать. Ну, не надо. Не делайте этого, пока не поймете свою систему очень хорошо. На самом деле, я не собираюсь помещать здесь какие-либо команды, показывающие, как это сделать, даже если это возможно. Если вы дошли до того момента, когда кажется, что это единственный вариант, не устанавливайте пакет с помощью менеджера пакетов; вместо этого вытащите вещи из пакета и поместите их в вашу систему вручную вместе с примечаниями о том, что вы сделали, чтобы вы могли отменить их при необходимости.

Бит командной строки

Некоторые люди предпочитают командную строку за преимущества, которые она дает им. Их можно обобщить в три вещи:

  • Простота автоматизации
  • Скорость (по сравнению с щелчком повсюду в графическом интерфейсе)
  • Выразительность

Самым большим из них является выразительность; Есть вещи, которые можно сделать из командной строки, что невозможно в графическом интерфейсе.

Наконец, инструкции на основе командной строки часто даются на полезных форумах, таких как этот, потому что гораздо проще передать правильную информацию, чем давать инструкции типа «щелкни здесь, потом там».

Шон Дж. Гофф
источник
6

Извините за длинный ответ. Если вы хотите быстро и грязно, просто прочитайте резюме.

Резюме

  • Формат исполняемого файла тот же.
  • Существуют разные несовместимые менеджеры пакетов, даже если они упакованы. (Вы можете увидеть пакет в виде установочного файла, например, .msiфайлов).
  • В основном разные дистрибутивы / версии имеют разные версии основных библиотек, и по соображениям согласованности и стабильности приложения должны быть построены на основе этих версий. (Linux версия длл ад).
  • Разные дистрибутивы работают по-разному, и в некоторых случаях это может быть проблемой совместимости.
  • Командная строка может быть быстрее, а командная строка unix значительно лучше командной строки Windows.

Менеджеры пакетов

Прежде всего, менеджеры пакетов. Основная цель менеджера пакетов - поддерживать базу данных установленных пакетов и файлов, которые составляют этот пакет.

Менеджеры пакетов позволяют легко устанавливать пакеты и, как правило, также легко удалять. Они также позволяют пакетам указывать различные сценарии, которые могут потребоваться при установке / удалении для обеспечения согласованности системы (например, регистрация пакета в некоторой базе данных, связанной с подсистемой).

Различные менеджеры пакетов

Существуют разные менеджеры пакетов с разными сильными и слабыми сторонами. Примерами являются rpm и менеджер пакетов debian (файлы .deb), но есть и другие. Эти менеджеры пакетов, очевидно, нуждаются в разных форматах и ​​поэтому не совместимы.

Разные дистрибутивы или версии

Поскольку большая часть дистрибутива Linux имеет открытый исходный код, повторное использование кода значительно больше, чем в системах Windows. Приложение может использовать несколько библиотек для различных частей своей функциональности. Сами эти библиотеки часто тоже так делают, иногда одна и та же библиотека.

К сожалению, библиотеки существуют в разных версиях, и некоторые из них несовместимы (особенно двоичная совместимость для предварительно скомпилированных исполняемых файлов). Несколько версий могут прекрасно сосуществовать в системах Unix (с этой точки зрения не так уж и плохо), но в большинстве случаев использование двух разных версий библиотеки в одной работающей программе вызывает сбои.

Поэтому двоичные дистрибутивы часто обновляют свою собственную версию, чтобы переходить на новые версии различных базовых пакетов (в других случаях вам нужны большие обновления).

Разные другие файлы

Распределения также различаются в зависимости от того, где находятся определенные файлы и как управляется конфигурация. В зависимости от пакета, который может повлиять на этот пакет.

Командная строка

Unix - это прежде всего рабочая станция и серверная операционная система. Это означает, что он предназначен для профессиональных системных администраторов. Автоматизация - важная часть набора инструментов системного администрирования, и сценарии оболочки - способ сделать это. Попробуйте добавить от 0 до 1000 имен файлов в графическом файловом менеджере.

Поскольку администраторы часто управляют многими машинами, им необходимо выполнять одни и те же действия на нескольких системах. Используя такие инструменты, как ssh, чрезвычайно легко выполнить задачу на нескольких системах за один раз и просто подождать, пока компьютер выполнит свою работу.

Точная спецификация, автоматизация и повторяемость делают командную строку намного лучше в потенциале, чем графические инструменты для задач администрирования. В Unix также доступно несколько различных оболочек, и этот конкурс создал чрезвычайно мощные оболочки, которые практически несопоставимы с командной строкой Windows.

Microsoft на самом деле хорошо это понимает и предлагает PowerShell в качестве замены командной строки, а в качестве последней версии Windows Server используется в основном администрирование командной строки.

Поль де Вриз
источник
3

Форматы исполняемых файлов одинаковы для всех дистрибутивов, но для правильной работы исполняемым файлам может потребоваться дополнительное программное обеспечение. Если вы посмотрите на дистрибутивы на основе Redhat, то продукт установки - это rpm, который будет включать все требования для данного компонента программного обеспечения и по умолчанию не будет устанавливать это программное обеспечение, если требования не будут выполнены. ( yumявляется альтернативойrpmи он используется некоторыми версиями на основе Redhat). По определению графический интерфейс должен иметь гораздо большую площадь, чем интерфейс командной строки. Основная философия UNIX состоит в том, чтобы упростить все, чтобы данная задача работала максимально эффективно. Вот почему существует так много утилит, которые будут выполнять одну задачу, при этом выходные данные этой задачи могут быть связаны с входом другой задачи для выполнения чего-то другого.

apolinsky
источник
Если быть точным, yum не является альтернативой, он работает выше rpm, обеспечивая более приятное взаимодействие и такие функции, как хранилища.
RVS
1

Разные дистрибутивы имеют разные условия установки. Однако существуют RPM или DEB (или другие пакеты для других систем управления пакетами), которые работают более чем в одном дистрибутиве. Философия Linux делает исходные коды легкодоступными. При компиляции собственного программного обеспечения это практически одинаковая процедура на всех дистрибутивах и всегда один и тот же .tar.gzархив, который вы используете.

Скомпилированные RPM больше похожи на часть системы; само приложение, как самостоятельная сущность, предназначено для распространения и компиляции для каждой цели.

Ваши вторые вопросы - это что-то совершенно другое ... Ну, «многие пользователи Linux» предпочитают приложения CLI по многим различным причинам, небольшой объем памяти - это только одна из причин. При использовании SSH приложения CLI имеют больше смысла, особенно при работе вне серверов на серверах. Чаще всего на этих серверах не устанавливаются графические среды. При запуске недемонизированных программ их очень легко прервать. Ctrl- cи программа ушла. Кроме того, многие программы регистрируются в консоли, поэтому их легче отлаживать. При программировании вы делаете большую часть компиляции в консоли. Это имеет больше смысла для быстрой отладки компиляции. Это либо так, либо чтение файлов журнала, иногда чтение консоли происходит быстрее.

Полемон
источник
0

Архипелаг Или FreeBSD, который разрабатывается в целом. (RHEL, SLES и аналогичные поддерживаются в целом.)

Использование ноутбука: мята

Полезная возможность взлома: Arch.

Садистское хакерство: Genoo.

Забавный взлом: LFS.

Поддерживаемость (сервер): RHEL, Ubuntu LTS, FreeBSD (отличается от Linux).

dhchdhd
источник
Вы можете отредактировать свой ответ, чтобы сделать то, что вы пытаетесь сказать, более понятным и исправить несколько опечаток / грамматических ошибок.
Хазиз