- Использование apt-команд в Linux
- Что такое apt
- Использование команд apt для управления пакетами в дистрибутивах Linux на основе Debian и Ubuntu.
- Обновление базы пакетов с помощью apt
- Обновление установленных пакетов с помощью apt
- В чем разница между apt update и apt upgrade?
- Как установить новые пакеты с помощью apt
- Как установить несколько пакетов с apt
- Что если вы запустите apt install на уже установленном пакете?
- Как установить пакеты без обновления
- Как только обновлять пакеты, а не устанавливать
- Как установить конкретную версию приложения
- Как удалить установленные пакеты с помощью apt
- Какая разница между apt remove и apt purge?
- Поиск пакетов
- Как просмотреть содержимое пакета
- Список обновляемых и установленных версий
- Как очистить вашу систему с помощью apt
- Ваш вклад
- Обновление Oracle MySQL с 5.7 до 8.0
Использование apt-команд в Linux
Если вы используете Debian, Ubuntu, Linux Mint или любой другой дистрибутив Debian или Ubuntu, вы, должно быть, уже сталкивались с некоторыми apt-командами.
Впервые появившаяся в Ubuntu 16.04, apt медленно набирает популярность. Поскольку все больше и больше дистрибутивов Linux, основанных на Ubuntu, настаивают на том, чтобы apt стала рекомендуемой командой для управления пакетами, пришло время научиться использовать команды apt.
В этом руководстве для начинающих пользователей Linux я расскажу вам о различных командах apt с примерами, чтобы Вы могли использовать их в качестве опытного пользователя Linux.
Что такое apt
В Debian Linux используется система dpkg-пакетов. Система пакетов — это способ предоставления программ и приложений для установки. Таким образом, вам не придётся собирать программу из исходного кода, что, поверьте, не очень удобно для работы с пакетами. APT (Advanced Package Tool) — это инструмент командной строки для взаимодействия с системой упаковки в дистрибутивах Linux на основе Debian.
Для управления ими уже существуют команды dpkg. Но APT — более дружественный. Вы можете использовать его для поиска и установки новых пакетов, обновления пакетов, удаления пакетов и т.д.
Команды apt предоставляют способ командной строки для взаимодействия с APT и управления пакетами.
На данный момент, я должен упомянуть, что apt-get, пожалуй, самый популярный инструмент из APT. Но apt медленно продвигается как альтернатива.
Использование команд apt для управления пакетами в дистрибутивах Linux на основе Debian и Ubuntu.
В этом руководстве я использую Ubuntu 16.04, но вы можете использовать любые другие дистрибутивы Linux, основанные на Debian/Ubuntu, такие как Linux Mint, Elementary OS, Linux Lite и т.п.
Кроме того, я использую иконки и тему Pop в Ubuntu, поэтому мой терминал выглядит иначе, чем обычный фиолетовый тематический терминал.
Если вы не хотите читать, можете посмотреть это видео с основными apt командами для пользователей Ubuntu.
Обновление базы пакетов с помощью apt
apt фактически работает с базой данных доступных пакетов. Если база данных не обновляется, система не будет знать, есть ли более новые пакеты. Поэтому обновление репозитория должно быть первым делом в любой системе Linux сразу после ее установки.
Обновление базы данных пакетов требует права суперпользователя, поэтому вам придется использовать sudo.
Когда вы запустите эту команду, вы увидите, что информация о пакете извлекается с различных серверов.
Здесь вы увидите три типа строк: «Hit», «Get» и «Ign». В основном это:
- Hit: нет никаких изменений в версии пакета по сравнению с предыдущей версией.
- Ign: пакет игнорируется. Либо пакет слишком свеж, чтобы его даже не надо было проверять, либо произошла ошибка при получении файла, но ошибка была тривиальной, и поэтому ее игнорируют. Не волнуйтесь, это не ошибка.
- Get: Доступна новая версия. Она скачает информацию о версии (а не о самом пакете). Вы можете видеть, что есть информация о загрузке (размер в Кб) со строкой ‘get’ на скриншоте выше.
Обновление установленных пакетов с помощью apt
После обновления базы данных пакетов вы можете обновить установленные пакеты. Самый удобный способ — это обновить все пакеты, которые имеют доступные обновления. Вы можете просто использовать команду ниже:
Это покажет вам, сколько и какие пакеты будут обновлены.
Есть еще один способ выполнить полное обновление с помощью команды, приведенной ниже:
Полное обновление работает так же, как и обычное обновление, за исключением того, что если обновление системы нуждается в удалении пакета, уже установленного в системе, оно сделает это. В то время как обычная команда обновления этого не сделает.
В чем разница между apt update и apt upgrade?
Хотя это звучит, будто вы выполняете обновление apt, команда будет обновлять пакеты, и вы получите последнюю версию пакета. Но это не так. apt-update обновляет только базу данных пакетов.
Например, если у вас установлен XYZ пакет версии 1.3, после apt-обновления база данных будет знать, что доступна более новая версия 1.4. Когда вы делаете apt-update после apt-upgrade, она увеличивает(или обновляет, в зависимости от того, какой термин вы предпочитаете) установленные пакеты до более новой версии.
По этой причине наиболее быстрый и удобный способ обновления системы Ubuntu с помощью этой команды:
Как установить новые пакеты с помощью apt
Если вы уже знаете имя пакета, вы можете установить его с помощью команды ниже:
на нужный пакет. Предположим, вы хотите установить mplayer, вы можете просто использовать команду ниже:
Хорошо, что здесь можно использовать автозавершение. Таким образом, если вы не уверены в точном названии пакета, вы можете набрать несколько букв и нажать клавишу табуляции, и терминал подскажет все пакеты, доступные с этими буквами. Например:
Как установить несколько пакетов с apt
Вы не обязаны устанавливать только один пакет за раз. Вы можете установить несколько пакетов сразу, указав имена всех пакетов через пробел:
Что если вы запустите apt install на уже установленном пакете?
Не волнуйтесь. Просто загляните в базу данных и, если будет найдена более новая версия, обновите установленный пакет до более нового. Таким образом, с его помощью можно не навредить, если только вы не хотите, чтобы он был обновлен.
Как установить пакеты без обновления
Если по какой-то причине вы хотите установить пакет, но не хотите обновлять его, то это возможно, если он уже установлен. В этом случае вы можете использовать опцию —no-upgrade следующим образом:
Как только обновлять пакеты, а не устанавливать
Как установить конкретную версию приложения
По умолчанию для приложения будет установлена последняя версия, доступная в репозитории. Но если вы не хотите устанавливать последнюю версию, вы можете указать номер версии. Вам нужно будет знать точный номер версии, которую вы хотите установить.
Просто добавьте =версия с именем пакета.
Как удалить установленные пакеты с помощью apt
Довольно разговоров об установке пакетов, посмотрим, как удалить пакеты. Удалить пакеты так же просто, как и установить их. Просто используйте команду ниже:
Автозавершение работает и здесь. Поэтому просто начните набирать имя пакета и нажимать клавишу табуляции, и он предложит все установленные пакеты, начинающиеся с этих букв.
Другой способ деинсталляции пакетов — использование очистки. Команда используется следующим образом:
Какая разница между apt remove и apt purge?
- apt remove просто удаляет двоичные файлы пакета. Оставляет файлы конфигурации остатков.
- apt purge удаляет все, что связано с пакетом, включая конфигурационные файлы.
Если вы использовали apt remove, чтобы избавиться от определенного программного обеспечения, а затем попытаетесь установить его снова, ваше программное обеспечение будет иметь те же самые файлы конфигурации. Конечно, при повторной установке вам будет предложено переопределить существующие конфигурационные файлы.
Очищение же полезно, когда вы запутались в настройке программы. Вы хотите полностью стереть ее следы из системы и, возможно, начать заново. И да, вы можете использовать apt-purge на уже удаленном пакете.
Обычно для удаления пакета более чем достаточно apt remove.
Поиск пакетов
Не самый мой любимый способ поиска пакетов. Но это полезно, когда вы ищете какую-то конкретную библиотеку. Просто используйте следующую команду с нужными условиями поиска. Она найдет все пакеты, содержащие ваше поисковое слово.
Как просмотреть содержимое пакета
Если вы хотите узнать больше о пакете перед установкой или удалением, вы можете использовать команду ниже:
Здесь будет показана информация о выбранном пакете(ах), такая как его зависимости, размер установки и загрузки, различные источники, из которых доступен пакет, описание содержимого пакета, среди прочего:
Список обновляемых и установленных версий
Команда apt имеет новую опцию под названием «список». С помощью нее вы можете увидеть все пакеты, у которых есть более новая версия, готовая к обновлению:
Вы также можете увидеть все установленные пакеты в системе с установленной опцией —installed:
Существует также третий вариант, который называется —all-versions. В ней будут перечислены все пакеты, доступные для вашей системы:
Как очистить вашу систему с помощью apt
Я уже рассказывал о способах очистки системы Ubuntu, чтобы освободить место. В отличие от apt-get, здесь нет команд чистки и автоочистки. Вы все еще можете использовать опцию автоудаления и освободить место на диске:
Эта команда удаляет библиотеки и пакеты, которые были установлены автоматически для удовлетворения требований зависимостей установленного пакета. Если пакет удален, эти автоматически установленные пакеты, хотя и бесполезны, остаются в системе.
Я недавно почистил свою систему, и поэтому она показывает только несколько Kb файлов, которые нужно удалить. В противном случае, с помощью этой команды можно легко получить 100 Мб свободного места.
Ваш вклад
Я сознательно не включал в эту статью команду apt edit-sources. Это связано с тем, что этот параметр команды находится в процессе разработки и на данный момент он делает не более чем открытие файла source.list в редакторе по вашему выбору.
Вам понравилось это руководство по использованию команд apt в Linux? Надеюсь, что с примерами легко было разобраться в команде apt. Ваши отзывы помогут создать больше подобных руководств в ближайшем будущем.
Обновление Oracle MySQL с 5.7 до 8.0
Буквально 4 дня назад вышла первая стабильная версия Oracle MySQL 8.0.11
Краткий список изменений на русском языке можно прочитать здесь, а полный на английском языке на официальном сайте здесь.
Давайте попробуем обновить Oracle MySQL 5.7.21 до 8.0.11
Исходные данные:
ОС: Oracle Linux Server release 7.1
БД: Oracle MySQL 5.7.21
Задача: Обновиться до версии 8.0.11
Перед тем как обновиться нужно в обязательном порядке посмотреть все используемые настройки из /etc/my.cnf и попытаться понять какие из них в новом релизе 8.0.11 стали неподдерживаемыми (deprecated) и могут помешать запустить наш экземпляр MySQL после обновления, для этого перед обновлением нам стоит прочитать официальную документацию и дополнительно еще эту страницу.
Так же перед обновлением стоит прочитать официальную документацию по стратегии обновления. Ниже я пройдусь по всем пунктам стратегии обновления и поясню их суть.
Так же перед обновлением Вы должны проверить ваши приложения, работающие в БД на предмет совместимости с новой версией.
Например в MySQL 8.0 были добавлены в список зарезервированных некоторые ключевые слова, к примеру слово GROUPS, которые нельзя использовать в запросах без указания кавычек экранирования.
Поэтому я настоятельно рекомендую вначале провести обновление на тестовой среде, проверить работу Ваших приложений с новой версией MySQL и только потом производить обновление на рабочих серверах.
Я провел соответствующие тесты и мои приложения готовы к новой версии MySQL.
Теперь можно приступить к проверка всех БД и выполнения ряда подготовительных действий.
1. Проверка всех БД на соответствие требованиям MySQL 8.0 и конвертация таблиц в InnoDB
Первым делом нужно запустить процедуру проверки всех БД для поиска проблемных участков, это самый первый пункт в стратегии обновления:
Результатом должно быть OK по всем БД и таблицам в них.
Далее, мы предполагаем, что у нас экземпляр MySQL без репликации.
Так же у Вас не должно быть секционированных таблиц, в которых используется механизм хранения, который не имеет встроенной поддержки разбиения на разделы. Чтобы идентифицировать такие таблицы, выполните этот запрос:
Любая таблица, указанная в запросе, должна быть изменена для использования движка InnoDB или быть не секционированной. Чтобы изменить механизм хранения таблиц в InnoDB, нужно выполнить запрос вида:
Чтобы сделать удалить секционирование у таблицы, выполните запрос вида:
Вообще выход MySQL 8.0 ознаменовал закат хранилища MyISAM, поэтому оставаться на нем я не вижу смысла и перед обновлением до 8.0 нам нужно конвертировать движок всех таблиц в InnoDB.
Для начала оценим фронт работ с помощью запроса:
Если запрос показал 0 строк, то Вам повезло и у Вас нет ни одной таблицы с движком отличным от InnoDB или NDBCluster.
Если запрос выдал Вам список таблиц, то нужно провести их конвертацию.
Для удобства конвертации составим запросы на конвертацию отдельно для каждой базы, например возьмем БД с именем MYDB:
У нас получился файл MYDB.sql в котором перечислены команды и все нужные таблицы из БД для конвертации, внешне он выглядит так:
Что нужно знать перед конвертацией таблиц:
1. Конвертация может идти долго в зависимости от размера ваших таблиц, в моем запросе самыми последними в списке на конвертацию буду самые большие таблицы;
2. Таблицы с движком InnoDB занимают в 1,5 раза больше места на HDD, так что проверьте есть ли у Вас столько свободного пространства.
3. Прочитайте мою статью «MySQL и ошибка Index column size too large. The maximum column size is 767 bytes.» и выполните соответствующие настройки по избежании появления подобного рода ошибок. Если Вы используете последнюю версию MySQL 5.7.x то с высокой долей вероятности Вас эти ошибки не затронут.
4. Рекомендую конвертировать все ваши БД и таблицы в кодировку utf8mb4, но это не обязательное условие, хотя в MySQL 8.0 кодировкой по умолчанию стала utf8mb4, это нужно знать и учитывать при обновлении.
Теперь нужно остановить все приложения работающие с нашей БД и запустить конвертацию таблиц:
В процессе конвертации не должно возникнуть ошибок, но если они появились, то необходимо разобраться с каждой из них отдельно и довести процесс конвертации до конца. В рамках этой статьи я не могу описать все ситуации, поэтому мы будем предполагать, что все прошло успешно.
Двигаемся дальше. Т.к. в MySQL 8.0 был представлен новый механизм хранения системных данных (Transactional Data Dictionary), то перед переходом на MySQL 8.0 мы должны убедиться, что в системной БД mysql нет таблиц с пересекающимися именами из словаря (Data Dictionary), это делается запросом:
Он должен вернуть 0 строк, тогда все хорошо. В противном случае Вы не сможете обновить свой MySQL до версии 8.0 не устранив эту проблему. Для устранения проблемы нужно переименовать проблемные таблицы с помощью RENAME TABLE.
Следующие требование — длина имени внешнего ключа (foreign key) не должна превышать 64 символа.
Чтобы определить таблицы с слишком длинными именами, выполните запрос:
Все найденные таблицы должны быть приведены в соответствие этого требования. Для этого используйте ALTER TABLE.
И последнее что нужно знать — это то, что обновляемый вами экземпляр MySQL 5.7.x не должен использовать функции которые более не поддерживаются в MySQL 8.0.x:
а) Таблицы, в которых используется механизм хранения, не поддерживаемый в MySQL 8.0, должны быть изменены, чтобы использовать поддерживаемый движок. Например, MySQL 8.0 еще не поддерживает MySQL Cluster, поэтому таблицы NDB должны быть изменены для использования другого механизма хранения.
Указания на эти разделы я писал в самом начале статьи.
Применительно к моему файлу конфигурации /etc/my.cnf перед обновлениям я удалил следующие настройки:
В MySQL 8.0 кэш запросов (query cache) удалили как таковой, так что эти опции и еще несколько более не поддерживаются. Так же более не поддерживаются модификаторы SQL_CACHE и SQL_NO_CACHE в SELECT запросах и статусные переменные Qcache_XXXX.
Так же я удалил настройку log_warnings которая так же не поддерживается, вместо неё используется log_error_verbosity. После обновления я добавлю настройку log_error_verbosity.
Забегая вперед скажу, что так же я закомментировал опцию expire_logs_days, после обновления её нужно заменить на binlog_expire_logs_seconds
Раньше expire_logs_days указывала через какое количество дней бинарный журнал будет удалятся, теперь с помощью binlog_expire_logs_seconds это можно сделать с точностью до секунд.
Так же я использовал плагин validate_password для контроля качества паролей, в версии 8.0 он был заменен отдельным компонентом, поэтому перед обновлением MySQL я закомментировал следующие настройки в /etc/my.cnf:
У вас могут быть другие опции и настройки, поэтому процедура обновления может быть более сложной.
Теперь можно приступить к обновлению.
2. Добавляем новый репозитарий в Oracle Linux
Посмотрим список включенных репозитариев:
Добавим новый репозитарий, есть 2 варианта:
Вариант 1 — мы оставляем старые репозитарии для MySQL 5.7 и описываем новый репозитарий в файле /etc/yum.repos.d/mysql-community.repo
Вариант 2 — удаляем пакет со старыми репозитариями для MySQL 5.7 и устанавливаем RPM-пакет, который по сути сделает тоже самое:
Я поступил по второму варианту, он более правильный.
Если Вы поступили по Варианту 1, то нужно будет отключить репозитарий версии MySQL 5.7:
Проверим список активных репозитариев:
Отлично, mysql80-community есть в списке.
Проверим доступные обновления:
В списки на обновление должны присутствовать пакеты:
3. Обновление MySQL
Посмотрим список установленных пакетов:
Выясним местоположение лога ошибок mysql:
Анализ данного лога очень нам поможет при запуске новой версии MySQL, поэтому в отдельном окне консоли запустим tail:
Теперь выполним обновление пакета mysql-community-server:
Нам предложат обновить ряд пакетов (mysql-community-server, mysql-community-client, mysql-community-common, mysql-community-libs) до версии 8.0.11, соглашаемся. (Будет скачано порядка 370 MB)
Далее по логу мы увидим, что наш MySQL 5.7.21 будет остановлен и запущен уже 8.0.11, но с некоторыми ошибками, которые нам предстоит исправить. Лог я привожу ниже.
Самое важное — это последняя строка, которая говорит нам, что MySQL 8.0.11 был запущен, это очень важно. Если в процессе запуска будут критические ошибки, например в файле конфигурации будут найдены опции которые уже не существуют в новой версии, то MySQL не запустится и выдаст соответствующие ошибки в лог.
Большинство ошибок в логе при первом старте MySQL 8 связан с тем, что мы не обновили системные БД (mysql и sys), давайте сделаем это запустив программу обновления mysql_upgrade:
В процессе обновления должен будет выдан OK по всем базам и таблицам. Если по каким то БД и таблицам будет выдана ошибка обновления, то Вам стоит на них обратить пристальное внимание. В логе error.log в процессе обновления мы увидим ряд предупреждений и возможно даже ошибок — это вполне нормально.
Теперь перезапустим MySQL 8:
Лог ошибок стал значительно меньше, теперь можно устранить те небольшие ошибки, что у нас остались.
4. Дополнительные действия после обновления (исправление ошибок)
Первым предупреждением в логе идет «‘Disabling symbolic links using —skip-symbolic-links (or equivalent) is the default. Consider not using this option as it’ is deprecated and will be removed in a future release.»
Данная опция помечена как deprecated и в будущих релизах будет удалена совсем, поэтому мы должны ее удалить из /etc/my.cnf
Удаляем строку symbolic-links=0 из /etc/my.cnf
Следующее предупреждение «A message intended for a client cannot be sent there as no client-session is attached. Therefore, we’re sending the information to the error-log instead: MY-001287 — ‘validate password plugin’ is deprecated and will be removed in a future release. Please use validate_password component instead»
Оно говорит о том, что плагин validate_password был заменен компонентом и в дальнейшем как плагин будет удален, поэтому мы должны удалить плагин validate_password и активировать новый компонент, выполняем:
Отключим плагин validate_password выполнив команду:
Далее взамен плагина validate_password установим его замену в виде компонента:
Вместо настройки validate_password_special_char_count в MySQL 8.0 нужно использовать validate_password.special_char_count, выполним замену в фале /etc/mysql.cnf в секции [mysqld]
И последний перезапуск MySQL 8:
На этот раз в логе ошибок (см. ниже) лишь 1 незначительное предупреждение связанное с самоподписным SSL сертификатом, его можно игнорировать.
У Вас могут быть дополнительные предупреждения если к примеру в /etc/my.cnf прописаны опции: skip-external-locking и skip-name-resolve
На этом обновление MySQL 5.7.21 до версии 8.0.11 можно считать законченным.
До скорых встреч. Если у Вас возникли вопросы или Вы хотите чтобы я помог Вам, то Вы всегда можете связаться со мной разными доступными способами.