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

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

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

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

Вопрос: Где можно получить обновления для Amazon Linux AMI?

Обновления можно получить из предварительно настроенного yum-хранилища, расположенного в каждом регионе Amazon EC2. Обновления безопасности автоматически устанавливаются при начальной загрузке AMI. После входа в систему отображается «Сообщение дня» (из файла /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.

Вопрос: Как разрешить установку дополнительных пакетов из репозитория 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, выполните следующие действия:

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

#cloud-config
repo_upgrade: none

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

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