www.flickr.com

zaterdag 10 juli 2010

Video conversie met opensource tools: Sony Ericsson W810i

Er circuleren de nodige tools op het internet die video bestanden kunnen converteren naar - onder andere - mobiele telefoons. Deze conversies kunnen ook prima worden uitgevoerd met open source software. Het is alleen wat minder eenvoudig om de juiste parameters te achterhalen.

In deze blogpost bespreek ik de videoconversie mijn mobiele telefoon, de Sony Ericsson W810i.

Voor dit model gebruik ik de tool ffmpeg. Ik ga ervanuit dat de bronbestanden een verhouding van 16:9 hebben. Vandaar dat ik met de parameters 'padtop' en 'padbottom' wat loze ruimte moet opvullen om uiteindelijk op de juiste resolutie van 176x220 uit te komen. De syntax ziet er als volgt uit:

ffmpeg -i input.avi -qmin 3 -qmax 6 -ar 44100 -ab 192k -ac 1 -acodec libfaac -vcodec h263 -r 12 -b 300k -s 176x100 -padtop 22 -padbottom 22 output.3gp

Mogelijk volgen er in de toekomst nog updates voor andere modellen.

donderdag 11 maart 2010

Uitlijnen van bestaande VMs met GParted

Als je zoals mij pas na het inrichten van een VMware infrastructuur bekend bent geraakt met het fenomeen partition alignment zul je vermoedelijk een hoop niet-uitgelijnde virtuele machines hebben.

NetApp heeft hier al tijdje een oplossing voor in de vorm van mbrscan/mbralign. Helaas is het gebruik van deze tools beperkt tot geregistreerde NetApp klanten met een actief support contract. Mocht je nu een compleet ander storage systeem gebruiken en toch je bestaande VMs willen uitlijnen, dan is hier ook een procedure voor.

Deze procedure vereist het gebruik van een GParted. Download de laatste versie van de LiveCD van de GParted website en koppel het gedownloade ISO bestand aan je VM. Start vervolgens de VM op van met LiveCD en voer de volgende stappen uit:
  • Selecteer de uit te lijnen partitie en selecteer move/resize in het menu.
  • Verklein de partitie met 10MB door dit aantal in te vullen bij de optie 'Free Space Preceding (MiB)'.
  • Druk op TAB en selecteer 'Resize/Move'.
  • Selecteer de optie 'Apply' via het menu en bevestig de opdracht.
  • Sluit nu de GParted applicatie af, maar herstart de VM nog niet!
  • Start een terminal venster.
  • Typ 'parted /dev/sda' om de parted command line editor te starten. Vervang eventueel /dev/sda met een schijftoewijzing naar keuze.
  • Maak een nieuwe partitie aan het begin van de schijf om de ruimte op te vullen tot het gewenste beginpunt van de uitgelijnde partitie. Als je bijvoorbeeld wilt dat jouw partitie op secotor 128 begint zul je een partitie moeten aanmaken die de sectoren 63-127 opvult. Typ hiervoor de volgende tekst in het terminal venster: mkpart primary 63s 127s
  • Verlaat de parted command line editor en start de GParted GUI weer op.
  • Verplaats en vergroot de uit te lijnen partitie zodat alle beschikbare ruimte gebruikt wordt. Het is ESSENTIEEL dat de optie "Round to Cylinders" wordt uitgevinkt!
  • Selecteer nu 'Apply All Operations.
  • Verwijder eventueel de hulppartitie aan het begin van de disk en herstart de VM.
Met dank aan Duncan van Yellow-Bricks.com die me via Twitter naar deze procedure leidde.

donderdag 7 januari 2010

Wijzigen schema voor vCenter database objecten

Als je bij het installeren van Virtual Center niet zo goed hebt opgelet, dan zou het kunnen dat alle database objecten onder een nieuw schema worden aangemaakt.

Dit is op zich geen bezwaar als je een geroutineerde DBA'er bent, maar een reguliere beheerder wil bij het uitvoeren van SQL opdrachten nog wel eens vergeten om van tevoren een 'EXECUTE AS LOGIN' opdracht te geven om in het juiste schema terecht te komen.

Als oud-beheerder van Pre-SQL 2005 systemen wil mij dit ook nog wel eens overkomen, dus vroeg ik mij af of het mogelijk was om achteraf alle Virtual Center objecten naar het vertrouwde dbo schema te verplaatsen.

Na enig zoekwerk in de online documentatie van SQL server bleek dat met het commando 'ALTER SCHEMA' een object verhuisd kan worden. Maar hoe weet je nu welke objecten verhuisd moeten worden? Voor Virtual Center 2.5 databases heb ik proefondervindelijk vastgesteld dat dit alleen objecten zijn van het type USER_TABLE, SQL_STORED_PROCEDURE en VIEW.

Als ik dit vertaal naar een SQL query dan krijg je het volgende resultaat:

select 'ALTER SCHEMA dbo TRANSFER ' + '['+SCHEMA_NAME(schema_id)+'].['+name+']' FROM sys.objects (nolock)
where type_desc in ('USER_TABLE', 'SQL_STORED_PROCEDURE', 'VIEW')
and is_ms_shipped = 0
and schema_id = schema_id ('vul hier uw schemanaam in')


Waarschijnlijk kan het nog makkelijker, want feitelijk genereer ik hier alleen de commando's die aan SQL server gevoed moeten worden voor de daadwerkelijke verhuizing. Ik kan me voorstellen dat iemand die handiger is met SQL queries dit ook rechtstreeks kan.

Zodra alle objecten netjes zijn verhuisd naar het dbo schema, vergeet dan niet om met het commando 'ALTER USER' het standaard schema van de gebruiker op dbo te zetten. Na deze handeling kan de Virtual Center service weer worden gestart en zou alles naar behoren moeten werken.

Update 2 maart 2010: Het gebruik van schema's anders dan dbo zorgt ook voor problemen bij een upgrade van VI3 naar vSphere. Zie KB1011386 voor meer informatie.

maandag 31 augustus 2009

Herstellen resource pools door middel van SQL server en PowerCLI

Ooit per ongeluk DRS uitgezet op een VMware cluster? Onlangs gebeurde dit bij mijn huidige opdrachtgever en als gevolg van deze actie waren alle resource pools verdwenen. Gelukkig waren er maar 20 pools en konden we deze met de hand weer aanmaken, echter de toewijzing van virtuele machines (> 200) aan deze pools was wel een uitdaging.

Gelukkig werd er van de vCenter database regelmatig een backup gemaakt, dus de informatie was beschikbaar. Hoe deze te herstellen was wel een uitdaging. Deze procedure omschrijft de stappen die we hebben uitgevoerd om weer tot de originele configuratie te komen.

  1. Herstellen vCenter database

    Localiseer de backup die je eerder maakte en voer een restore uit onder een andere naam dan de originele database. Zo kunnen beide databases naast elkaar draaien.
  2. Haal de lijst van resource pools uit de VPX_ENTITY tabel

    Voer de volgende query uit om een lijst van resource pools uit de herstelde database te halen:
    select * from VPX_ENTITY (nolock)
    where TYPE_ID = 4
    and name != 'Resources'

    Controleer de output en exporteer deze lijst vervolgens door middel van een export wizard naar een CSV bestand.
  3. Aanmaken resource pools

    Het aanmaken van resource pools gaat het eenvoudigst door het eerder gemaakte CSV bestand te importeren in PowerCLI met het Import-CSV CMDlet. Gebruik hiervoor de volgende code:
    Import-Csv –Path FileName | foreach {
    New-Resourcepool -Location (Get-ResourcePool -Location ( Get-Cluster ClusterName ) -Name Resources) -Name $_.ColumnName
    }

  4. Ophalen resource pool configuratie

    Naast de namen is het ook wenselijk om reserveringen, shares en dergelijke te configureren. Deze waarden zijn niet in aparte kolommen opgeslagen, maar samengevoegd in een XML bericht in de kolom CONFIG_SPEC. Haal deze informatie op met de volgende query:
    select ID.NAME, RP.CONFIG_SPEC
    from VPX_RESOURCE_POOL RP (nolock)
    join VPX_ENTITY ID (nolock)
    on RP.ID = ID.ID
    where ID.TYPE_ID = 4
    and ID.NAME != 'Resources'
    order by ID.NAME

    In mijn situatie was het minder werk om deze informatie handmatig over te nemen in plaats van de XML berichten te parsen. Voor complexere omgevingen is het handiger om dit te automatiseren. Dit zou vanaf SQL 2005 met XQuery moeten kunnen, maar hier heb ik helaas nog niet mee gewerkt. :-(
  5. Lijst virtuele machines en resource pools maken

    Om te zorgen dat alle virtuele machines weer in hun oorspronkelijke resource pool worden geplaatst moet de relatie tussen VMs en resource pools worden opgehaald uit de database. Gebruik hiervoor de volgende query:
    select ID2.NAME AS VM_NAME, ID1.NAME AS RP_NAME
    from VPX_VM VM (nolock)
    join VPX_ENTITY ID1 (nolock)
    on ID1.ID = VM.RESOURCE_GROUP_ID
    join VPX_ENTITY ID2 (nolock)
    on ID2.ID = VM.ID
    order by ID2.NAME

    Controleer de output en exporteer deze lijst vervolgens door middel van een export wizard naar een CSV bestand.
  6. Virtuele machines verplaatsen

    Het eerder gemaakte CSV bestand kan ten slotte gebruikt worden om alle virtuele machines in de juiste resource groups te zetten. Gebruik hiervoor de volgende powershell code:

    Import-Csv –Path FileName | foreach {
    Get-VM -Name $_.ColumnNameVM | Move-VM -Destination (Get-ResourcePool $_.ColumnNameRP) -RunAsync
    }


Voor omgevingen met namen die niet-ASCII bevatten is het misschien handiger om niet met VM namen, maar met ID's te werken. Dit omdat de gegevens in de database met een andere codering wordt opgeslagen dan in de vCenter GUI of PowerCLI.

Een ander alternatief is om de urlencode functie van System.Web .NET class te gebruiken. Zie voor meer informatie hierover de volgende link: http://www.microsoft.com/technet/scriptcenter/topics/winpsh/convert/escape.mspx

vrijdag 17 juli 2009

Powershell troubleshooting

Voor het beheer van VMware gebruik ik steeds meer PowerShell en ook mijn Exchange admin collega's ontdekken de voordelen. Toch zijn bepaalde zaken weer nét even wat anders dan in een andere scripttaal. Een van die onderwerpen is troubleshooting.

Hiervoor heb ik 2 handige hulpmiddelen ontdekt, namelijk de standaard $error variabele en Start-Transcript, oftewel dit is min of meer de Powershell benadering van stderr en stdout.

De $error variabele is eigenlijk een array van errormeldingen die zich tijdens een Powershell sessie voordoen. Je kunt dus aan het eind van je script een controle doen of er iets in deze variabele staat en deze eventueel naar een bestand laten schrijven. Zie het onderstaande voorbeeldje om te zien hoe ik dit gebruik in mijn scripts:

#Print error messages - if any - to a file
if ($error.count -gt 0)
{
$error | Out-File stderr.log
}

Het Start-Transcript CMDlet is nog eenvoudiger. Gebruik dit commando aan het begin van je script en alle output van je script wordt naar een opgegeven bestand geschreven. Zet aan het eind van je script - of eerder indien gewenst - het Stop-Transcript commando en er wordt niet meer gelogd.

dinsdag 24 maart 2009

Diskruimte 'hot' uitbreiden voor een Linux VM

Onlangs reageerde ik op een artikeltje van ict-freak.nl en promootte hierin het gebruik van LVM.

Hoewel ik hier al wel het een en ander over gelezen had, had ik nog nooit in de praktijk uitgeprobeerd hoe eenvoudig (of ingewikkeld) het is om onder linux 'hot' diskruimte toe te voegen. Onder het credo 'meten is weten' heb ik hier een paar uurtjes tijd in gestoken om me in de mogelijkheden te verdiepen.

Ik begon een virtuele machine in te richten met Ubuntu server. Deze virtuele machine kreeg een enkele disk met een enkele volume group die - afgezien van een kleine ext3 partitie voor het /boot mountpoint - de volledige disk in beslag nam. De eerste uitdaging is nu om een extra schijf toe te voegen en deze in gebruik te nemen zonder deze down te brengen. Hiertoe doorliep ik de volgende stappen:

  1. Extra harddisk toevoegen aan configuratie VM
  2. Rescan uitvoeren op de SCSI controller:
    echo "- - -" > /sys/class/scsi_host/host/host0/scan
  3. Aanmaken LVM partitie (type 8e) op de nieuwe harddisk met commando fdisk
  4. Initialiseren van LVM partitie met commando pvcreate.
  5. Vergroten volume group met commando vgextend.
  6. Controleren beschikbare vrije ruimte met commando vgdisplay
  7. Vergroten logical volume met commando lvextend
  8. Vergroten filesystem met commando resize2fs

Het resultaat van deze procedure was dat ik de hoeveelheid beschikbare diskruimte had vergroot zonder de virtuele machine te herstarten. Helaas was dit niet helemaal de oplossing die ik zocht want ik moest zowel een nieuwe harddisk als een nieuwe partitie toevoegen. In dat opzicht het gebruik van 'extend' onder Windows toch wat eenvoudiger.

Toen ik op een later moment wat testen uitvoerde op een ESX server kwam ik nog een andere beperking tegen. Op ESX server kun je namelijk een harddisk uitbreiden terwijl de VM blijft draaien. Op het moment dat je dit voor een Linux VM doet, zal deze de extra ruimte niet direct opmerken. Hiervoor zul je een keer moeten herstarten. Als dat gebeurd is, is het alsnog noodzakelijk om een nieuwe fysieke partitie aan te maken en deze aan de volume group toe te voegen.

Mocht dit toch zonder reboot mogelijk zijn, meld dit dan svp. als een reactie op dit artikel! Mogelijk dat dit kan door gebruik te maken van partprobe. Deze utility is beschikbaar na installatie van GNU parted.

Na deze testen moet ik helaas concluderen dat 'hot' uitbreiden van een disk voor een Linux VM niet zo eenvoudig is als voor Windows VM. Het is onder beide besturingssystemen mogelijk, maar is misschien handiger om een Linux VM offline uitbreiden en dan met bijvoorbeeld een GParted live-cd de partitie op te rekken.

Bronnen:
http://kbase.redhat.com/faq/docs/DOC-3942
http://tldp.org/HOWTO/LVM-HOWTO/commontask.html
http://distrowatch.com/weekly.php?issue=20090309

maandag 2 februari 2009

Hostname aanpassen in ESX 3.x

Onlangs las ik op de VMUG site een artikel over het aanpassen van de hostname in ESX 3.x.

Nu had ik vorige week toevallig ook een systeem waarvan ik de hostname moest wijzigen (ESX 3.5 update 2), maar heb dit gedaan door via de VI client naar de DNS en Routing configuratie te gaan en daar de hostname aan te passen.

Ik heb alle stappen gecontroleerd uit het VMUG artikel en daar stond netjes de nieuwe naam:

  • hostname -f geeft nieuwe naam weer
  • /etc/hosts bevat de nieuwe naam
  • /etc/sysconfig/network bevat de nieuwe naam
  • sysctl kernel.hostname geeft de nieuwe naam weer
  • esxcfg-advcfg -g /Misc/Hostname geeft de nieuwe naam weer


Het enige wat volgens mij niet is aangepast, is het SSL certificaat dat oa. voor communicatie met Virtual Center wordt gebruikt. Gelukkig is dit ook eenvoudig te verhelpen door de volgende procedure uit te voeren:

  • Maak een backup van de directory /etc/vmware/ssl/
  • Verwijder alle bestanden uit de bovengenoemde directory met het volgende commando: rm /etc/vmware/ssl/*
  • Herstart de VMware management services met het volgende commando: service mgmt-vmware restart

Bij het herstarten van de VMware management services zal de volgende melding worden getoond: Generating VMware ESX Server SSL certificate