Вопрос: Что такое Amazon Linux AMI?

AMI Amazon Linux – это поддерживаемый и обслуживаемый образ Linux, предоставляемый Amazon Web Services для использования в Amazon Elastic Compute Cloud (Amazon EC2). Он предназначен для обеспечения стабильной, безопасной и высокопроизводительной среды выполнения для приложений, работающих в Amazon EC2. Он также включает в себя пакеты, которые позволяют обеспечить простую интеграцию с AWS, среди которых инструменты конфигурации запуска, а также многие популярные библиотеки и инструменты AWS. Amazon Web Services регулярно выпускает обновления безопасности и рабочие исправления для всех инстансов, на которых используется AMI Amazon Linux. AMI Amazon Linux предоставляется пользователям Amazon EC2 бесплатно.

Вопрос: Можно ли просмотреть исходный код Amazon Linux AMI?

Да. С помощью команды yumdownloader --source, которая доступна в Amazon Linux AMI, можно просмотреть исходный код в Amazon EC2.

Вопрос: Где найти обновления для Amazon Linux AMI?

Обновления можно получить из предварительно настроенного yum‑хранилища, расположенного в каждом регионе Amazon EC2. Обновления безопасности автоматически устанавливаются при начальной загрузке AMI. После входа в систему отображается сообщение Message of the Day (из файла /etc/motd), в котором указано, доступны ли дополнительные обновления.

Вопрос: Как часто выходят обновления для Amazon Linux AMI?

Amazon Linux AMI построен и поддерживается по принципу непрерывного релиза. Его удобно представлять себе в виде единого потока пакетов, в котором образы AMI представляют собой снимки состояния на тот или иной момент времени.

 

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

 

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

Вопрос: Осуществляет ли Amazon техническую поддержку Amazon Linux AMI?

Да. Техническая поддержка, связанная с Amazon Linux AMI, осуществляется согласно подписке на услуги AWS Support. Подробную информацию см. на странице AWS Support.

Вопрос: Можно ли использовать Amazon Linux AMI за пределами EC2?

Нет. Amazon Linux AMI можно использовать только в сервисе Amazon EC2.

Вопрос: Как сообщить об ошибках или запросить новые возможности и пакеты?

Сообщения об ошибках, свои пожелания и просьбы относительно дополнительных пакетов рекомендуется оставлять на форуме Amazon EC2. Эти форумы просматривают сотрудники группы поддержки разработчиков AWS, а также специалисты технической группы Amazon Linux AMI.

Вопрос: Как долго будет поддерживаться Amazon Linux AMI?

Для стимулирования перехода на Amazon Linux 2 обновления безопасности для последней версии Amazon Linux AMI (2018.03) будут выходить до 30 июня 2020 г. Amazon Linux 2 предлагает долгосрочную поддержку до 30 июня 2023 г.

Вопрос: Как разрешить установку дополнительных пакетов из репозитория Enterprise Linux (EPEL)?

Откройте файл /etc/yum.repos.d/epel.repo. В разделе [epel] измените значение параметра enabled=0 на enabled=1.

Чтобы временно разрешить установку пакетов из репозитория EPEL 6, воспользуйтесь дополнительным параметром команды yum --enablerepo=epel.

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

Вопрос: Как запретить обновление AMI, чтобы использовать только определенную версию?

Структура репозитория Amazon Linux AMI обеспечивает непрерывное обновление, что позволяет осуществлять переход с одной версии Amazon Linux AMI на следующую.

Пакеты обновлений помещаются в репозитории и становятся доступны для любой версии Amazon Linux AMI, в которой в yum задана настройка «latest». Чтобы увидеть, с какими репозиториями связан ваш инстанс, проверьте значение переменной releasever в файле /etc/yum.conf. По умолчанию в Amazon Linux AMI задана настройка releasever=latest.

Иными словами, образы Amazon Linux AMI рассматриваются как снимки состояния на момент времени, и их репозиторий и структура обновления обеспечивают доступ к новейшим скомпонованным и помещенным в репозиторий пакетам.

Чтобы не выполнять обновление определенной основной версии AMI при выходе новых основных версий Amazon Linux AMI, достаточно воспользоваться возможностью блокировки при запуске (lock on launch).

Для включения этой возможности на новых инстансах запустите, к примеру, Amazon Linux AMI 2015.09 с передачей в cloud‑init следующих пользовательских данных (посредством консоли EC2, команды aws ec2 run-instances с флагом --user-data или же команды ec2-run-instances -f).

#cloud-config
repo_releasever: 2015.09

Чтобы заблокировать обновление используемых инстансов (оставив их текущую версию, указанную в файле /etc/system-release), отредактируйте файл /etc/yum.conf. Закомментируйте строку releasever=latest и выполните команду yum clean all, чтобы очистить кэш.

ПРИМЕЧАНИЕ. Привязка AMI к репозиторию определенной версии, не являющейся самой новой, подразумевает отказ от получения всех дальнейших обновлений. Единственный способ постоянно получать обновления для Amazon Linux AMI – использовать новейшую версию AMI, то есть постоянно обновлять устаревающие AMI с помощью репозиториев, отмеченных как «latest».

Вопрос: Как отключить автоматическую установку критических и важных обновлений для системы безопасности при первом запуске?

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

Если AMI не может получить доступ к yum‑репозиториям, он несколько раз повторяет попытки (через определенный промежуток времени) до тех пор, пока процедура загрузки не будет завершена. Возможными причинами этого могут быть ограничивающие настройки брандмауэра или параметры VPC, которые блокируют доступ к репозиториям пакетов Amazon Linux AMI.

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

Чтобы отключить обновление безопасности при загрузке с помощью консоли AWS EC2, выполните следующие действия.

На странице Advanced Instance Options (Дополнительные параметры инстанса) в мастере запроса инстансов есть текстовое поле, позволяющее передать данные пользователя в Amazon Linux AMI. Эти данные могут быть введены в виде текста или загружены из файла. В любом случае, должны быть переданы следующие данные:

#cloud-config
repo_upgrade: none

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

Создайте текстовый файл с вышеуказанными пользовательскими данными и передайте его в aws ec2 run-instances с флагом --user-data file://<filename> (это также можно сделать посредством команды ec2-run-instances -f).

Чтобы отключить обновление безопасности при загрузке, когда выполняется повторная сборка образа Amazon Linux AMI, выполните следующие действия.

Откройте файл /etc/cloud/cloud.cfg и замените repo_upgrade: security на repo_upgrade: none.

Вопрос: Почему SSH‑подключение занимает так много времени, если в Virtual Private Cloud (VPC) не используется интернет‑шлюз или инстанс NAT?

Смотрите ответ на предыдущий вопрос.

Вопрос: Почему нумерация RAID‑массивов начинается с /dev/md127, а не с /dev/md0?

Новые версии mdadm создают RAID‑массивы с суперблоками версии 1.2, которые не позволяют автоматически собрать массив с пронумерованными устройствами. Обращайтесь к разделам, указав метку для файловой системы. В большинстве инструментов, используемых для создания файловой системы, для задания метки применяется флаг -L. После того как метка задана, к ней можно обращаться при подключении. Ее также можно использовать в файле /etc/fstab, указав LABEL=[NAME].

Пример. Создание массива RAID0 с меткой.

mdadm --create --verbose /dev/md0 --level=0 --name=0 --raid-devices=2 /dev/sdb /dev/sdc
mkfs.ext4 -L RAID0 /dev/md0
mkdir -p /mnt/RAID0
mount LABEL=RAID0 /mnt/RAID0

Пример. Задание метки для существующей файловой системы ext[2-4].

e2label /dev/md127 RAID
mkdir -p /mnt/RAID
mount LABEL=RAID /mnt/RAID

Вопрос: Почему была отключена группа wheel в /etc/sudoers и как ее включить?

В разных версиях операционной системы Linux могут быть разные настройки по умолчанию, отвечающие за возможность использования группы wheel при выполнении команды sudo. Мы считаем, что невозможность использования группы wheel при выполнении команды sudo по умолчанию позволяет повысить безопасность Amazon Linux AMI.

Есть два способа решения этой проблемы, выбор которых зависит от того, есть ли у вас возможность использовать SSH‑подключение к инстансам в качестве пользователя по умолчанию ec2-user, а также разрешено ли этому пользователю использовать команду sudo.

Способ №1. Если вы не меняли настройки по умолчанию, у вас должна оставаться возможность ssh‑подключения к своему инстансу в качестве пользователя ec2‑user. После подключения необходимо выполнить команду sudo для получения прав root, после чего можно изменить файл sudoers для повторного разрешения использования группы wheel.

Способ № 2. Тем пользователям, которые изменили настройки по умолчанию или которые не могут выполнить команду sudo от имени пользователя ec2‑user для получения прав root, рекомендуется выполнить следующие действия.

  • Остановите инстанс, у которого возникла такая проблема (но не завершайте его работу).
  • Отключите корневой том EBS с помощью консоли EC2 либо с помощью инструментов API EC2.
  • Подключите том к другому инстансу EC2, к которому есть удаленный доступ с правами root.
  • Войдите в систему на этом инстансе.
  • Смонтируйте только что подключенный том:
    sudo mount /dev/xvdf /mnt
  • Измените файл sudoers на подключенном томе и раскомментируйте группу wheel:
    sudo sed -i.bak 's,# \(%wheel\s\+ALL=(ALL)\s\+ALL\),\1,' /mnt/etc/sudoers
  • Размонтируйте том:
    sudo umount -d /dev/xvdf
  • Отключите том.
  • Повторно подключите том к остановленному инстансу (убедитесь, что устройство, определилось так же, как и до отключения: обычно это /dev/sda1).
  • Запустите готовый инстанс.

Вопрос: Почему при работе с Amazon Linux AMI через терминал отображаются странные символы, такие как � или â?

В Amazon Linux AMI по умолчанию используется кодировка UTF‑8. Клиентские терминалы, не использующие кодировку UTF-8, не всегда будут правильно отображать символы UTF-8. Чтобы исправить эту проблему, установите кодировку UTF‑8 для своего клиентского терминала.

  • Терминал среды Gnome: в меню [Terminal] выберите пункт [Set Character Encoding], а затем выберите UTF‑8.
  • PuTTY: нажмите заголовок правой кнопкой мыши, чтобы открыть меню. Затем выберите пункт [Change Settings]. Последовательно выберите [Window → Translation → Remote Character Set], а затем укажите UTF‑8.

Вопрос: В файле /etc/yum.repos.d/amzn*.repo есть дополнительный параметр report_instanceid. Для чего он используется?

Репозитории Amazon Linux AMI представляют собой корзины S3, доступные в каждом регионе. Когда процесс yum на инстансе загружает пакеты из этих корзин, информация о подключении к S3 заносится в журнал.

В случае Amazon Linux AMI выбор параметра report_instanceid=yes позволяет репозиториям Amazon Linux AMI также заносить в журналы информацию об идентификаторе инстанса (i‑xxxxxxxx) и регионе инстанса (например, us‑west‑2), который выполнял загрузку пакета. Это позволяет группе поддержки Amazon Linux AMI обеспечивать более целенаправленную и конкретную поддержку отдельных инстансов для клиентов.

Параметр report_instanceid=yes по умолчанию включен только для репозиториев Amazon Linux AMI.

Вопрос: Почему файлы конфигурации /etc/yum.repos.d/amzn*.repo yum‑репозитория при обновлении версии пакета системы перезаписываются?

Эти файлы конфигурации репозитория перезаписываются во время обновления версии пакета системы для того, чтобы можно было гарантировать, что инстансы всегда видят изменения, внесенные в конфигурацию yum‑репозитория Amazon Linux AMI.

Для Amazon Linux AMI версий ранее 2014.09.

Эти файлы генерируются cloud‑init из шаблонов, расположенных по ссылке /etc/cloud/templates/amzn-*.repo.tmpl. Изменения, внесенные в эти файлы шаблонов, будут сохраняться.

Для Amazon Linux AMI версии 2014.09 и новее.

Файлы /etc/yum.repos.d/amzn*.repo теперь используют переменные yum, чтобы помочь инстансам подключиться к самым близким (в географическом плане) репозиториям, так что шаблоны cloud‑init больше не используются. Любые изменения в этих файлах будут сохраняться в каталоге /etc/yum.repos.d/amzn*.repo.rpmsave во время обновления версии системы.

После обновления системы до версии 2014.09 можно увидеть все изменения, внесенные в файлы /etc/yum.repos.d/amzn*.repo, в сохраненных файлах /etc/yum.repos.d/amzn*.repo.rpmsave.

Вопрос: Как изменить или удалить выбранные цвета справочных страниц?

Цвета справочных страниц настраиваются в файле /etc/profile.d/less.sh (для bash и zsh) и в файле /etc/profile.d/less.csh (для csh). Чтобы удалить выбранные ранее цвета, удалите все строки, начинающиеся с export LESS_ (для bash и zsh) и / или setenv LESS_ (для csh).

Вопрос: Как отключить аудит системных вызовов на инстансах версий ниже 2015.09?

В новых запусках Amazon Linux AMI версии 2015.09 аудит системных вызовов отключен по умолчанию.  Аудит системных вызовов расходует ресурсы при каждом системном вызове, что может заметно отразиться на производительности, в особенности при использовании приложений, интенсивно работающих с диском или сетью.

Если выполнение аудита системных вызовов все же необходимо, удалите или закомментируйте следующую строку в файле /etc/audit/audit.rules, а затем перезапустите демон аудита.

 -a never,task

Пример (с правами root):

# auditctl -l
LIST_RULES: task,never
# sed -i.bak -e '/^-a never,task$/ s/^/#/' /etc/audit/audit.rules
# service auditd restart
# auditctl -l
No rules

Чтобы добиться аналогичного повышения производительности на инстансах, запущенных из AMI версий ниже 2015.09, добавьте такую же строку (-a never,task) в файл /etc/audit/audit.rules и перезапустите демон. Если вы выполняете обновление и не вносили изменений в файлы с правилами аудита, можно просто переместить или скопировать новый файл с правилами по умолчанию в /etc/audit/audit.rules.

Пример (с правами root):

# auditctl -l
No rules
# cp -p /etc/audit/rules.d/audit.rules.default /etc/audit/audit.rules
cp: overwrite ‘/etc/audit/audit.rules’? y
# service auditd restart
# auditctl -l
LIST_RULES: task,never

Вопрос: Где найти примеры использования пользовательских данных mime‑multipart с cloud‑init?

Документацию по mime‑multipart для cloud‑init см. по ссылке.

Формат MIME multipart не всегда надежен, поэтому для создания файлов multipart лучше использовать инструмент write‑mime‑multipart. Этот инструмент входит в пакет cloud‑utils, и его можно установить командой sudo yum install /usr/bin/write-mime-multipart. В первой строке файла данный инструмент определяет параметр Content‑Type, а с помощью последнего cloud-init определяет, как интерпретировать файл. Примеры:

#cloud-config
repo_releasever: 2015.09

и

#!/bin/bash
echo "cloud-init was here..." >> /tmp/cloud-init-was-here.txt

Ниже приведен пример write-mime-multipart с выводимым результатом.

[ec2-user@ip-172-31-4-37 ~]$ write-mime-multipart repo_releasever-2015.09.cfg ci-was-here.sh
Content-Type: multipart/mixed; boundary="===============6347220379374809187=="
MIME-Version: 1.0

--===============6347220379374809187==
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="repo_releasever-2015.09.cfg"

#cloud-config
repo_releasever: 2015.09

--===============6347220379374809187==
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="ci-was-here.sh"

#!/bin/bash
echo "cloud-init was here..." >> /tmp/cloud-init-was-here.txt

--===============6347220379374809187==--

Дополнительные сведения об использовании данного инструмента можно получить, выполнив команду man write-mime-multipart.

Вопрос: Как настроить адрес VPC, чтобы разрешить подключение к репозиториям Amazon Linux AMI?

VPC обеспечивает доступ к репозиториям yum без использования Интернета.  Политика адреса VPC должна разрешать передачу трафика из VPC в корзины S3, в которых находятся репозитории Amazon Linux AMI.

Пример такой политики адреса VPC приведен ниже:

{
  "Statement": [
    {
      "Sid": "Amazon Linux AMI Repository Access",
      "Principal": "*",
      "Action": [
        "s3:GetObject"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::packages.*.amazonaws.com/*",
        "arn:aws:s3:::repo.*.amazonaws.com/*"
      ]
    }
  ]
}

Дополнительную информацию см. в документации по адресам VPC.