A Windows Server Update Services telepítése Windows Server 2012-n alapvetően nem nehéz feladat: mivel az operációs rendszer része, még letölteni sem kell, csak végig kell nyomkodni a varázslót a Server Managerben. Aki nem hiszi el, nézze végig ezt a képes step-by-step útmutatót.
Ennek ellenére nekem nagyon nehezen jött össze. Ha telepítőkről van szó, én kétségkívül vonzom a hibákat, azonban a neten talált hihetetlen mennyiségű fórum bejegyzés arra utal, hogy nem vagyok egyedül. Íme a tapasztalatok.
Megjegyzés:
Az alábbi módszerek nálam működtek, de egyes esetekben magam sem tudom, hogy miért ez a megoldás a problémára. Csak saját felelősségedre próbáld ki!
A környezetről annyit, hogy egy frissen telepített WS 2012 tartományvezérlőről van szó, amin szépen megférne a WSUS. Nem találtam olyan leírást, ami arra utalna, hogy ez nem támogatott környezet.
NTFS jogok
A Prepare for Your WSUS Deployment című TechNet cikk szerint az NT Authority\Network Service felhasználónak Full Control jogokat kell adni az alábbi mappákra, különben a WSUS Administration snap-in nem fog jól működni:
- %windir%\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
- %windir%\Temp
Ebben az a szép, hogy – ahogy a dokumentáció is írja – az első útvonal nem biztos, hogy létezik, ha még nincs a gépen IIS. A WSUS-nak kell az IIS, és szerencsére elég okos a telepítő ahhoz, hogy szükség esetén a Web Role szerepkört is telepítse. Ráadásul még azt is tudja, hogy az IIS-nek mely komponensei kellenek a WSUS-hoz, tehát a “minimal install” elv jegyében érdemes a WSUS telepítővel telepíteni az IIS-t is. De akkor hogy adjunk jogot még a telepítés előtt a nem létező mappára?
Role Services
A telepítő varázslóban egyszer csak elérkezünk a Role services lépéshez:
Ha esetleg lelkesen bepipálnánk az összes komponenst, akkor készüljünk fel az alábbi hibaüzenetre:
The following features cannot be installed on the same server: Database, WID Database.
Egy kis magyarázat, mert az elnevezések nem nyilvánvalóak:
- A WID Database (ami alapértelmezés szerint be van pipálva) azt jelenti, hogy a telepítő feltelepíti a Windows Internal Database-t, ami egy mini SQL Server. Sok megkötése van, de a célra tökéletesen megfelel, különösen egygépes környezetben.
- A Database (ami alapértelmezés szerint nincs bepipálva) azt jelenti, hogy a telepítő egy létező SQL Serveren hozza létre a WSUS adatbázisát. Ez lehet akár másik gépen is. Ha így döntünk, akkor mindenképpen olvassuk el a WSUS database requirements részt a dokumentációban, mert rengeteg megkötés van.
A lényeg: az alapbeállítás jó, nem kell mindent bepipálni.
Újraindítás eredmény nélkül
Előfordulhat, hogy a telepítő fut egy darabig, majd azt mondja, hogy:
The request to add or remove features on the specified server failed.
The operation cannot be completed, because the server that you specified requires a restart.
Persze az ember újraindítja, de utána sem lesz jobb a helyzet, lehet elölről kezdeni a WSUS telepítést, aminek ugyanez lesz az eredménye.
A megoldás – és erre különösen nehéz ráhibázni – egy kis csoportházirend módosítás. Meg kell nyitni a Group Policy Management konzolt, és módosítani kell a Default Domain Controllers Policy-t. A Computer Configuration –> Policies –> Windows Settings –> Security Settings –> Local Policies –> User Rights Assignment ágban található Log on as a service beállításnál fel kell venni az alábbi fiókokat: IIS_WPG, NETWORK, NETWORK SERVICE, SERVICE.
A házirend módosítása után természetesen a szokásos frissítés is szükséges admin parancssorból:
gpupdate /target:computer
Telepítés utáni feladatok
Miután a telepítő varázsló végigfut, találunk egy nem túl feltűnő Launch Post-Installation tasks linket, amire rá kell kattintanunk. Ez gyakorlatilag folytatja a telepítést.
Amíg el nem akad:
Configuration failed. A log file was created at C:\Users\felhasználónév\AppData\Local\Temp\tmpXXXX.tmp
Bátran nézzünk bele a log fájlba, mert elég beszédes, és egyértelműen kiderül a probléma. Például:
Config file did not contain a value "ContentDirectory"
Microsoft.UpdateServices.Administration.CommandException:
A required configuration value was not found in the system.
Ez azért különösen szép, mert egy olyan értéket hiányol, amit a grafikus telepítő megkérdezett, és amit természetesen meg is adtunk neki. A parancssor kedvelőinek jegyzem meg, hogy a C:\Program Files\Update Services\Tools mappában található egy wsusutil.exe segédprogram, amivel parancssorból el lehet intézni sok mindent, de itt nem segít.
Megsúgom, hogy a telepítő a C:\Windows\System32\ServerManager\ComponentConfiguration\UpdateServices-Services.xml fájlból hiányolja az értéket. Megnyitva a fájlt, ezt találjuk benne (áttördeltem az olvashatóság érdekében):
<?xml version="1.0" encoding="utf-16"?>
<INSTANCE CLASSNAME="ServerComponent_UpdateServices_Services">
<PROPERTY NAME="ContentDirectory" TYPE="string">
</PROPERTY>
<PROPERTY NAME="ContentLocal" TYPE="boolean">
<VALUE>true</VALUE>
</PROPERTY>
</INSTANCE>
Akinek van szeme az XML-hez rögtön észreveszi, hogy a ContentDirectory érték valóban üres. Semmi gond, egészítsük ki:
<?xml version="1.0" encoding="utf-16"?>
<INSTANCE CLASSNAME="ServerComponent_UpdateServices_Services">
<PROPERTY NAME="ContentDirectory" TYPE="string">
<VALUE>C:\WSUS</VALUE>
</PROPERTY>
<PROPERTY NAME="ContentLocal" TYPE="boolean">
<VALUE>true</VALUE>
</PROPERTY>
</INSTANCE>
Rendszergazdai jogosultságokkal indítva a Notepadet el is fogjuk tudni menteni a módosításokat. Így már tovább fut a telepítő.
Adatbázis
Nálam is tovább futott a telepítő, de nem végig. Ugyanígy készült egy naplófájl a Temp mappában, ezúttal ezzel a hibaüzenettel:
Fatal Error: SqlException (0x80131904): Invalid object name ‘SUSDB.dbo.tbSchemaVersion’.
Ez arra utal, hogy nem jó az adatbázis. A logból kiderül az is, hogy az adatbázis létezik, lehet hozzá kapcsolódni, csak épp a keresett tábla nem létezik.
Körülnéztem a C:\Windows\WID\Data mappában, ahol valóban megtaláltam a SUSDB.mdf és SUSDB_log.ldf fájlokat, tehát az adatbázis valóban megvolt, biztos egy korábbi telepítő már létrehozta. Az viszont gyanús volt, hogy ugyanúgy 2112 KB volt a mérete, mint a model.mdf fájlnak, amiből arra tippeltem, hogy ez az adatbázis bizony még szűz.
Ötlet: töröljük le az adatbázist, hátha a telepítő újra létrehozza, ezúttal jól. Érdekes módon a fájlt simán lehetett törölni, de a szolgáltatás újraindítása után a Log mappában lévő error.log fájlban egyértelműen látszott, hogy hiányolja.
Ez a módszer tehát nem jött be, korrekt módon kellene törölni az adatbázist, amihez viszont be kellene jelentkeznünk az adatbázis szerverre. Ha nem akarunk SQL Server Management Studiot telepíteni a szerverre, megcsinálhatjuk parancssorból SQLCMD-vel, ami önállóan is letölthető innen: Microsoft Command Line Utilities 11 for SQL Server
A System Requirements szekcióban megtaláljuk – vagy ha nem, akkor majd az MSI elindítása után közli velünk, – hogy ennek bizony kell az ODBC Driver 11 for SQL Server is.
A két telepítő MSI fájl letöltése önmagában sem egyszerű a szerveren lévő Internet Explorerből. Egyrészt mert a böngésző agresszívan blokkolja a felugró ablakokat, másrészt mert:
Security Alert: Your current security settings do not allow this file to be downloaded.
Ha a böngészővel nem akarunk harcolni, az összesen 7MB-nyi tartalmat letölthetjük másik gépen is, és átvihetjük például Remote Desktopon keresztül.
Ha már van SQLCMD, akkor jó lenne azt is tudni, hogy hol. Itt:
C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\110\Tools\Binn
A kapcsolódáshoz kelleni fog egy connection string, ami WID esetén így néz ki:
np:\\.\pipe\MICROSOFT##WID\tsql\query
Én az SQLCMD-t mindig úgy használom, hogy a parancsokat fájlba írom, mert úgy a legkönnyebb újra futtatni őket. Például egy wsus.sql fájlba:
select name from sys.sysdatabases
drop database susdb
select name from sys.sysdatabases
Futtassuk le:
sqlcmd -S np:\\.\pipe\MICROSOFT##WID\tsql\query -i c:\temp\wsus.sql
Adatbázis eldobva, így már a telepítő sikeresen létrehozza, sőt a megfelelő táblákat is megalkotja benne. Elindul a WSUS Administration konzol, a konfigurációs varázsló és megy is minden szépen.
Nem maradt más hátra, mint a kliensek beállítása és az SSL konfigurálása.