7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

プロキシ内での Packer による Windows 環境構築

Posted at

以下のツールを使うことで、Windows の VM イメージを作成できるけれども、

社内などプロキシを経由しないとインターネットにアクセスできない環境では、WindowsUpdate や packer-windows のスクリプト群がエラーになってしまいます。

そこでエラーにならないように、やっつけで修正してみました。


まず WindowsUpdate で使用するプロキシを netsh コマンドで登録します(以下ではプロキシサーバを proxy.example.org:8080 としています)。

answer_files/2008_r2/Autounattend.xml
 <SynchronousCommand wcm:action="add">
   <CommandLine>cmd.exe /c wmic useraccount where "name='vagrant'" set PasswordExpires=FALSE</CommandLine>
   <Order>22</Order>
   <Description>Disable password expiration for vagrant user</Description>
 </SynchronousCommand>
 <!-- 以下の5行を追加する -->
 <SynchronousCommand wcm:action="add">
   <CommandLine>netsh winttp set proxy proxy-server="proxy.example.org:8080"</CommandLine>
   <Order>90</Order>
   <Description>Setup proxy for WindowsUpdate</Description>
 </SynchronousCommand>
 <!-- WITHOUT WINDOWS UPDATES -->
 <!--
 <SynchronousCommand wcm:action="add">
   <CommandLine>cmd.exe /c C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -File a:\openssh.ps1 -AutoStart</CommandLine>
   <Description>Install OpenSSH</Description>
   <Order>99</Order>
   <RequiresUserInput>true</RequiresUserInput>
 </SynchronousCommand>
 -->

PowerShell でファイルをダウンロードしている各スクリプトを変更します。

scripts/openssh.ps1
# 15〜19行目を変更する。
if (!(Test-Path "C:\Program Files\OpenSSH\bin\ssh.exe")) {
    Write-Host "Downloading $ssh_download_url"
    $web_client = New-Object System.Net.WebClient
    $web_client.proxy = New-Object System.Net.WebProxy("http://proxy.example.org:8080")
    $web_client.DownloadFile($ssh_download_url, "C:\Windows\Temp\openssh.exe")
    Start-Process "C:\Windows\Temp\openssh.exe" "/S /port=22 /privsep=1 /password=D@rj33l1ng" -NoNewWindow -Wait
}
scripts/vm-guest-tools.bat
 rem 2行目を変更する
 powershell -Command "$web_client = New-Object System.Net.WebClient; $web_client.proxy = New-Object System.Net.WebProxy('http://proxy.example.org:8080'); $web_client.DownloadFile('http://downloads.sourceforge.net/sevenzip/7z920-x64.msi', 'C:\Windows\Temp\7z920-x64.msi')" <NUL

 rem 17行目を変更する
 powershell -Command "$web_client = New-Object System.Net.WebClient; $web_client.proxy = New-Object System.Net.WebProxy('http://proxy.example.org:8080'); $web_client.DownloadFile('http://softwareupdate.vmware.com/cds/vmw-desktop/ws/10.0.1/1379776/windows/packages/tools-windows-9.6.1.exe.tar', 'C:\Windows\Temp\vmware-tools.exe.tar')" <NUL
scripts/chef.bat
 rem 2行目を変更する
 powershell -Command "$web_client = New-Object System.Net.WebClient; $web_client.proxy = New-Object System.Net.WebProxy('http://proxy.example.org:8080'); $web_client.DownloadFile('http://www.getchef.com/chef/install.msi', 'C:\Windows\Temp\chef.msi')" <NUL
scripts/vagrant-ssh.bat
 rem 5行目を変更する
 powershell -Command "$web_client = New-Object System.Net.WebClient; $web_client.proxy = New-Object System.Net.WebProxy('http://proxy.example.org:8080'); $web_client.DownloadFile('https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub', 'C:\Users\vagrant\.ssh\authorized_keys')" <NUL
scripts/compact.bat
 rem 2行目を変更する
powershell -Command "$web_client = New-Object System.Net.WebClient; $web_client.proxy = New-Object System.Net.WebProxy('http://proxy.example.org:8080'); $web_client.DownloadFile('http://downloads.sourceforge.net/sevenzip/7z920-x64.msi', 'C:\Windows\Temp\7z920-x64.msi')" <NUL

 rem 7行目を変更する
powershell -Command "$web_client = New-Object System.Net.WebClient; $web_client.proxy = New-Object System.Net.WebProxy('http://proxy.example.org:8080'); $web_client.DownloadFile('http://downloads.sourceforge.net/ultradefrag/ultradefrag-portable-6.0.2.bin.amd64.zip', 'C:\Windows\Temp\ultradefrag.zip')" <NUL

 rem 15行目を変更する
powershell -Command "$web_client = New-Object System.Net.WebClient; $web_client.proxy = New-Object System.Net.WebProxy('http://proxy.example.org:8080'); $web_client.DownloadFile('http://download.sysinternals.com/files/SDelete.zip', 'C:\Windows\Temp\SDelete.zip')" <NUL

やっつけとは言え、修正がダメすぎる... PowerShell を勉強しよう。
あと会社で修正した内容を、自宅でうろ覚え書きしているので、どこか間違えていたらごめん。


あとはビルド前に環境変数 http_proxy を設定するだけです。

> set http_proxy=proxy.example.org:8080
> packer build windows_2008_r2.json
7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?