---
# System prepended metadata

title: Лабораторная работа №3. Установка программного обеспечения в Linux.
tags: [МДК02.05 Организация администрирования операционных систем Linux, Linux]

---

###### tags: `МДК02.05 Организация администрирования операционных систем Linux` `Linux`
# Лабораторная работа №3. Установка программного обеспечения в Linux.
### Тема: Установка программного обеспечения в Linux. 
##### Цель работы: Научиться: устанавливать программное обеспечение с использованием пакетного менеджера, исходного кода, а также из файлов .deb.
##### Необходимые материалы: Пк с доступом в интернет. Виртуальные машины с Linux Debian и Ubuntu.  

## Теоретическая часть
### Установка программ из репозиториев
**Что такое пакет в Linux?**

В Windows программы обычно распространяются в виде exe файлов или в каком-нибудь специально упакованном формате. В Linux программы распространяются в виде пакетов.

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

Существуют два популярных формата пакетов:

- DEB – формат файлов пакетов, использующихся в дистрибутиве Debian и во всех основанных на нем дистрибутивах, таких как: Ubuntu, Linux Mint и другие;
- RPM – менеджер пакетов, использующийся в дистрибутиве Red Hat, а также во многих других популярных дистрибутивах, таких как: openSUSE, CentOS, Mageia и других.

**Как устанавливаются программы в Linux?**

Все программы, а точнее пакеты, устанавливаются в систему с использованием централизованного метода, т.е. из единой точки, такой точкой может быть либо инструмент с графическим интерфейсом, часто его называют «Менеджер приложений», либо традиционный для Linux способ, утилиты командной строки (терминала).

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

Ярким примером использования такой концепции представлен на всех смартфонах (ведь Android это Linux!), где для установки приложения Вы просто открываете менеджер программ (например, Play Маркет), находите нужную программу, и нажимаете установить и все!

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

**Что такое репозиторий в Linux?**

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

**Какие бывают репозитории в Linux?**

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

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

- Main – здесь расположено основное, полностью бесплатное программное обеспечение;
- Restricted – проприетарное программное обеспечение, официально поддерживаемое дистрибутивом;
- Universe – бесплатное программное обеспечение, официально поддерживаемое сообществом дистрибутива;
- Multiverse – проприетарное программное обеспечение, не поддерживаемое дистрибутивом.

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

Например, дополнительные репозитории в Ubuntu и основанных на нем дистрибутивах называются PPA-репозитории.

:::success
PPA (Personal Package Archive) – это персональный репозиторий разработчика конкретной программы, где он хранит пакеты своих программ, которые еще не включены в основной репозиторий дистрибутива.
:::

**Как работать с репозиториями в Linux?**

Если репозиторий – это некий сервер в интернете, на котором хранятся программы, то, чтобы к нему обратиться за необходимой нам программой, мы должны знать адрес этого сервера. Один из самых удобных способов обращения к ресурсам в интернете – это использовать веб протоколы взаимодействия, таким образом, по факту адрес репозитория выглядит, как обычный URL-адрес сайта.

Для того чтобы система знала и помнила, куда обращаться за пакетами (программами), она хранит все адреса репозиториев в специальном файле **sources.list**, который расположен в каталоге в **/etc/apt**. И вся работа с репозиториями в Linux заключается в добавлении и удалении адресов репозиториев.

Для управления репозиториями в терминале используется команда add-apt-repository, так, например, для добавления PPA-репозитория команда будет выглядеть следующим образом.

```bash!
sudo add-apt-repository –y ppa:atareao/telegram
```

где, ppa:atareao/telegram – это PPA-репозиторий для установки программы Telegram.

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

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

В мире Linux существует целый ряд пакетных менеджеров. Их распространенность зависит от степени популярности дистрибутивов, в которых они используются. Так часто встречается пакетный менеджер **APT** (advanced package tool), так как он используется семейством Debian, к которому относятся Ubuntu, Linux Mint и др. Среди других менеджеров можно отметить **YUM** для дистрибутивов, пакеты которых распространяются в формате RPM (Fedora, CentOS и др).

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

С помощью первого аргумента, передаваемого программе apt, мы указываем, что хотим сделать: установить программу, удалить, обновить. Вторым аргументом идет имя пакета или его часть, если выполняется поиск 

![](https://i.imgur.com/3QUwtIB.png)

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

```bash!
sudo apt install имя_пакета
sudo apt remove имя_пакета
```

Пусть надо установить консольный файловый менеджер **Midnight Commander**. Имени пакета мы не знаем, поэтому воспользуемся командой **search** утилиты **apt**. На экране появится список пакетов с кратким описанием. Очевидно нам нужен пакет **mc**.

![](https://i.imgur.com/uBGqLe1.png)

Далее устанавливаем программу, передав менеджеру пакетов команду install. Сначала apt соберет данные о пакете и его зависимостях. После этого попросит подтвердить ваше намерение установить пакет, и начнется процесс установки.

![](https://i.imgur.com/IcnSPpR.png)

С помощью **sudo apt autoremove** можно удалить неиспользуемые пакеты. Скорее всего они требовались для установки ПО. Если надо удалить саму программу, то используется команда remove утилиты **apt**.

### Сборка программного обеспечения из исходного кода

> Достаточно один раз в жизни услышать волшебное заклинание: "configure, make, make install".

Дальше я объясню, что это значит.

Администраторам Linux необходимо знать как происходит сборка программ из исходников. Так как вы можете столкнуться стем, что вашей программы может и не быть скомпилированной под ваш дистрибутив. Сама сборка программ не сложна, и обычно описана в файле README или INSTALL, который идет вместе с пакетами для сборки. Так что, будьте внимательны.


Сборку программы можно сравнить с выпечкой пирога. Чаще всего, вначале надо взять все необходимые ингридиенты (исходники),
потом смешать их в нужном порядке (подготовить исходники к сборке, **./configure**), а затем залить в форму и поставить в печь (запустить сборку, **make**). Спустя некоторое время из печи можно вынимать готовый к употреблению пирог (устанавливать готовую программу, **make install**). 

Следует отметить, что в данном случае для выпечки необходима кухня и печь. Также и для сборки программы необходимы инструменты разработчика. Обычно это включает в себя как минимум компилятор и сопутствующие ему программы, как например утилита **make**. Это и есть "печь". Потребуется и место, где можно всем этим заняться -- командная строка (терминал) ("кухня"). Если у вас есть и "кухня", и "печь", то можете начинать "готовить".

Итак, все свободные программы доступны в виде исходного кода. Это полуфабрикат программы. Из него легко можно собрать саму программу, а можно и использовать для создания какой-нибудь новой программы. По-английски **исходный код** называется **source code**.

Для того чтобы установливать программы из исходного кода необходимо иметь установленные утилиты:

```bash!
apt install build-essential automake autoconf
```
#### Порядок установки ПО из исходного кода. 
1. Для начала необходимо скачать архив с исходным кодом программы для этого можно воспользоваться командой **wget**. 
2. Далее нужно распоковать архив и перейти в директорию с иходным кодом к примеру:
```bash!
tar xzf gparted-1.1.0.tar.gz
cd gparted-1.1.0
```
3. После нужно приступить к сборке программы:
```bash! 
./configure # проверяються зависимости
make # программа компилируеться
make install # программа устанавливаеться в системе. 
```
:::warning
На этапе **./configure** нужно внимательно смотреть за выводом утилиты и если появляеться ошибка это значит что нехватает какой-то зависимости "пакета". Пример процесс проверки зависимостей для asterisk:

![](https://i.imgur.com/AP88jjd.png)

Для поиска необходимого пакета можно использовать как поисковик **Google**, так и поиск по репозиториям **apt search**. Для того чтобы удовлетворить зависимость выше нужно установить пакет **libedit-dev**
:::

### Установка программ из файлов .deb 

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

![](https://i.imgur.com/gQsfoWB.png)

Для этого вам нужно будет скопировать прямую ссылку на загрузку пакета и с помощью утилиты **wget** скачать его: 
```bash!
wget http://ftp.de.debian.org/debian/pool/main/w/wireguard/wireguard_1.0.20210223-1_all.deb
```
Чтобы установить программу из пакета нужно воспользоваться командой:
```bash!
dpkg -i имя_пакета.deb
```

## Практическая часть
1. Замените стандартные репозитории debian на репозитории от yandex. 
#### Репозитории яндекса для debian 11 bullseye.
Очистите файл командой:
```
cat /dev/null > /etc/apt/sources.list
```
Откройте файл командой `nano /etc/apt/sources.list` , вставьте следующий текст:
```
# bullseye
 
#deb http://security.debian.org/ bullseye/updates main
# Line commented out by installer because it failed to verify:
#deb-src http://security.debian.org/ bullseye/updates main
 
deb http://mirror.yandex.ru/debian bullseye main
deb-src http://mirror.yandex.ru/debian bullseye main
 
deb http://mirror.yandex.ru/debian bullseye-updates main
deb-src http://mirror.yandex.ru/debian bullseye-updates main
 
deb http://mirror.yandex.ru/debian/ bullseye-proposed-updates main non-free contrib
deb-src http://mirror.yandex.ru/debian/ bullseye-proposed-updates main non-free contrib
 
# Backports
#deb http://mirror.yandex.ru/debian bullseye-backports main contrib non-free
#deb-src http://mirror.yandex.ru/debian bullseye-backports main contrib non-free
```

Обновите информацию из репозиториев. 
```
apt update
```

3. Установите с помощью пакетного меннеджера програму **mc** на виртуальную машину Debian. Протестируйте и опишите что это за программа? 
4. Установите программу **screenfetch** из PPA репозитория на Ubuntu. Отобразите в отчете процесс добавления нового репозитория. Выполните программу в терминале. 
5. Установите mc на Ubuntu. Удалите mc с Ubuntu. 
6. Установите веб сервер nginx из исходного кода. Исходный код можно найти по ссылке (https://nginx.org/ru/download.html). В отчете отобразите все шаги установки. 
7. Запустите nginx. Для этого перейдите в директорию `/usr/local/nginx/sbin` и выполните в консоли команду **nginx**. После перейдите в браузере по ip адресу машины. ![](https://i.imgur.com/6FfgMSo.png)
8. После завершения установки вам понадобиться добавить системный сервис для работы с демоном nginx для этого создайте файл `/lib/systemd/system/nginx.service`:
```=
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
```
Далее если вы выполните команды:
```bash=
#если запущен nginx с предыдущего пункта будет писать что 80 порт занят. 
cd /usr/local/nginx/sbin
nginx -s stop # Поэтому стопните его. 
systemctl start nginx
systemctl status nginx
```
То заметите такую ошибку:

![](https://i.imgur.com/GHCqYAY.png)

Это происходит потому-что в конфигурационном файле nginx указан не верный путь к .pid файлу. Откройте файл `/usr/local/nginx/conf/nginx.conf` и измените значение директивы **`pid`**:
```=
pid        /run/nginx.pid;
```
Если после этого не поможет то вернитесь на этап сборки программы и сконфигурируйте программу с ключем:
```=
./configure --pid-path=/run/nginx.pid
make
make install
```
В итоге у вас должен стартовать nginx через системный сервис:

![](https://i.imgur.com/535NE4V.png)

10. Скачайте на Ubuntu web браузер **Google Chrome** через браузер **Firefox**, после найдите пакет **.deb** через терминал и установите его. 
11. Установите какую-нибудь консольную игру через исходный код. 


Про "сервисы и демоны" в Linux мы поговорим в последующих занятиях. 

## Контрольные вопросы

1. **Что такое пакет в Linux?** 
2. **Какие бывают расширения у пакетов?**
3. **Что такое репозиторий в Linux? В каком файле находятся репозитории?**
4. **Какие бывают виды репозиториев?**
5. **Какие есть способы добавления репозиториев в Linux?**
6. **Какие существуют пакетные менеджеры? Опишите основные возможности пакетного менеджера.**
8. **Как устанавливаються программы из исходного кода?**
