Это довольно просто. Просто следуйте шагам.
Пример сценария:
/dev/sda1
- CentOS
/dev/sdb1
- Debian
Предположим, что на диске CentOS активна MBR. Значит, после загрузки мы имеем доступ к системе CentOS; Debian нужно добавить.
Задачи под активной ОС (CentOS в нашем сценарии):
mount /dev/sdb1 /mnt/debian
Вырезаем весь menuentry
раздел Debian из /mnt/debian/boot/grub{2}/grub.cfg
, как показано ниже:
menuentry 'Debian GNU/Linux' --class debian --class gnu-linux ... { ... }
Теперь создайте файл: touch /etc/grub.d/11_linux
Поскольку это скрипт, не забудьте сделать: chmod +x /etc/grub.d/11_linux
Add:
#!/bin/sh
echo "
в начало 11_linux
и вставьте этот раздел. Закончив с "
в конце. Итак, у нас должно получиться:
centos #~> cat /etc/grub.d/11_linux
#!/bin/sh
echo "menuentry 'Debian GNU/Linux' --class debian --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-78026456-ebcc-4eed-b59d-a3f0bdff7353' {
load_video
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod ext2
set root='hd0,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 f2de4123-5a98-4568-99dd-e61940b99ab2
else
search --no-floppy --fs-uuid --set=root f2de4123-5a98-4568-99dd-e61940b99ab2
fi
echo 'Загрузка Linux 3.16.0-4-amd64 ...'
linux /vmlinuz-3.16.0-4-amd64 root=/dev/mapper/Thinkpad--vg-root ro quiet
echo 'Loading initial ramdisk ...'
initrd /initrd.img-3.16.0-4-amd64
}"
grub2-mkconfig -o /boot/grub{2}/grub.cfg
Перезагрузка.
Вуаля.
Если я правильно понял, у вас есть конвейер, который генерирует список имен хостов (ec2-describe-instances ... | grep ... | grep ...
), вы берете первую строку (head -1
) и хотите использовать ее в качестве имени хоста для подключения. Вы передаете имя хоста на стандартный вход функции sshec2
и вызываете функцию без аргументов. Поэтому, когда функция выполняется, $argv[1]
пуст, и в итоге вы запускаете ssh
с аргументами -i
, /home/dearrfish/. ssh/key.pem
, -t
, -t
, ubuntu@
. Если вы ввели в командную строку ssh
и соединение прошло, то вывод конвейера ... | head -1
будет передан в программу, которую запускает ssh
.
Вместо этого вам нужно передать имя хоста в качестве первого аргумента функции. Инструментом для этого является подстановка команды.
sshec2 (ec2-describe-instances --region us-west-2 --filter "tag:Name=test-box" |
grep 'INSTANCE' |
grep -E -m 1 -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' |
head -1)