version=pmwiki-2.1.6 ordered=1 urlencoded=1 agent=Mozilla/5.0 (X11; U; Linux i686; fr; rv:1.8.1.1) Gecko/20061205 Iceweasel/2.0.0.1 (Debian-2.0.0.1+dfsg-2) author=FiFi csum=commenter les consoles dans inittab ctime=1172519454 host=213.219.165.31 name=Admin.DebianXen rev=3 targets=Profiles.FiFi text=!Debian Etch & Xen%0a%0aNous allons donc tenter d'installer un dom0 et un domU sous Debian Etch et de configurer un système fonctionnel et muni du minimum vital.%0a%0a!!Paquets nécessaires%0a!!!dom0%0aVous devrez installer l'hyperviseur ainsi qu'un noyau spécialement créé pour héberger Xen; selon la version désirée, les options suivantes pourraient différer :%0a%0a@@$ sudo apt-get install xen-linux-system-2.6.18-3-xen-k7\\%0a  xen-hypervisor-3.0.3-1-i386 libc6-xen deboostrap bridge-utils@@%0a%0adans l'exemple ci-dessus :%0a* un 2.6.18 pour une architecture Athlon%0a* l'hyperviseur version 3.0.3%0a* une libc spéciale pour Xen%0a* deboostrap pour installer une Debian toute neuve en domU%0a* bridge-utils pour permettre un accès réseau au domU%0a%0aUne fois cette installation terminée n'oubliez pas de REBOOTER pour démarrer sur votre nouveau noyau et tester que tout va bien jusque là.%0a%0a!!!domU%0aNormalement seulement la libc6-xen est nécessaire, le noyau qui sera chargé par Xen sera en fait installé sur la machine hôte, le dom0. Vous ferez donc, une fois le domU installé par deboostrap : %0a%0a@@$ sudo apt-get install libc6-xen@@%0a%0a!!Création du domU%0aPlusieurs solutions pour le disque attribué au domU, une partition 'normale', un volume créé par LVM ou bien un simple fichier.%0a%0aSi vous utilisez LVM ou une partition classique, nous supposerons que vous saurez vous débrouiller ( au sujet de LVM : http://www.howtoforge.com/linux_lvm est un bon début, si vous êtes intéressé ).%0a%0aSi vous voulez tester, un simple fichier fera l'affaire, un fichier de 1Go dans notre exemple :%0a%0a@@$ dd if=/dev/zero of=/tmp/debian-xen.img bs=1M count=1000@@%0a%0aEnsuite il faut formater la chose :%0a%0a@@$ sudo mkfs.ext3 /tmp/debian-xen.img@@%0a%0avous devriez avoir un message d'avertissement car vous utilisez un fichier, pas de problème, répondez 'oui' ;)%0a%0aMaintenant montons ce nouveau filesystem et installons une Debian Etch :%0a%0a@@$ mkdir /tmp/debian-xen\\%0a$ sudo mount -o loop /tmp/debian-xen.img /tmp/debian-xen\\%0a$ sudo debootstrap etch /tmp/debian-xen/ http://ftp.easynet.be/ftp/debian@@%0a%0aTout ceci, évidemment, modulo les dossiers/fichiers que vous avez créés et le miroir Debian que vous voulez utiliser.%0a%0aAprès quelques minutes vous devriez avoir fini l'installation, vous pouvez désormais réaliser un 'chroot' sur votre Debian toute fraîche.%0a%0a@@$ sudo chroot /tmp/debian-xen /bin/bash@@%0a%0aVous voilà en 'root' prêt à configurer ce qui doit l'être%0a%0a!!Configuration du domU%0aL'installation par défaut va nécessiter toute une série d'opérations pour être utilisable.%0a%0aIl est maintenant nécessaire d'installer la libc6-xen, pour rappel :%0a%0a@@# apt-get install libc6-xen@@%0a%0aUn accès ultérieur au système pourrait s'avérer intéressant :%0a%0a@@# passwd root@@%0a%0a!!!Configuration réseau domU%0a%0aPour '''hostname''' et '''hosts''', c'est vous qui choississez le nom de machine et éventuellement le domaine s'il est nécessaire.%0a%0a@@$ cat /etc/hosts\\%0a127.0.0.1 localhost\\%0a127.0.1.1 debian-xen.biere.lan debian-xen@@%0a%0a@@$ cat /etc/hostname\\%0adebian-xen@@%0a%0aLes paramètres de '''resolv.conf''' et '''interfaces''' sont fonctions de votre infrastructure réseau évidemment.%0a%0a@@$ cat /etc/resolv.conf\\%0anameserver 10.0.2.200@@%0a%0a@@$ cat /etc/network/interfaces\\%0aauto lo\\%0aiface lo inet loopback\\%0a\\%0aauto eth0\\%0aiface eth0 inet static\\%0a address 10.0.2.155\\%0a netmask 255.255.255.0\\%0a network 10.0.2.0\\%0a broadcast 10.0.2.255\\%0a gateway 10.0.2.200@@%0a%0a!!!Configuration point de montage & autres%0a'''N'oubliez surtout pas de spécifier les systèmes de fichier à monter'''%0a%0a@@$ cat /etc/fstab\\%0a/dev/hda1 / ext3 defaults,errors=remount-ro 0 1@@%0a%0aEventuellement, créez un utilisateur et installer/configurer '''sudo''' ou '''ssh'''.%0a%0a@@# adduser foobar\\%0a# apt-get install sudo\\%0a# visudo\\%0a# apt-get install openssh-server@@%0a%0aPour éviter quelques messages d'erreurs au démarrage, changez '''/etc/inittab''' en commentant les lignes rapportées aux consoles 2,3,4,5 et 6 :%0a%0a@@$ cat /etc/initttab\\%0a...\\%0a1:2345:respawn:/sbin/getty 38400 tty1\\%0a#2:23:respawn:/sbin/getty 38400 tty2\\%0a#3:23:respawn:/sbin/getty 38400 tty3\\%0a#4:23:respawn:/sbin/getty 38400 tty4\\%0a#5:23:respawn:/sbin/getty 38400 tty5\\%0a#6:23:respawn:/sbin/getty 38400 tty6\\%0a...@@%0a%0aIl semblerait qu'en cas de problème avec les consoles, remplacer ''tty1'' par ''console'' pourrait arranger les choses, dans mon cas je n'en ai pas eu besoin. Sachez cependant que vous perdez le ''job control'' et la possibilité de 'SIGINTer' à coup de CTRL-C par exemple.%0a%0a!!Configuration dom0%0a%0aNormalement (si je et vous n'avez rien oublié) votre domU, ''debian-xen'' est prêt à être utilisé :%0a* configuration réseau%0a* configuration hosts & hostname%0a* ajout des points de montage%0a* création d'un utilisateur et ajout des droits%0a* openssh éventuellement%0a%0a'''Démontez maintenant le système de fichier, sinon le domU va avoir quelques problèmes à y accéder ;)'''%0a%0a@@$ sudo umount /tmp/debian-xen@@%0a%0a''Nous allons donc passer à la configuration de l'hôte, le dom0.''%0a%0a!!!Configuration réseau%0aC'est maintenant que le pont, le ''bridge'', va entrer en action pour fournir du réseau aux machines invitées, les domU :%0a%0aSur l'hôte donc :%0a%0a@@$ cat /etc/network/interfaces\\%0aauto lo\\%0aiface lo inet loopback\\%0a\\%0a#si votre réseau dispose d'un DHCP\\%0aauto br-xen\\%0aiface br-xen inet dhcp\\%0a bridge_ports eth0\\%0a bridge_stp off\\%0a bridge_maxwait 0\\%0a\\%0a#sinon, avec une configuration statique\\%0a#auto br-xen\\%0a#iface br-xen inet static\\%0a# address 10.0.2.154\\%0a# netmask 255.255.255.0\\%0a# network 10.0.2.0\\%0a# gateway 10.0.2.200\\%0a# bridge_ports eth0\\%0a# bridge_stp off\\%0a# bridge_maxwait 0@@%0a%0aTout ceci bien entendu fonction de votre configuration et celle que vous avez attribuée au domU.%0a'''N'oubliez pas d'activer les interfaces une fois les modifications appliquées, avec 'ifdown -a' et puis 'ifup -a' par exemple'''.%0a%0a!!!Configuration Xen%0a%0a@@$ cat /etc/xen/debian-xen-config.sxp\\%0a\\%0aname="debian-xen"\\%0a\\%0a# le kernel qui sera utilisé pour le domU et installé sur le dom0\\%0akernel="/boot/vmlinuz-2.6.18-3-xen-k7"\\%0a\\%0a# à ne pas oublier si vous utilisez un ramdisk comme initrd\\%0aramdisk="/boot/initrd.img-2.6.18-3-xen-k7"\\%0a\\%0a# le disque root, fonction de la configuration de xen, voir plus loin\\%0aroot="/dev/hda1"\\%0amemory="128"\\%0a\\%0a# dans notre exemple nous utilisons un fichier comme 'disque'\\%0adisk=['file:/tmp/debian-xen.img,hda1,w']\\%0a\\%0a# pour mes essais j'ai utilisé lvm, voici un exemple\\%0a#disk=['phy:/dev/hercule-lvm/debian-xen,hda1,w']\\%0a\\%0a# quelle interface virtuelle fournir, MAC, nom du bridge à utiliser\\%0avif=[ 'mac=00:00:de:ad:ba:be, bridge=br-xen' ]\\%0a# les paramètres IP, gateway, etc, A ADAPTER\\%0adhcp="off"\\%0aip="10.0.2.155"\\%0anetmask="255.255.255.0"\\%0agateway="10.0.2.200"\\%0ahostname="debian-xen.biere.lan"\\%0a\\%0a# le runlevel dans lequel le domU sera lancé\\%0aextra="3"@@%0a%0a!!3, 2, 1, Launch !%0aAprès tous ces efforts nous allons (normalement) enfin pouvoir lancer notre domU.%0aRépétons-le encore une fois, assurez-vous d'avoir '''rebooté''' après l'installation du noyau Xen sur votre dom0, que le '''réseau fonctionne''' dans les conditions actuelles et que votre bridge est actif (interface br-xen) et enfin, que le '''daemon xend est bien lancé'''.%0a%0a@@$ sudo xm create -c /etc/xen/debian-xen-config.sxp@@%0a%0a'''N'oubliez pas de spécifier l'option '-c' ''' sinon vous ne verrez pas grand chose en cas de problème, cette option permet de directement attacher la console du domU au dom0.%0a%0aSi tout s'est bien passé, vous êtes sur un système Debian Etch tout neuf, isolé dans le domU et fonctionnant comme toute autre Debian Etch (ou presque).%0a%0aD'autres commandes intéressantes :%0a%0a@@$ sudo xm list\\%0a$ sudo xm console debian-xen\\%0a$ sudo xm shutdown debian-xen\\%0a$ sudo xm reboot debian-xen\\%0a$ sudo xm destroy debian-xen@@%0a%0apour :%0a* lister les domaines en activité%0a* attacher le terminal courant à la console du domU%0a* arrêter un domaine de manière propre, en envoyant un init 0%0a* redémarrer un domaine de manière propre, en envoyant un init 6%0a* arrêter un domaine de manière crade, en l'arrêtant brutalement%0a%0apour le reste :%0a%0a@@man xm@@%0a%0a%0aVoilà, je pense avoir fait le tour, ce HowTo est vraiment une version 'beta', si vous avez le moindre problème n'hésitez pas à me contacter ( [[Profiles.FiFi|FiFi]] ) ou modifiez les erreurs ou fautes d'orthographe que vous pourriez trouver. time=1172524393 author:1172524393=FiFi csum:1172524393=commenter les consoles dans inittab diff:1172524393:1172523407:minor=107,120d106%0a%3c Pour éviter quelques messages d'erreurs au démarrage, changez '''/etc/inittab''' en commentant les lignes rapportées aux consoles 2,3,4,5 et 6 :%0a%3c %0a%3c @@$ cat /etc/initttab\\%0a%3c ...\\%0a%3c 1:2345:respawn:/sbin/getty 38400 tty1\\%0a%3c #2:23:respawn:/sbin/getty 38400 tty2\\%0a%3c #3:23:respawn:/sbin/getty 38400 tty3\\%0a%3c #4:23:respawn:/sbin/getty 38400 tty4\\%0a%3c #5:23:respawn:/sbin/getty 38400 tty5\\%0a%3c #6:23:respawn:/sbin/getty 38400 tty6\\%0a%3c ...@@%0a%3c %0a%3c Il semblerait qu'en cas de problème avec les consoles, remplacer ''tty1'' par ''console'' pourrait arranger les choses, dans mon cas je n'en ai pas eu besoin. Sachez cependant que vous perdez le ''job control'' et la possibilité de 'SIGINTer' à coup de CTRL-C par exemple.%0a%3c %0a host:1172524393=213.219.165.31 author:1172523407=FiFi csum:1172523407=s/restart/reboot/ diff:1172523407:1172519454:minor=201c201%0a%3c $ sudo xm reboot debian-xen\\%0a---%0a> $ sudo xm restart debian-xen\\%0a host:1172523407=213.219.165.31 author:1172519454=FiFi csum:1172519454=Debian & Xen - Version 0.1 - à tester diff:1172519454:1172519454:=1,216d0%0a%3c !Debian Etch & Xen%0a%3c %0a%3c Nous allons donc tenter d'installer un dom0 et un domU sous Debian Etch et de configurer un système fonctionnel et muni du minimum vital.%0a%3c %0a%3c !!Paquets nécessaires%0a%3c !!!dom0%0a%3c Vous devrez installer l'hyperviseur ainsi qu'un noyau spécialement créé pour héberger Xen; selon la version désirée, les options suivantes pourraient différer :%0a%3c %0a%3c @@$ sudo apt-get install xen-linux-system-2.6.18-3-xen-k7\\%0a%3c   xen-hypervisor-3.0.3-1-i386 libc6-xen deboostrap bridge-utils@@%0a%3c %0a%3c dans l'exemple ci-dessus :%0a%3c * un 2.6.18 pour une architecture Athlon%0a%3c * l'hyperviseur version 3.0.3%0a%3c * une libc spéciale pour Xen%0a%3c * deboostrap pour installer une Debian toute neuve en domU%0a%3c * bridge-utils pour permettre un accès réseau au domU%0a%3c %0a%3c Une fois cette installation terminée n'oubliez pas de REBOOTER pour démarrer sur votre nouveau noyau et tester que tout va bien jusque là.%0a%3c %0a%3c !!!domU%0a%3c Normalement seulement la libc6-xen est nécessaire, le noyau qui sera chargé par Xen sera en fait installé sur la machine hôte, le dom0. Vous ferez donc, une fois le domU installé par deboostrap : %0a%3c %0a%3c @@$ sudo apt-get install libc6-xen@@%0a%3c %0a%3c !!Création du domU%0a%3c Plusieurs solutions pour le disque attribué au domU, une partition 'normale', un volume créé par LVM ou bien un simple fichier.%0a%3c %0a%3c Si vous utilisez LVM ou une partition classique, nous supposerons que vous saurez vous débrouiller ( au sujet de LVM : http://www.howtoforge.com/linux_lvm est un bon début, si vous êtes intéressé ).%0a%3c %0a%3c Si vous voulez tester, un simple fichier fera l'affaire, un fichier de 1Go dans notre exemple :%0a%3c %0a%3c @@$ dd if=/dev/zero of=/tmp/debian-xen.img bs=1M count=1000@@%0a%3c %0a%3c Ensuite il faut formater la chose :%0a%3c %0a%3c @@$ sudo mkfs.ext3 /tmp/debian-xen.img@@%0a%3c %0a%3c vous devriez avoir un message d'avertissement car vous utilisez un fichier, pas de problème, répondez 'oui' ;)%0a%3c %0a%3c Maintenant montons ce nouveau filesystem et installons une Debian Etch :%0a%3c %0a%3c @@$ mkdir /tmp/debian-xen\\%0a%3c $ sudo mount -o loop /tmp/debian-xen.img /tmp/debian-xen\\%0a%3c $ sudo debootstrap etch /tmp/debian-xen/ http://ftp.easynet.be/ftp/debian@@%0a%3c %0a%3c Tout ceci, évidemment, modulo les dossiers/fichiers que vous avez créés et le miroir Debian que vous voulez utiliser.%0a%3c %0a%3c Après quelques minutes vous devriez avoir fini l'installation, vous pouvez désormais réaliser un 'chroot' sur votre Debian toute fraîche.%0a%3c %0a%3c @@$ sudo chroot /tmp/debian-xen /bin/bash@@%0a%3c %0a%3c Vous voilà en 'root' prêt à configurer ce qui doit l'être%0a%3c %0a%3c !!Configuration du domU%0a%3c L'installation par défaut va nécessiter toute une série d'opérations pour être utilisable.%0a%3c %0a%3c Il est maintenant nécessaire d'installer la libc6-xen, pour rappel :%0a%3c %0a%3c @@# apt-get install libc6-xen@@%0a%3c %0a%3c Un accès ultérieur au système pourrait s'avérer intéressant :%0a%3c %0a%3c @@# passwd root@@%0a%3c %0a%3c !!!Configuration réseau domU%0a%3c %0a%3c Pour '''hostname''' et '''hosts''', c'est vous qui choississez le nom de machine et éventuellement le domaine s'il est nécessaire.%0a%3c %0a%3c @@$ cat /etc/hosts\\%0a%3c 127.0.0.1 localhost\\%0a%3c 127.0.1.1 debian-xen.biere.lan debian-xen@@%0a%3c %0a%3c @@$ cat /etc/hostname\\%0a%3c debian-xen@@%0a%3c %0a%3c Les paramètres de '''resolv.conf''' et '''interfaces''' sont fonctions de votre infrastructure réseau évidemment.%0a%3c %0a%3c @@$ cat /etc/resolv.conf\\%0a%3c nameserver 10.0.2.200@@%0a%3c %0a%3c @@$ cat /etc/network/interfaces\\%0a%3c auto lo\\%0a%3c iface lo inet loopback\\%0a%3c \\%0a%3c auto eth0\\%0a%3c iface eth0 inet static\\%0a%3c address 10.0.2.155\\%0a%3c netmask 255.255.255.0\\%0a%3c network 10.0.2.0\\%0a%3c broadcast 10.0.2.255\\%0a%3c gateway 10.0.2.200@@%0a%3c %0a%3c !!!Configuration point de montage & autres%0a%3c '''N'oubliez surtout pas de spécifier les systèmes de fichier à monter'''%0a%3c %0a%3c @@$ cat /etc/fstab\\%0a%3c /dev/hda1 / ext3 defaults,errors=remount-ro 0 1@@%0a%3c %0a%3c Eventuellement, créez un utilisateur et installer/configurer '''sudo''' ou '''ssh'''.%0a%3c %0a%3c @@# adduser foobar\\%0a%3c # apt-get install sudo\\%0a%3c # visudo\\%0a%3c # apt-get install openssh-server@@%0a%3c %0a%3c !!Configuration dom0%0a%3c %0a%3c Normalement (si je et vous n'avez rien oublié) votre domU, ''debian-xen'' est prêt à être utilisé :%0a%3c * configuration réseau%0a%3c * configuration hosts & hostname%0a%3c * ajout des points de montage%0a%3c * création d'un utilisateur et ajout des droits%0a%3c * openssh éventuellement%0a%3c %0a%3c '''Démontez maintenant le système de fichier, sinon le domU va avoir quelques problèmes à y accéder ;)'''%0a%3c %0a%3c @@$ sudo umount /tmp/debian-xen@@%0a%3c %0a%3c ''Nous allons donc passer à la configuration de l'hôte, le dom0.''%0a%3c %0a%3c !!!Configuration réseau%0a%3c C'est maintenant que le pont, le ''bridge'', va entrer en action pour fournir du réseau aux machines invitées, les domU :%0a%3c %0a%3c Sur l'hôte donc :%0a%3c %0a%3c @@$ cat /etc/network/interfaces\\%0a%3c auto lo\\%0a%3c iface lo inet loopback\\%0a%3c \\%0a%3c #si votre réseau dispose d'un DHCP\\%0a%3c auto br-xen\\%0a%3c iface br-xen inet dhcp\\%0a%3c bridge_ports eth0\\%0a%3c bridge_stp off\\%0a%3c bridge_maxwait 0\\%0a%3c \\%0a%3c #sinon, avec une configuration statique\\%0a%3c #auto br-xen\\%0a%3c #iface br-xen inet static\\%0a%3c # address 10.0.2.154\\%0a%3c # netmask 255.255.255.0\\%0a%3c # network 10.0.2.0\\%0a%3c # gateway 10.0.2.200\\%0a%3c # bridge_ports eth0\\%0a%3c # bridge_stp off\\%0a%3c # bridge_maxwait 0@@%0a%3c %0a%3c Tout ceci bien entendu fonction de votre configuration et celle que vous avez attribuée au domU.%0a%3c '''N'oubliez pas d'activer les interfaces une fois les modifications appliquées, avec 'ifdown -a' et puis 'ifup -a' par exemple'''.%0a%3c %0a%3c !!!Configuration Xen%0a%3c %0a%3c @@$ cat /etc/xen/debian-xen-config.sxp\\%0a%3c \\%0a%3c name="debian-xen"\\%0a%3c \\%0a%3c # le kernel qui sera utilisé pour le domU et installé sur le dom0\\%0a%3c kernel="/boot/vmlinuz-2.6.18-3-xen-k7"\\%0a%3c \\%0a%3c # à ne pas oublier si vous utilisez un ramdisk comme initrd\\%0a%3c ramdisk="/boot/initrd.img-2.6.18-3-xen-k7"\\%0a%3c \\%0a%3c # le disque root, fonction de la configuration de xen, voir plus loin\\%0a%3c root="/dev/hda1"\\%0a%3c memory="128"\\%0a%3c \\%0a%3c # dans notre exemple nous utilisons un fichier comme 'disque'\\%0a%3c disk=['file:/tmp/debian-xen.img,hda1,w']\\%0a%3c \\%0a%3c # pour mes essais j'ai utilisé lvm, voici un exemple\\%0a%3c #disk=['phy:/dev/hercule-lvm/debian-xen,hda1,w']\\%0a%3c \\%0a%3c # quelle interface virtuelle fournir, MAC, nom du bridge à utiliser\\%0a%3c vif=[ 'mac=00:00:de:ad:ba:be, bridge=br-xen' ]\\%0a%3c # les paramètres IP, gateway, etc, A ADAPTER\\%0a%3c dhcp="off"\\%0a%3c ip="10.0.2.155"\\%0a%3c netmask="255.255.255.0"\\%0a%3c gateway="10.0.2.200"\\%0a%3c hostname="debian-xen.biere.lan"\\%0a%3c \\%0a%3c # le runlevel dans lequel le domU sera lancé\\%0a%3c extra="3"@@%0a%3c %0a%3c !!3, 2, 1, Launch !%0a%3c Après tous ces efforts nous allons (normalement) enfin pouvoir lancer notre domU.%0a%3c Répétons-le encore une fois, assurez-vous d'avoir '''rebooté''' après l'installation du noyau Xen sur votre dom0, que le '''réseau fonctionne''' dans les conditions actuelles et que votre bridge est actif (interface br-xen) et enfin, que le '''daemon xend est bien lancé'''.%0a%3c %0a%3c @@$ sudo xm create -c /etc/xen/debian-xen-config.sxp@@%0a%3c %0a%3c '''N'oubliez pas de spécifier l'option '-c' ''' sinon vous ne verrez pas grand chose en cas de problème, cette option permet de directement attacher la console du domU au dom0.%0a%3c %0a%3c Si tout s'est bien passé, vous êtes sur un système Debian Etch tout neuf, isolé dans le domU et fonctionnant comme toute autre Debian Etch (ou presque).%0a%3c %0a%3c D'autres commandes intéressantes :%0a%3c %0a%3c @@$ sudo xm list\\%0a%3c $ sudo xm console debian-xen\\%0a%3c $ sudo xm shutdown debian-xen\\%0a%3c $ sudo xm restart debian-xen\\%0a%3c $ sudo xm destroy debian-xen@@%0a%3c %0a%3c pour :%0a%3c * lister les domaines en activité%0a%3c * attacher le terminal courant à la console du domU%0a%3c * arrêter un domaine de manière propre, en envoyant un init 0%0a%3c * redémarrer un domaine de manière propre, en envoyant un init 6%0a%3c * arrêter un domaine de manière crade, en l'arrêtant brutalement%0a%3c %0a%3c pour le reste :%0a%3c %0a%3c @@man xm@@%0a%3c %0a%3c %0a%3c Voilà, je pense avoir fait le tour, ce HowTo est vraiment une version 'beta', si vous avez le moindre problème n'hésitez pas à me contacter ( [[Profiles.FiFi|FiFi]] ) ou modifiez les erreurs ou fautes d'orthographe que vous pourriez trouver.%0a\ No newline at end of file%0a host:1172519454=213.219.165.31