Quase um ano após a pergunta original, acho que tenho um bom procedimento para baixar as imagens do Rackspace e executá-las localmente, em Xen rodando no Ubuntu Precise.
Eu vou escrever os passos aqui, então há uma receita fácil para você seguir se quiser experimentar. Os passos funcionam para linux / Ubuntu domU's pelo menos, para outros YMMV.
(Essas instruções também são postadas em nosso blog em link )
-
Instale o Ubuntu preciso (12.04 LTS) e siga os passos mencionados em link para configurar seu servidor como um Xen Dom0. Pelo menos certifique-se de ter um 12.04 em execução com xen e xe-tools instaladas, e um grupo de volumes LVM para usar em discos virtuais para seus DomUs.
-
Vá para a página de servidores na nuvem rackspace (
manage.rackspacecloud.com -> Hosting -> Cloud servers
) e selecione a que você deseja executar localmente. Vá para a guiaImages
desse servidor. Crie uma imagem sob demanda. (Dependendo da hora em que o servidor foi criado pela primeira vez, a imagem sob demanda irá diretamente para os arquivos em nuvem ou armazenada com o servidor. Se a imagem estiver armazenada com o servidor, você precisará movê-la para arquivos em nuvem após a criação.) -
Verifique o nome da imagem nos arquivos da nuvem. Vá para
Hosting -> Cloud Files
e abra o contêinercloudservers
. Deve haver o arquivo com o nomemyservername_YYYYMMDD_XXXXX_cloudserverZZZZZ.tar.gz.0
, e esse é o arquivo que você deseja. -
Faça o download da imagem no seu servidor. A maneira mais fácil de fazer isso no Ubuntu 12.04 é usar
swift
. Para instalar, apenassudo apt-get install swift
. Em seguida, execute-o comoswift -A https://auth.api.rackspacecloud.com/v1.0 -U username -K API_key download cloudservers myservername_YYYYMMDD_XXXXX_cloudserverZZZZZ.tar.gz.0
-
Quando o download estiver concluído, descompacte o arquivo baixado (
tar zxf myservername_YYYYMMDD_XXXXX_cloudserverZZZZZ.tar.gz.0
). Quando terminar, você terá os seguintes arquivos:image -> image.vhd -> manifest.ovf -> snap.vhd
image.vhd
é o que nos interessa, pois contém sua partição raiz do servidor de nuvens. -
Para facilitar o trabalho com o arquivo de imagem, convertemo-lo em uma imagem de disco bruta. Isso é feito usando
qemu-img
(se não estiver disponível em seu sistema, façasudo apt-get install qemu-utils
). Para converter o image.vhd em algo mais fácil de se trabalhar, façaqemu-img convert -p image.vhd disk.img
-
Verifique a imagem do disco usando o fdisk. (NOTA: Eu só tenho trabalhado com imagens grandes de 20 GB a partir do rackspace, e minhas anotações são sobre elas. Se você usar outro tamanho, terá que ajustar algumas etapas de acordo!)
fdisk -l disk.img
deve dar algo como o seguinte:Disk sda1.img: 20.4 GB, 20400758784 bytes 255 heads, 63 sectors/track, 2480 cylinders, total 39845232 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000 Device Boot Start End Blocks Id System disk.img1 * 2048 39845887 19921920 83 Linux
Observe o deslocamento inicial da primeira partição e o tamanho do setor.
-
(Opcional) Verifique se a imagem do disco está ok. Para isso, montamos o loopback e simplesmente vemos que ele funciona.
mkdir tmp mount -o loop,offset=1048576 disk.img tmp/ ls -la tmp (The offset above is start for the first partition * sector size)
Isso lhe dá uma indicação de que o disco está ok. Então desmonte a imagem.
umount tmp
-
Crie volumes lógicos e de troca para seu novo DomU.
lvcreate -L20G -n myservername-disk vg0
elvcreate -L2G -Cy -n myservername-swap vg0
. Também inicialize o disco de troca,mkswap /dev/vg0/myservername-swap
. -
Copie sua imagem de disco para o novo volume lógico. %código%. Os argumentos
dd if=disk.img of=/dev/vg0/myservername-disk bs=4096 skip=256
ebs
estão lá para obter o deslocamento correto para sua partição. Eu poderia ir comskip
, é claro, mas aumentar o tamanho do bloco torna a cópia muito mais rápida. (E 512 * 2048 = 4096 * 256, portanto, não importa o deslocamento.) -
Verifique o sistema de arquivos em seu volume lógico (e corrija qualquer erro), redimensione o fs para caber no lv e verifique novamente.
e2fsck -f /dev/vg0/myservername-disk resize2fs -p /dev/vg0/myservername-disk e2fsck -f /dev/vg0/myservername-disk
-
Verifique as configurações do disco virtual na sua máquina virtual. Isso será necessário para o seu arquivo de configuração do DomU. Monte o volume lógico. %código%. Em seguida, verifique o arquivo fstab e (se existir) o arquivo grub
bs=512 skip=2048
.more tmp/etc/fstab more tmp/boot/grub/menu.lst
Anote os nomes dos discos para root e swap!
-
Atualize as configurações de rede do seu DomU. Com o disco virtual ainda montado, edite o arquivo
mount /dev/vg0/myservername-disk tmp
para algo que se adapte ao seu ambiente local. %código%. Eu geralmente mudo o meu de algo como:# The loopback network interface auto lo iface lo inet loopback auto eth0 iface eth0 inet static address 184.106.XXX.YYY netmask 255.255.XXX.YYY gateway 184.106.XXX.YYY dns-nameservers 173.203.XXX.YYY 173.203.XXX.YYY auto eth1 iface eth1 inet static address 10.179.XXX.YYY netmask 255.255.XXX.YYY up route add -net 10.176.XXX.YYY0 netmask 255.240.XXX.YYY gw 10.179.XXX.YYY down route del -net 10.176.XXX.YYY netmask 255.240.XXX.YYY gw 10.179.XXX.YYY up route add -net 10.191.XXX.YYY netmask 255.255.XXX.YYY gw 10.179.XXX.YYY down route del -net 10.191.XXX.YYY netmask 255.255.XXX.YYY gw 10.179.XXX.YYY
(para o ambiente do rackspace) para:
# The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet dhcp
por apenas usar o dhcp e uma interface de rede virtual e o meu servidor local. Depois dessas mudanças, devemos terminar. Desmonte o disco virtual,
menu.lst
. -
Crie um arquivo de configuração de xen para sua DomU importada,
interfaces
, e coloque algo assim:name = "myservername" bootloader = '/usr/lib/xen-default/bin/pygrub' #uncomment the following if you want to boot into single user mode #extra = " single" vcpus = '2' memory = '512' # # Disk device(s). (Use the correct mappings from step 12.) # disk = [ 'phy:/dev/vg0/myservername-disk,xvda1,w', 'phy:/dev/vg0/myservername-swap,xvda2,w', ] # # Networking # vif = [ 'bridge=xenbr0' ] # # Behaviour # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart'
Novamente, observe que você deve usar os mesmos nomes de dispositivo para os dispositivos virtuais que você descobriu na etapa 12.
-
Agora tudo deve estar pronto! Para verificar, crie o domU e conecte um console executando
vi tmp/etc/network/interfaces