AMI FreeBSD на AWS не обеспечивает такой же уровень поддержки пользовательских _сценариев данных, как другие AMI. Как вы указали, он не поддерживает #cloud-boothook
данные пользователя _и игнорирует любые данные пользователя _, переданные после загрузки.
Простое решение состоит в следующем:
sed -i '' '/KEYWORD: *firstboot$/d' /usr/local/etc/rc.d/ec2_configinit
Это хак --теперь ваш экземпляр будет выполнять все пользовательские _сценарии данных, даже без тега #cloud-boothook
, но, на мой взгляд, это намного лучше, чем поведение сценария по умолчанию. Обратите внимание, что всегда можно полностью отключить скрипт ec2_configinit
, выключив его в /etc/rc.conf
.
Я даю свой собственный ответ, так как принятый ответ очень груб.
ОБНОВЛЕНИЕ :Я думал, что принятый ответ был очень грубым, но, в конце концов, я все равно использую его , так как он лучше всего подходит для меня. Остальное здесь просто даст некоторую дополнительную информацию, которая может кому-то показаться полезной. В конце концов, принятый ответ работает лучше всего для меня, потому что:(1 )он позволяет мне всегда выполнять сценарий оболочки, (2 )он не делает ничего, кроме обработки файла пользовательских данных в как я объясню ниже, (3 )Я все еще могу отключить его в rc.conf, если захочу.
Дело в том, что даже в Amazon Linux пользовательский -сценарий данных выполняется только при первой загрузке, за исключением случаев, когда вы используете трюк MIME multipart/mixed. Вы можете посмотреть https://cloudinit.readthedocs.io/en/latest/topics/format.html, но я привожу пример чего-то, что раздвигает границы :
.Content-Type: multipart/mixed; boundary="schnipp-schnapp"
MIME-Version: 1.0
--schnipp-schnapp
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--schnipp-schnapp
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="user-data.sh"
#!/bin/bash
echo "Hello World." >> /etc/motd
--schnipp-schnapp
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="another.sh"
#!/bin/bash
echo "Kilroy was here." >> /etc/motd
--schnipp-schnapp
Content-Type: image/jpeg
MIME-Version: 1.0
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="imput64-8503-small.jpg"
/9j/4AAQSkZJRgABAQEAlgCWAAD/2wBDAAYEBQYFBAYGBQYHBwYIChAKCgkJChQODwwQFxQYGBcU
FhYaHSUfGhsjHBYWICwgIyYnKSopGR8tMC0oMCUoKSj/2wBDAQcHBwoIChMKChMoGhYaKCgoKCgo
...
JFSUkfQjjHr9yT2T9SSSdLS15R/qM64pbLRUcsExOk6axzpxhiQATFSDIB6E68K/c6WlrzEoTypl
JoceL9zq7NbXis8oopa6RRNUQovmNlCM5IIzxQLkgkD0wQCAFLYaXzKkSSVEkzOZXqJJOUjsfXkf
cknJOMk++lpa9u+AGkJwsuJACiqCeJGm5pJiZJXBr4Sx04IfzZiS3I9r3/TQakADkD260tLWjxQk
hE9/tVFgPm8K/9k=
--schnipp-schnapp--
Я обнаружил, что два скрипта выполняются в алфавитном порядке, а часть изображения просто игнорируется.
Если только сопровождающие FreeBSD AMI не реализуют этот многокомпонентный -материал и все, что с ним связано
Почему вы хотите, чтобы все остальные вещи, которые делает ec2 -cloudinit, всегда выполнялись именно так? В конце концов, вы предоставлены сами себе.
На самом деле нет ничего плохого в том, чтобы самостоятельно получить пользовательские данные и решить, что с ними делать. Вот как это сделать:
fetch -q -o - http://169.254.169.254/latest/user-data
Итак, если вы хотите, чтобы он выполнялся, вы можете просто поместить его в rc.local:
fetch -q -o - http://169.254.169.254/latest/user-data |sh
или
fetch -q -o /tmp/user-data.sh http://169.254.169.254/latest/user-data
mkdir 700 /tmp/user-data.sh
/tmp/user-data.sh
На самом деле ничего страшного. Не уверен, стоит ли поддерживать сложную составную структуру. FreeBSD AMI делает это совсем по-другому, проще и, возможно, просто отлично.
Поскольку это не стандарт AWS, я бы просто не стал с этим связываться. Просто создайте один скрипт и заставьте его выполняться в rc.local или даже не выполняться, а просто проверяться, чтобы найти какой-то параметр, который каким-то образом управляет поведением.