Итак, двигаемся дальше. Сегодняшняя тема - «Установка ПО в линуксах».
Способов установки ПО в линуксах достаточно много. При этом реализовывать каждый из них можно как в графическом режиме, так и через терминал.
Ряд способов не будет рассмотрено, поскольку при рассмотрении требуется чуть большее погружение в тему (например, установка из исходных кодов, контейнеры, а также еще ряд способов). Тут лучше по каждому из способов делать отдельные публикации. В этой же публикации - фокус на простых способах установки ПО, но покрывающих большую часть потребностей.
Также даю ссылку на публикацию-оглавление - (ссылка). Через нее можно найти другие публикации.
Давайте приступим к их рассмотрению.
Переносимые приложения
Давайте начнем с самого простого способа. Собственно, и установкой его тяжело назвать, так как устанавливать ничего не нужно. Наверняка в виндоусе сталкивались с такими программами, когда нужно всего лишь разархивировать папку, а дальше можно запускать программу без установки. В линуксе такой вариант тоже есть. Тут даже разархивировать ничего не надо. Просто скачать один-единственный файл, положить его в нужную директорию и пользоваться по необходимости.
Это пакеты AppImage. К сожалению, не сильно распространены. Из полезностей - программа OpenShot. С помощью нее можно монтировать ролики. А ролики - это не только «развлекательные видосики», но еще и видеоинструкции, наличие которых может очень сильно помочь и при внедрении ПО, и при ее поддержке.
Скачать можно с официального сайта, а также с github или sourceforge. Возьму файл с github:
https://github.com/OpenShot/openshot-qt/releases
Нужно прокрутить страницу до ссылок на файлы и выбрать файл с расширением .AppImage:
Кликаем, ждем загрузки файла:
В принципе, его можно запускать из любой директории. Но сделаем по-уму.
С помощью проводника зайдем в домашний каталог, создадим там новый каталог:
Примечание!!! Для создания каталога - кликнуть правой кнопкой мыши по свободному месту в области каталогов, а далее как на скриншотах выше.
Переименуем созданный каталог в «repo» (кликнуть правой кнопкой мыши по «новая папка», в контекстном меню - «Переименовать...», указать название - repo):
Заходим в созданный каталог, аналогичным образом создаем в нем еще один, переименовываем его в «openshot»:
Далее перемещаем скаченный файл из каталога «Загрузки» в каталог openshot (как и в виндоусе ctrl+x = «вырезать», ctrl + c = «вставить»), после перемещения нужно сделать файл программы исполняемым (кликнуть по нему правой кнопкой мыши, в контекстном меню выбрать пункт «Свойства»; откроется окно свойств файла, перейти на закладку «Права» и выставить галку «Позволить выполнение файла как программы». После этого - закрыть окно свойств.
Далее сделаем ярлык на рабочий стол. Для этого надо:
- кликнуть в свободном месте рабочего стола, в контекстном меню выбрать пункт «Создать кнопку запуска...», откроется окно создания ярлыка:
- в данном окне ввести имя ярлыка, нажать кнопку «Просмотреть», откроется окно выбора программы, для которой мы делаем ярлык. Заходим в /home/[имя пользователя]/repo/openshot/, кликнуть по нашему файлу, далее кликаем кнопку «Открыть», в результате в окне создания ярлыка, в поле «Команда» будет прописан путь к нашему файлу. Далее нажать кнопку «ОК»:
В результате на рабочем столе будет создан ярлык. Кликаем по нему - открывается программа для видеомонтажа OpenShot:
Пакетная установка
Пакетная установка - это основной способ установки ПО. Имеется 3 варианта пакетов:
- Системные пакеты (и в Debian, и в Linux Mint - это deb-пакеты).
- Пакеты Snap.
- Пакеты Flatpak.
Установка системных пакетов
Программы можно устанавливать с помощью терминала (в публикации про графическую подсистему мы часто использовали данный вариант установки пакетов), можно - с помощью графических менеджеров программ (с помощью данного способа мы устанавливали все программы, кроме ProjectLibre в публикации про рабочее место РП), можно двойным кликом по скаченному пакету (так мы устанавливали ProjectLibre в публикации про рабочее место РП).
Однако какой бы вы способ не выбрали - на уровне ОС все равно будет использоваться менеджер пакетов(и в Debian, и в Linux Mint - это apt).
Менеджер пакетов APT
Давайте рассмотрим основные функции пакетного менеджера apt:
- поиск пакетов
- установка пакетов
- обновление пакетов
- удаление пакетов
Поиск пакетов
Поиск пакетов осуществляется одновременно в 2 направлениях - в подключенных репозитариях и среди установленных пакетов. Для поиска явно (в терминале) или неявно (через графические приложения) используется команда:
sudo apt search [имя пакета]
Примечание!!! Есть нюанс - если у вас помимо «обычных» репозитариев подключены snap и/или flatpak репозитарии, то в графических приложениях указанная выше команда дополняется командой (-ами) поиска в этих репозитариях. Но о snap и flatpak поговорим ниже.
Соответственно, есть 3 возможных варианта:
- пакет установлен;
- пакет может быть установлен;
- пакет не установлен и его нет в связанных репозитариях.
Давайте посмотрим, как это выглядит в Linux Mint Mate.
Посмотрим результат, который выдаст команда:
sudo apt search mintinstall
Как видно из скриншота - пакет обнаружен (1), статус пакета - установлен (2).
Теперь попробуем то же самое в графической программе «Менеджер приложений»:
Результат, само-собой, тот же самый. Пакет обнаружен (2) - соответствующая плашка есть, статус пакета «установлен» (3) - на плашке присутствует зеленая галка.
Теперь давайте посмотрим, какой результат выдаст команда:
sudo apt search ksnip
То есть, терминал обнаружил пакет(1), этот пакет не установлен, но может быть установлен(2).
То же самое в «Менеджере приложений»:
Пакет найден и может быть установлен(2) - плашка есть, этот пакет не установлен (3) - зеленая галка отсутствует.
Ну и третий случай скриншотить не буду. Там ничего не выдаст ни терминал, ни «Менеджер приложений». Если есть желание, можно попробовать ввести какое-либо абсурдное название пакета, например:
sudo apt search 1234567890qwertyuiopasdfghjkl
Кроме того, можно посмотреть подробную информацию о том или ином пакете. Для этого в терминале надо выполнить команду:
sudo apt show [имя_пакета]
Установка пакетов
С установкой пакетов также сталкивались в предыдущих публикациях. За установку отвечает команда:
- sudo apt install [название пакета] - для установки из репозитариев;
- sudo apt install [путь к пакету и название пакета] - для установки предварительно скачанных пакетов;
Соответственно, тут может быть 5 основных вариантов ответа. Давайте их рассмотрим, а заодно поставим еще пару полезных программ для Linux.
Вариант 1. Если пакет есть в связанных репозитариях, все все системные зависимости удовлетворены (об этом поговорим чуть ниже, будет отдельный подраздел) то просто начинается скачивание и развертывание пакета; то же самое, если вы ставите предварительно скачанный пакет. В качестве примера рассмотрим еще раз установку libreproject из скаченного deb-пакета:
Как видно система устанавливает указанный нами пакет без дополнительных вопросов
Вариант 2. Если пакет есть в связанных репозитариях, часть зависимостей не удовлетворено, но соответствующие пакеты есть в связанных репозитариях, то система предупредит о том, что для установки пакета нужно поставить еще n пакетов и запросит разрешение на данную операцию; соответственно, абсолютно то же самое, если ставите предварительно скачанный пакет. В качестве примера рассмотрим установку программы для записи видео (интересный вариант для создания видеоинструкций):
Как видно после ввода команды(1) система указывает какие пакеты и в каком количестве будут установлены на компьютер(2) и спрашивает разрешение на данную операцию. Положительный ответ - либо «Д», либо «Y» (латиница), любой другой - отрицательный. В случае положительного ответа система начинает установку всех указанных пакетов.
Для демонстрации аналогичного сценария в графическом интерфейсе «Менеджера программ» установим полезную утилиту «Alien» (позволяет конвертировать установочные пакеты в нужный формат, например rpm в deb):
То есть при нажатии кнопки «Установить» (1), будет открыто еще одно окно (2), в котором будет указан список пакетов, которые будут также установлены (3). Подтвердить установку можно кнопкой «Продолжить» (4).
Вариант 3. Если вы ставите предварительно скачанный пакет, часть зависимостей не удовлетворено и хотя бы 1 пакет от наличия которого зависит работоспособность устанавливаемого пакета отсутствует в репозитариях, тогда система откажет в установке и выдаст информацию о том, отсутствие какого или каких пакетов в репозитариях препятствует установке (соответственно надо либо их докачивать, либо отказываться от установки, пример будет ниже в разделе «системные зависимости»);
Вариант 4. Если вы пытаетесь поставить пакет, который уже установлен, система оповестит об этом (если будете использовать терминал):
В графическом же «Менеджере приложений» исключена даже попытка повторной установки (можно либо удалить, либо запустить):
Вариант 5. Если вы пытаетесь поставить пакет, который отсутствует в репозитарии (или ошиблись с названием файла при локальной установке), тогда система укажет, что такого пакета/файла нет:
Соответственно, в «Менеджере приложений» просто не будет ни одной плашки приложения для установки:
Есть и некоторые другие варианты ответов, но в 90% случаев вы столкнетесь именно с описанными выше.
Посмотреть перечень всех установленных пакетов можно командой:
sudo apt list --installed
На экран терминала будет выведен длинный список установленных пакетов. Однако удобнее данную информацию выводить в файл и смотреть уже там, для этого немного модифицируем команду:
sudo apt list --installed > ~/list_of_pack.txt
При выполнении команды по указанному пути («~» = «/home/myname») создается файл «list_of_pack.txt» со списком установленных пакетов:
Примечание!!! Знак «~» обозначает путь к домашней папке. В приводимом примере «~» соответствует «/home/myname».
Обновление пакетов
Перед обновлением пакетов следует перечитать перечень пакетов в подключенных репозитариях. Делается это командой:
sudo apt update
Т.е. формируется список подключенных репозитариев (2), затем проводятся операции (3). Далее система информирует о количестве пакетов, которые можно обновить, а также подсказывает, какой командой можно посмотреть перечень этих пакетов. Давайте ее выполним:
sudo apt list --upgradable
Собственно, выводит список пакетов (2).
Также в ОС могут иметь место графические индикаторы наличии не уставленных обновлений. Так в Linux Mint индикатор обновлений входит в апплет «Системный лоток», который «из коробки» устанавливается на системную панель:
В случае если есть обновления загорается оранжевая точка.
В терминале обновить пакеты можно обновить командой:
sudo apt upgrade
При вызове команды (1), система проводит ряд операций (см.скриншот), далее выводит список пакетов к обновлению (2), также укажет количество пакетов и запросит разрешение на обновление (3). Соответственно если указать «Y» или «Д», начнется обновление. При указании любого другого значения операция будет отменена.
Также обновление можно проводить с использованием графического интерфейса. В Linux Mint (Mate) для этого нужно кликнуть по индикатору с желтой точкой (1), откроется окно «Менеджера обновлений»(2):
Первым делом надо перечитать информацию об обновляемых пакетов (3), далее не следует пугаться, что в терминале было 11 обновлений, а здесь - всего 3(4), будут обновлены все 11. Если нужно обновить только часть пакетов - снять галки (5) с тех пакетов которые обновлять не надо. Для проведения обновления - нажать кнопку «Установить обновление» (6).
Удаление пакетов
Удаление пакетов осуществляется одной из 2-х команд:
- sudo apt remove [имя_пакета]
- sudo apt purge [имя_пакета]
Между ними следующая разница - remove оставляет конфигурационные файлы, а purge выполняет полное удаление.
Системные зависимости
Если кратко - структура линуксов отстроена иерархически. Допустим, при установке «пакета А», ОС проверила, какие пакеты необходимы «пакету А» для функционирования и выявила, что необходим пакет «Б». Мы соглашаемся с установкой «пакета А» и «пакета Б». Далее нам потребовался «пакет В», система проанализировала необходимые для него пакеты и выявила, что ему тоже потребуется «пакет Б». В этом случае, система не будет повторно устанавливать «пакет Б», а воспользуется уже установленным. При этом не имеет значение, «пакет Б» - системная библиотека или нет.
Это имеет как свои плюсы, так и минусы. Самый большой минус заключается в следующем. Допустим, для «пакета А» требуется «пакет Б» версии от 1.х до 2.х. А более поздние версии не подходят. А для «пакета В» требуется «пакет Б» версии 3.х и выше. Это порождает проблему - вы не можете на один компьютер установить и «пакет А» и «пакет В».
В ряде случаев проблему решить можно. Например, для ruby можно установить на локальный компьютер отдельный репозитарий, который может содержать разные версии пакета и использовать ту версию, которая необходима для каждого конкретного связанного пакета. О ruby мы будем говорить, не в этой публикации, но достаточно скоро.
Другой вариант решения проблемы - это использование универсальных пакетов snap и flatpak. О них мы поговорим в текущей публикации. Кратко - они не зависят от системных пакетов, устанавливаются изолированно от системных пакетов, все зависимости включены в пакет. То есть допустим «пакет А» устанавливается deb-пакетом и «пакет Б» подтягивается той версии, которая необходима для «пакета А». А «пакет В» устанавливается как flatpak или snap-пакет.
Проблемы с системными зависимостями в подавляющем большинстве случаев возникает при локальной установке. Либо при установке скаченного deb-пакета (этот случай будем рассматривать в данном разделе), либо при установки из исходников (об этом способе установки поговорим в отдельной публикации). Теоретически еще может ситуация с некорректным изъятием пакета из репозитария, однако лично ни разу с такой ситуацией не сталкивался.
Итак, давайте еще раз проговорим, что делает менеджер пакетов при локальной установке пакета (то есть предварительно скаченного на компьютер):
1. Проверяет системные зависимости с другими пакетами.
Примечание! deb-пакет - это не бинарный файл, а файловый архив. Есть спецификация, которая описывает состав deb-пакета. В том числе deb-пакет содержит файл «control» (каталог DEBIAN), в котором в том числе содержится перечень пакетов, от которых зависит работоспособность устанавливаемого пакета, а также рекомендуемые к установке пакеты.
2. Перечисленные в зависимостях пакеты также проверяются, не зависят ли они от других пакетов. Если зависимости найдены, они в свою очередь также проверяется на зависимости. И так далее в рекурсии.
3. Если все системные зависимости удовлетворены (т.е. все установлены в системе), apt начнет установку пакета без дополнительных вопросов.
4. Если не все системные зависимости удовлетворены, но в подключенных репозитарях есть все пакеты для ее удовлетворения, то apt предложит установить недостающие пакеты, если и если вы согласитесь, то все необходимые пакеты будут подтянуты в процессе установки.
5. Если хотя бы 1 пакет не содержится в подключенных репозитариях, apt не станет устанавливать пакет, но укажет, какие пакеты не удалось найти. Ну а далее вы либо «ручками» находите пакеты и устанавливаете эти пакеты, либо отказываетесь от установки программы, либо ищите snap- или flatpak пакеты (об этом будет ниже).
Давайте на практике поработаем с системными зависимостями, чтобы это лучше уложилось в голове.
С простыми случаями мы уже сталкивались в предыдущих публикациях (когда вводили sudo apt install [необходимый_пакет], а система вместо 1-го устанавливала целую кучу пакетов). Поэтому рассмотрим случай посложнее, когда надо «поработать ручками». Установим в Debian "Менеджер программ" для Linux Mint (mintinstall).
Итак, первым делом узнаем название пакета. Для этого заходим в Linux Mint и запускаем тот самый графический менеджер пакетов («Менеджер программ»):
В менеджере приложений открываем настройки и выбираем пункт «о программе», откроется окно, в котором будет указано название пакета (такой подход не всегда работает, но довольно часто):
Итак, пакет называется «mintinstall». Запоминаем и переходим в Debian. Там открываем браузер и заходим в репозитарий Linux Mint:
http://packages.linuxmint.com/pool/main/m/mintinstall/
и кликаем по файлу «mintinstall_8.4.0_all.deb»:
Ждем, когда пакет скачается. В домашней директории делаем папку repo, в ней - папку «Mintinstall», переносим в нее из «Загрузок» скачанный файл (скринить не буду, делать по аналогии как делали выше).
Далее открываем терминал в терминале переходим в папку с нашим файлом:
cd /home/myname/repo/mintinstall
Пытаемся установит наш пакет:
sudo apt install ./mintinstall_8.4.0_all.deb
Как можем видеть на скриншоте у нас 2 неудовлетворенных зависимостей:
- mint-common
- apt-install-data
То есть в репозитариях Debian таких пакетов нет. Ищем и скачиваем. Также удобным будет помечать зависимости по уровням (например, в электронных таблицах):
Снова идем в репозитарий Linux Mint и скачиваем эти 2 пакета:
- mint-common:
http://packages.linuxmint.com/pool/main/m/mint-common/
- apt-install-data:
http://packages.linuxmint.com/pool/import/a/app-install-data-ubuntu/
Переносим скаченные пакеты в /home/myname/repo/mintinstall и пытаемся их установить:
Как видим на скриншоте, пакет установлен. На зачеркнутое крестиками внимание не обращаем. Установленные пакеты удобно помещать в отдельную папку. Также помечаем установленный пакет в xls-файле:
Пытаемся установить mint-common:
Пока - неудачно. Нужны еще 2 пакета:
- aptkit
- mint-translation
Качаем из репозитария:
- aptkit:
http://packages.linuxmint.com/pool/main/a/aptkit/
- mint-translation
http://packages.linuxmint.com/pool/main/m/mint-translations/
Переносим пакеты в папку /mintinstall, записываем пакеты в электронную таблицу:
Пытаемся установить aptkit:
И снова пока неудачно. Нужен пакет python3-defer.
Пробуем установить пакет mint-translation:
Этот пакет установить удалось. Помечаем результаты в электронной таблице:
Докачиваем пакет python3-defer:
http://packages.linuxmint.com/pool/upstream/p/python-defer/
Переносим его в папку /mintinstall/ и пытаемся установить:
Пакет установился. А теперь открываем наши записи в электронной таблице и последовательно устанавливаем «белые» пакеты снизу-вверх:
В итоге получаем:
Пробуем что-нибудь установить, например, тот же Gimp:
Устраняем ошибку:
Повторяем попытку установки программы из mintinstall:
Установка началась (скриншотить запрос на установку доп.пакетов и ввод пароля не буду):
Программа установилась и запускается:
Вот примерно так обрабатываются системные зависимости.
Тем не менее, как говорится, нужно быть не только находчивым и внимательным, но еще и логически мыслящим. Потому что есть аналог менеджера приложений, который мы устанавливали. А устанавливается всего в одну команду, давайте попробуем на новой копии виртуалки:
sudo apt install gnome-software
В результате получим аналог устанавливаемого ранее менеджера программ, но только без заморочек «ручным» разрешением системных зависимостей:
Так что прежде чем тратить полчаса на на удовлетворение зависимостей, было бы правильно посмотреть, а нет ли аналога, который по функциональности не уступал бы, но был бы проще в установке. А неудобств тут значительно больше. Например, после обновления ОС программа может не заработать. А может начать сыпать ошибками. Если обновленные связанные пакеты будут несовместимы с пакетами, установленными вручную.
Поэтому применительно к нашему примеру скажем следующее. То, что mintinstall нельзя запустить на других ОС семейства линукс - это неправда. Однако в виду наличия аналога, функционально не уступающего данной программе, но имеющего преимущество в скорости установки и простоте поддержки установка данного пакета в ОС Debian не является целесообразным. Тем не менее в качестве более глубокого понимания принципа работы с системными зависимостями можно рекомендовать данную установку в качестве обучающего материала на учебную площадку.
Эту публикацию также пришлось разделить на 2 части. Окончание публикации - в следующей части (здесь).