woensdag 29 mei 2013

Get Chromium

Google Chrome is de door Google gepropageerde webbrowser die vooraan loopt in de ondersteuning van moderne webstandaarden.

Chromium is het open-source equivalent ervan en biedt een aangename browse-ervaring maar zonder de door Google toegevoegde extra's die wel in Chrome aanwezig zijn. De delen van Chrome die open-source zijn , worden door Google gepubliceerd als Chromium. Die resulteert in een webbrowser die je kunt gebruiken op Windows, Mac of Linux.



Chromium kun je als werkend programma downloaden. Het is niet makkelijk om dit te doen, als je alleen de sourcecode kunt krijgen en je hebt geen toolchain geinstalleerd. Gelukkig is op de website van het Chromium-project altijd een build van de laatste sourcecode-snapshot, met dank aan de Chromium Buildbot.

Het volgende PowerShell-script downloadt automatisch de Windows-build van de meest actuele snapshot als zip-bestand, pakt dit uit en kopieert het naar een map, klaar om te runnen. Het werkt zeker met PowerShell 2  (Windows 7+), maar misschien lukt v1 ook.


# Get-Chromium.ps1
# Poging om de laatste Chromium te downloaden via PowerShell-script
# Paul Wiegmans 20110610
# Gewijzigd:
# 20110904
# 20110917 : Chromium Buildbot is verhuisd naar andere URL; bijgewerkt
<#
belangrijke URLS:
http://commondatastorage.googleapis.com/chromium-browser-snapshots/Win/LAST_CHANGE
https://chromiumcodereview.appspot.com/
#>
Clear-Host
$Workdir = "C:\Data\GetChromium"
$downloaddir = "A:\GetChromium"

Function Get-Version($Filename) {
 <#
  .synopsis
  Leest het attribuut "versionstring" van het opgegeven bestand in formaat "9.9.9.9"
  indien aanwezig, en geeft anders "0.0.0.0" terug.
 #>
 $v = "0.0.0.0"
 If (Test-Path $Filename) {$v = $(Get-ChildItem $Filename).VersionInfo.ProductVersion}
 # Write-Host "Get-Version: $Filename $v"
 return $v
}

Function IsNewerVersion ([string]$OldFilename = "", [string]$NewFilename = "") {
 Return (Get-Version($OldFilename) -ilt Get-Version($NewFilename))
}

Function Wait-And-Remove ([string]$FileName) {
 <#
  .synopsis
  Wacht tot een bestand vrij komt (niet geopend) en verwijdert deze
  .parameter FileName
  specificeert de bestandsnaam of foldernaam
 #>
 if (!(Test-Path $Filename)) {Return} # File bestaat niet; niets te doen
 While ($True) {
  Remove-Item $FileName -Recurse -Force -ea:SilentlyContinue # geeft resultaat in $?
  if ($?) {Continue}
  Write-Host "File $FileName is bezet: wachten...";
  Start-Sleep -Seconds 3
 }
}

Function DelFile ($Filename) {
 Del $Filename -ea:silentlycontinue
 If (!$?) { "Dat werkte niet!"; Break }; "Ja dat werkt!"   # Break springt prima uit de functie!
}
Function Get-Build ([string]$Dir) {
 <#
  .synopsis
  Leest de inhoud van het bestand Build-<nummer>.txt in de opgegeven map,
  indien aanwezig en geeft deze als string terug. Geeft anders "0" terug.
  .parameter Dir
  Specificeert de map waarin bestand Build-*.txt wordt gelezen
 #>
 $Build = Get-Content "$dir\Build-*.txt" -ErrorAction SilentlyContinue
 if (!$?) {
  $Build = "0"
 }
 return $Build
}

$CrLastURL = "http://commondatastorage.googleapis.com/chromium-browser-snapshots/Win/LAST_CHANGE"
$CrBaseURL = "
http://commondatastorage.googleapis.com/chromium-browser-snapshots/Win/"
if (Test-Path $downloaddir) {$Workdir = $downloaddir}
$LatestDir = "$Workdir\Chrome-win32"
$DistroDir = "
\\BCFS4\Install\Applications\webbrowser\Chromium"
$Flash = "gcswf32.dll"
$wc = New-Object System.Net.WebClient

Write-Host "=== Controleren nieuwste build"
New-Item $workdir -type dir -ErrorAction:SilentlyContinue
# DEBUG: uitschakelen van downloaden
#$Build = "97424"

$Build = $wc.DownloadString($CrLastURL)
Write-Host Laatste build is: $Build
$CrBuildURL = $CrBaseURL + $Build + "/"

$Changelog = [xml]$wc.DownloadString($CrBuildURL + "changelog.xml")
$entry = $ChangeLog.changelogs.log.logentry
if ($entry.count -gt 1) {
 $entry = $entry[$entry.Count-1]
}

Write-Host "REVISION : " $entry.revision
Write-Host "AUTHOR   : " $entry.author
Write-Host "DATE     : " $entry.date
Write-Host "MSG      : " $entry.msg "`n"

$Chromiumfile = $workdir + "\Chromium-" + $Build + ".zip"
Write-Host "=== Downloaden"
if (!(Test-Path $Chromiumfile)) {
 Write-Host "Build wordt gedownload ..."
 $wc.DownloadFile($CrBuildURL + "chrome-win32.zip", $Chromiumfile)
}
Write-Host "=== Uitpakken"
if ((Test-Path $LatestDir) -and (Test-Path $LatestDir\Build-$Build.txt)) {
 Write-Host "Chromium is al uitgepakt in $LatestDir. "
} else {
 Write-Host "Chromium uitpakken ..."
 Remove-Item $Workdir\Chrome-win32 -Recurse -Force -ErrorAction:SilentlyContinue
 C:
 cd $Workdir
 cmd.exe /c 7za.exe x -y $Chromiumfile > $null
 Write-Host "Uitpakken klaar..."
 #Remove-Item $LatestDir -Recurse -Force -ErrorAction:SilentlyContinue
 #Rename-Item $Workdir\Chrome-win32 $LatestDir

 Write-Output $Build | Set-Content -Path $LatestDir\Build-$Build.txt
 Write-Output $Build | Set-Content -Path $LatestDir\Build
 $ProductVersion = $(Get-ChildItem $LatestDir\chrome.dll).VersionInfo.ProductVersion
 Write-Output $ProductVersion | Set-Content -Path $LatestDir\Chromium-$ProductVersion.txt
 Copy-Item "$WorkDir\gcswf32.dll" $LatestDir -ErrorAction:SilentlyContinue
 Copy-Item "C:\Programs\Chromium\$flash" $LatestDir -ErrorAction:SilentlyContinue
 if (!$?) { Write-Host "Geen GCSWF32.DLL gekopieerd!"}
}
Write-Host "Flashversie: $(Get-Version("$LatestDir\$Flash"))"

# Kopieren naar Distributiemap
Write-Host "=== Distribueren"
if (test-path $DistroDir) {
 Remove-Item $DistroDir\* -Recurse -Force -ErrorAction:SilentlyContinue
 Copy-Item $LatestDir\* $DistroDir -Recurse -Force -ErrorAction:SilentlyContinue
}

Write-Host "=== Installeren"
# overzetten naar uiteindelijke plek. Sluit Chromium.
$Progdir = "C:\Programs\Chromium"
New-Item $Progdir -ItemType dir -ErrorAction SilentlyContinue

# DEBUG: Forceer altijd installeren
# Write-Output ($Build - 1) | Set-Content -Path $ProgDir\Build-*.txt

$ChromeDllOud = "$Progdir\chrome.dll"
$VersieOud = Get-Version($ChromeDllOud)
$BuildOud = Get-Build($Progdir)
Write-Host "Huidige Chromium was:"
Write-Host "`tNaam:  `t$ChromeDllOud"
Write-Host "`tVersie:`t$VersieOud"
Write-Host "`tBuild: `t$BuildOud"
$ChromeDllNieuw = "$LatestDir\chrome.dll"
$VersieNieuw = Get-Version($ChromeDllNieuw)
$BuildNieuw = Get-Build($LatestDir)
Write-Host "Laatste Chromium:"
Write-Host "`tNaam:  `t$ChromeDllNieuw"
Write-Host "`tVersie:`t$VersieNieuw"
Write-Host "`tBuild: `t$BuildNieuw"
If (($VersieOud -ilt $VersieNieuw) -or ($BuildOud -ilt $BuildNieuw)) {
 Write-Host "Kopieren van $LatestDir naar $Progdir ..."

 Get-Process | Where { $_.Name -Eq "chrome" } | Kill
 Start-Sleep -Seconds 5

 Remove-Item $Progdir -Recurse -ea Stop
 New-Item $Progdir -ItemType directory -ea SilentlyContinue | Out-Null
 Copy-Item $LatestDir\* $Progdir -Recurse -ea SilentlyContinue
} else {
 Write-Host "Overzetten naar Programmamap al gebeurd"
}

Write-Host "Chromium heeft nu build $Build, versie $(Get-Version("$Progdir\chrome.dll"))"
Write-Host "Klaar!"
Code eindigt

Geen opmerkingen:

Een reactie posten