Plano de fundo
Meu objetivo é usar o Packer para criar uma Amazon Machine Image (AMI) com vários caminhos diferentes montados em diferentes sistemas de arquivos para melhorar a segurança. Por exemplo. /tmp
deve ser montado em um sistema de arquivos com a opção noexec
.
O fato de eu querer criar um processo automatizado para fazer uma AMI significa que não posso executar comandos de re-montagem na própria instância, então estou usando o Packer construtor amazon-chroot . Isso significa que eu executo uma Instância do EC2 e executo o Packer dessa Instância do EC2. O empacotador montará então um volume de EBS tomado de um instantâneo de EBS usado com um "AMI de fonte". Agora preciso executar algumas operações no Volume EBS montado.
Estou me inspirando em uma apresentação recente sobre esse tema cujos slides estão em link .
Minha pergunta
Quando meu Volume do EBS (Block Device) é montado pela primeira vez, aqui estão as partições que eu vejo nele de gdisk -l /dev/xvdf
:
Disk /dev/xvdf: 16777216 sectors, 8.0 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 726A877B-31D7-4C00-99E4-5A2CCB8E0EAD
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 16777182
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)
Number Start (sector) End (sector) Size Code Name
1 4096 16777182 8.0 GiB 8300 Linux
128 2048 4095 1024.0 KiB EF02 BIOS Boot Partition
Eu então executo as seguintes operações:
- Exclua a partição "Linux" com
sgdisk --delete 1 /dev/xvdf
- Crie um grupo de volumes LVM com
lvm vgcreate -y main /dev/xvdf1
- Crie uma série de Volumes Lógicos do LVM e formate cada um deles com um comando como
/sbin/mkfs.ext4 -m0 -O ^64bit "/dev/main/lvroot"
- Monte todos e copie vários arquivos em
- Atualize
/etc/fstab
no Volume do EBS anexado da seguinte forma (isso é /mnt/ebs-volume/etc/fstab
da perspectiva do meu sistema host):
/ etc / fstab Eu escrevo para / dev / xvdf1:
#
/dev/mapper/main-lvroot / ext4 defaults,noatime 1 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
/dev/mapper/main-lvvar /var ext4 defaults 0 0
/dev/mapper/main-lvvarlog /var/log ext4 defaults 0 0
/dev/mapper/main-lvvarlog/audit /var/log/audit ext4 defaults 0 0
/dev/mapper/main-lvhome /home ext4 defaults 0 0
/dev/mapper/main-lvtmp /tmp ext4 defaults 0 0
Por fim, o Packer desmonta /dev/xvdf
e cria uma Amazon Machine Image (AMI) com base no conteúdo desse Volume do EBS.
Até aí tudo bem, exceto que quando eu vou lançar uma nova AMI, ela não inicializa. Não consigo me conectar via SSH e "Exibir registros do sistema" via AWS não mostra nada. Então, estou supondo que estou mexendo em algo em torno dessa partição "128" que contém a "Partição de inicialização do BIOS". Também estou confuso sobre como meus Volumes Lógicos criados pelo LVM devem se tornar "ativados" quando a nova Instância do EC2 for inicializada.
Basicamente, estou perdendo um modelo mental para o que precisa existir nessa partição de inicialização e como a instância do EC2 pode inicializar e executar o LVM se eu usei o LVM para criar o próprio volume raiz? Eu estou querendo saber se eu preciso criar uma partição especial em /boot
, mas o que eu coloco nisso? Eu deveria ter três partições no meu /dev/xvdf
, a "BIOS Boot Partition", uma partição "tradicional" (formato ext4) para /boot
e uma partição gerenciada pelo LVM para todo o resto?