www.flickr.com

dinsdag 17 augustus 2010

Controle beveiligingsinstellingen SQL Server

Tijdens een security audit kwam ik twee controles tegen die ik wel de moeite vond om even te bloggen. Ze liggen misschien wel erg voor de hand, maar daarom misschien des te meer een reden om ze eens tegen jouw eigen infrastructuur aan te houden.

  1. Logins zonder wachtwoord
    select name from sys.sql_logins where password_hash is null
    Als deze query geen resultaat geeft, dan kun je gerust adem halen. ;-)
  2. Logins die geen gebruik maken van de account policy
    select name from sys.sql_logins where type='S' and is_policy_checked <> '1'

Tip: Gebruik de systeem stored procedure sp_MSforeachdb om deze sql opdrachten over alle databases heen te draaien.

dinsdag 3 augustus 2010

Verwijderen defecte vCenter plug-ins

Onlangs heb ik een vCenter 2.5 installatie ge-upgrade naar vCenter 4.1. Echter omdat vCenter 4.1 alleen nog voor een 64-bits platform beschikbaar is, heb ik de installatie op een nieuwe machine uitgevoerd.

Toen ik de installatie uitvoerde kreeg ik een waarschuwing dat de VMware Converter plug-in niet compatible was en daarom niet ge-upgrade kon worden. Prima, want de rest van de installatie ging gewoon door. Echter na de installatie van vCenter bleef ik zitten met een plug-in die niet op de normale wijze ge-deïnstalleerd kon worden.

Gelukkig is er een methode om deze plug-in toch uit de vCenter configuratie te verwijderen.

  1. Open een webbrowser naar het volgende URL: http://<< vCenter naam of IP >>/mob.
  2. Klik op "content".
  3. Klik op "ExtensionManager".
  4. Kopieer de naam van de plug-in uit de lijst.
  5. Klik op "UnregisterExtension".
  6. Plak de naam van de plug-in in het invulveld en click op "Invoke Method".
  7. Sluit het pop-up scherm.
  8. Ververs het scherm waarin de geïnstalleerde plug-ins worden weergegeven.

Als het goed is, staat er nu één plug-in minder tussen.

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.