From 7b0fda6085af3dfef205d5a0e8c3263bd07e199b Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Sat, 15 Aug 2015 16:46:54 -0700 Subject: [PATCH 1/3] Build both windows and mac installers via Docker build --- .dockerignore | 1 + .gitignore | 4 +- osx/Dockerfile => Dockerfile.osx | 2 +- Dockerfile.windows | 54 ++++++++++++++++++++ Makefile | 27 ++++++++++ osx/Makefile | 16 ------ osx/README.md | 7 --- windows/README.md | 47 ------------------ windows/Toolbox.iss | 29 ++++++----- windows/bundle.sh | 76 ----------------------------- windows/windows-installer-logo.bmp | Bin 12814 -> 9798 bytes windows/windows-installer-side.bmp | Bin 206038 -> 154542 bytes 12 files changed, 98 insertions(+), 165 deletions(-) create mode 100644 .dockerignore rename osx/Dockerfile => Dockerfile.osx (99%) create mode 100644 Dockerfile.windows create mode 100644 Makefile delete mode 100644 osx/Makefile delete mode 100644 osx/README.md delete mode 100644 windows/README.md delete mode 100644 windows/bundle.sh mode change 100644 => 100755 windows/windows-installer-logo.bmp mode change 100644 => 100755 windows/windows-installer-side.bmp diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..1521c8b765 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +dist diff --git a/.gitignore b/.gitignore index 4f6f8cd73f..1521c8b765 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1 @@ -DockerToolbox*.pkg -windows/Output/** -windows/bundle/** +dist diff --git a/osx/Dockerfile b/Dockerfile.osx similarity index 99% rename from osx/Dockerfile rename to Dockerfile.osx index eb92d8552b..50df9031a2 100644 --- a/osx/Dockerfile +++ b/Dockerfile.osx @@ -50,7 +50,7 @@ ENV MIXPANEL_TOKEN c306ae65c33d7d09fe3e546f36493a6e # Start building package -COPY mpkg /mpkg +COPY osx/mpkg /mpkg # Extract the VirtualBox .pkg RUN mkdir -p /mpkg/vbox && \ diff --git a/Dockerfile.windows b/Dockerfile.windows new file mode 100644 index 0000000000..9bd75135a8 --- /dev/null +++ b/Dockerfile.windows @@ -0,0 +1,54 @@ +FROM debian:jessie + +ENV DEBIAN_FRONTEND noninteractive + +RUN dpkg --add-architecture i386 +RUN sed -i "s/main/main contrib non-free/" etc/apt/sources.list +RUN apt-get update && apt-get install -yq wine curl unrar unzip + +# innosetup +RUN mkdir innosetup && \ + cd innosetup && \ + curl -fsSL -o innounp043.rar "https://downloads.sourceforge.net/project/innounp/innounp/innounp%200.43/innounp043.rar?r=&ts=1439566551&use_mirror=skylineservers" && \ + unrar e innounp043.rar + +RUN cd innosetup && \ + curl -fsSL -o is-unicode.exe http://www.jrsoftware.org/download.php/is-unicode.exe && \ + wine "./innounp.exe" -e "is-unicode.exe" + +# installer components +ENV INSTALLER_VERSION 1.8.1a +ENV DOCKER_VERSION 1.8.1 +ENV DOCKER_MACHINE_VERSION 0.4.0 +ENV BOOT2DOCKER_ISO_VERSION $DOCKER_VERSION +ENV KITEMATIC_VERSION 0.8.2 +ENV VIRTUALBOX_VERSION 5.0.0 +ENV VIRTUALBOX_REVISION 101573 +ENV MSYSGIT_VERSION 1.9.5-preview20150319 + +RUN mkdir /bundle +WORKDIR /bundle +RUN curl -fsSL -o docker.exe "https://get.docker.com/builds/Windows/x86_64/docker-$DOCKER_VERSION.exe" +RUN curl -fsSL -o docker-machine.exe "https://github.com/docker/machine/releases/download/v$DOCKER_MACHINE_VERSION/docker-machine_windows-amd64.exe" +RUN curl -fsSL -o boot2docker.iso https://github.com/boot2docker/boot2docker/releases/download/v$BOOT2DOCKER_ISO_VERSION/boot2docker.iso +RUN curl -fsSL -o kitematic.zip "https://github.com/kitematic/kitematic/releases/download/v$KITEMATIC_VERSION/Kitematic-$KITEMATIC_VERSION-Windows-Alpha.zip" && \ + mkdir kitematic && \ + cd kitematic && \ + unzip ../kitematic.zip && \ + rm ../kitematic.zip +RUN curl -fsSL -o Git.exe "https://github.com/msysgit/msysgit/releases/download/Git-$MSYSGIT_VERSION/Git-$MSYSGIT_VERSION.exe" +RUN curl -fsSL -o virtualbox.exe "http://download.virtualbox.org/virtualbox/$VIRTUALBOX_VERSION/VirtualBox-$VIRTUALBOX_VERSION-$VIRTUALBOX_REVISION-Win.exe" +RUN wine virtualbox.exe -extract -silent -path . && \ + rm virtualbox.exe && \ + rm *x86.msi && \ + mv *_amd64.msi VirtualBox_amd64.msi + +RUN echo "{\"event\":\"Installer Finished\",\"properties\":{\"token\":\"$MIXPANEL_TOKEN\",\"version\":\"$INSTALLER_VERSION\",\"os\":\"darwin\"}}" | base64 | tr -d '\n' > started.txt +RUN echo "{\"event\":\"Installer Finished\",\"properties\":{\"token\":\"$MIXPANEL_TOKEN\",\"version\":\"$INSTALLER_VERSION\",\"os\":\"darwin\"}}" | base64 | tr -d '\n' > finished.txt + +# Add installer resources +COPY windows /installer + +WORKDIR /installer +RUN rm -rf /tmp/.wine-0/ +RUN wine ../innosetup/ISCC.exe Toolbox.iss /DMyAppVersion=$INSTALLER_VERSION diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..9293d56ba8 --- /dev/null +++ b/Makefile @@ -0,0 +1,27 @@ +DOCKER_OSX_IMAGE := osx-installer +DOCKER_WINDOWS_IMAGE := windows-installer +DOCKER_OSX_CONTAINER := build-osx-installer +DOCKER_WINDOWS_CONTAINER := build-windows-installer + +default: osx windows + @true + +osx: clean-osx + docker build -t $(DOCKER_OSX_IMAGE) -f Dockerfile.osx . + docker run --name "$(DOCKER_OSX_CONTAINER)" "$(DOCKER_OSX_IMAGE)" + docker cp "$(DOCKER_OSX_CONTAINER)":/DockerToolbox.pkg dist/ + docker rm "$(DOCKER_OSX_CONTAINER)" 2>/dev/null || true + +windows: clean-windows + docker build -t $(DOCKER_WINDOWS_IMAGE) -f Dockerfile.windows . + docker run --name "$(DOCKER_WINDOWS_CONTAINER)" "$(DOCKER_WINDOWS_IMAGE)" + docker cp "$(DOCKER_WINDOWS_CONTAINER)":/installer/Output/DockerToolbox.exe dist/ + docker rm "$(DOCKER_WINDOWS_CONTAINER)" 2>/dev/null || true + +clean-osx: + rm -f DockerToolbox-*.pkg + docker rm "$(DOCKER_OSX_CONTAINER)" 2>/dev/null || true + +clean-windows: + rm -f DockerToolbox-*.exe + docker rm "$(DOCKER_WINDOWS_CONTAINER)" 2>/dev/null || true diff --git a/osx/Makefile b/osx/Makefile deleted file mode 100644 index 813ebd639e..0000000000 --- a/osx/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -DOCKER_IMAGE := osx-installer -DOCKER_CONTAINER := build-osx-installer - -default: dockerbuild - @true - -dockerbuild: clean - docker build -t $(DOCKER_IMAGE) . - docker run --name "$(DOCKER_CONTAINER)" "$(DOCKER_IMAGE)" - docker cp "$(DOCKER_CONTAINER)":/DockerToolbox.pkg . - docker rm "$(DOCKER_CONTAINER)" 2>/dev/null || true - -clean: - rm -f DockerToolbox.pkg - docker rm "$(DOCKER_CONTAINER)" 2>/dev/null || true - diff --git a/osx/README.md b/osx/README.md deleted file mode 100644 index d883c4bf32..0000000000 --- a/osx/README.md +++ /dev/null @@ -1,7 +0,0 @@ -#Docker Toolbox for Mac OS X - -Installation [instructions](https://docs.docker.com/mac/started/) available on the Docker documentation site. - -##How to build - -Running `make` will produce a `DockerToolbox.pkg` installer. diff --git a/windows/README.md b/windows/README.md deleted file mode 100644 index cf5ff40c5a..0000000000 --- a/windows/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# Building the Windows Toolbox - -1. Install Inno Setup 5 non-unicode: http://www.jrsoftware.org/isdl.php (`isetup-5.x.x-unicode.exe`). - -2. Install `kSignCMD`: http://codesigning.ksoftware.net/ (click "Download kSign" -and then "FREE DOWNLOAD" or "Click Here to Download kSign", which will likely be -a link to http://cdn1.ksoftware.net/ksign_installer.exe) - -3. Install the `docker-code-signing.pfx` certificate somewhere (the instructions -below assume `Z:\sven\src\docker\windows-installer\docker-code-signing.pfx`); -you will need the password (`d_get_from_core` below). - -4. Open `Toolbox.iss` in the Inno Setup Compiler. It has a few constants at -the top that are important to make note of (especially `MyAppVersion` and the -path variables `dockerCli`, `dockerMachineCli`, `kitematicSetup`, `b2dIso`, `msysGit`, `virtualBoxMsi`, and `virtualBoxCommon`). - -5. Launch **Inno Setup Compiler** by opening `Toolbox.iss` and add code signing -by applying the following steps: - -- Click "Tools" --> "Configure Sign Tools" > "Add" -- "Name of the Sign Tool:" `ksign` -- "Command of the Sign Tool:" `"C:\Program Files (x86)\kSign\kSignCMD.exe" /f Z:\sven\src\docker\toolbox\docker-code-signing.pfx /p d_get_from_core $p` - -# Releasing a new version - -Update the versions of the dependencies in `bundle.sh`. - -Update `#define MyAppVersion` line in `Toolbox.iss`. - -# Downloading bundle dependencies - -Open a git bash window in this directory and run script: - - ./bundle.sh - -This should be downloading dependencies with their correct versions to `bundle\` -folder where the Inno Setup Compiler can pick up from. - -# Compiling the installer - -After configuring, open `Toolbox.iss` with Inno Setup Compiler and hit -**'Build'**. The results will be in the `Output` folder. - -This can be done through commandline as welll. Launch a cmd.exe shell from this -directory and run: - - "c:\Program Files (x86)\Inno Setup 5\ISCC.exe" Toolbox.iss diff --git a/windows/Toolbox.iss b/windows/Toolbox.iss index 40d2a43113..a16ea838bc 100644 --- a/windows/Toolbox.iss +++ b/windows/Toolbox.iss @@ -2,39 +2,38 @@ ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "Docker Toolbox" -#define MyAppVersion "1.8.1a" #define MyAppPublisher "Docker" #define MyAppURL "https://docker.com" #define MyAppContact "https://docs.docker.com" -#define b2dIsoPath ".\bundle\Boot2Docker\boot2docker.iso" +#define b2dIsoPath "..\bundle\boot2docker.iso" -#define dockerCli ".\bundle\docker\docker.exe" -#define dockerMachineCli ".\bundle\docker\docker-machine.exe" +#define dockerCli "..\bundle\docker.exe" +#define dockerMachineCli "..\bundle\docker-machine.exe" -#define kitematic ".\bundle\kitematic" +#define kitematic "..\bundle\kitematic" -#define msysGit ".\bundle\msysGit\Git.exe" +#define msysGit "..\bundle\Git.exe" -#define virtualBoxCommon ".\bundle\VirtualBox\common.cab" -#define virtualBoxMsi ".\bundle\VirtualBox\VirtualBox_amd64.msi" +#define virtualBoxCommon "..\bundle\common.cab" +#define virtualBoxMsi "..\bundle\VirtualBox_amd64.msi" -#define EventStartedFile FileOpen(".\bundle\started.txt") +#define EventStartedFile FileOpen("..\bundle\started.txt") #define EventStartedData = FileRead(EventStartedFile) #expr FileClose(EventStartedFile) #undef EventStartedFile -#define EventFinishedFile FileOpen(".\bundle\finished.txt") +#define EventFinishedFile FileOpen("..\bundle\finished.txt") #define EventFinishedData = FileRead(EventFinishedFile) #expr FileClose(EventFinishedFile) -#undef EventFinishedFile +#undef EventFinishedFile [Setup] ; NOTE: The value of AppId uniquely identifies this application. ; Do not use the same AppId value in installers for other applications. ; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) -AppId={{FC4417F0-D7F3-48DB-BCE1-F5ED5BAFFD91} AppCopyright={#MyAppPublisher} +AppId={{FC4417F0-D7F3-48DB-BCE1-F5ED5BAFFD91} AppContact={#MyAppContact} AppComments={#MyAppURL} AppName={#MyAppName} @@ -53,7 +52,7 @@ DisableProgramGroupPage=yes ;InfoBeforeFile=.\LICENSE ;DisableFinishedPage ;InfoAfterFile= -OutputBaseFilename=DockerToolbox-{#MyAppVersion} +OutputBaseFilename=DockerToolbox Compression=lzma SolidCompression=yes WizardImageFile=windows-installer-side.bmp @@ -66,7 +65,7 @@ WizardImageBackColor=$22EBB8 ; in the "Add/Remove" list: UninstallDisplayIcon={app}\unins000.exe -SignTool=ksign /d $q{#MyAppName}$q /du $q{#MyAppURL}$q $f +; SignTool=ksign /d $q{#MyAppName}$q /du $q{#MyAppURL}$q $f SetupIconFile=toolbox.ico @@ -393,4 +392,4 @@ begin end; end; end -end; \ No newline at end of file +end; diff --git a/windows/bundle.sh b/windows/bundle.sh deleted file mode 100644 index 7e0769e16d..0000000000 --- a/windows/bundle.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/sh -set -e - -# Script to grab binaries that are going to be bundled with windows installer. -# Note to maintainers: Update versions used below with newer releases - -docker=1.8.1 -dockerMachine=0.4.0 -kitematic=0.8.2 -vbox=5.0.0 -vboxRev=101573 -msysGit=1.9.5-preview20150319 -installer=1.8.1a -mixpanel=c306ae65c33d7d09fe3e546f36493a6e - -boot2dockerIsoSrc=boot2docker -dockerBucket=get.docker.com - -set -x -rm -rf bundle -mkdir bundle -cd bundle - -echo "{\"event\":\"Installer Started\",\"properties\":{\"token\":\"$mixpanel\",\"version\":\"$installer\",\"os\":\"win32\"}}" > out.txt -certutil -encode out.txt started-cert.txt -cat started-cert.txt | sed '/^-----/ d' | tr -d '\n' > started.txt -rm started-cert.txt - -echo "{\"event\":\"Installer Finished\",\"properties\":{\"token\":\"$mixpanel\",\"version\":\"$installer\",\"os\":\"win32\"}}" > out.txt -certutil -encode out.txt finished-cert.txt -cat finished-cert.txt | sed '/^-----/ d' | tr -d '\n' > finished.txt -rm finished-cert.txt - -( - mkdir -p docker - cd docker - - curl -fsSL -o docker.exe "https://${dockerBucket}/builds/Windows/x86_64/docker-${docker}.exe" - curl -fsSL -o docker-machine.exe "https://github.com/docker/machine/releases/download/v${dockerMachine}/docker-machine_windows-amd64.exe" -) - -( - mkdir -p kitematic - curl -fsSL -o kitematic.zip "https://github.com/kitematic/kitematic/releases/download/v${kitematic}/Kitematic-${kitematic}-Windows-Alpha.zip" - cd kitematic - unzip ../kitematic.zip - rm ../kitematic.zip -) - -( - mkdir -p Boot2Docker - cd Boot2Docker - - curl -fsSL -o boot2docker.iso "https://github.com/${boot2dockerIsoSrc}/boot2docker/releases/download/v${docker}/boot2docker.iso" -) - -( - mkdir -p msysGit - cd msysGit - - curl -fsSL -o Git.exe "https://github.com/msysgit/msysgit/releases/download/Git-${msysGit}/Git-${msysGit}.exe" -) - -( - mkdir -p VirtualBox - cd VirtualBox - - # http://www.virtualbox.org/manual/ch02.html - curl -fsSL -o virtualbox.exe "http://download.virtualbox.org/virtualbox/${vbox}/VirtualBox-${vbox}-${vboxRev}-Win.exe" - - virtualbox.exe -extract -silent -path . - rm virtualbox.exe # not neeeded after extraction - - rm *x86.msi # not needed as we only install 64-bit - mv *_amd64.msi VirtualBox_amd64.msi # remove version number -) diff --git a/windows/windows-installer-logo.bmp b/windows/windows-installer-logo.bmp old mode 100644 new mode 100755 index 75f96bf02a5074a5e74fd64bfae488897563ffe3..f77712c9909762e9148475eb5077803c1e88cc98 GIT binary patch literal 9798 zcmeHN>u(fQ6rYkH3Z$VCp%kz!yI?_#2_`5ehCqZwls~{PBoIR4N55)}!WT`9MiYr2 ztckoVg+7*U_tln$LNyRtjIq30YF*piojbFSZfEv2v$Oi!PTfvtc4tOsOd#3KnaQ1V z?){zLp8Gm;clRGYxQ&|s?8dzX*Q>Z*$5lhs<4#d)U>~lPuXzP-iQ7kr`#ILXr(BVaFDb$nLiX(9sHUhS2|9Y^20 z`SHnkHqx$@boUCn`)NC51<-)0Pp@P($rFH#-@)Deh`V=+yZ4D5atdg`G)dJIPhT_L z{frPF`OEGPFoDeanoDu3R4~Jn^lpd_yks}W1w0@FzY@KY-V{%FUE=1uW_adkekErr-QgwCx3lk-*qZ@e&z?H+;z0Oj<{+uM^aO*`b}gjkb!TQ zsGH##aXrO9_*}bOhXI?i~T=$^IF ztGl9ud!mE8ql2$S2X?XjFB13qd@3mAVwIW$8TfYabcQcc;@rJTj-Z!>WIjF3J^Usc zzr#;{pQQu*`00E)l+PuYKuhE@#gBhosX35=&-$H}W{|8mF+QE)i;(&BLDl$ z8H%6$mh^6(y?rF~BPAw_Uybo>;_rW&i`~SiD2o7O;M>EqjVkLxsgwjRHT9j4_yzCU z*>F!fcuo>#Q6U{XudG(K9B#9NXTTZ0V9Zk{ASTDdZ8h0YS6M!ll)z^LR{NdtInXba zT&VO?F2O%)&GS<#z5XNc;l<+kB;M!gt`%BGvm+;ncT*~OPHWO?3Sw$*?1RLuBU%$Q zz=s#BJUtDJ->JgSGJ}|;STota9YXRql~w!5-8~t(L`Axm#fRV4T7geI4VHOsWCmUq znCqG8i<#+mNRIBGy@jK*b*#UM^)+&1A7{e7vZ>s?BlXAG_|RU)vw`@UXxAzsc02Ru z0u(TT418jgh?-cJ99XL{gp@*euUc4{y^YvSl%_J}OB8XhmFp87v_hHqZNLIT@2<6fV<^Paq(t174-`Kea=N-ahR_wWmq36H?1yOvw!*;$jG z>Cl3Ua}P2hS3X0uCap#i`OHjbrHmB#bZ3oKo|mZ{Gpu!OqXzi2QOac0?@lCLBKOEf zR$3_F&!={JTcIfLk)J3? zLLr}4N?zood=?%H`7CyDrD?G&@@R-Ul9(=t+@fBFk^~?FA6~4jpT+YZyi;Iz4z-mL zZoK&V!}jk9oh@TUlbQ1r)-KdZjvhl<3j$=|>yw1lsNYNHR2bwcX=eOebFrVnA^y`l z#b3$-+t|R?rQ&3I8*tQvI_cmUc7cxyM{oL+_?zZgBK%Lm*GRmZ<@eCU$Wg4}*u*um zhVELK33Y-ecmL%4K5l$OQ{tv9{CA%IX4<`WcJu@|h{>_U=&{(11M%TQC5a8c6}xe8 z?(WF~Y7}FBn7E%+y8c&X3p_DyHzK>pk^#_=@@bKqz}uWcCQA!1UY&}ENJf)Ihq)D= zfMsy1;CJ#9U&%q6kKB?Qra3qEA<}i?F+S}2|9Ao!2Oy-kf$7`92DY<-7nVrhcDAnt zkz`Dq$mx)T$znW#z(9~&7SC!L%7}Lpa#Vc|W~|nEn(<=2PL-$i7%CB}@l-~`dbt`; U>oHU!JVEh%QvMh8r2Nn7Z`VjFv;Y7A literal 12814 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 Q0+;|MfC*p%|5XD22ei5v<^TWy literal 206038 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 WjsYD5ItFwM=orv3pku%t1OErdJ#2{p From 064743ba3f60f321662467dc803351ff7c22c32f Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Sun, 16 Aug 2015 17:14:19 -0700 Subject: [PATCH 2/3] Use jessie instead of wheezy --- Dockerfile.osx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile.osx b/Dockerfile.osx index ecb8e32290..a739c23ff7 100644 --- a/Dockerfile.osx +++ b/Dockerfile.osx @@ -1,4 +1,4 @@ -FROM debian:wheezy +FROM debian:jessie RUN apt-get update && apt-get -y install \ autoconf build-essential curl \ From 4d87d30632c52b69cfc3613acef34fde2101336a Mon Sep 17 00:00:00 2001 From: Jeffrey Morgan Date: Sun, 16 Aug 2015 17:14:27 -0700 Subject: [PATCH 3/3] Create dist folder in Makefile --- Makefile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Makefile b/Makefile index 9293d56ba8..2a7bd8d188 100644 --- a/Makefile +++ b/Makefile @@ -9,12 +9,14 @@ default: osx windows osx: clean-osx docker build -t $(DOCKER_OSX_IMAGE) -f Dockerfile.osx . docker run --name "$(DOCKER_OSX_CONTAINER)" "$(DOCKER_OSX_IMAGE)" + mkdir -p dist docker cp "$(DOCKER_OSX_CONTAINER)":/DockerToolbox.pkg dist/ docker rm "$(DOCKER_OSX_CONTAINER)" 2>/dev/null || true windows: clean-windows docker build -t $(DOCKER_WINDOWS_IMAGE) -f Dockerfile.windows . docker run --name "$(DOCKER_WINDOWS_CONTAINER)" "$(DOCKER_WINDOWS_IMAGE)" + mkdir -p dist docker cp "$(DOCKER_WINDOWS_CONTAINER)":/installer/Output/DockerToolbox.exe dist/ docker rm "$(DOCKER_WINDOWS_CONTAINER)" 2>/dev/null || true