13 mayo 2010

netvm de Qubes funcionando

Hola chica/s, por fin hemos conseguido hacer que funcione la netvm de Qubes en nuestro hardware.

Nuestra eth0 usa el módulo atl1c  en el bus PCI 08:00.0. Básicamente vamos a hacer que dom0 no haga uso de eth0 para hacer un pass-through del dispositivo y que sea visible (y usable :) por netvm.

Nos aseguramos que Qubes está arrancando con soporte VT-d.
[hielo@cubitera ~]$ xm dm | egrep 'DMAR|VMX'
(XEN) ACPI: DMAR BFF8E8C0, 0108 (r1 081309 DMAR1426 20090813 MSFT       97)
(XEN) VMX: Supported advanced features:
(XEN) HVM: VMX enabled

A los parámetros de arranque del kelmer añadimos:
iommu=pv iommu_inclusive_mapping=1 xen-pciback.hide=(08:00.0)

Creamos /etc/modprobe.d/xen-pciback.conf con:
options xen-pciback hide=(08:00.0) verbose_request=1
install atl1c /sbin/modprobe xen-pciback ; /sbin/modprobe --first-time --ignore-install atl1c

Ahora al cargar el módulo aparece en la salida de dmesg:
[root@cubitera ~]# dmesg -c
pciback 0000:08:00.0: seizing device
pciback 0000:08:00.0: enabling device (0000 -> 0003)
xen: registering gsi 17 triggering 0 polarity 1
xen_allocate_pirq: returning irq 17 for gsi 17
xen: --> irq=17
Already setup the GSI :17
pciback 0000:08:00.0: PCI INT A -> GSI 17 (level, low) -> IRQ 17

Configuramos Qubes para que use como default-netvm netvm en lugar de dom0.
[root@cubitera ~]# /etc/init.d/network stop
Shutting down interface wlan0:                             [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Disabling IPv4 packet forwarding:  net.ipv4.ip_forward = 0
                                                           [  OK  ]
[root@cubitera ~]# qvm-set-default-netvm netvm
[root@cubitera ~]# /etc/init.d/network start
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  Device eth0 does not seem to be present, delaying initialization.
                                                           [FAILED]
[root@cubitera ~]# qvm-ls 
---------------+----+---------+-------+------+-----------+--------+--------+
          name | on |   state | updbl | type |  template |  netvm |  label |
---------------+----+---------+-------+------+-----------+--------+--------+
        {dom0} |  * | Running |   Yes |  Net |       n/a |    n/a |   gray |
       {netvm} |    |  Halted |   Yes |  Net |       n/a |    n/a |    red |
 =>[linux-x64] |    |  Halted |   Yes |  Tpl |       n/a | *netvm |   gray |
      personal |    |  Halted |       |      | linux-x64 | *netvm | yellow |
[root@cubitera ~]# 

Y añadimos en /var/lib/quebes/servicevm/netvm.conf el parámetro de arranque del kernel:
iommu=soft

Ya tenemos a la VM personal recorriendo la peligrosa selva de internet a través de netvm.



-- 
Saludos de #linux, tu canal donde siempre hay un operador de guardia.

10 mayo 2010

Probando QubesOS

Os dejamos un vídeo de Qubes funcionando con dom0 como netvm, y una única AppVM, por ahora no tenemos quejas sobre el rendimiento (más allá de las propias de la virtualización y teniendo en cuenta que solo corremos una VM). En cuánto a la estabilidad, se nos ha colgado la VM en varias pruebas, hemos cerrado aplicaciones de la AppVM y se han quedado dibujadas las ventanas en el escritorio y nos hemos encontrado con procesos qubes_gui
colgados.




--
Saludos de #linux, tu canal de visionarios.

Instalando QubesOS en un stick eSATA SSD de 16 GiB

Hola HAMIJOS, hoy os vamos a enseñar como probar QubesOS instalándolo en un stick eSATA SSD de 16 GiB, o no, ahora lo descubriréis.

Lo primero que hacemos es bajarnos la versión de 64Bits de Fedora 12, la grabamos en un DVD, y la instalamos en el stick siguiendo la recomendaciones de paquetes que nos hacen en http://qubes-os.org/trac/wiki/InstallationGuide y asignamos todo el espacio disponible a / (no, no queremos swap) excepto 200MiB para /boot. Ánimo, que serán unos 10 clicks.

Una vez instalado Fedora 12 el disco nos queda así:
[hielo@cubitera ~]$ df -ah /
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_cubitera-lv_root
15G  3.0G   11G  22% /
[hielo@cubitera ~]$


Siguiendo http://qubes-os.org/trac/wiki/InstallationGuide instalamos lo necesario para correr el XEN de ITL.
[root@cubitera ~]# wget http://qubes-os.org/keys/qubes-master-signing-key.asc
[root@cubitera ~]# wget http://qubes-os.org/keys/qubes-release-1-signing-key.asc
[root@cubitera ~]# rpm --import qubes-release-1-signing-key.asc # La wiki apunta a qubes-release-signing-key.asc
[root@cubitera ~]# wget http://qubes-os.org/yum/qubes.repo
[root@cubitera ~]# mv qubes.repo /etc/yum.repos.d/
[root@cubitera ~]# yum install kernel-qubes-dom0
=============================================================================================================
Package                    Arch               Version                             Repository           Size
=============================================================================================================
Installing:
kernel                     x86_64             2.6.32.9-7.pvops0.qubes             qubes                21 M
Installing for dependencies:
PyXML                      x86_64             0.8.4-17.fc12                       updates             906 k
SDL                        x86_64             1.2.13-11.fc12                      updates             193 k
bridge-utils               x86_64             1.2-8.fc12                          fedora               27 k
qemu-common                x86_64             2:0.11.0-13.fc12                    updates             213 k
qemu-img                   x86_64             2:0.11.0-13.fc12                    updates             121 k
xen                        x86_64             3.4.3.rc3-1.qubes                   qubes               898 k
xen-hypervisor             x86_64             3.4.3.rc3-1.qubes                   qubes               2.9 M
xen-libs                   x86_64             3.4.3.rc3-1.qubes                   qubes               166 k
xen-runtime                x86_64             3.4.3.rc3-1.qubes                   qubes               4.0 M


Y como tenemos una Nvidia, seguimos http://qubes-os.org/trac/wiki/NvidiaTroubleshooting (lástima, con lo chulo que es arrancar X sin el dichoso xorg.conf)

Reiniciamos la cubitera y nos preparamos para instalar los paquetes de Qubes y el entorno.
[root@cubitera ~]# yum install qubes-core-dom0 qubes-gui-dom0 qubes-dom0-cleanup

=============================================================================================================
Package                         Arch                Version                      Repository            Size
=============================================================================================================
Installing:
qubes-core-dom0                 x86_64              1.0.1-1                      qubes                1.5 M
qubes-dom0-cleanup              x86_64              0.2.2-1                      qubes                4.6 k
qubes-gui-dom0                  x86_64              1.0.0-1                      qubes                 28 k
Installing for dependencies:
python-daemon                   noarch              1.5.2-1.fc12                 updates               27 k
python-inotify                  noarch              0.8.8-1.fc12                 updates               46 k
python-lockfile                 noarch              0.8-1.fc12                   fedora                16 k

Transaction Summary
=============================================================================================================


Para que nuestro luser pueda arrancar las VMs
[root@cubitera ~]# usermod -a -G qubes hielo


Para que podamos ver p0rn en konqueror mientras seguimos con el siguiente pasito...
[root@cubitera ~]# qvm-set-default-netvm dom0


Nos toca otro reinicio de cubitera (¡ésto parece windows!) y después viene el lío de instalar las VMs que nos proporciona ITL en el -al parecer- poco espacio en disco que nos queda (+/-10.5 GiB).

Atentos al tamaño de descarga de la plantilla para VMs personales y de su netvm
[root@cubitera ~]# yum install qubes-template-linux-x64 qubes-servicevm-netvm
=============================================================================================================
Package                                Arch                 Version               Repository           Size
=============================================================================================================
Installing:
qubes-servicevm-netvm                  noarch               1.0.0-1               qubes               613 M
qubes-template-linux-x64               noarch               1.0.0-1               qubes               1.6 G

Transaction Summary
=============================================================================================================


Cancelamos la instalación para descargar e instalar cada paquete por separado y como no tenemos mucho disco, pero si algo de RAM (4 GiB) vamos a descargar los RPMs directamente en memoria.
[root@cubitera ~]# df -ah /dev/shm
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 1.5G  2.0M  1.5G   1% /dev/shm
[root@cubitera ~]# mount -o remount,size=2G /dev/shm
[root@cubitera ~]# df -ah /dev/shm
Filesystem            Size  Used Avail Use% Mounted on
tmpfs                 2.0G  2.0M  3.0G   1% /dev/shm
[root@cubitera ~]# yumdownloader qubes-template-linux-x64 --destdir=/dev/shm


Es el momento de ver p0rn en nuestro flamante konqueror del Dom0.
[root@cubitera ~]# rpm -ivh /dev/shm/qubes-template-linux-x64-1.0.0-1.noarch.rpm


En /var/lib/qubes/vm-templates/linux-x64 va copiando ficheros root.img.part.YZ (hasta 5), para luego juntarlos todos en root.img, pero claro, los part ya ocupan +/-5GiB y el fichero resultante -root.img- va a ocupar ¡10 GiB!. Como el post-script del RPM no tiene control de errores, el tar falla indicando que no queda espacio libre, pero continua la ejecución del script.

------------[ Erroes en la instalación del RPM ]------------
tar: linux-x64-root.img: Cannot write: No space left on device
tar: Exiting with failure status due to previous errors
------------[ template.spec ]------------
cat %{dest_dir}/root.img.part.* | tar --sparse -xf - -C %{dest_dir}
rm -f %{dest_dir}/root.img.part.*


Ya tenemos qubes-template-linux-x64 instalado aunque con un precioso root.img corrupto y es aquí donde no hacemos honor al título del post, vamos a dejar a root.img fuera del stick SSD, en un disco interno.

Extraemos las partes del root.img del RPM en /var/tmp
[root@cubitera tmp]# rpm2cpio - < /dev/shm/qubes-template-linux-x64-1.0.0-1.noarch.rpm | cpio -idmv \
./var/lib/qubes/vm-templates/linux-x64/root.img.part.*
./var/lib/qubes/vm-templates/linux-x64/root.img.part.04
./var/lib/qubes/vm-templates/linux-x64/root.img.part.03
./var/lib/qubes/vm-templates/linux-x64/root.img.part.02
./var/lib/qubes/vm-templates/linux-x64/root.img.part.01
./var/lib/qubes/vm-templates/linux-x64/root.img.part.00
10440633 blocks


Montamos una partición del HDD interno en /media, unimos las partes dentro del HDD, hacemos limpieza y dejamos los permisos configurados para que el luser pueda leer y escribir en root.img
[root@cubitera tmp]# mount /dev/sda9 /media && mkdir /media/tmpqubes
[root@cubitera tmp]# cat ./var/lib/qubes/vm-templates/linux-x64/root.img.part.* | tar --sparse -xf - -C /media/tmpqubes/
[root@cubitera tmp]# rm -rf ./var
[root@cubitera tmp]# chown root.qubes /media/tmpqubes/linux-x64-root.img
[root@cubitera tmp]# chmod 0660 /media/tmpqubes/linux-x64-root.img
[root@cubitera tmp]# cd /var/lib/qubes/vm-templates/linux-x64/
[root@cubitera linux-x64]# ll
total 4884100
drwxrwxr-x 2 root qubes      20480 2010-05-09 21:09 apps
drwxrwxr-x 2 root qubes      12288 2010-05-09 21:09 apps.templates
-rw-rw---- 1 root qubes        478 2010-04-05 22:57 appvm-template.conf
lrwxrwxrwx 1 root root          35 2010-05-09 21:24 icon.png -> /usr/share/qubes/icons/template.png
drwxrwx--- 2 root qubes       4096 2010-05-09 21:09 kernels
-rw-rw---- 1 root qubes        515 2010-04-05 22:57 linux-x64.conf
-rw-rw---- 1 root qubes 2147483648 2010-05-09 21:24 private.img
-rw-rw---- 1 root qubes 5434949632 2010-04-05 22:48 root.img   # ¡CORRUPTO!
-rw-rw---- 1 root qubes        540 2010-04-05 22:57 templatevm.conf
[root@cubitera linux-x64]# ln -sf /media/tmpqubes/linux-x64-root.img root.img
[root@cubitera linux-x64]# ll
total 99036
drwxrwxr-x 2 root qubes      20480 2010-05-09 21:09 apps
drwxrwxr-x 2 root qubes      12288 2010-05-09 21:09 apps.templates
-rw-rw---- 1 root qubes        478 2010-04-05 22:57 appvm-template.conf
lrwxrwxrwx 1 root root          35 2010-05-09 21:24 icon.png -> /usr/share/qubes/icons/template.png
drwxrwx--- 2 root qubes       4096 2010-05-09 21:09 kernels
-rw-rw---- 1 root qubes        515 2010-04-05 22:57 linux-x64.conf
-rw-rw---- 1 root qubes 2147483648 2010-05-09 21:24 private.img
lrwxrwxrwx 1 root root          34 2010-05-09 21:29 root.img -> /media/tmpqubes/linux-x64-root.img
-rw-rw---- 1 root qubes        540 2010-04-05 22:57 templatevm.conf
[root@cubitera linux-x64]#


Pues si HAMIJOS, el template que nos presentan ocupa 10 GiB. (Nos ha parecido escuchar en alguna ocasión a JR decir que las apps-vms deberían ocupar unos 400 MiB)
[root@cubitera ~]# fdisk -l /media/tmpqubes/linux-x64-root.img

Disk /media/tmpqubes/linux-x64-root.img: 0 MB, 0 bytes
255 heads, 63 sectors/track, 0 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0x000749d4

Device Boot      Start         End      Blocks   Id  System
/media/tmpqubes/linux-x64-root.img1   *           1        1178     9458381   83  Linux
Partition 1 has different physical/logical endings:
phys=(1023, 254, 63) logical=(1177, 132, 4)
/media/tmpqubes/linux-x64-root.img2            1178        1305     1024000   82  Linux swap / Solaris
Partition 2 has different physical/logical beginnings (non-Linux?):
phys=(1023, 254, 63) logical=(1177, 132, 5)
Partition 2 has different physical/logical endings:
phys=(1023, 254, 63) logical=(1304, 254, 63)
[root@cubitera tmp]#


Y no os olvidéis de instalar qubes-servicevm-netvm, durante el proceso podéis, por ejemplo, ver p0rn

Ahora nos toca crear una app-vm, aunque ya sin la ilusión de poder llevarnos el stick a 'cualquier' PC para arrancar nuestro Qubes megaseguro.
[root@cubitera ~]# df -ah /
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/vg_cubitera-lv_root
15G  9.7G  4.3G  70% /
[root@cubitera ~]#
[hielo@cubitera tmp]$ qvm-ls
---------------+----+---------+-------+------+-----------+-------+--------+
name | on |   state | updbl | type |  template | netvm |  label |
---------------+----+---------+-------+------+-----------+-------+--------+
{dom0} |  * | Running |   Yes |  Net |       n/a |   n/a |   gray |
{netvm} |    |  Halted |   Yes |  Net |       n/a |   n/a |    red |
=>[linux-x64] |    |  Halted |   Yes |  Tpl |       n/a | *dom0 |   gray |
[hielo@cubitera tmp]$
[hielo@cubitera ~]$ id
uid=500(hielo) gid=500(hielo) groups=500(hielo),501(qubes)
[hielo@cubitera ~]$ qvm-create personal --label yellow
--> Using default TemplateVM: linux-x64
--> Creating directory: /var/lib/qubes/appvms/personal
--> Creating the VM config file: /var/lib/qubes/appvms/personal/personal.conf
--> Copying the template's private image: /var/lib/qubes/vm-templates/linux-x64/private.img
--> Creating icon symlink: /var/lib/qubes/appvms/personal/icon.png -> /usr/share/qubes/icons/yellow.png
--> Converting Appmenu Templates...
--> Adding Apps to the Menu...
[hielo@cubitera ~]$ du -sh /var/lib/qubes/appvms/personal
2.7M    /var/lib/qubes/appvms/personal
[hielo@cubitera ~]$ ls -lh /var/lib/qubes/appvms/personal
total 888K
drwxrwxr-x 2 hielo hielo  16K 2010-05-09 01:47 apps
lrwxrwxrwx 1 hielo hielo   33 2010-05-09 01:47 icon.png -> /usr/share/qubes/icons/yellow.png
-rw-rw-r-- 1 hielo hielo  619 2010-05-09 01:47 personal.conf
-rw-rw---- 1 hielo hielo 2.0G 2010-05-09 01:47 private.img
[hielo@cubitera ~]$ qvm-ls
---------------+----+---------+-------+------+-----------+-------+--------+
name | on |   state | updbl | type |  template | netvm |  label |
---------------+----+---------+-------+------+-----------+-------+--------+
{dom0} |  * | Running |   Yes |  Net |       n/a |   n/a |   gray |
{netvm} |    |  Halted |   Yes |  Net |       n/a |   n/a |    red |
=>[linux-x64] |    |  Halted |   Yes |  Tpl |       n/a | *dom0 |   gray |
personal |    |  Halted |       |      | linux-x64 | *dom0 | yellow |
[hielo@cubitera ~]$


Y ya podemos arrancar cualquier aplicación de la VM personal. Por el momento no vamos a usar la VM netvm ya que estamos teniendo pequeños problemas técnicos con nuestro VT-d.

Fatal DMA error! Please use 'swiotlb=force'
------------[ cut here ]------------
kernel BUG at drivers/pci/xen-iommu.c:227!
invalid opcode: 0000 [#1] SMP


Podemos decir que el proceso de instalación no es demasiado duro para ser una versión alfa, la falta de espacio en el stick SSD la ha complicado algo. De lo que estamos seguros es que una VM de 10 GiB no tiene cabida ni en una versión beta.

Próximamente colgaremos vídeos de como funciona el invento y si $DEITY quiere, haremos funcionar la VM netvm.

--
Saludos de #linux, tu canal con versionitis.