Начало работы с Arduino Yun

Первые шаги по настройке Arduino Yun.

Примечание

Это устаревший продукт.

Arduino Yun – это плата Arduino, не похожая ни на одну другую. Хотя программирование очень похоже на Arduino Leonardo и используется тот же процессор Atmel ATmega32U4, у неё также есть дополнительный процессор Atheros AR9331, на котором работает Linux и беспроводной стек OpenWrt. Программирование 32U4 через USB идентично Arduino Leonardo. После настройки Yun для подключения к вашей WiFi-сети вы также можете программировать 32U4 по WiFi.

Быстрый старт

Arduino Yun программируется с помощью Arduino Software (IDE), нашей интегрированной среды разработки, общей для всех наших плат. Вы уже должны были установить её на свой компьютер, как описано на главной странице Начала работы.

Установка драйверов для Yun

OSX

При первом подключении Yun к Mac запустится «Keyboard Setup Assistant». С Yun нечего настраивать; вы можете закрыть этот диалог, нажав красную кнопку в левом верхнем углу окна.

Уведомление о клавиатуре OSX

Windows

Windows-версия Arduino Software (IDE) уже содержит необходимые драйверы. При установке вы позволили операционной системе установить их. Подключите Yun, и драйверы установятся автоматически.

Linux

Для Ubuntu 10.0.4 и более поздних версий установка драйверов не требуется, но убедитесь, что порт 5353 не блокируется файрволом.

Откройте свой первый скетч

Откройте пример мигания светодиодом: File > Examples > 01.Basics > Blink.

Загрузка примера Blink

Выберите тип платы и порт

Вам нужно выбрать запись в меню Tools > Board, соответствующую вашей плате Arduino.

Выбор платы Yun

Выберите последовательное устройство платы в меню Tools | Serial Port. Скорее всего, это будет COM3 или выше (COM1 и COM2 обычно зарезервированы для аппаратных последовательных портов). Чтобы узнать номер порта, вы можете отключить плату и заново открыть меню; исчезнувший пункт и будет портом Arduino. Снова подключите плату и выберите этот последовательный порт. Когда ваша плата правильно настроена для WiFi, вы найдёте её в списке портов, как на нашем скриншоте.

Выбор порта Yun

Загрузка программы

Теперь просто нажмите кнопку «Upload» в среде разработки. Подождите несколько секунд – вы должны увидеть мигание светодиодов RX и TX на плате. Если загрузка успешна, в строке состояния появится сообщение «Done uploading.».

Загрузка скетча

Через несколько секунд после завершения загрузки вы должны увидеть, как встроенный светодиод начнёт мигать. Если так, поздравляем! Вы запустили Arduino Yun. Если возникли проблемы, обратитесь к рекомендациям по устранению неполадок.

Вдохновляйтесь

Теперь, когда вы настроили и запрограммировали плату Yun, вы можете найти вдохновение на нашей платформе руководств Project Hub, или вы можете углубиться с библиотекой Bridge и примерами. Вы также можете ознакомиться со страницей оборудования Yun для получения дополнительной технической информации.

Важная информация

Отличия от Arduino Leonardo

Компоненты Yun

Помимо чипа 32U4, Yun имеет дополнительный процессор Atheros AR9331, на котором работает дистрибутив Linux для встраиваемых систем под названием OpenWrt-Yun, основанный на OpenWrt. Также включена полная установка Python 2.7.

У Yun имеется ряд отличий по физическим характеристикам и разъёмам по сравнению с Leonardo. На плате есть встроенный слот для SD-карты, разъём Ethernet и USB-A Host. На Yun нет разъёма питания типа «бочонок»; плата может получать питание от разъёма micro-USB.

На плате нет встроенного стабилизатора на 5V. Если вы подадите на Yun более 5V, вы, скорее всего, повредите его. Если вы не питаете Yun от разъёма micro-USB, вы можете подать питание на пины VIN и 5V на плате. При использовании пина VIN нельзя подавать более 5V – это повредит плату. Рекомендуется по возможности питать Yun через USB-подключение.

Разъёмы SD, Ethernet и USB-A физически не подключены к процессору 32U4, они подключены к AR9331.

Процессор 32U4 на Yun работает так же, как Leonardo, за исключением того, что вы не можете использовать Serial1. Он зарезервирован для связи с процессором AR9331.

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

Процессоры 32U4, WiFi и AR9331 имеют собственные кнопки сброса.

Кнопки сброса Yun

На Yun имеется несколько индикаторных светодиодов: питание, WLAN-подключение, WAN-подключение и USB. Кроме того, пин 13 подключён к одному из индикаторных светодиодов.

Индикаторные светодиоды Yun

OpenWrt-Yun

Yun работает на дистрибутиве Linux под названием OpenWrt-Yun, основанном на OpenWrt. Хотя систему можно настроить из командной строки, имеется веб-страница, которая позволяет настраивать множество различных параметров. Интерфейс (называемый LuCi) предоставляет доступ к большинству настроек, необходимых для обслуживания WiFi-интерфейса.

Доступ к веб-интерфейсу описан ниже.

Для установки дополнительного программного обеспечения в OpenWrt-Yun необходимо использовать менеджер пакетов Linux opkg. Для получения дополнительной информации о менеджере и некоторых часто используемых командах смотрите страницу менеджера пакетов Yun.

При взаимодействии с системой OpenWrt-Yun необходимо использовать командную строку, доступ к которой можно получить через библиотеку Bridge Arduino или через SSH. Если вы не знакомы с командной строкой, рекомендуется прочитать о некоторых основах и часто используемых программах.

Важно

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

Python

Установка Python 2.7 включена в OpenWrt-Yun, с помощью которой вы можете писать приложения или скрипты. Для получения дополнительной информации о Python посетите страницы документации Python 2.7.

Если вы впервые начинаете работать с Python, в интернете есть множество отличных ресурсов. «Learn Python the Hard Way» охватит всё, что вам нужно знать для начала работы с собственными скриптами.

Внешнее хранилище на Yun

Не рекомендуется использовать встроенную энергонезависимую память Yun, поскольку она имеет ограниченное количество циклов записи.

Вы можете использовать внешнюю память, например microSD-карту или USB-накопитель, для сохранения данных, собственных скриптов, веб-страниц и т.д. Чтобы Yun мог обращаться к этим накопителям и сохранять информацию на них через 32U4, на них должна быть директория с именем arduino в корне тома.

Веб-сервисы

OpenWrt-Yun использует REST для клиентов и серверов. REST – это аббревиатура от «Representational State Transfer». Это архитектура программного обеспечения, которая предоставляет доступ к различным частям оборудования Arduino через URL-адреса.

По умолчанию доступ к REST API защищён паролем. Можно изменить эту настройку для доступа к сервисам без пароля. Чтобы изменить эту настройку, войдите в панель конфигурации Yun. Внизу страницы вы увидите переключатели для изменения доступа.

Настройка REST-доступа Yun

Хорошее введение в концепции REST можно найти здесь.

Yun распознаёт три конечные точки REST:

  • /arduino

  • /data

  • /mailbox

Директория «/arduino» не имеет предварительно настроенных обработчиков. Всё, что добавлено в URL после конечной точки, передаётся от веб-сервера скетчу на 32U4. Вы можете определить свои API внутри скетча. Смотрите пример Bridge, чтобы узнать, как это делается для доступа к пинам платы.

«/data» используется для доступа к внутреннему хранилищу ключ/значение. Доступные вызовы:

  • /put/KEY/VALUE : сохраняет значение в хранилище

  • /get/KEY : получает значение запрошенного ключа в формате JSON

  • /get : получает весь список хранилища в формате JSON

  • /delete : удаляет внутреннее хранилище

«mailbox» используется для добавления сообщений в очередь Mailbox. Очередь сообщений хранится в системе Linux и может быть прочитана микроконтроллером Arduino. Доступный REST-вызов:

  • «/mailbox/message»

Сброс процессоров (AR9331, WiFi и 32U4)

Чтобы перезагрузить AR9331, который перезагружает OpenWrt-Yun, нажмите кнопку сброса «YUN RST», расположенную рядом с аналоговыми входами и светодиодами платы.

Чтобы перезагрузить 32U4 и перезапустить текущий установленный скетч Arduino, нажмите кнопку рядом с разъёмом Ethernet два раза.

Кнопка сброса WiFi расположена рядом с разъёмом USB-A. Она обозначена «WLAN RST». При нажатии на кнопку светодиод WLAN мигнёт.

Если вы переехали в другую сеть и больше не можете получить доступ к Yun через его веб-интерфейс по беспроводной связи, вы можете сбросить сетевую конфигурацию Yun, нажав кнопку сброса WiFi (WLAN RST) дольше 5 секунд, но менее 30 – процессор AR9331 перезагрузится. Конфигурация WiFi будет сброшена, и Yun создаст собственную WiFi-сеть Arduino Yun-XXXXXXXXXXXX. Любые другие изменения/настройки будут сохранены.

Чтобы сбросить дистрибутив OpenWrt-Yun в состояние по умолчанию, нажмите кнопку сброса WiFi (WLAN RST) не менее 30 секунд. Плата вернётся к исходным настройкам: как только что извлечённая из коробки или к последнему обновлению образа OpenWrt, который вы перепрошивали ранее. Среди прочего, это удалит все установленные файлы и сетевые настройки.

Сброс пароля

Пароль веб-панели можно сбросить и изменить. Подключите Arduino Yun к компьютеру USB-кабелем и загрузите скетч YunSerialTerminal. Его можно найти в примерах Bridge в Arduino IDE. После завершения загрузки Yun откройте монитор последовательного порта, выберите символ New Line в выпадающем меню и нажмите Enter. В мониторе последовательного порта должно появиться что-то подобное:

Сброс пароля Yun

Теперь вам нужно выполнить команду passwd для смены пароля. Введите passwd в поле ввода монитора последовательного порта и нажмите Enter. Вам будет предложено ввести новый пароль и повторить его для подтверждения. При желании вы можете проигнорировать ошибку о слабом пароле. Если оба введённых пароля совпадают, системный пароль будет изменён, и вы сможете получить доступ к веб-панели с новым паролем.

Последовательная перерегистрация при сбросе

Поскольку Yun не имеет выделенного чипа для обработки последовательной связи, это означает, что последовательный порт является виртуальным – это программная процедура как в вашей операционной системе, так и на самой плате. Подобно тому, как ваш компьютер создаёт экземпляр драйвера последовательного порта при подключении любого Arduino, 32U4 создаёт экземпляр последовательного порта при запуске загрузчика. Плата является экземпляром драйвера USB Connected Device Class (CDC).

Это означает, что при каждом сбросе процессора 32U4 USB-последовательное соединение будет разорвано и восстановлено. Плата исчезнет из списка последовательных портов, и список будет обновлён. Любая программа, имеющая открытое последовательное соединение с Yun, потеряет его. Это отличается от Arduino Uno, где можно сбросить главный процессор (ATmega328P) без разрыва USB-соединения (которое поддерживается вторичным процессором ATmega8U2 или ATmega16U2). Это различие имеет значение для установки драйверов, загрузки и связи.

Отсутствие сброса при открытии последовательного порта

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

Это также относится к Console, описанному ниже.

Это означает, что если вы используете операторы Serial или Console print(), println() или write() в setup(), они не будут отображаться при открытии монитора последовательного порта или подключения Console. Чтобы обойти это, вы можете проверить, открыт ли порт:

// stops the program until Serial Monitor is opened
while (!Serial) ;

или

// stops the program until Console is opened
while (!Console) ;

Настройка встроенного WiFi

Yun может работать как точка доступа, а также подключаться к существующей сети. Эти инструкции помогут вам подключить Yun к беспроводной сети. Yun может подключаться к незашифрованным сетям, а также к сетям с шифрованием WEP, WPA и WPA2.

При первом включении Yun создаст WiFi-сеть с именем ArduinoYun-XXXXXXXXXXXX. Подключите ваш компьютер к этой сети.

После получения IP-адреса откройте веб-браузер и введите http://arduino.local или 192.168.240.1 в адресной строке. Через несколько мгновений появится веб-страница с запросом пароля. Введите arduino и нажмите кнопку Log In.

Пароль веб-интерфейса Yun

Вы увидите страницу с диагностической информацией о текущих сетевых подключениях. Первый – это ваш WiFi-интерфейс, второй – Ethernet-подключение. Нажмите кнопку Configuration для продолжения.

Диагностика сети Yun

На новой странице вы настроите Yun, задав ему уникальное имя и указав, к какой сети подключаться.

В поле Yun NAME задайте вашему Arduino уникальное имя. Вы будете использовать его для обращения к плате в будущем.

Выберите пароль из 8 или более символов для вашего Arduino. Если оставить это поле пустым, система сохранит пароль по умолчанию arduino.

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

Введите имя WiFi-сети, к которой хотите подключиться.

Выберите тип безопасности и введите пароль.

Конфигурация Yun

При нажатии кнопки Configure & Restart Arduino перезагрузится и присоединится к указанной сети. Сеть Arduino отключится через несколько мгновений.

Перезагрузка Yun

Теперь вы можете присоединиться к сети, которую назначили Yun.

Программирование 32U4 по WiFi

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

После настройки Yun подключитесь к сети, указанной в настройках конфигурации. Откройте Arduino IDE.

В меню Tools > Port вы должны увидеть запись с именем и IP-адресом вашего Yun. В меню Board выберите Arduino Yun.

Откройте пример Blink (File > Examples > 01Basics > Blink) и загрузите скетч на плату. Вам будет предложено ввести пароль администратора. Используйте тот, который вы указали на экране конфигурации.

После загрузки программы процессор 32U4 перезагрузится. Вы должны увидеть мигание светодиода, подключённого к пину 13.

Использование встроенного Ethernet

При подключении Yun к проводной сети Ethernet-кабелем он попытается подключиться автоматически через DHCP. Плата появится в меню портов так же, как и при подключении по WiFi.

Если вы хотите подключить Yun напрямую к компьютеру, настройте сетевые интерфейсы компьютера на использование статического IP-адреса или работу в качестве DHCP-сервера.

Примечание

Ethernet-интерфейс – это eth1, а не eth0.

Связь с OpenWrt-Yun через Bridge

Библиотека Bridge обеспечивает связь между Arduino и OpenWrt-Yun. Существует несколько различных служебных классов, которые облегчают различные виды связи между ними, описанные ниже, а более подробно – на страницах справочника библиотеки Bridge.

Блок-схема Bridge

WiFi- и Ethernet-интерфейсы, USB-хост и SD-карта подключены к AR9331. Библиотека Bridge позволяет работать с этими устройствами, а также запускать скрипты и взаимодействовать с веб-сервисами.

Console

Console, основанный на Bridge, позволяет отправлять информацию с Yun на компьютер так же, как через монитор последовательного порта, но по беспроводной связи. Он создаёт защищённое соединение между Yun и вашим компьютером через SSH.

Загрузите следующий скетч на Yun:

#include <Console.h>

const int ledPin = 13; // the pin that the LED is attached to
int incomingByte;      // a variable to read incoming serial data into

void setup() {
  // initialize serial communication:
  Bridge.begin();
  Console.begin();

  while (!Console){
    ; // wait for Console port to connect.
  }

  Console.println("You're connected to the Console!!!!");

  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
}

void loop() {
  // see if there's incoming serial data:
  if (Console.available() > 0) {
    // read the oldest byte in the serial buffer:
    incomingByte = Console.read();

    // if it's a capital H (ASCII 72), turn on the LED:
    if (incomingByte == 'H') {
      digitalWrite(ledPin, HIGH);
    }

    // if it's an L (ASCII 76) turn off the LED:
    if (incomingByte == 'L') {
      digitalWrite(ledPin, LOW);
    }
  }

  delay(100);
}

Чтобы увидеть Console, выберите имя и IP-адрес вашего Yun в меню Port. Yun появится в меню Ports только если ваш компьютер находится в одной LAN с Yun. Если ваша плата находится в другой сети, вы не увидите её в меню Ports. Откройте Port Monitor. Вам будет предложено ввести пароль Yun.

Вы также можете увидеть Console, открыв окно терминала и набрав:

ssh root@yourYunsName.local 'telnet localhost 6571'

и нажав Enter.

Примечание

Если вы используете Windows, вам необходимо установить эмулятор терминала. PuTTY – разумный выбор, но вам придётся вводить две вышеуказанные команды отдельно.

Наберите „H“, чтобы включить светодиод на пине 13, и „L“, чтобы выключить его.

Process

Команды Process позволяют запускать процессы Linux в OpenWrt-Yun через Arduino.

В следующем примере OpenWrt-Yun подключится к серверу с помощью curl и загрузит ASCII-текст. Он выведет текст через последовательное соединение.

#include <Process.h>

void setup() {
  // Initialize Bridge
  Bridge.begin();

  // Initialize Serial
  Serial.begin(9600);

  // Wait until a Serial Monitor is connected.
  while (!Serial);

  // run various example processes
  runCurl();
}

void loop() {
  // Do nothing here.
}

void runCurl() {
  // Launch "curl" command and get Arduino ascii art logo from the network
  // curl is command line program for transferring data using different internet protocols
  Process p;        // Create a process and call it "p"
  p.begin("curl");  // Process that launch the "curl" command
  p.addParameter("http://arduino.tips/asciilogo.txt"); // Add the URL parameter to "curl"
  p.run();      // Run the process and wait for its termination

  // Print arduino logo over the Serial
  // A process output can be read with the stream methods
  while (p.available()>0) {
    char c = p.read();
    Serial.print(c);
  }

  // Ensure the last bit of data is sent.
  Serial.flush();
}

Использование Bridge для передачи информации между процессорами

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

Этот пример показывает, как использовать библиотеку Bridge для доступа к цифровым и аналоговым пинам платы через REST-вызовы. Он демонстрирует, как создать собственный API при использовании REST-вызовов через браузер.

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

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

Когда пароль REST отключён, вы можете использовать браузер со следующей структурой URL:

  • http://myArduinoYun.local/arduino/digital/13 : вызывает digitalRead(13);

  • http://myArduinoYun.local/arduino/digital/13/1 : вызывает digitalWrite(13,1);

  • http://myArduinoYun.local/arduino/analog/9/123 : analogWrite(9,123);

  • http://myArduinoYun.local/arduino/analog/2 : analogRead(2);

  • http://myArduinoYun.local/arduino/mode/13/input : pinMode(13, INPUT);

  • http://myArduinoYun.local/arduino/mode/13/output : pinMode(13, OUTPUT);

Вы можете использовать команду curl из командной строки вместо браузера, если предпочитаете.

Вам нужно подключить библиотеки Bridge, YunServer и YunClient:

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

Создайте экземпляр сервера, позволяющий Yun слушать подключающихся клиентов.

YunServer server;

В setup() запустите последовательную связь для отладки и включите встроенный светодиод на пине 13, пока Bridge запускается. Bridge.begin() является блокирующим и занимает около 2 секунд. После запуска Bridge выключите светодиод.

void setup() {
  Serial.begin(9600);
  pinMode(13,OUTPUT);
  digitalWrite(13, LOW);
  Bridge.begin();
  digitalWrite(13, HIGH);

Во второй части setup() укажите экземпляру YunServer слушать входящие подключения только от localhost. Подключения к OpenWrt-Yun будут переданы процессору 32U4 для разбора и управления пинами. Это происходит на порту 5555. Запустите сервер с помощью server.begin().

server.listenOnLocalhost();
  server.begin();
}

В loop() вы создадите экземпляр YunClient для управления подключением. Если клиент подключается, обработайте запросы в пользовательской функции (описанной ниже) и закройте подключение по завершении.

Добавление задержки в конец loop() поможет снизить нагрузку на процессор.

void loop() {
  YunClient client = server.accept();

  if (client) {
    process(client);
    client.stop();
  }

  delay(50);
}

Создайте функцию process, принимающую YunClient как аргумент. Прочитайте команду, создав строку для хранения входящей информации. Разберите REST-команды по функциональности (digital, analog и mode) и передайте информацию соответствующей функции.

void process(YunClient client) {
  String command = client.readStringUntil('/');

  if (command == "digital") {
    digitalCommand(client);
  }

  if (command == "analog") {
    analogCommand(client);
  }

  if (command == "mode") {
    modeCommand(client);
  }
}

Создайте функцию для обработки digital команд. Принимайте клиент как аргумент. Создайте локальные переменные для хранения пина и значения команды.

void digitalCommand(YunClient client) {
  int pin, value;

Разберите запрос клиента для определения пина с помощью client.parseInt().

Если символ после пина – «/», это означает, что URL будет содержать значение 1 или 0 далее. Это значение установит состояние пина – HIGH или LOW. Если завершающего «/» нет, прочитайте значение с указанного пина.

pin = client.parseInt();

  if (client.read() == '/') {
    value = client.parseInt();
    digitalWrite(pin, value);
  }
  else {
    value = digitalRead(pin);
  }

Выведите значение клиенту и обновите ключ в хранилище данных текущим значением пина.

Оборачивая значение для клиента в F(), вы будете выводить из флеш-памяти. Это помогает экономить место в SRAM, что полезно при работе с длинными строками, такими как URL.

Ключ будет состоять из пина и типа. Например, D2 будет сохранён для цифрового пина 2. Значением будет текущее установленное или прочитанное с пина значение.

client.print(F("Pin D"));
  client.print(pin);
  client.print(F(" set to "));
  client.println(value);

  String key = "D";
  key += pin;
  Bridge.put(key, String(value));
}

Настройте функцию для обработки аналоговых вызовов аналогичным образом, только используя ключ A вместо D при работе с аналоговыми входными пинами:

void analogCommand(YunClient client) {
  int pin, value;

  pin = client.parseInt();

  if (client.read() == '/') {
    value = client.parseInt();
    analogWrite(pin, value);

    // Send feedback to client
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" set to analog "));
    client.println(value);

    String key = "D";
    key += pin;
    Bridge.put(key, String(value));
  }
  else {
    value = analogRead(pin);

    client.print(F("Pin A"));
    client.print(pin);
    client.print(F(" reads analog "));
    client.println(value);

    String key = "A";
    key += pin;
    Bridge.put(key, String(value));
  }
}

Создайте ещё одну функцию для обработки изменений режима пина. Принимайте YunClient как аргумент и создайте локальную переменную для хранения номера пина. Прочитайте значение пина так же, как в функциях digital и analog.

void modeCommand(YunClient client) {
  int pin;
  pin = client.parseInt();

Проверьте правильность URL:

if (client.read() != '/') {
  client.println(F("error"));
  return;
}

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

String mode = client.readStringUntil('\r');

  if (mode == "input") {
    pinMode(pin, INPUT);
    // Send feedback to client
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" configured as INPUT!"));
    return;
  }

  if (mode == "output") {
    pinMode(pin, OUTPUT);
    // Send feedback to client
    client.print(F("Pin D"));
    client.print(pin);
    client.print(F(" configured as OUTPUT!"));
    return;
  }

  client.print(F("error: invalid mode "));
  client.print(mode);
}

Более подробную информацию об этом примере можно найти на странице Bridge Example.

Установка дополнительного программного обеспечения в Linux

Yun поставляется с несколькими предустановленными программами в OpenWrt-Yun, включая «curl» и «python». Вы можете захотеть установить другое программное обеспечение на Yun. В Linux-системах дополнительное ПО можно установить с помощью инструмента, называемого «системой управления пакетами». Для получения дополнительной информации обратитесь к руководству по менеджеру пакетов.