With the BrowserStack cloud-based solution, there is no need to buy many different hardware types for testing your website for many different mobile devices and operating systems. In this blog post about Jenkins BrowserStack Integration, we will learn how to integrate BrowserStack-based automated cross-browser tests into a continuous integration workflow controlled by the popular Jenkins tool.
First, we will demonstrate how to use BrowserStack manually, before we automate the browser tests with the help of a Protractor Github example from BrowserStack. You will need to sign into a BrowserStack trial account with 30 minutes free manual testing and 100 minutes free automated testing. For this tutorial, we will need less than 6 minutes of automated testing time.
Moreover, we will integrate the BrowserStack based tests into a Jenkins build job. In the end, we will generate individual and trend Jenkins test reports with the help of the Jasmine reporting tool.
Note: The difference to my previous blog post is, that I have concentrated on Protractor without Gulp on Ubuntu this time. More importantly, I have added the Jenkins integration. In addition, you will find the description of many possible errors and their resolution in the appendix.
References
- Jenkins
- Jenkins Dockerhub image
- Browserstack
- your BrowserStack Account Settings page
- Protractor Github example from BrowserStack
- Node.js workaround for Ubuntu on StackOverflow Q&A
- BrowserStack Example with Gulp Testing Toolkit for CentOS and Ubuntu – on the previous blog post
- Installing a Docker Host using Vagrant – on part 1 of the Jenkins blog series
- Local Testing as an Alternative: Selenium Tutorial by Guru99
Tools and Versions used
- Vagrant 1.8.6
- Virtualbox 5.0.20
- Docker 1.12.1
- Jenkins 2.32.2
- Job DSL Plugin 1.58
- for Windows: GNU bash, version 4.3.42(5)-release (x86_64-pc-msys)
Prerequisites (for the Jenkins part):
- Free DRAM for the Docker Host VM >~ 4 GB
- Docker Host is available. If not, follow the „Prerequisite Step“ below.
- Tested with 2 vCPU (1 vCPU might work as well).
Getting Acquainted with BrowserStack
After signing up for a BrowserStack account, you get a 30-minute free live testing session. Start a local browser, and connect to the BrowserStack start URL. You will be asked to install a Browser plugin, which will take the role of a BrowserStack client.
You can choose any of the many operating systems and browser types
Note that you can interrupt the session any time by clicking Stop on the left (I had overlooked that, so I have wasted most of my 30 minutes time…)
Now you type in the URL you want to load:
As you can see, I have typed in localhost:8080 on the remote iOS simulator running on the BrowserStack cloud. However, the browser is loading the Jenkins server page, which is running on my local notebook. The browser does not try to really load localhost (i.e. the iOS the browser is running on). Instead, the HTTP request is directed to the locally running Chrome plugin, which is then resolving the DNS name „localhost“ locally. This is called local testing, which we will explore in more detail now before we start our step by step guide.
About BrowserStack Local Testing
Establishing a Tunnel
Local testing means, that Jenkins is connecting to BrowserStack.com via a tunnel the browser is running in the cloud, but all traffic from the browser to the system under test is relayed by the local BrowserStack client running on the Jenkins server:
Local Testing
Prerequisite Step: Create a Docker Host via Vagrant
For the case, you do not have a Docker host at hand, you may want to follow Step 1 and 2 of part 1 of my Jenkins tutorial series. After having tried out many options to install Docker, the Vagrant way of installing a Docker is my favorite…
Part 1: Automatic Testing via BrowserStack
As an introduction, this part will show how to perform automated BrowserStack testing from the command line without the need to use Jenkins.
Part 1 of this blog post is not a prerequisite to run part 2, which performs similar steps (and more) in the Jenkins way.
Step 1.1: Sign up for BrowserStack
For completing the steps of this tutorial, you need to sign up for a BrowserStack account. Pricing information can be found here. However, for completing the tasks of this tutorial, I did not need to sign up for any of the paid plans.
Step 1.2: Run Ubuntu Docker Container
I have looked for a simple Protractor example and I have found BrowserStack’s Protractor example on GitHub. Let us run it on an Ubuntu 16.04 Docker container since the official Jenkins Dockerhub image seems to be based on a system that understands apt-get (see the Docker image layer visualizer).
Let us start a recent Ubuntu 16.04 container:
(dockerhost)$ sudo docker run -it ubuntu:16.04 bash (container)# mkdir /app; cd /app
Step 1.3: Install Node.js, NPM, and GIT
We will need to install Node.js, NPM, and GIT:
(container)$ apt-get update && apt-get install -y nodejs npm git
Get:1 http://archive.ubuntu.com/ubuntu xenial InRelease [247 kB] Get:2 http://archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB] Get:3 http://archive.ubuntu.com/ubuntu xenial-security InRelease [102 kB] Get:4 http://archive.ubuntu.com/ubuntu xenial/main Sources [1103 kB] Get:5 http://archive.ubuntu.com/ubuntu xenial/restricted Sources [5179 B] Get:6 http://archive.ubuntu.com/ubuntu xenial/universe Sources [9802 kB] Get:7 http://archive.ubuntu.com/ubuntu xenial/main amd64 Packages [1558 kB] Get:8 http://archive.ubuntu.com/ubuntu xenial/restricted amd64 Packages [14.1 kB] Get:9 http://archive.ubuntu.com/ubuntu xenial/universe amd64 Packages [9827 kB] Get:10 http://archive.ubuntu.com/ubuntu xenial-updates/main Sources [296 kB] Get:11 http://archive.ubuntu.com/ubuntu xenial-updates/restricted Sources [2815 B] Get:12 http://archive.ubuntu.com/ubuntu xenial-updates/universe Sources [176 kB] Get:13 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 Packages [623 kB] Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/restricted amd64 Packages [12.4 kB] Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 Packages [546 kB] Get:16 http://archive.ubuntu.com/ubuntu xenial-security/main Sources [75.0 kB] Get:17 http://archive.ubuntu.com/ubuntu xenial-security/restricted Sources [2392 B] Get:18 http://archive.ubuntu.com/ubuntu xenial-security/universe Sources [27.0 kB] Get:19 http://archive.ubuntu.com/ubuntu xenial-security/main amd64 Packages [282 kB] Get:20 http://archive.ubuntu.com/ubuntu xenial-security/restricted amd64 Packages [12.0 kB] Get:21 http://archive.ubuntu.com/ubuntu xenial-security/universe amd64 Packages [113 kB] Fetched 24.9 MB in 3min 13s (129 kB/s) Reading package lists... Done Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: binutils build-essential bzip2 ca-certificates cpp cpp-5 dpkg-dev fakeroot file g++ g++-5 gcc gcc-5 git-man gyp ifupdown iproute2 isc-dhcp-client isc-dhcp-common javascript-common krb5-locales less libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libasn1-8-heimdal libatm1 libatomic1 libbsd0 libc-dev-bin libc6-dev libcc1-0 libcilkrts5 libcurl3-gnutls libdns-export162 libdpkg-perl libedit2 liberror-perl libexpat1 libfakeroot libffi6 libfile-fcntllock-perl libgcc-5-dev libgdbm3 libgmp10 libgnutls30 libgomp1 libgssapi-krb5-2 libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal libhogweed4 libhx509-5-heimdal libicu55 libidn11 libisc-export160 libisl15 libitm1 libjs-inherits libjs-jquery libjs-node-uuid libjs-underscore libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2 liblsan0 libmagic1 libmnl0 libmpc3 libmpfr4 libmpx0 libnettle6 libp11-kit0 libperl5.22 libpopt0 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libquadmath0 libroken18-heimdal librtmp1 libsasl2-2 libsasl2-modules libsasl2-modules-db libsqlite3-0 libssl-dev libssl-doc libssl1.0.0 libstdc++-5-dev libtasn1-6 libtsan0 libubsan0 libuv1 libuv1-dev libwind0-heimdal libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1 libxtables11 linux-libc-dev make manpages manpages-dev mime-support netbase node-abbrev node-ansi node-ansi-color-table node-archy node-async node-block-stream node-combined-stream node-cookie-jar node-delayed-stream node-forever-agent node-form-data node-fstream node-fstream-ignore node-github-url-from-git node-glob node-graceful-fs node-gyp node-inherits node-ini node-json-stringify-safe node-lockfile node-lru-cache node-mime node-minimatch node-mkdirp node-mute-stream node-node-uuid node-nopt node-normalize-package-data node-npmlog node-once node-osenv node-qs node-read node-read-package-json node-request node-retry node-rimraf node-semver node-sha node-sigmund node-slide node-tar node-tunnel-agent node-underscore node-which nodejs-dev openssh-client openssl patch perl perl-modules-5.22 python python-minimal python-pkg-resources python2.7 python2.7-minimal rename rsync xauth xz-utils zlib1g-dev Suggested packages: binutils-doc bzip2-doc cpp-doc gcc-5-locales debian-keyring g++-multilib g++-5-multilib gcc-5-doc libstdc++6-5-dbg gcc-multilib autoconf automake libtool flex bison gdb gcc-doc gcc-5-multilib libgcc1-dbg libgomp1-dbg libitm1-dbg libatomic1-dbg libasan2-dbg liblsan0-dbg libtsan0-dbg libubsan0-dbg libcilkrts5-dbg libmpx0-dbg libquadmath0-dbg gettext-base git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk gitweb git-arch git-cvs git-mediawiki git-svn ppp rdnssd iproute2-doc resolvconf avahi-autoipd isc-dhcp-client-ddns apparmor apache2 | lighttpd | httpd glibc-doc gnutls-bin krb5-doc krb5-user libsasl2-modules-otp libsasl2-modules-ldap libsasl2-modules-sql libsasl2-modules-gssapi-mit | libsasl2-modules-gssapi-heimdal libstdc++-5-doc make-doc man-browser node-hawk node-aws-sign node-oauth-sign node-http-signature debhelper ssh-askpass libpam-ssh keychain monkeysphere ed diffutils-doc perl-doc libterm-readline-gnu-perl | libterm-readline-perl-perl python-doc python-tk python-setuptools python2.7-doc binfmt-support openssh-server The following NEW packages will be installed: binutils build-essential bzip2 ca-certificates cpp cpp-5 dpkg-dev fakeroot file g++ g++-5 gcc gcc-5 git git-man gyp ifupdown iproute2 isc-dhcp-client isc-dhcp-common javascript-common krb5-locales less libalgorithm-diff-perl libalgorithm-diff-xs-perl libalgorithm-merge-perl libasan2 libasn1-8-heimdal libatm1 libatomic1 libbsd0 libc-dev-bin libc6-dev libcc1-0 libcilkrts5 libcurl3-gnutls libdns-export162 libdpkg-perl libedit2 liberror-perl libexpat1 libfakeroot libffi6 libfile-fcntllock-perl libgcc-5-dev libgdbm3 libgmp10 libgnutls30 libgomp1 libgssapi-krb5-2 libgssapi3-heimdal libhcrypto4-heimdal libheimbase1-heimdal libheimntlm0-heimdal libhogweed4 libhx509-5-heimdal libicu55 libidn11 libisc-export160 libisl15 libitm1 libjs-inherits libjs-jquery libjs-node-uuid libjs-underscore libk5crypto3 libkeyutils1 libkrb5-26-heimdal libkrb5-3 libkrb5support0 libldap-2.4-2 liblsan0 libmagic1 libmnl0 libmpc3 libmpfr4 libmpx0 libnettle6 libp11-kit0 libperl5.22 libpopt0 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib libquadmath0 libroken18-heimdal librtmp1 libsasl2-2 libsasl2-modules libsasl2-modules-db libsqlite3-0 libssl-dev libssl-doc libssl1.0.0 libstdc++-5-dev libtasn1-6 libtsan0 libubsan0 libuv1 libuv1-dev libwind0-heimdal libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxext6 libxmuu1 libxtables11 linux-libc-dev make manpages manpages-dev mime-support netbase node-abbrev node-ansi node-ansi-color-table node-archy node-async node-block-stream node-combined-stream node-cookie-jar node-delayed-stream node-forever-agent node-form-data node-fstream node-fstream-ignore node-github-url-from-git node-glob node-graceful-fs node-gyp node-inherits node-ini node-json-stringify-safe node-lockfile node-lru-cache node-mime node-minimatch node-mkdirp node-mute-stream node-node-uuid node-nopt node-normalize-package-data node-npmlog node-once node-osenv node-qs node-read node-read-package-json node-request node-retry node-rimraf node-semver node-sha node-sigmund node-slide node-tar node-tunnel-agent node-underscore node-which nodejs nodejs-dev npm openssh-client openssl patch perl perl-modules-5.22 python python-minimal python-pkg-resources python2.7 python2.7-minimal rename rsync xauth xz-utils zlib1g-dev 0 upgraded, 179 newly installed, 0 to remove and 2 not upgraded. Need to get 79.4 MB of archives. After this operation, 337 MB of additional disk space will be used. Get:1 http://archive.ubuntu.com/ubuntu xenial/main amd64 libatm1 amd64 1:2.5.1-1.5 [24.2 kB] Get:2 http://archive.ubuntu.com/ubuntu xenial/main amd64 libmnl0 amd64 1.0.3-5 [12.0 kB] Get:3 http://archive.ubuntu.com/ubuntu xenial/main amd64 libpopt0 amd64 1.16-10 [26.0 kB] Get:4 http://archive.ubuntu.com/ubuntu xenial/main amd64 libgdbm3 amd64 1.8.3-13.1 [16.9 kB] Get:5 http://archive.ubuntu.com/ubuntu xenial/main amd64 libxau6 amd64 1:1.0.8-1 [8376 B] Get:6 http://archive.ubuntu.com/ubuntu xenial/main amd64 libxdmcp6 amd64 1:1.1.2-1.1 [11.0 kB] Get:7 http://archive.ubuntu.com/ubuntu xenial/main amd64 libxcb1 amd64 1.11.1-1ubuntu1 [40.0 kB] Get:8 http://archive.ubuntu.com/ubuntu xenial/main amd64 libx11-data all 2:1.6.3-1ubuntu2 [113 kB] Get:9 http://archive.ubuntu.com/ubuntu xenial/main amd64 libx11-6 amd64 2:1.6.3-1ubuntu2 [571 kB] Get:10 http://archive.ubuntu.com/ubuntu xenial/main amd64 libxext6 amd64 2:1.3.3-1 [29.4 kB] Get:11 http://archive.ubuntu.com/ubuntu xenial/main amd64 perl-modules-5.22 all 5.22.1-9 [2641 kB] Get:12 http://archive.ubuntu.com/ubuntu xenial/main amd64 libperl5.22 amd64 5.22.1-9 [3371 kB] Get:13 http://archive.ubuntu.com/ubuntu xenial/main amd64 perl amd64 5.22.1-9 [237 kB] Get:14 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython2.7-minimal amd64 2.7.12-1ubuntu0~16.04.1 [339 kB] Get:15 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python2.7-minimal amd64 2.7.12-1ubuntu0~16.04.1 [1295 kB] Get:16 http://archive.ubuntu.com/ubuntu xenial/main amd64 python-minimal amd64 2.7.11-1 [28.2 kB] Get:17 http://archive.ubuntu.com/ubuntu xenial/main amd64 mime-support all 3.59ubuntu1 [31.0 kB] Get:18 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libexpat1 amd64 2.1.0-7ubuntu0.16.04.2 [71.3 kB] Get:19 http://archive.ubuntu.com/ubuntu xenial/main amd64 libffi6 amd64 3.2.1-4 [17.8 kB] Get:20 http://archive.ubuntu.com/ubuntu xenial/main amd64 libsqlite3-0 amd64 3.11.0-1ubuntu1 [396 kB] Get:21 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libssl1.0.0 amd64 1.0.2g-1ubuntu4.6 [1082 kB] Get:22 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libpython2.7-stdlib amd64 2.7.12-1ubuntu0~16.04.1 [1884 kB] Get:23 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 python2.7 amd64 2.7.12-1ubuntu0~16.04.1 [224 kB] Get:24 http://archive.ubuntu.com/ubuntu xenial/main amd64 libpython-stdlib amd64 2.7.11-1 [7656 B] Get:25 http://archive.ubuntu.com/ubuntu xenial/main amd64 python amd64 2.7.11-1 [137 kB] Get:26 http://archive.ubuntu.com/ubuntu xenial/main amd64 libgmp10 amd64 2:6.1.0+dfsg-2 [240 kB] Get:27 http://archive.ubuntu.com/ubuntu xenial/main amd64 libmpfr4 amd64 3.1.4-1 [191 kB] Get:28 http://archive.ubuntu.com/ubuntu xenial/main amd64 libmpc3 amd64 1.0.3-1 [39.7 kB] Get:29 http://archive.ubuntu.com/ubuntu xenial/main amd64 bzip2 amd64 1.0.6-8 [32.7 kB] Get:30 http://archive.ubuntu.com/ubuntu xenial/main amd64 libmagic1 amd64 1:5.25-2ubuntu1 [216 kB] Get:31 http://archive.ubuntu.com/ubuntu xenial/main amd64 file amd64 1:5.25-2ubuntu1 [21.2 kB] Get:32 http://archive.ubuntu.com/ubuntu xenial/main amd64 iproute2 amd64 4.3.0-1ubuntu3 [522 kB] Get:33 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 ifupdown amd64 0.8.10ubuntu1.2 [54.9 kB] Get:34 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libisc-export160 amd64 1:9.10.3.dfsg.P4-8ubuntu1.5 [153 kB] Get:35 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libdns-export162 amd64 1:9.10.3.dfsg.P4-8ubuntu1.5 [665 kB] Get:36 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 isc-dhcp-client amd64 4.3.3-5ubuntu12.6 [223 kB] Get:37 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 isc-dhcp-common amd64 4.3.3-5ubuntu12.6 [105 kB] Get:38 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 less amd64 481-2.1ubuntu0.1 [110 kB] Get:39 http://archive.ubuntu.com/ubuntu xenial/main amd64 libbsd0 amd64 0.8.2-1 [41.7 kB] Get:40 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libnettle6 amd64 3.2-1ubuntu0.16.04.1 [93.5 kB] Get:41 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libhogweed4 amd64 3.2-1ubuntu0.16.04.1 [136 kB] Get:42 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libidn11 amd64 1.32-3ubuntu1.1 [45.6 kB] Get:43 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libp11-kit0 amd64 0.23.2-5~ubuntu16.04.1 [105 kB] Get:44 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libtasn1-6 amd64 4.7-3ubuntu0.16.04.1 [43.2 kB] Get:45 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libgnutls30 amd64 3.4.10-4ubuntu1.2 [547 kB] Get:46 http://archive.ubuntu.com/ubuntu xenial/main amd64 libxtables11 amd64 1.6.0-2ubuntu3 [27.2 kB] Get:47 http://archive.ubuntu.com/ubuntu xenial/main amd64 netbase all 5.3 [12.9 kB] Get:48 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 openssl amd64 1.0.2g-1ubuntu4.6 [492 kB] Get:49 http://archive.ubuntu.com/ubuntu xenial/main amd64 ca-certificates all 20160104ubuntu1 [191 kB] Get:50 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 krb5-locales all 1.13.2+dfsg-5ubuntu2 [13.2 kB] Get:51 http://archive.ubuntu.com/ubuntu xenial/main amd64 libroken18-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1 [41.2 kB] Get:52 http://archive.ubuntu.com/ubuntu xenial/main amd64 libasn1-8-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1 [174 kB] Get:53 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libkrb5support0 amd64 1.13.2+dfsg-5ubuntu2 [30.8 kB] Get:54 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libk5crypto3 amd64 1.13.2+dfsg-5ubuntu2 [81.2 kB] Get:55 http://archive.ubuntu.com/ubuntu xenial/main amd64 libkeyutils1 amd64 1.5.9-8ubuntu1 [9904 B] Get:56 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libkrb5-3 amd64 1.13.2+dfsg-5ubuntu2 [273 kB] Get:57 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libgssapi-krb5-2 amd64 1.13.2+dfsg-5ubuntu2 [120 kB] Get:58 http://archive.ubuntu.com/ubuntu xenial/main amd64 libhcrypto4-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1 [84.9 kB] Get:59 http://archive.ubuntu.com/ubuntu xenial/main amd64 libheimbase1-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1 [29.2 kB] Get:60 http://archive.ubuntu.com/ubuntu xenial/main amd64 libwind0-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1 [48.2 kB] Get:61 http://archive.ubuntu.com/ubuntu xenial/main amd64 libhx509-5-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1 [107 kB] Get:62 http://archive.ubuntu.com/ubuntu xenial/main amd64 libkrb5-26-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1 [202 kB] Get:63 http://archive.ubuntu.com/ubuntu xenial/main amd64 libheimntlm0-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1 [15.1 kB] Get:64 http://archive.ubuntu.com/ubuntu xenial/main amd64 libgssapi3-heimdal amd64 1.7~git20150920+dfsg-4ubuntu1 [96.1 kB] Get:65 http://archive.ubuntu.com/ubuntu xenial/main amd64 libsasl2-modules-db amd64 2.1.26.dfsg1-14build1 [14.5 kB] Get:66 http://archive.ubuntu.com/ubuntu xenial/main amd64 libsasl2-2 amd64 2.1.26.dfsg1-14build1 [48.7 kB] Get:67 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libldap-2.4-2 amd64 2.4.42+dfsg-2ubuntu3.1 [161 kB] Get:68 http://archive.ubuntu.com/ubuntu xenial/main amd64 librtmp1 amd64 2.4+20151223.gitfa8646d-1build1 [53.9 kB] Get:69 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libcurl3-gnutls amd64 7.47.0-1ubuntu2.2 [184 kB] Get:70 http://archive.ubuntu.com/ubuntu xenial/main amd64 libedit2 amd64 3.1-20150325-1ubuntu2 [76.5 kB] Get:71 http://archive.ubuntu.com/ubuntu xenial/main amd64 libicu55 amd64 55.1-7 [7643 kB] Get:72 http://archive.ubuntu.com/ubuntu xenial/main amd64 libsasl2-modules amd64 2.1.26.dfsg1-14build1 [47.5 kB] Get:73 http://archive.ubuntu.com/ubuntu xenial/main amd64 libxmuu1 amd64 2:1.1.2-2 [9674 B] Get:74 http://archive.ubuntu.com/ubuntu xenial/main amd64 manpages all 4.04-2 [1087 kB] Get:75 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 openssh-client amd64 1:7.2p2-4ubuntu2.1 [587 kB] Get:76 http://archive.ubuntu.com/ubuntu xenial/main amd64 rsync amd64 3.1.1-3ubuntu1 [325 kB] Get:77 http://archive.ubuntu.com/ubuntu xenial/main amd64 xauth amd64 1:1.0.9-1ubuntu2 [22.7 kB] Get:78 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 binutils amd64 2.26.1-1ubuntu1~16.04.3 [2310 kB] Get:79 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libc-dev-bin amd64 2.23-0ubuntu5 [68.7 kB] Get:80 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 linux-libc-dev amd64 4.4.0-66.87 [833 kB] Get:81 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libc6-dev amd64 2.23-0ubuntu5 [2078 kB] Get:82 http://archive.ubuntu.com/ubuntu xenial/main amd64 libisl15 amd64 0.16.1-1 [524 kB] Get:83 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 cpp-5 amd64 5.4.0-6ubuntu1~16.04.4 [7653 kB] Get:84 http://archive.ubuntu.com/ubuntu xenial/main amd64 cpp amd64 4:5.3.1-1ubuntu1 [27.7 kB] Get:85 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libcc1-0 amd64 5.4.0-6ubuntu1~16.04.4 [38.8 kB] Get:86 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libgomp1 amd64 5.4.0-6ubuntu1~16.04.4 [55.0 kB] Get:87 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libitm1 amd64 5.4.0-6ubuntu1~16.04.4 [27.4 kB] Get:88 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libatomic1 amd64 5.4.0-6ubuntu1~16.04.4 [8912 B] Get:89 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libasan2 amd64 5.4.0-6ubuntu1~16.04.4 [264 kB] Get:90 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 liblsan0 amd64 5.4.0-6ubuntu1~16.04.4 [105 kB] Get:91 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libtsan0 amd64 5.4.0-6ubuntu1~16.04.4 [244 kB] Get:92 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libubsan0 amd64 5.4.0-6ubuntu1~16.04.4 [95.3 kB] Get:93 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libcilkrts5 amd64 5.4.0-6ubuntu1~16.04.4 [40.1 kB] Get:94 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libmpx0 amd64 5.4.0-6ubuntu1~16.04.4 [9766 B] Get:95 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libquadmath0 amd64 5.4.0-6ubuntu1~16.04.4 [131 kB] Get:96 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libgcc-5-dev amd64 5.4.0-6ubuntu1~16.04.4 [2237 kB] Get:97 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 gcc-5 amd64 5.4.0-6ubuntu1~16.04.4 [8577 kB] Get:98 http://archive.ubuntu.com/ubuntu xenial/main amd64 gcc amd64 4:5.3.1-1ubuntu1 [5244 B] Get:99 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libstdc++-5-dev amd64 5.4.0-6ubuntu1~16.04.4 [1426 kB] Get:100 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 g++-5 amd64 5.4.0-6ubuntu1~16.04.4 [8300 kB] Get:101 http://archive.ubuntu.com/ubuntu xenial/main amd64 g++ amd64 4:5.3.1-1ubuntu1 [1504 B] Get:102 http://archive.ubuntu.com/ubuntu xenial/main amd64 make amd64 4.1-6 [151 kB] Get:103 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libdpkg-perl all 1.18.4ubuntu1.1 [195 kB] Get:104 http://archive.ubuntu.com/ubuntu xenial/main amd64 xz-utils amd64 5.1.1alpha+20120614-2ubuntu2 [78.8 kB] Get:105 http://archive.ubuntu.com/ubuntu xenial/main amd64 patch amd64 2.7.5-1 [90.4 kB] Get:106 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 dpkg-dev all 1.18.4ubuntu1.1 [584 kB] Get:107 http://archive.ubuntu.com/ubuntu xenial/main amd64 build-essential amd64 12.1ubuntu2 [4758 B] Get:108 http://archive.ubuntu.com/ubuntu xenial/main amd64 libfakeroot amd64 1.20.2-1ubuntu1 [25.5 kB] Get:109 http://archive.ubuntu.com/ubuntu xenial/main amd64 fakeroot amd64 1.20.2-1ubuntu1 [61.8 kB] Get:110 http://archive.ubuntu.com/ubuntu xenial/main amd64 liberror-perl all 0.17-1.2 [19.6 kB] Get:111 http://archive.ubuntu.com/ubuntu xenial/main amd64 git-man all 1:2.7.4-0ubuntu1 [735 kB] Get:112 http://archive.ubuntu.com/ubuntu xenial/main amd64 git amd64 1:2.7.4-0ubuntu1 [3006 kB] Get:113 http://archive.ubuntu.com/ubuntu xenial/main amd64 python-pkg-resources all 20.7.0-1 [108 kB] Get:114 http://archive.ubuntu.com/ubuntu xenial/universe amd64 gyp all 0.1+20150913git1f374df9-1ubuntu1 [265 kB] Get:115 http://archive.ubuntu.com/ubuntu xenial/main amd64 javascript-common all 11 [6066 B] Get:116 http://archive.ubuntu.com/ubuntu xenial/main amd64 libalgorithm-diff-perl all 1.19.03-1 [47.6 kB] Get:117 http://archive.ubuntu.com/ubuntu xenial/main amd64 libalgorithm-diff-xs-perl amd64 0.04-4build1 [11.0 kB] Get:118 http://archive.ubuntu.com/ubuntu xenial/main amd64 libalgorithm-merge-perl all 0.08-3 [12.0 kB] Get:119 http://archive.ubuntu.com/ubuntu xenial/main amd64 libfile-fcntllock-perl amd64 0.22-3 [32.0 kB] Get:120 http://archive.ubuntu.com/ubuntu xenial/main amd64 libjs-jquery all 1.11.3+dfsg-4 [161 kB] Get:121 http://archive.ubuntu.com/ubuntu xenial/universe amd64 libjs-node-uuid all 1.4.0-1 [11.1 kB] Get:122 http://archive.ubuntu.com/ubuntu xenial/main amd64 libjs-underscore all 1.7.0~dfsg-1ubuntu1 [46.7 kB] Get:123 http://archive.ubuntu.com/ubuntu xenial/main amd64 zlib1g-dev amd64 1:1.2.8.dfsg-2ubuntu4 [168 kB] Get:124 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libssl-dev amd64 1.0.2g-1ubuntu4.6 [1344 kB] Get:125 http://archive.ubuntu.com/ubuntu xenial-updates/main amd64 libssl-doc all 1.0.2g-1ubuntu4.6 [1079 kB] Get:126 http://archive.ubuntu.com/ubuntu xenial/universe amd64 libuv1 amd64 1.8.0-1 [57.4 kB] Get:127 http://archive.ubuntu.com/ubuntu xenial/universe amd64 libuv1-dev amd64 1.8.0-1 [74.7 kB] Get:128 http://archive.ubuntu.com/ubuntu xenial/main amd64 manpages-dev all 4.04-2 [2048 kB] Get:129 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 nodejs amd64 4.2.6~dfsg-1ubuntu4.1 [3161 kB] Get:130 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-async all 0.8.0-1 [22.2 kB] Get:131 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-node-uuid all 1.4.0-1 [2530 B] Get:132 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-underscore all 1.7.0~dfsg-1ubuntu1 [3780 B] Get:133 http://archive.ubuntu.com/ubuntu xenial/main amd64 rename all 0.20-4 [12.0 kB] Get:134 http://archive.ubuntu.com/ubuntu xenial/universe amd64 libjs-inherits all 2.0.1-3 [2794 B] Get:135 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-abbrev all 1.0.5-2 [3592 B] Get:136 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-ansi all 0.3.0-2 [8590 B] Get:137 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-ansi-color-table all 1.0.0-1 [4478 B] Get:138 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-archy all 0.0.2-1 [3660 B] Get:139 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-inherits all 2.0.1-3 [3060 B] Get:140 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-block-stream all 0.0.7-1 [4832 B] Get:141 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-delayed-stream all 0.0.5-1 [4750 B] Get:142 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-combined-stream all 0.0.5-1 [4958 B] Get:143 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-cookie-jar all 0.3.1-1 [3746 B] Get:144 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-forever-agent all 0.5.1-1 [3194 B] Get:145 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-mime all 1.3.4-1 [11.9 kB] Get:146 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-form-data all 0.1.0-1 [6412 B] Get:147 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-rimraf all 2.2.8-1 [5702 B] Get:148 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-mkdirp all 0.5.0-1 [4690 B] Get:149 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-graceful-fs all 3.0.2-1 [7102 B] Get:150 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-fstream all 0.1.24-1 [19.5 kB] Get:151 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-lru-cache all 2.3.1-1 [5674 B] Get:152 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-sigmund all 1.0.0-1 [3818 B] Get:153 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-minimatch all 1.0.0-1 [14.0 kB] Get:154 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-fstream-ignore all 0.0.6-2 [5586 B] Get:155 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-github-url-from-git all 1.1.1-1 [3138 B] Get:156 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-once all 1.1.1-1 [2608 B] Get:157 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-glob all 4.0.5-1 [13.2 kB] Get:158 http://archive.ubuntu.com/ubuntu xenial-updates/universe amd64 nodejs-dev amd64 4.2.6~dfsg-1ubuntu4.1 [265 kB] Get:159 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-nopt all 3.0.1-1 [9544 B] Get:160 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-npmlog all 0.0.4-1 [5844 B] Get:161 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-osenv all 0.1.0-1 [3772 B] Get:162 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-tunnel-agent all 0.3.1-1 [4018 B] Get:163 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-json-stringify-safe all 5.0.0-1 [3544 B] Get:164 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-qs all 2.2.4-1 [7574 B] Get:165 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-request all 2.26.1-1 [14.5 kB] Get:166 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-semver all 2.1.0-2 [16.2 kB] Get:167 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-tar all 1.0.3-2 [17.5 kB] Get:168 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-which all 1.0.5-2 [3678 B] Get:169 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-gyp all 3.0.3-2ubuntu1 [23.2 kB] Get:170 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-ini all 1.1.0-1 [4770 B] Get:171 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-lockfile all 0.4.1-1 [5450 B] Get:172 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-mute-stream all 0.0.4-1 [4096 B] Get:173 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-normalize-package-data all 0.2.2-1 [9286 B] Get:174 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-read all 1.0.5-1 [4314 B] Get:175 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-read-package-json all 1.2.4-1 [7780 B] Get:176 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-retry all 0.6.0-1 [6172 B] Get:177 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-sha all 1.2.3-1 [4272 B] Get:178 http://archive.ubuntu.com/ubuntu xenial/universe amd64 node-slide all 1.1.4-1 [6118 B] Get:179 http://archive.ubuntu.com/ubuntu xenial/universe amd64 npm all 3.5.2-0ubuntu4 [1586 kB] Fetched 79.4 MB in 40s (1962 kB/s) debconf: delaying package configuration, since apt-utils is not installed Selecting previously unselected package libatm1:amd64. (Reading database ... 7256 files and directories currently installed.) Preparing to unpack .../libatm1_1%3a2.5.1-1.5_amd64.deb ... Unpacking libatm1:amd64 (1:2.5.1-1.5) ... Selecting previously unselected package libmnl0:amd64. Preparing to unpack .../libmnl0_1.0.3-5_amd64.deb ... Unpacking libmnl0:amd64 (1.0.3-5) ... Selecting previously unselected package libpopt0:amd64. Preparing to unpack .../libpopt0_1.16-10_amd64.deb ... Unpacking libpopt0:amd64 (1.16-10) ... Selecting previously unselected package libgdbm3:amd64. Preparing to unpack .../libgdbm3_1.8.3-13.1_amd64.deb ... Unpacking libgdbm3:amd64 (1.8.3-13.1) ... Selecting previously unselected package libxau6:amd64. Preparing to unpack .../libxau6_1%3a1.0.8-1_amd64.deb ... Unpacking libxau6:amd64 (1:1.0.8-1) ... Selecting previously unselected package libxdmcp6:amd64. Preparing to unpack .../libxdmcp6_1%3a1.1.2-1.1_amd64.deb ... Unpacking libxdmcp6:amd64 (1:1.1.2-1.1) ... Selecting previously unselected package libxcb1:amd64. Preparing to unpack .../libxcb1_1.11.1-1ubuntu1_amd64.deb ... Unpacking libxcb1:amd64 (1.11.1-1ubuntu1) ... Selecting previously unselected package libx11-data. Preparing to unpack .../libx11-data_2%3a1.6.3-1ubuntu2_all.deb ... Unpacking libx11-data (2:1.6.3-1ubuntu2) ... Selecting previously unselected package libx11-6:amd64. Preparing to unpack .../libx11-6_2%3a1.6.3-1ubuntu2_amd64.deb ... Unpacking libx11-6:amd64 (2:1.6.3-1ubuntu2) ... Selecting previously unselected package libxext6:amd64. Preparing to unpack .../libxext6_2%3a1.3.3-1_amd64.deb ... Unpacking libxext6:amd64 (2:1.3.3-1) ... Selecting previously unselected package perl-modules-5.22. Preparing to unpack .../perl-modules-5.22_5.22.1-9_all.deb ... Unpacking perl-modules-5.22 (5.22.1-9) ... Selecting previously unselected package libperl5.22:amd64. Preparing to unpack .../libperl5.22_5.22.1-9_amd64.deb ... Unpacking libperl5.22:amd64 (5.22.1-9) ... Selecting previously unselected package perl. Preparing to unpack .../perl_5.22.1-9_amd64.deb ... Unpacking perl (5.22.1-9) ... Selecting previously unselected package libpython2.7-minimal:amd64. Preparing to unpack .../libpython2.7-minimal_2.7.12-1ubuntu0~16.04.1_amd64.deb ... Unpacking libpython2.7-minimal:amd64 (2.7.12-1ubuntu0~16.04.1) ... Selecting previously unselected package python2.7-minimal. Preparing to unpack .../python2.7-minimal_2.7.12-1ubuntu0~16.04.1_amd64.deb ... Unpacking python2.7-minimal (2.7.12-1ubuntu0~16.04.1) ... Selecting previously unselected package python-minimal. Preparing to unpack .../python-minimal_2.7.11-1_amd64.deb ... Unpacking python-minimal (2.7.11-1) ... Selecting previously unselected package mime-support. Preparing to unpack .../mime-support_3.59ubuntu1_all.deb ... Unpacking mime-support (3.59ubuntu1) ... Selecting previously unselected package libexpat1:amd64. Preparing to unpack .../libexpat1_2.1.0-7ubuntu0.16.04.2_amd64.deb ... Unpacking libexpat1:amd64 (2.1.0-7ubuntu0.16.04.2) ... Selecting previously unselected package libffi6:amd64. Preparing to unpack .../libffi6_3.2.1-4_amd64.deb ... Unpacking libffi6:amd64 (3.2.1-4) ... Selecting previously unselected package libsqlite3-0:amd64. Preparing to unpack .../libsqlite3-0_3.11.0-1ubuntu1_amd64.deb ... Unpacking libsqlite3-0:amd64 (3.11.0-1ubuntu1) ... Selecting previously unselected package libssl1.0.0:amd64. Preparing to unpack .../libssl1.0.0_1.0.2g-1ubuntu4.6_amd64.deb ... Unpacking libssl1.0.0:amd64 (1.0.2g-1ubuntu4.6) ... Selecting previously unselected package libpython2.7-stdlib:amd64. Preparing to unpack .../libpython2.7-stdlib_2.7.12-1ubuntu0~16.04.1_amd64.deb ... Unpacking libpython2.7-stdlib:amd64 (2.7.12-1ubuntu0~16.04.1) ... Selecting previously unselected package python2.7. Preparing to unpack .../python2.7_2.7.12-1ubuntu0~16.04.1_amd64.deb ... Unpacking python2.7 (2.7.12-1ubuntu0~16.04.1) ... Selecting previously unselected package libpython-stdlib:amd64. Preparing to unpack .../libpython-stdlib_2.7.11-1_amd64.deb ... Unpacking libpython-stdlib:amd64 (2.7.11-1) ... Processing triggers for libc-bin (2.23-0ubuntu5) ... Setting up libpython2.7-minimal:amd64 (2.7.12-1ubuntu0~16.04.1) ... Setting up python2.7-minimal (2.7.12-1ubuntu0~16.04.1) ... Linking and byte-compiling packages for runtime python2.7... Setting up python-minimal (2.7.11-1) ... Selecting previously unselected package python. (Reading database ... 10145 files and directories currently installed.) Preparing to unpack .../python_2.7.11-1_amd64.deb ... Unpacking python (2.7.11-1) ... Selecting previously unselected package libgmp10:amd64. Preparing to unpack .../libgmp10_2%3a6.1.0+dfsg-2_amd64.deb ... Unpacking libgmp10:amd64 (2:6.1.0+dfsg-2) ... Selecting previously unselected package libmpfr4:amd64. Preparing to unpack .../libmpfr4_3.1.4-1_amd64.deb ... Unpacking libmpfr4:amd64 (3.1.4-1) ... Selecting previously unselected package libmpc3:amd64. Preparing to unpack .../libmpc3_1.0.3-1_amd64.deb ... Unpacking libmpc3:amd64 (1.0.3-1) ... Selecting previously unselected package bzip2. Preparing to unpack .../bzip2_1.0.6-8_amd64.deb ... Unpacking bzip2 (1.0.6-8) ... Selecting previously unselected package libmagic1:amd64. Preparing to unpack .../libmagic1_1%3a5.25-2ubuntu1_amd64.deb ... Unpacking libmagic1:amd64 (1:5.25-2ubuntu1) ... Selecting previously unselected package file. Preparing to unpack .../file_1%3a5.25-2ubuntu1_amd64.deb ... Unpacking file (1:5.25-2ubuntu1) ... Selecting previously unselected package iproute2. Preparing to unpack .../iproute2_4.3.0-1ubuntu3_amd64.deb ... Unpacking iproute2 (4.3.0-1ubuntu3) ... Selecting previously unselected package ifupdown. Preparing to unpack .../ifupdown_0.8.10ubuntu1.2_amd64.deb ... Unpacking ifupdown (0.8.10ubuntu1.2) ... Selecting previously unselected package libisc-export160. Preparing to unpack .../libisc-export160_1%3a9.10.3.dfsg.P4-8ubuntu1.5_amd64.deb ... Unpacking libisc-export160 (1:9.10.3.dfsg.P4-8ubuntu1.5) ... Selecting previously unselected package libdns-export162. Preparing to unpack .../libdns-export162_1%3a9.10.3.dfsg.P4-8ubuntu1.5_amd64.deb ... Unpacking libdns-export162 (1:9.10.3.dfsg.P4-8ubuntu1.5) ... Selecting previously unselected package isc-dhcp-client. Preparing to unpack .../isc-dhcp-client_4.3.3-5ubuntu12.6_amd64.deb ... Unpacking isc-dhcp-client (4.3.3-5ubuntu12.6) ... Selecting previously unselected package isc-dhcp-common. Preparing to unpack .../isc-dhcp-common_4.3.3-5ubuntu12.6_amd64.deb ... Unpacking isc-dhcp-common (4.3.3-5ubuntu12.6) ... Selecting previously unselected package less. Preparing to unpack .../less_481-2.1ubuntu0.1_amd64.deb ... Unpacking less (481-2.1ubuntu0.1) ... Selecting previously unselected package libbsd0:amd64. Preparing to unpack .../libbsd0_0.8.2-1_amd64.deb ... Unpacking libbsd0:amd64 (0.8.2-1) ... Selecting previously unselected package libnettle6:amd64. Preparing to unpack .../libnettle6_3.2-1ubuntu0.16.04.1_amd64.deb ... Unpacking libnettle6:amd64 (3.2-1ubuntu0.16.04.1) ... Selecting previously unselected package libhogweed4:amd64. Preparing to unpack .../libhogweed4_3.2-1ubuntu0.16.04.1_amd64.deb ... Unpacking libhogweed4:amd64 (3.2-1ubuntu0.16.04.1) ... Selecting previously unselected package libidn11:amd64. Preparing to unpack .../libidn11_1.32-3ubuntu1.1_amd64.deb ... Unpacking libidn11:amd64 (1.32-3ubuntu1.1) ... Selecting previously unselected package libp11-kit0:amd64. Preparing to unpack .../libp11-kit0_0.23.2-5~ubuntu16.04.1_amd64.deb ... Unpacking libp11-kit0:amd64 (0.23.2-5~ubuntu16.04.1) ... Selecting previously unselected package libtasn1-6:amd64. Preparing to unpack .../libtasn1-6_4.7-3ubuntu0.16.04.1_amd64.deb ... Unpacking libtasn1-6:amd64 (4.7-3ubuntu0.16.04.1) ... Selecting previously unselected package libgnutls30:amd64. Preparing to unpack .../libgnutls30_3.4.10-4ubuntu1.2_amd64.deb ... Unpacking libgnutls30:amd64 (3.4.10-4ubuntu1.2) ... Selecting previously unselected package libxtables11:amd64. Preparing to unpack .../libxtables11_1.6.0-2ubuntu3_amd64.deb ... Unpacking libxtables11:amd64 (1.6.0-2ubuntu3) ... Selecting previously unselected package netbase. Preparing to unpack .../archives/netbase_5.3_all.deb ... Unpacking netbase (5.3) ... Selecting previously unselected package openssl. Preparing to unpack .../openssl_1.0.2g-1ubuntu4.6_amd64.deb ... Unpacking openssl (1.0.2g-1ubuntu4.6) ... Selecting previously unselected package ca-certificates. Preparing to unpack .../ca-certificates_20160104ubuntu1_all.deb ... Unpacking ca-certificates (20160104ubuntu1) ... Selecting previously unselected package krb5-locales. Preparing to unpack .../krb5-locales_1.13.2+dfsg-5ubuntu2_all.deb ... Unpacking krb5-locales (1.13.2+dfsg-5ubuntu2) ... Selecting previously unselected package libroken18-heimdal:amd64. Preparing to unpack .../libroken18-heimdal_1.7~git20150920+dfsg-4ubuntu1_amd64.deb ... Unpacking libroken18-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Selecting previously unselected package libasn1-8-heimdal:amd64. Preparing to unpack .../libasn1-8-heimdal_1.7~git20150920+dfsg-4ubuntu1_amd64.deb ... Unpacking libasn1-8-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Selecting previously unselected package libkrb5support0:amd64. Preparing to unpack .../libkrb5support0_1.13.2+dfsg-5ubuntu2_amd64.deb ... Unpacking libkrb5support0:amd64 (1.13.2+dfsg-5ubuntu2) ... Selecting previously unselected package libk5crypto3:amd64. Preparing to unpack .../libk5crypto3_1.13.2+dfsg-5ubuntu2_amd64.deb ... Unpacking libk5crypto3:amd64 (1.13.2+dfsg-5ubuntu2) ... Selecting previously unselected package libkeyutils1:amd64. Preparing to unpack .../libkeyutils1_1.5.9-8ubuntu1_amd64.deb ... Unpacking libkeyutils1:amd64 (1.5.9-8ubuntu1) ... Selecting previously unselected package libkrb5-3:amd64. Preparing to unpack .../libkrb5-3_1.13.2+dfsg-5ubuntu2_amd64.deb ... Unpacking libkrb5-3:amd64 (1.13.2+dfsg-5ubuntu2) ... Selecting previously unselected package libgssapi-krb5-2:amd64. Preparing to unpack .../libgssapi-krb5-2_1.13.2+dfsg-5ubuntu2_amd64.deb ... Unpacking libgssapi-krb5-2:amd64 (1.13.2+dfsg-5ubuntu2) ... Selecting previously unselected package libhcrypto4-heimdal:amd64. Preparing to unpack .../libhcrypto4-heimdal_1.7~git20150920+dfsg-4ubuntu1_amd64.deb ... Unpacking libhcrypto4-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Selecting previously unselected package libheimbase1-heimdal:amd64. Preparing to unpack .../libheimbase1-heimdal_1.7~git20150920+dfsg-4ubuntu1_amd64.deb ... Unpacking libheimbase1-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Selecting previously unselected package libwind0-heimdal:amd64. Preparing to unpack .../libwind0-heimdal_1.7~git20150920+dfsg-4ubuntu1_amd64.deb ... Unpacking libwind0-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Selecting previously unselected package libhx509-5-heimdal:amd64. Preparing to unpack .../libhx509-5-heimdal_1.7~git20150920+dfsg-4ubuntu1_amd64.deb ... Unpacking libhx509-5-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Selecting previously unselected package libkrb5-26-heimdal:amd64. Preparing to unpack .../libkrb5-26-heimdal_1.7~git20150920+dfsg-4ubuntu1_amd64.deb ... Unpacking libkrb5-26-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Selecting previously unselected package libheimntlm0-heimdal:amd64. Preparing to unpack .../libheimntlm0-heimdal_1.7~git20150920+dfsg-4ubuntu1_amd64.deb ... Unpacking libheimntlm0-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Selecting previously unselected package libgssapi3-heimdal:amd64. Preparing to unpack .../libgssapi3-heimdal_1.7~git20150920+dfsg-4ubuntu1_amd64.deb ... Unpacking libgssapi3-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Selecting previously unselected package libsasl2-modules-db:amd64. Preparing to unpack .../libsasl2-modules-db_2.1.26.dfsg1-14build1_amd64.deb ... Unpacking libsasl2-modules-db:amd64 (2.1.26.dfsg1-14build1) ... Selecting previously unselected package libsasl2-2:amd64. Preparing to unpack .../libsasl2-2_2.1.26.dfsg1-14build1_amd64.deb ... Unpacking libsasl2-2:amd64 (2.1.26.dfsg1-14build1) ... Selecting previously unselected package libldap-2.4-2:amd64. Preparing to unpack .../libldap-2.4-2_2.4.42+dfsg-2ubuntu3.1_amd64.deb ... Unpacking libldap-2.4-2:amd64 (2.4.42+dfsg-2ubuntu3.1) ... Selecting previously unselected package librtmp1:amd64. Preparing to unpack .../librtmp1_2.4+20151223.gitfa8646d-1build1_amd64.deb ... Unpacking librtmp1:amd64 (2.4+20151223.gitfa8646d-1build1) ... Selecting previously unselected package libcurl3-gnutls:amd64. Preparing to unpack .../libcurl3-gnutls_7.47.0-1ubuntu2.2_amd64.deb ... Unpacking libcurl3-gnutls:amd64 (7.47.0-1ubuntu2.2) ... Selecting previously unselected package libedit2:amd64. Preparing to unpack .../libedit2_3.1-20150325-1ubuntu2_amd64.deb ... Unpacking libedit2:amd64 (3.1-20150325-1ubuntu2) ... Selecting previously unselected package libicu55:amd64. Preparing to unpack .../libicu55_55.1-7_amd64.deb ... Unpacking libicu55:amd64 (55.1-7) ... Selecting previously unselected package libsasl2-modules:amd64. Preparing to unpack .../libsasl2-modules_2.1.26.dfsg1-14build1_amd64.deb ... Unpacking libsasl2-modules:amd64 (2.1.26.dfsg1-14build1) ... Selecting previously unselected package libxmuu1:amd64. Preparing to unpack .../libxmuu1_2%3a1.1.2-2_amd64.deb ... Unpacking libxmuu1:amd64 (2:1.1.2-2) ... Selecting previously unselected package manpages. Preparing to unpack .../manpages_4.04-2_all.deb ... Unpacking manpages (4.04-2) ... Selecting previously unselected package openssh-client. Preparing to unpack .../openssh-client_1%3a7.2p2-4ubuntu2.1_amd64.deb ... Unpacking openssh-client (1:7.2p2-4ubuntu2.1) ... Selecting previously unselected package rsync. Preparing to unpack .../rsync_3.1.1-3ubuntu1_amd64.deb ... Unpacking rsync (3.1.1-3ubuntu1) ... Selecting previously unselected package xauth. Preparing to unpack .../xauth_1%3a1.0.9-1ubuntu2_amd64.deb ... Unpacking xauth (1:1.0.9-1ubuntu2) ... Selecting previously unselected package binutils. Preparing to unpack .../binutils_2.26.1-1ubuntu1~16.04.3_amd64.deb ... Unpacking binutils (2.26.1-1ubuntu1~16.04.3) ... Selecting previously unselected package libc-dev-bin. Preparing to unpack .../libc-dev-bin_2.23-0ubuntu5_amd64.deb ... Unpacking libc-dev-bin (2.23-0ubuntu5) ... Selecting previously unselected package linux-libc-dev:amd64. Preparing to unpack .../linux-libc-dev_4.4.0-66.87_amd64.deb ... Unpacking linux-libc-dev:amd64 (4.4.0-66.87) ... Selecting previously unselected package libc6-dev:amd64. Preparing to unpack .../libc6-dev_2.23-0ubuntu5_amd64.deb ... Unpacking libc6-dev:amd64 (2.23-0ubuntu5) ... Selecting previously unselected package libisl15:amd64. Preparing to unpack .../libisl15_0.16.1-1_amd64.deb ... Unpacking libisl15:amd64 (0.16.1-1) ... Selecting previously unselected package cpp-5. Preparing to unpack .../cpp-5_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking cpp-5 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package cpp. Preparing to unpack .../cpp_4%3a5.3.1-1ubuntu1_amd64.deb ... Unpacking cpp (4:5.3.1-1ubuntu1) ... Selecting previously unselected package libcc1-0:amd64. Preparing to unpack .../libcc1-0_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking libcc1-0:amd64 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package libgomp1:amd64. Preparing to unpack .../libgomp1_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking libgomp1:amd64 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package libitm1:amd64. Preparing to unpack .../libitm1_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking libitm1:amd64 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package libatomic1:amd64. Preparing to unpack .../libatomic1_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking libatomic1:amd64 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package libasan2:amd64. Preparing to unpack .../libasan2_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking libasan2:amd64 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package liblsan0:amd64. Preparing to unpack .../liblsan0_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking liblsan0:amd64 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package libtsan0:amd64. Preparing to unpack .../libtsan0_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking libtsan0:amd64 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package libubsan0:amd64. Preparing to unpack .../libubsan0_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking libubsan0:amd64 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package libcilkrts5:amd64. Preparing to unpack .../libcilkrts5_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking libcilkrts5:amd64 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package libmpx0:amd64. Preparing to unpack .../libmpx0_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking libmpx0:amd64 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package libquadmath0:amd64. Preparing to unpack .../libquadmath0_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking libquadmath0:amd64 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package libgcc-5-dev:amd64. Preparing to unpack .../libgcc-5-dev_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking libgcc-5-dev:amd64 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package gcc-5. Preparing to unpack .../gcc-5_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking gcc-5 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package gcc. Preparing to unpack .../gcc_4%3a5.3.1-1ubuntu1_amd64.deb ... Unpacking gcc (4:5.3.1-1ubuntu1) ... Selecting previously unselected package libstdc++-5-dev:amd64. Preparing to unpack .../libstdc++-5-dev_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking libstdc++-5-dev:amd64 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package g++-5. Preparing to unpack .../g++-5_5.4.0-6ubuntu1~16.04.4_amd64.deb ... Unpacking g++-5 (5.4.0-6ubuntu1~16.04.4) ... Selecting previously unselected package g++. Preparing to unpack .../g++_4%3a5.3.1-1ubuntu1_amd64.deb ... Unpacking g++ (4:5.3.1-1ubuntu1) ... Selecting previously unselected package make. Preparing to unpack .../archives/make_4.1-6_amd64.deb ... Unpacking make (4.1-6) ... Selecting previously unselected package libdpkg-perl. Preparing to unpack .../libdpkg-perl_1.18.4ubuntu1.1_all.deb ... Unpacking libdpkg-perl (1.18.4ubuntu1.1) ... Selecting previously unselected package xz-utils. Preparing to unpack .../xz-utils_5.1.1alpha+20120614-2ubuntu2_amd64.deb ... Unpacking xz-utils (5.1.1alpha+20120614-2ubuntu2) ... Selecting previously unselected package patch. Preparing to unpack .../patch_2.7.5-1_amd64.deb ... Unpacking patch (2.7.5-1) ... Selecting previously unselected package dpkg-dev. Preparing to unpack .../dpkg-dev_1.18.4ubuntu1.1_all.deb ... Unpacking dpkg-dev (1.18.4ubuntu1.1) ... Selecting previously unselected package build-essential. Preparing to unpack .../build-essential_12.1ubuntu2_amd64.deb ... Unpacking build-essential (12.1ubuntu2) ... Selecting previously unselected package libfakeroot:amd64. Preparing to unpack .../libfakeroot_1.20.2-1ubuntu1_amd64.deb ... Unpacking libfakeroot:amd64 (1.20.2-1ubuntu1) ... Selecting previously unselected package fakeroot. Preparing to unpack .../fakeroot_1.20.2-1ubuntu1_amd64.deb ... Unpacking fakeroot (1.20.2-1ubuntu1) ... Selecting previously unselected package liberror-perl. Preparing to unpack .../liberror-perl_0.17-1.2_all.deb ... Unpacking liberror-perl (0.17-1.2) ... Selecting previously unselected package git-man. Preparing to unpack .../git-man_1%3a2.7.4-0ubuntu1_all.deb ... Unpacking git-man (1:2.7.4-0ubuntu1) ... Selecting previously unselected package git. Preparing to unpack .../git_1%3a2.7.4-0ubuntu1_amd64.deb ... Unpacking git (1:2.7.4-0ubuntu1) ... Selecting previously unselected package python-pkg-resources. Preparing to unpack .../python-pkg-resources_20.7.0-1_all.deb ... Unpacking python-pkg-resources (20.7.0-1) ... Selecting previously unselected package gyp. Preparing to unpack .../gyp_0.1+20150913git1f374df9-1ubuntu1_all.deb ... Unpacking gyp (0.1+20150913git1f374df9-1ubuntu1) ... Selecting previously unselected package javascript-common. Preparing to unpack .../javascript-common_11_all.deb ... Unpacking javascript-common (11) ... Selecting previously unselected package libalgorithm-diff-perl. Preparing to unpack .../libalgorithm-diff-perl_1.19.03-1_all.deb ... Unpacking libalgorithm-diff-perl (1.19.03-1) ... Selecting previously unselected package libalgorithm-diff-xs-perl. Preparing to unpack .../libalgorithm-diff-xs-perl_0.04-4build1_amd64.deb ... Unpacking libalgorithm-diff-xs-perl (0.04-4build1) ... Selecting previously unselected package libalgorithm-merge-perl. Preparing to unpack .../libalgorithm-merge-perl_0.08-3_all.deb ... Unpacking libalgorithm-merge-perl (0.08-3) ... Selecting previously unselected package libfile-fcntllock-perl. Preparing to unpack .../libfile-fcntllock-perl_0.22-3_amd64.deb ... Unpacking libfile-fcntllock-perl (0.22-3) ... Selecting previously unselected package libjs-jquery. Preparing to unpack .../libjs-jquery_1.11.3+dfsg-4_all.deb ... Unpacking libjs-jquery (1.11.3+dfsg-4) ... Selecting previously unselected package libjs-node-uuid. Preparing to unpack .../libjs-node-uuid_1.4.0-1_all.deb ... Unpacking libjs-node-uuid (1.4.0-1) ... Selecting previously unselected package libjs-underscore. Preparing to unpack .../libjs-underscore_1.7.0~dfsg-1ubuntu1_all.deb ... Unpacking libjs-underscore (1.7.0~dfsg-1ubuntu1) ... Selecting previously unselected package zlib1g-dev:amd64. Preparing to unpack .../zlib1g-dev_1%3a1.2.8.dfsg-2ubuntu4_amd64.deb ... Unpacking zlib1g-dev:amd64 (1:1.2.8.dfsg-2ubuntu4) ... Selecting previously unselected package libssl-dev:amd64. Preparing to unpack .../libssl-dev_1.0.2g-1ubuntu4.6_amd64.deb ... Unpacking libssl-dev:amd64 (1.0.2g-1ubuntu4.6) ... Selecting previously unselected package libssl-doc. Preparing to unpack .../libssl-doc_1.0.2g-1ubuntu4.6_all.deb ... Unpacking libssl-doc (1.0.2g-1ubuntu4.6) ... Selecting previously unselected package libuv1:amd64. Preparing to unpack .../libuv1_1.8.0-1_amd64.deb ... Unpacking libuv1:amd64 (1.8.0-1) ... Selecting previously unselected package libuv1-dev:amd64. Preparing to unpack .../libuv1-dev_1.8.0-1_amd64.deb ... Unpacking libuv1-dev:amd64 (1.8.0-1) ... Selecting previously unselected package manpages-dev. Preparing to unpack .../manpages-dev_4.04-2_all.deb ... Unpacking manpages-dev (4.04-2) ... Selecting previously unselected package nodejs. Preparing to unpack .../nodejs_4.2.6~dfsg-1ubuntu4.1_amd64.deb ... Unpacking nodejs (4.2.6~dfsg-1ubuntu4.1) ... Selecting previously unselected package node-async. Preparing to unpack .../node-async_0.8.0-1_all.deb ... Unpacking node-async (0.8.0-1) ... Selecting previously unselected package node-node-uuid. Preparing to unpack .../node-node-uuid_1.4.0-1_all.deb ... Unpacking node-node-uuid (1.4.0-1) ... Selecting previously unselected package node-underscore. Preparing to unpack .../node-underscore_1.7.0~dfsg-1ubuntu1_all.deb ... Unpacking node-underscore (1.7.0~dfsg-1ubuntu1) ... Selecting previously unselected package rename. Preparing to unpack .../archives/rename_0.20-4_all.deb ... Unpacking rename (0.20-4) ... Selecting previously unselected package libjs-inherits. Preparing to unpack .../libjs-inherits_2.0.1-3_all.deb ... Unpacking libjs-inherits (2.0.1-3) ... Selecting previously unselected package node-abbrev. Preparing to unpack .../node-abbrev_1.0.5-2_all.deb ... Unpacking node-abbrev (1.0.5-2) ... Selecting previously unselected package node-ansi. Preparing to unpack .../node-ansi_0.3.0-2_all.deb ... Unpacking node-ansi (0.3.0-2) ... Selecting previously unselected package node-ansi-color-table. Preparing to unpack .../node-ansi-color-table_1.0.0-1_all.deb ... Unpacking node-ansi-color-table (1.0.0-1) ... Selecting previously unselected package node-archy. Preparing to unpack .../node-archy_0.0.2-1_all.deb ... Unpacking node-archy (0.0.2-1) ... Selecting previously unselected package node-inherits. Preparing to unpack .../node-inherits_2.0.1-3_all.deb ... Unpacking node-inherits (2.0.1-3) ... Selecting previously unselected package node-block-stream. Preparing to unpack .../node-block-stream_0.0.7-1_all.deb ... Unpacking node-block-stream (0.0.7-1) ... Selecting previously unselected package node-delayed-stream. Preparing to unpack .../node-delayed-stream_0.0.5-1_all.deb ... Unpacking node-delayed-stream (0.0.5-1) ... Selecting previously unselected package node-combined-stream. Preparing to unpack .../node-combined-stream_0.0.5-1_all.deb ... Unpacking node-combined-stream (0.0.5-1) ... Selecting previously unselected package node-cookie-jar. Preparing to unpack .../node-cookie-jar_0.3.1-1_all.deb ... Unpacking node-cookie-jar (0.3.1-1) ... Selecting previously unselected package node-forever-agent. Preparing to unpack .../node-forever-agent_0.5.1-1_all.deb ... Unpacking node-forever-agent (0.5.1-1) ... Selecting previously unselected package node-mime. Preparing to unpack .../node-mime_1.3.4-1_all.deb ... Unpacking node-mime (1.3.4-1) ... Selecting previously unselected package node-form-data. Preparing to unpack .../node-form-data_0.1.0-1_all.deb ... Unpacking node-form-data (0.1.0-1) ... Selecting previously unselected package node-rimraf. Preparing to unpack .../node-rimraf_2.2.8-1_all.deb ... Unpacking node-rimraf (2.2.8-1) ... Selecting previously unselected package node-mkdirp. Preparing to unpack .../node-mkdirp_0.5.0-1_all.deb ... Unpacking node-mkdirp (0.5.0-1) ... Selecting previously unselected package node-graceful-fs. Preparing to unpack .../node-graceful-fs_3.0.2-1_all.deb ... Unpacking node-graceful-fs (3.0.2-1) ... Selecting previously unselected package node-fstream. Preparing to unpack .../node-fstream_0.1.24-1_all.deb ... Unpacking node-fstream (0.1.24-1) ... Selecting previously unselected package node-lru-cache. Preparing to unpack .../node-lru-cache_2.3.1-1_all.deb ... Unpacking node-lru-cache (2.3.1-1) ... Selecting previously unselected package node-sigmund. Preparing to unpack .../node-sigmund_1.0.0-1_all.deb ... Unpacking node-sigmund (1.0.0-1) ... Selecting previously unselected package node-minimatch. Preparing to unpack .../node-minimatch_1.0.0-1_all.deb ... Unpacking node-minimatch (1.0.0-1) ... Selecting previously unselected package node-fstream-ignore. Preparing to unpack .../node-fstream-ignore_0.0.6-2_all.deb ... Unpacking node-fstream-ignore (0.0.6-2) ... Selecting previously unselected package node-github-url-from-git. Preparing to unpack .../node-github-url-from-git_1.1.1-1_all.deb ... Unpacking node-github-url-from-git (1.1.1-1) ... Selecting previously unselected package node-once. Preparing to unpack .../node-once_1.1.1-1_all.deb ... Unpacking node-once (1.1.1-1) ... Selecting previously unselected package node-glob. Preparing to unpack .../node-glob_4.0.5-1_all.deb ... Unpacking node-glob (4.0.5-1) ... Selecting previously unselected package nodejs-dev. Preparing to unpack .../nodejs-dev_4.2.6~dfsg-1ubuntu4.1_amd64.deb ... Unpacking nodejs-dev (4.2.6~dfsg-1ubuntu4.1) ... Selecting previously unselected package node-nopt. Preparing to unpack .../node-nopt_3.0.1-1_all.deb ... Unpacking node-nopt (3.0.1-1) ... Selecting previously unselected package node-npmlog. Preparing to unpack .../node-npmlog_0.0.4-1_all.deb ... Unpacking node-npmlog (0.0.4-1) ... Selecting previously unselected package node-osenv. Preparing to unpack .../node-osenv_0.1.0-1_all.deb ... Unpacking node-osenv (0.1.0-1) ... Selecting previously unselected package node-tunnel-agent. Preparing to unpack .../node-tunnel-agent_0.3.1-1_all.deb ... Unpacking node-tunnel-agent (0.3.1-1) ... Selecting previously unselected package node-json-stringify-safe. Preparing to unpack .../node-json-stringify-safe_5.0.0-1_all.deb ... Unpacking node-json-stringify-safe (5.0.0-1) ... Selecting previously unselected package node-qs. Preparing to unpack .../node-qs_2.2.4-1_all.deb ... Unpacking node-qs (2.2.4-1) ... Selecting previously unselected package node-request. Preparing to unpack .../node-request_2.26.1-1_all.deb ... Unpacking node-request (2.26.1-1) ... Selecting previously unselected package node-semver. Preparing to unpack .../node-semver_2.1.0-2_all.deb ... Unpacking node-semver (2.1.0-2) ... Selecting previously unselected package node-tar. Preparing to unpack .../node-tar_1.0.3-2_all.deb ... Unpacking node-tar (1.0.3-2) ... Selecting previously unselected package node-which. Preparing to unpack .../node-which_1.0.5-2_all.deb ... Unpacking node-which (1.0.5-2) ... Selecting previously unselected package node-gyp. Preparing to unpack .../node-gyp_3.0.3-2ubuntu1_all.deb ... Unpacking node-gyp (3.0.3-2ubuntu1) ... Selecting previously unselected package node-ini. Preparing to unpack .../node-ini_1.1.0-1_all.deb ... Unpacking node-ini (1.1.0-1) ... Selecting previously unselected package node-lockfile. Preparing to unpack .../node-lockfile_0.4.1-1_all.deb ... Unpacking node-lockfile (0.4.1-1) ... Selecting previously unselected package node-mute-stream. Preparing to unpack .../node-mute-stream_0.0.4-1_all.deb ... Unpacking node-mute-stream (0.0.4-1) ... Selecting previously unselected package node-normalize-package-data. Preparing to unpack .../node-normalize-package-data_0.2.2-1_all.deb ... Unpacking node-normalize-package-data (0.2.2-1) ... Selecting previously unselected package node-read. Preparing to unpack .../node-read_1.0.5-1_all.deb ... Unpacking node-read (1.0.5-1) ... Selecting previously unselected package node-read-package-json. Preparing to unpack .../node-read-package-json_1.2.4-1_all.deb ... Unpacking node-read-package-json (1.2.4-1) ... Selecting previously unselected package node-retry. Preparing to unpack .../node-retry_0.6.0-1_all.deb ... Unpacking node-retry (0.6.0-1) ... Selecting previously unselected package node-sha. Preparing to unpack .../node-sha_1.2.3-1_all.deb ... Unpacking node-sha (1.2.3-1) ... Selecting previously unselected package node-slide. Preparing to unpack .../node-slide_1.1.4-1_all.deb ... Unpacking node-slide (1.1.4-1) ... Selecting previously unselected package npm. Preparing to unpack .../npm_3.5.2-0ubuntu4_all.deb ... Unpacking npm (3.5.2-0ubuntu4) ... Processing triggers for libc-bin (2.23-0ubuntu5) ... Processing triggers for systemd (229-4ubuntu16) ... Setting up libatm1:amd64 (1:2.5.1-1.5) ... Setting up libmnl0:amd64 (1.0.3-5) ... Setting up libpopt0:amd64 (1.16-10) ... Setting up libgdbm3:amd64 (1.8.3-13.1) ... Setting up libxau6:amd64 (1:1.0.8-1) ... Setting up libxdmcp6:amd64 (1:1.1.2-1.1) ... Setting up libxcb1:amd64 (1.11.1-1ubuntu1) ... Setting up libx11-data (2:1.6.3-1ubuntu2) ... Setting up libx11-6:amd64 (2:1.6.3-1ubuntu2) ... Setting up libxext6:amd64 (2:1.3.3-1) ... Setting up perl-modules-5.22 (5.22.1-9) ... Setting up libperl5.22:amd64 (5.22.1-9) ... Setting up perl (5.22.1-9) ... update-alternatives: using /usr/bin/prename to provide /usr/bin/rename (rename) in auto mode Setting up mime-support (3.59ubuntu1) ... Setting up libexpat1:amd64 (2.1.0-7ubuntu0.16.04.2) ... Setting up libffi6:amd64 (3.2.1-4) ... Setting up libsqlite3-0:amd64 (3.11.0-1ubuntu1) ... Setting up libssl1.0.0:amd64 (1.0.2g-1ubuntu4.6) ... debconf: unable to initialize frontend: Dialog debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.) debconf: falling back to frontend: Readline Setting up libpython2.7-stdlib:amd64 (2.7.12-1ubuntu0~16.04.1) ... Setting up python2.7 (2.7.12-1ubuntu0~16.04.1) ... Setting up libpython-stdlib:amd64 (2.7.11-1) ... Setting up python (2.7.11-1) ... Setting up libgmp10:amd64 (2:6.1.0+dfsg-2) ... Setting up libmpfr4:amd64 (3.1.4-1) ... Setting up libmpc3:amd64 (1.0.3-1) ... Setting up bzip2 (1.0.6-8) ... Setting up libmagic1:amd64 (1:5.25-2ubuntu1) ... Setting up file (1:5.25-2ubuntu1) ... Setting up iproute2 (4.3.0-1ubuntu3) ... Setting up ifupdown (0.8.10ubuntu1.2) ... Creating /etc/network/interfaces. Setting up libisc-export160 (1:9.10.3.dfsg.P4-8ubuntu1.5) ... Setting up libdns-export162 (1:9.10.3.dfsg.P4-8ubuntu1.5) ... Setting up isc-dhcp-client (4.3.3-5ubuntu12.6) ... Setting up isc-dhcp-common (4.3.3-5ubuntu12.6) ... Setting up less (481-2.1ubuntu0.1) ... debconf: unable to initialize frontend: Dialog debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.) debconf: falling back to frontend: Readline Setting up libbsd0:amd64 (0.8.2-1) ... Setting up libnettle6:amd64 (3.2-1ubuntu0.16.04.1) ... Setting up libhogweed4:amd64 (3.2-1ubuntu0.16.04.1) ... Setting up libidn11:amd64 (1.32-3ubuntu1.1) ... Setting up libp11-kit0:amd64 (0.23.2-5~ubuntu16.04.1) ... Setting up libtasn1-6:amd64 (4.7-3ubuntu0.16.04.1) ... Setting up libgnutls30:amd64 (3.4.10-4ubuntu1.2) ... Setting up libxtables11:amd64 (1.6.0-2ubuntu3) ... Setting up netbase (5.3) ... Setting up openssl (1.0.2g-1ubuntu4.6) ... Setting up ca-certificates (20160104ubuntu1) ... debconf: unable to initialize frontend: Dialog debconf: (No usable dialog-like program is installed, so the dialog based frontend cannot be used. at /usr/share/perl5/Debconf/FrontEnd/Dialog.pm line 76.) debconf: falling back to frontend: Readline Setting up krb5-locales (1.13.2+dfsg-5ubuntu2) ... Setting up libroken18-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Setting up libasn1-8-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Setting up libkrb5support0:amd64 (1.13.2+dfsg-5ubuntu2) ... Setting up libk5crypto3:amd64 (1.13.2+dfsg-5ubuntu2) ... Setting up libkeyutils1:amd64 (1.5.9-8ubuntu1) ... Setting up libkrb5-3:amd64 (1.13.2+dfsg-5ubuntu2) ... Setting up libgssapi-krb5-2:amd64 (1.13.2+dfsg-5ubuntu2) ... Setting up libhcrypto4-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Setting up libheimbase1-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Setting up libwind0-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Setting up libhx509-5-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Setting up libkrb5-26-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Setting up libheimntlm0-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Setting up libgssapi3-heimdal:amd64 (1.7~git20150920+dfsg-4ubuntu1) ... Setting up libsasl2-modules-db:amd64 (2.1.26.dfsg1-14build1) ... Setting up libsasl2-2:amd64 (2.1.26.dfsg1-14build1) ... Setting up libldap-2.4-2:amd64 (2.4.42+dfsg-2ubuntu3.1) ... Setting up librtmp1:amd64 (2.4+20151223.gitfa8646d-1build1) ... Setting up libcurl3-gnutls:amd64 (7.47.0-1ubuntu2.2) ... Setting up libedit2:amd64 (3.1-20150325-1ubuntu2) ... Setting up libicu55:amd64 (55.1-7) ... Setting up libsasl2-modules:amd64 (2.1.26.dfsg1-14build1) ... Setting up libxmuu1:amd64 (2:1.1.2-2) ... Setting up manpages (4.04-2) ... Setting up openssh-client (1:7.2p2-4ubuntu2.1) ... Setting up rsync (3.1.1-3ubuntu1) ... invoke-rc.d: could not determine current runlevel invoke-rc.d: policy-rc.d denied execution of restart. Setting up xauth (1:1.0.9-1ubuntu2) ... Setting up binutils (2.26.1-1ubuntu1~16.04.3) ... Setting up libc-dev-bin (2.23-0ubuntu5) ... Setting up linux-libc-dev:amd64 (4.4.0-66.87) ... Setting up libc6-dev:amd64 (2.23-0ubuntu5) ... Setting up libisl15:amd64 (0.16.1-1) ... Setting up cpp-5 (5.4.0-6ubuntu1~16.04.4) ... Setting up cpp (4:5.3.1-1ubuntu1) ... Setting up libcc1-0:amd64 (5.4.0-6ubuntu1~16.04.4) ... Setting up libgomp1:amd64 (5.4.0-6ubuntu1~16.04.4) ... Setting up libitm1:amd64 (5.4.0-6ubuntu1~16.04.4) ... Setting up libatomic1:amd64 (5.4.0-6ubuntu1~16.04.4) ... Setting up libasan2:amd64 (5.4.0-6ubuntu1~16.04.4) ... Setting up liblsan0:amd64 (5.4.0-6ubuntu1~16.04.4) ... Setting up libtsan0:amd64 (5.4.0-6ubuntu1~16.04.4) ... Setting up libubsan0:amd64 (5.4.0-6ubuntu1~16.04.4) ... Setting up libcilkrts5:amd64 (5.4.0-6ubuntu1~16.04.4) ... Setting up libmpx0:amd64 (5.4.0-6ubuntu1~16.04.4) ... Setting up libquadmath0:amd64 (5.4.0-6ubuntu1~16.04.4) ... Setting up libgcc-5-dev:amd64 (5.4.0-6ubuntu1~16.04.4) ... Setting up gcc-5 (5.4.0-6ubuntu1~16.04.4) ... Setting up gcc (4:5.3.1-1ubuntu1) ... Setting up libstdc++-5-dev:amd64 (5.4.0-6ubuntu1~16.04.4) ... Setting up g++-5 (5.4.0-6ubuntu1~16.04.4) ... Setting up g++ (4:5.3.1-1ubuntu1) ... update-alternatives: using /usr/bin/g++ to provide /usr/bin/c++ (c++) in auto mode Setting up make (4.1-6) ... Setting up libdpkg-perl (1.18.4ubuntu1.1) ... Setting up xz-utils (5.1.1alpha+20120614-2ubuntu2) ... update-alternatives: using /usr/bin/xz to provide /usr/bin/lzma (lzma) in auto mode Setting up patch (2.7.5-1) ... Setting up dpkg-dev (1.18.4ubuntu1.1) ... Setting up build-essential (12.1ubuntu2) ... Setting up libfakeroot:amd64 (1.20.2-1ubuntu1) ... Setting up fakeroot (1.20.2-1ubuntu1) ... update-alternatives: using /usr/bin/fakeroot-sysv to provide /usr/bin/fakeroot (fakeroot) in auto mode Setting up liberror-perl (0.17-1.2) ... Setting up git-man (1:2.7.4-0ubuntu1) ... Setting up git (1:2.7.4-0ubuntu1) ... Setting up python-pkg-resources (20.7.0-1) ... Setting up gyp (0.1+20150913git1f374df9-1ubuntu1) ... Setting up javascript-common (11) ... Setting up libalgorithm-diff-perl (1.19.03-1) ... Setting up libalgorithm-diff-xs-perl (0.04-4build1) ... Setting up libalgorithm-merge-perl (0.08-3) ... Setting up libfile-fcntllock-perl (0.22-3) ... Setting up libjs-jquery (1.11.3+dfsg-4) ... Setting up libjs-node-uuid (1.4.0-1) ... Setting up libjs-underscore (1.7.0~dfsg-1ubuntu1) ... Setting up zlib1g-dev:amd64 (1:1.2.8.dfsg-2ubuntu4) ... Setting up libssl-dev:amd64 (1.0.2g-1ubuntu4.6) ... Setting up libssl-doc (1.0.2g-1ubuntu4.6) ... Setting up libuv1:amd64 (1.8.0-1) ... Setting up libuv1-dev:amd64 (1.8.0-1) ... Setting up manpages-dev (4.04-2) ... Setting up nodejs (4.2.6~dfsg-1ubuntu4.1) ... update-alternatives: using /usr/bin/nodejs to provide /usr/bin/js (js) in auto mode Setting up node-async (0.8.0-1) ... Setting up node-node-uuid (1.4.0-1) ... Setting up node-underscore (1.7.0~dfsg-1ubuntu1) ... Setting up rename (0.20-4) ... update-alternatives: using /usr/bin/file-rename to provide /usr/bin/rename (rename) in auto mode Setting up libjs-inherits (2.0.1-3) ... Setting up node-abbrev (1.0.5-2) ... Setting up node-ansi (0.3.0-2) ... Setting up node-ansi-color-table (1.0.0-1) ... Setting up node-archy (0.0.2-1) ... Setting up node-inherits (2.0.1-3) ... Setting up node-block-stream (0.0.7-1) ... Setting up node-delayed-stream (0.0.5-1) ... Setting up node-combined-stream (0.0.5-1) ... Setting up node-cookie-jar (0.3.1-1) ... Setting up node-forever-agent (0.5.1-1) ... Setting up node-mime (1.3.4-1) ... Setting up node-form-data (0.1.0-1) ... Setting up node-rimraf (2.2.8-1) ... Setting up node-mkdirp (0.5.0-1) ... Setting up node-graceful-fs (3.0.2-1) ... Setting up node-fstream (0.1.24-1) ... Setting up node-lru-cache (2.3.1-1) ... Setting up node-sigmund (1.0.0-1) ... Setting up node-minimatch (1.0.0-1) ... Setting up node-fstream-ignore (0.0.6-2) ... Setting up node-github-url-from-git (1.1.1-1) ... Setting up node-once (1.1.1-1) ... Setting up node-glob (4.0.5-1) ... Setting up nodejs-dev (4.2.6~dfsg-1ubuntu4.1) ... Setting up node-nopt (3.0.1-1) ... Setting up node-npmlog (0.0.4-1) ... Setting up node-osenv (0.1.0-1) ... Setting up node-tunnel-agent (0.3.1-1) ... Setting up node-json-stringify-safe (5.0.0-1) ... Setting up node-qs (2.2.4-1) ... Setting up node-request (2.26.1-1) ... Setting up node-semver (2.1.0-2) ... Setting up node-tar (1.0.3-2) ... Setting up node-which (1.0.5-2) ... Setting up node-gyp (3.0.3-2ubuntu1) ... Setting up node-ini (1.1.0-1) ... Setting up node-lockfile (0.4.1-1) ... Setting up node-mute-stream (0.0.4-1) ... Setting up node-normalize-package-data (0.2.2-1) ... Setting up node-read (1.0.5-1) ... Setting up node-read-package-json (1.2.4-1) ... Setting up node-retry (0.6.0-1) ... Setting up node-sha (1.2.3-1) ... Setting up node-slide (1.1.4-1) ... Setting up npm (3.5.2-0ubuntu4) ... Processing triggers for libc-bin (2.23-0ubuntu5) ... Processing triggers for systemd (229-4ubuntu16) ... Processing triggers for ca-certificates (20160104ubuntu1) ... Updating certificates in /etc/ssl/certs... 173 added, 0 removed; done. Running hooks in /etc/ca-certificates/update.d... done.
Step 1.4: Make sure that ’node‘ is found in the PATH
Many NPM packages run ’node‘ commands. For those to work, the system needs to find the ’node‘ executable. In the case of Ubuntu, there is a node executable on /usr/sbin/node, but it has nothing to do with Node.js. Ubuntu installs Node.js on /usr/bin/nodejs. For the system to find the correct node command, it is sufficient to create a symbolic link like follows (see also this StackOverflow Q&A):
(container)$ ln -s nodejs /usr/bin/node
If this step is not performed, you will hit an error message
gyp: Call to 'node -e "require('nan')"' returned exit status 127 while in binding.gyp. while trying to load binding.gypin the
npm install
step below; see Appendix A for details.
Step 1.5: Clone BrowserStack Protractor Example from Git
The BrowserStack Protractor Example is cloned like follows:
(container)# git clone https://github.com/browserstack/protractor-browserstack Cloning into 'protractor-browserstack'... remote: Counting objects: 185, done. remote: Total 185 (delta 0), reused 0 (delta 0), pack-reused 185 Receiving objects: 100% (185/185), 28.39 KiB | 0 bytes/s, done. Resolving deltas: 100% (72/72), done. Checking connectivity... done.
Step 1.6: Install Dependencies
The next command is needed for downloading and installing the dependencies:
(container)# cd protractor-browserstack; npm install
> bufferutil@1.2.1 install /app/protractor-browserstack/node_modules/bufferutil > node-gyp rebuild make: Entering directory '/app/protractor-browserstack/node_modules/bufferutil/build' CXX(target) Release/obj.target/bufferutil/src/bufferutil.o SOLINK_MODULE(target) Release/obj.target/bufferutil.node COPY Release/bufferutil.node make: Leaving directory '/app/protractor-browserstack/node_modules/bufferutil/build' > utf-8-validate@1.2.2 install /app/protractor-browserstack/node_modules/utf-8-validate > node-gyp rebuild make: Entering directory '/app/protractor-browserstack/node_modules/utf-8-validate/build' CXX(target) Release/obj.target/validation/src/validation.o SOLINK_MODULE(target) Release/obj.target/validation.node COPY Release/validation.node make: Leaving directory '/app/protractor-browserstack/node_modules/utf-8-validate/build' protractor-browserstack@0.1.0 /app/protractor-browserstack +-- browserstack-local@1.3.0 | +-- https-proxy-agent@1.0.0 | | +-- agent-base@2.0.1 | | | `-- semver@5.0.3 | | +-- debug@2.6.2 | | | `-- ms@0.7.2 | | `-- extend@3.0.0 | +-- is-running@2.1.0 | +-- sinon@1.17.7 | | +-- formatio@1.1.1 | | +-- lolex@1.3.2 | | +-- samsam@1.1.2 | | `-- util@0.10.3 | `-- temp-fs@0.9.9 | `-- rimraf@2.5.4 | `-- glob@7.1.1 | +-- fs.realpath@1.0.0 | +-- inflight@1.0.6 | | `-- wrappy@1.0.2 | +-- minimatch@3.0.3 | | `-- brace-expansion@1.1.6 | | +-- balanced-match@0.4.2 | | `-- concat-map@0.0.1 | +-- once@1.4.0 | `-- path-is-absolute@1.0.1 `-- protractor@2.5.1 +-- accessibility-developer-tools@2.6.0 +-- adm-zip@0.4.4 +-- glob@3.2.11 | +-- inherits@2.0.1 | `-- minimatch@0.3.0 | +-- lru-cache@2.7.3 | `-- sigmund@1.0.1 +-- html-entities@1.1.3 +-- jasmine@2.3.2 | +-- exit@0.1.2 | +-- glob@3.2.11 | | `-- minimatch@0.3.0 | `-- jasmine-core@2.3.4 +-- jasminewd@1.1.0 +-- jasminewd2@0.0.6 +-- lodash@2.4.2 +-- minijasminenode@1.1.1 +-- optimist@0.6.1 | +-- minimist@0.0.10 | `-- wordwrap@0.0.3 +-- q@1.0.0 +-- request@2.57.0 | +-- aws-sign2@0.5.0 | +-- bl@0.9.5 | | `-- readable-stream@1.0.34 | | +-- core-util-is@1.0.2 | | +-- isarray@0.0.1 | | `-- string_decoder@0.10.31 | +-- caseless@0.10.0 | +-- combined-stream@1.0.5 | | `-- delayed-stream@1.0.0 | +-- forever-agent@0.6.1 | +-- form-data@0.2.0 | | +-- async@0.9.2 | | `-- combined-stream@0.0.7 | | `-- delayed-stream@0.0.5 | +-- har-validator@1.8.0 | | +-- bluebird@2.11.0 | | +-- chalk@1.1.3 | | | +-- ansi-styles@2.2.1 | | | +-- escape-string-regexp@1.0.5 | | | +-- has-ansi@2.0.0 | | | | `-- ansi-regex@2.1.1 | | | +-- strip-ansi@3.0.1 | | | `-- supports-color@2.0.0 | | +-- commander@2.9.0 | | | `-- graceful-readlink@1.0.1 | | `-- is-my-json-valid@2.16.0 | | +-- generate-function@2.0.0 | | +-- generate-object-property@1.2.0 | | | `-- is-property@1.0.2 | | +-- jsonpointer@4.0.1 | | `-- xtend@4.0.1 | +-- hawk@2.3.1 | | +-- boom@2.10.1 | | +-- cryptiles@2.0.5 | | +-- hoek@2.16.3 | | `-- sntp@1.0.9 | +-- http-signature@0.11.0 | | +-- asn1@0.1.11 | | +-- assert-plus@0.1.5 | | `-- ctype@0.5.3 | +-- isstream@0.1.2 | +-- json-stringify-safe@5.0.1 | +-- mime-types@2.0.14 | | `-- mime-db@1.12.0 | +-- node-uuid@1.4.7 | +-- oauth-sign@0.8.2 | +-- qs@3.1.0 | +-- stringstream@0.0.5 | +-- tough-cookie@2.3.2 | | `-- punycode@1.4.1 | `-- tunnel-agent@0.4.3 +-- saucelabs@1.0.1 +-- selenium-webdriver@2.47.0 | +-- tmp@0.0.24 | +-- ws@0.8.1 | | +-- bufferutil@1.2.1 | | | +-- bindings@1.2.1 | | | `-- nan@2.5.1 | | +-- options@0.0.6 | | +-- ultron@1.0.2 | | `-- utf-8-validate@1.2.2 | | `-- nan@2.4.0 | `-- xml2js@0.4.4 | +-- sax@0.6.1 | `-- xmlbuilder@8.2.2 `-- source-map-support@0.2.10 `-- source-map@0.1.32 `-- amdefine@1.0.1
Note: this command requires ‚make‘ to be installed. In the official Ubuntu 16.04 Docker image, this is the case. However, if it is missing in your case, you need to issue the command
apt-get install build-essential
as root or with sudo.
Step 1.7: Add BrowserStack Credentials
Now let us specify the BrowserStack credentials you can find in the „Automate“ section on your BrowserStack Account Settings page:
(container)# export BROWSERSTACK_USERNAME=your_browserstack_user_id (container)# export BROWSERSTACK_ACCESS_KEY=your_browserstack_key
Note that the environment variables differ from the the ones we had used in the Gulp examples on my previous blog post: BROWSERSTACK_USERNAME instead of BROWSERSTACK_USER and BROWSERSTACK_ACCESS_KEY instead of BROWSERSTACK_KEY
Step 1.8: Run the BrowserStack automated Test
Finally, we start the test session via npm run local:
(container)# npm run local Connecting local Connected. Now testing... Using the selenium server at http://hub-cloud.browserstack.com/wd/hub [launcher] Running 1 instances of WebDriver . Finished in 0.763 seconds 1 test, 1 assertion, 0 failures [launcher] 0 instance(s) of WebDriver still running [launcher] chrome #1 passed
With that, we have automatically tested a chrome browser using BrowserStack:
Step 1.9: Review the Results on BrowserStack Automate Logs Page
On this BrowserStack link, you can see in detail, which steps were taken during the automated test:
And here are visual logs with a screenshot:
Soon after running the first automated test via BrowserStack, I have found an Email from BrowserStack in my Email inbox with the information that they have noticed my first automated test and that I can contact them in case of any questions.
Part 2: Integration of BrowserStack into Jenkins
Step 2.1: Start and Connect to Jenkins
If you have a Jenkins Server that is up and running, you can skip this step, including the sub-steps.
Step 2.1.1: Start Jenkins in interactive Terminal Mode
Make sure that port 8080 is unused on the Docker host. If you were following all the steps in part 1 of the Jenkins blog series, you might need to stop cadvisor:
(dockerhost)$ sudo docker stop cadvisor
I assume that jenkins_home is already created, all popular plugins are installed and an Admin user has been created as shown in part 1 of the blog series. We start the Jenkins container with the jenkins_home Docker host volume mapped to /var/jenkins_home
:
(dockerhost)$ cd <path_to_jenkins_home> # in my case: cd /vagrant/jenkins_home/ (dockerhost:jenkins_home)$ sudo docker run -it --rm --name jenkins -p8080:8080 -p50000:50000 -v`pwd`:/var/jenkins_home jenkins Running from: /usr/share/jenkins/jenkins.war ... Jenkins initial setup is required. An admin user has been created and a password generated. Please use the following password to proceed to installation: 50c150e35a774cexxxxxxxxxxxxxxx This may also be found at: /var/jenkins_home/secrets/initialAdminPassword ... --> setting agent port for jnlp --> setting agent port for jnlp... done
Step 2.1.2: Open Jenkins in a Browser
Now we want to connect to the Jenkins portal. For that, open a browser and open the URL
<your_jenkins_host>:8080
In our case, Jenkins is running in a container and we have mapped the container-port 8080 to the local port 8080 of the Docker host. On the Docker host, we can open the URL.
localhost:8080
Note: In case of Vagrant with VirtualBox, per default, there is only a NAT-based interface and you need to create port-forwarding for any port you want to reach from outside (also the local machine you are working on is to be considered as outside). In this case, we need to add an entry in the port forwarding list of VirtualBox:
Note that this configuration is not permanent, unless you define the port mappings in the Vagrantfile as follows (see official Vagrant documentation):
config.vm.network "forwarded_port", guest: 8080, host: 8080
Step 2.1.3: Initialize Jenkins: Unlock Jenkins
insert the one-time password found in the log during startup or on /var/jenkins_home/secrets/initialAdminPassword
-> Continue
Step 2.1.4: Initialize Jenkins: Install Plugins
Wait for the installation process to complete.
Step 2.1.5: Initialize Jenkins: Create Admin User
Note: I recommend to log out and log in in order to test the login.
Step 2.2: Prepare Git Usage
As described in this StackOverflow Q&A, we need to add the Git username and email address, since Jenkins tries to tag and commit on the Git repo, which requires those configuration items to be set. For that, we perform:
-> scroll down to „Git plugin“
Step 2.3: Install the Jenkins Node.js Plugin
-> observe:
Step 2.4: Prepare Node.js Usage
->
->
-> Choose NodeJS, check „Install automatically“ and specify Global npm packages to install: protractor:
->
Step 2.5: Install the BrowserStack Plugin
The BrowserStack Plugin can be installed like any other Jenkins plugin:
– > observe:
Step 2.6: Prepare BrowserStack Usage
I am closely following the official documentation:
-> Add Username and Access Key as found on your BrowserStack account page:
Step 2.7: Create BrowserStack Jenkins Job
Step 2.8: Configure BrowserStack Jenkins Job
Step 2.8.1: Configure Git Download
In my case, I have forked the following project from Github: https://github.com/browserstack/protractor-browserstack
Step 2.8.2: Configure BrowserStack Build Environment
Step 2.8.3: Configure Build Step: Set Path
In addition, check the checkbox for „Provide Node & npm bin/ folder to PATH“
If you click on the , you will be informed that the BrowserStack user and password are available as environment variables.
Select the BrowserStack credentials (username, access key) to use for this project. These values will be available as BROWSERSTACK_USER and BROWSERSTACK_ACCESSKEY environment variables.
Step 2.8.4: Configure Build Step: Execute shell: npm run local
-> we add following shell script:
export BROWSERSTACK_USERNAME=$BROWSERSTACK_USER export BROWSERSTACK_ACCESS_KEY=$BROWSERSTACK_ACCESSKEY npm install npm run local
This is because the BrowserStack example expects the username and password to be provided in the variables BROWSERSTACK_USERNAME and BROWSERSTACK_ACCESS_KEY, which differs from the names the username and password are encapsulated by the Jenkins BrowserStack plugin.
We needed to add npm install to download all dependencies before we run the test with npm run local. The local script is defined in the package.json file of the project.
Now we need to save the settings:
Step 2.9: Add ‚make‘ to Jenkins Container
If this step is omitted, we would receive an error message in the next step
> node-gyp rebuildgyp ERR! build error gyp ERR! stack Error: not found: make
With the following commands, we log in as root (with user ID 0) and install the build-essential:
(dockerhost)$ docker exec -u 0 jenkins bash (container)# apt-get update (container)# apt-get install build-essential
Step 2.10: Build Project
->
The last view lines of the output show, that the test was successful:
Step 2.11: Generate a Jenkins Test Report
Step 2.11.1: Add Jasmine to the Project
For adding a Test report, we add the plugin jasmine-reporters to the repository. For that, I have forked the original BrowserStack Protractor Git repository to /protractor-browserstack. I have made following changes (in bold):
package.json
{ "name": "protractor-browserstack", "version": "0.1.0", "readme": "Protractor Integration with [BrowserStack](https://www.browserstack.com)", "description": "Selenium examples for Protractor and BrowserStack Automate", "scripts": { "test": "npm run single && npm run local && npm run parallel", "single": "./node_modules/.bin/protractor conf/single.conf.js", "local": "./node_modules/.bin/protractor conf/local.conf.js", "parallel": "./node_modules/.bin/protractor conf/parallel.conf.js", "parallel_local": "./node_modules/.bin/protractor conf/parallel_local.conf.js" }, "repository": { "type": "git", "url": "https://github.com/browserstack/protractor-browserstack" }, "dependencies": { "browserstack-local": "^1.0.0", "protractor": "^2.5.1", "jasmine-reporters": "^1.0.0" }, "license": "MIT" }
I have added a comma at the end of the protractor dependency line and I have added jasmine 1.0.0 to the dependencies. Note that the current jasmine 2.2.1 version did not generate any reports.
conf/local.conf.js
var browserstack = require('browserstack-local'); exports.config = { 'specs': [ '../specs/local.js' ], 'seleniumAddress': 'http://hub-cloud.browserstack.com/wd/hub', 'capabilities': { 'browserstack.user': process.env.BROWSERSTACK_USERNAME || 'BROWSERSTACK_USERNAME', 'browserstack.key': process.env.BROWSERSTACK_ACCESS_KEY || 'BROWSERSTACK_ACCESS_KEY', 'build': 'protractor-browserstack', 'name': 'local_test', 'browserName': 'chrome', 'browserstack.local': true, 'browserstack.debug': 'true' }, // Add Jasmine JUnit reporter onPrepare: function() { require('jasmine-reporters'); jasmine.getEnv().addReporter( new jasmine.JUnitXmlReporter('xmloutput', true, true) ); }, // Code to start browserstack local before start of test beforeLaunch: function(){ console.log("Connecting local"); return new Promise(function(resolve, reject){ exports.bs_local = new browserstack.Local(); exports.bs_local.start({'key': exports.config.capabilities['browserstack.key'] }, function(error) { if (error) return reject(error); console.log('Connected. Now testing...'); resolve(); }); }); }, // Code to stop browserstack local after end of test afterLaunch: function(){ return new Promise(function(resolve, reject){ exports.bs_local.stop(resolve); }); } };
Note, that the syntax for Jasmine2 looks different:
var jasmineReporters = require('jasmine-reporters'); jasmine.getEnv().addReporter( new jasmineReporters.JUnitXmlReporter('xmloutput', true, true) );The old syntax is throwing an error
JUnitXmlReporter is not a constructor
., if you use it with Jasmine2. With the new syntax, Jasmine2 did not throw any errors, but it also did not create any XML reports.
Step 2.11.2 (optional): Run Jenkins Job and Check XML Files
->
-> (choose the highest number)
Now the XML reports should have been created. To check this, let us connect to the Jenkins docker container:
(dockerhost)$ docker exec -it jenkins bash (container)$ cd workspace/BrowserStackJob (container)$ ls -l xmloutput total 1 -rwxrwxrwx 1 900 900 311 Mar 18 13:18 TEST-BrowserStackLocalTesting.xml
Step 2.12: Generate individual Jenkins Test report
Step 2.12.1: Specify the Jenkins Report Path
-> in the „Test report XMLs“ field, specify the path to the XML reports as defined in conf/local.conf.js (in our case: xmloutput/*.xml):
Step 2.12.2: Generate the individual Jenkins Test Report
->
Now the build report is showing a link to the Test Result:
-> click on Test Result will reveal a table, which shows, how many tests have failed (0), passed (1), total (1) and diff (+1)
For troubleshooting: the console output should show the term „Recording test results“:
Step 2.13: Generate a Test Result Trend Graph
Just rerun the „Build now“, so you have at least two or better three tests with test results. Then the Test Result Graph will show up.
Note: do not use the aggregated downstream results:
This had caused a lot of confusion, because the number of the tests is shown to be zero, as can be seen in the graph in build #19 to #23. Then I have found Phil’s answer to this Stackoverflow question, which has helped me to resolve the issue by removing the aggregation. And voila, the number of tests is correct again (build #24).
Appendix A: Error : „/bin/sh: 1: node: not found“
Symptoms: Error „node not found“
Full log:
root@6dbba34bf92c:/vagrant/protractor-browserstack# npm install
> bufferutil@1.2.1 install /vagrant/protractor-browserstack/node_modules/bufferutil
> node-gyp rebuild
/bin/sh: 1: node: not found
gyp: Call to 'node -e "require('nan')"' returned exit status 127 while in binding.gyp. while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (/usr/share/node-gyp/lib/configure.js:354:16)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 4.2.0-42-generic
gyp ERR! command "/usr/bin/nodejs" "/usr/bin/node-gyp" "rebuild"
gyp ERR! cwd /vagrant/protractor-browserstack/node_modules/bufferutil
gyp ERR! node -v v4.2.6
gyp ERR! node-gyp -v v3.0.3
gyp ERR! not ok
npm WARN install:bufferutil@1.2.1 bufferutil@1.2.1 install: `node-gyp rebuild`
npm WARN install:bufferutil@1.2.1 Exit status 1
> utf-8-validate@1.2.2 install /vagrant/protractor-browserstack/node_modules/utf-8-validate
> node-gyp rebuild
/bin/sh: 1: node: not found
gyp: Call to 'node -e "require('nan')"' returned exit status 127 while in binding.gyp. while trying to load binding.gyp
gyp ERR! configure error
gyp ERR! stack Error: `gyp` failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (/usr/share/node-gyp/lib/configure.js:354:16)
gyp ERR! stack at emitTwo (events.js:87:13)
gyp ERR! stack at ChildProcess.emit (events.js:172:7)
gyp ERR! stack at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Linux 4.2.0-42-generic
gyp ERR! command "/usr/bin/nodejs" "/usr/bin/node-gyp" "rebuild"
gyp ERR! cwd /vagrant/protractor-browserstack/node_modules/utf-8-validate
gyp ERR! node -v v4.2.6
gyp ERR! node-gyp -v v3.0.3
gyp ERR! not ok
npm WARN install:utf-8-validate@1.2.2 utf-8-validate@1.2.2 install: `node-gyp rebuild`
npm WARN install:utf-8-validate@1.2.2 Exit status 1
Resolution: make sure the Node.js „node“ is found via the PATH
In the case of Ubuntu, there is an executable node
on /usr/sbin/node
that has nothing to do with Node.js. The problem is, that Node.js is installed as nodejs
instead of node
and that many NPM commands try to execute node
. We need to make sure that the NPM installation commands will find the correct Node.js node
. One way of doing so is to link /usr/bin/node
to nodejs
in the same folder. This works, since the existing /usr/sbin
PATH is found behind the /usr/bin
PATH per default.
$ sudo ln -s nodejs /usr/bin/node
or
# ln -s nodejs /usr/bin/node
if you are root (we are root in the container above).
Then make sure that the correct node is found:
$ which node /usr/bin/node
If the other /usr/sbin/node executable is hiding /usr/bin/node, then you might need to adapt the PATH with export PATH=/usr/bin:$PATH.
After adding the symbolic link, the full log looks like follows:
root@6dbba34bf92c:/vagrant/protractor-browserstack# npm install
> bufferutil@1.2.1 install /vagrant/protractor-browserstack/node_modules/bufferutil > node-gyp rebuild make: Entering directory '/vagrant/protractor-browserstack/node_modules/bufferutil/build' CXX(target) Release/obj.target/bufferutil/src/bufferutil.o SOLINK_MODULE(target) Release/obj.target/bufferutil.node COPY Release/bufferutil.node make: Leaving directory '/vagrant/protractor-browserstack/node_modules/bufferutil/build' > utf-8-validate@1.2.2 install /vagrant/protractor-browserstack/node_modules/utf-8-validate > node-gyp rebuild make: Entering directory '/vagrant/protractor-browserstack/node_modules/utf-8-validate/build' CXX(target) Release/obj.target/validation/src/validation.o SOLINK_MODULE(target) Release/obj.target/validation.node COPY Release/validation.node make: Leaving directory '/vagrant/protractor-browserstack/node_modules/utf-8-validate/build' protractor-browserstack@0.1.0 /vagrant/protractor-browserstack `-- protractor@2.5.1 `-- selenium-webdriver@2.47.0 `-- ws@0.8.1 +-- bufferutil@1.2.1 | +-- bindings@1.2.1 | `-- nan@2.5.1 `-- utf-8-validate@1.2.2 `-- nan@2.4.0
Appendix B: Solve Git Problem: „tell me who you are“
Symptoms: Git Error: status code 128
In a new installation of Jenkins, Git does not seem to work out of the box. You can see this by choosing the Jenkins project Job-DSL-Hello-World-Job on the dashboard, then click „build now“, if the build was not already automatically triggered. Then:
-> Build History
-> Last Build (link works only, if Jenkins is running on localhost:8080 and you have chosen the same job name)
There, we will see:
Caused by: hudson.plugins.git.GitException: Command "git tag -a -f -m Jenkins Build #1 jenkins-Job-DSL-Hello-World-Job-1" returned status code 128: stdout: stderr: *** Please tell me who you are. Run git config --global user.email "you@example.com" git config --global user.name "Your Name" to set your account's default identity. Omit --global to set the identity only in this repository. fatal: empty ident name (for <jenkins@61915398735e.(none)>) not allowed
Resolution:
Step 1: Enter Git Username and Email
As described in this StackOverflow Q&A: we can resolve this issue by either suppressing the git tagging or (I think this is better) by adding your username and email address to git:
-> scroll down to „Git plugin“
Step 2: Re-run „Build Now“ on the Project
To test the new configuration, we go to
-> the Job-DSL-Hello-World-Job and press
Now, we should see a BUILD SUCCESS like follows:
-> Build History
-> #nnn
If everything went fine, we will a „BUILD SUCCESS“:
Appendix C: NPM Error: „Auth Token must be alphanumeric characters only“
Symptoms
After cloning the protractor-browserstack and successfully installing the dependencies, the following command fails with a cryptic message
/vagrant/protractor-browserstack/node_modules/q/q.js:126 throw e;
But reading further, there is a meaningful error message like follows:
LocalError: Auth Token must be alphanumeric characters only. Please fetch it from Local Testing section of settings page: https://www.browserstack.com/accounts/settings
The full log looks like follows:
# npm run local
> protractor-browserstack@0.1.0 local /vagrant/protractor-browserstack > protractor conf/local.conf.js Connecting local /vagrant/protractor-browserstack/node_modules/q/q.js:126 throw e; ^ LocalError: Auth Token must be alphanumeric characters only. Please fetch it from Local Testing section of settings page: https://www.browserstack.com/accounts/settings at /vagrant/protractor-browserstack/node_modules/browserstack-local/lib/Local.js:57:20 at ChildProcess.exithandler (child_process.js:204:7) at emitTwo (events.js:87:13) at ChildProcess.emit (events.js:172:7) at maybeClose (internal/child_process.js:821:16) at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5) npm ERR! Linux 4.2.0-42-generic npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "run" "local" npm ERR! node v4.2.6 npm ERR! npm v3.5.2 npm ERR! code ELIFECYCLE npm ERR! protractor-browserstack@0.1.0 local: `protractor conf/local.conf.js` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the protractor-browserstack@0.1.0 local script 'protractor conf/local.conf.js'. npm ERR! Make sure you have the latest version of node.js and npm installed. npm ERR! If you do, this is most likely a problem with the protractor-browserstack package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! protractor conf/local.conf.js npm ERR! You can get information on how to open an issue for this project with: npm ERR! npm bugs protractor-browserstack npm ERR! Or if that isn't available, you can get their info via: npm ERR! npm owner ls protractor-browserstack npm ERR! There is likely additional logging output above. npm ERR! Linux 4.2.0-42-generic npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "run" "local" npm ERR! node v4.2.6 npm ERR! npm v3.5.2 npm ERR! path npm-debug.log.705992348 npm ERR! code ETXTBSY npm ERR! errno -26 npm ERR! syscall rename npm ERR! ETXTBSY: text file is busy, rename 'npm-debug.log.705992348' -> 'npm-debug.log' npm ERR! npm ERR! If you need help, you may report this error at: npm ERR! <https://github.com/npm/npm/issues> npm ERR! Please include the following file with any support request: npm ERR! /vagrant/protractor-browserstack/npm-debug.log
Resolution: Specify BrowserStack Username and Password in the correct environment variables
The error indicates that the BrowserStack User and/or Password is not set correctly. I had hit that problem since I was testing another example with Gulp on the same system and the BrowserStack User and Password variables looked similar but were not exactly the same.
To resolve the issue, let us specify the BrowserStack credentials you can find in the „Automate“ section on your BrowserStack Account Settings page:
(container)# export BROWSERSTACK_USERNAME=your_browserstack_user_id (container)# export BROWSERSTACK_ACCESS_KEY=your_browserstack_key
After that, the full log looks like follows:
# npm run local
> protractor-browserstack@0.1.0 local /vagrant/protractor-browserstack > protractor conf/local.conf.js Connecting local Connected. Now testing... Using the selenium server at http://hub-cloud.browserstack.com/wd/hub [launcher] Running 1 instances of WebDriver . Finished in 0.925 seconds 1 test, 1 assertion, 0 failures [launcher] 0 instance(s) of WebDriver still running [launcher] chrome #1 passed
Appendix D: NPM Error: TypeError: jasmine.JUnitXmlReporter is not a constructor
Symptoms
This error was created with the Protractor Github example from BrowserStack with Jasmine 2.2.1 and Jasmine 1.x.x syntax (see below). This creates an „Error: TypeError: jasmine.JUnitXmlReporter is not a constructor“.
In package.json, jasmine 2.2.1 is defined as a dependency:
package.json
{ "name": "protractor-browserstack", "version": "0.1.0", "readme": "Protractor Integration with [BrowserStack](https://www.browserstack.com)", "description": "Selenium examples for Protractor and BrowserStack Automate", "scripts": { "test": "npm run single && npm run local && npm run parallel", "single": "./node_modules/.bin/protractor conf/single.conf.js", "local": "./node_modules/.bin/protractor conf/local.conf.js", "parallel": "./node_modules/.bin/protractor conf/parallel.conf.js", "parallel_local": "./node_modules/.bin/protractor conf/parallel_local.conf.js" }, "repository": { "type": "git", "url": "https://github.com/browserstack/protractor-browserstack" }, "dependencies": { "browserstack-local": "^1.0.0", "protractor": "^2.5.1", "jasmine-reporters": "^2.2.1" }, "license": "MIT" }
In conf/local.conf.js, I erroneously had used the Jasmine 1.x.x style syntax:
conf/local.conf.js
var browserstack = require('browserstack-local'); exports.config = { 'specs': [ '../specs/local.js' ], 'seleniumAddress': 'http://hub-cloud.browserstack.com/wd/hub', 'capabilities': { 'browserstack.user': process.env.BROWSERSTACK_USERNAME || 'BROWSERSTACK_USERNAME', 'browserstack.key': process.env.BROWSERSTACK_ACCESS_KEY || 'BROWSERSTACK_ACCESS_KEY', 'build': 'protractor-browserstack', 'name': 'local_test', 'browserName': 'chrome', 'browserstack.local': true, 'browserstack.debug': 'true' }, // Add Jasmine JUnit reporter onPrepare: function() { require('jasmine-reporters'); jasmine.getEnv().addReporter( new jasmine.JUnitXmlReporter('xmloutput', true, true) ); }, // Code to start browserstack local before start of test beforeLaunch: function(){ console.log("Connecting local"); return new Promise(function(resolve, reject){ exports.bs_local = new browserstack.Local(); exports.bs_local.start({'key': exports.config.capabilities['browserstack.key'] }, function(error) { if (error) return reject(error); console.log('Connected. Now testing...'); resolve(); }); }); }, // Code to stop browserstack local after end of test afterLaunch: function(){ return new Promise(function(resolve, reject){ exports.bs_local.stop(resolve); }); } };
Note, that the syntax for Jasmine2 looks different:
var jasmineReporters = require('jasmine-reporters'); jasmine.getEnv().addReporter( new jasmineReporters.JUnitXmlReporter('xmloutput', true, true) );The old syntax is throwing an error
JUnitXmlReporter is not a constructor
., if you use it with Jasmine2. With the new syntax, Jasmine2 did not throw any errors, but it also did not create any XML reports.
This creates the above error. See the full Jenkins log:
Started by user Jenkins Admin Building in workspace /var/jenkins_home/workspace/BrowserStackJob > git rev-parse --is-inside-work-tree # timeout=10 Fetching changes from the remote Git repository > git config remote.origin.url https://github.com/oveits/protractor-browserstack # timeout=10 Fetching upstream changes from https://github.com/oveits/protractor-browserstack > git --version # timeout=10 > git fetch --tags --progress https://github.com/oveits/protractor-browserstack +refs/heads/*:refs/remotes/origin/* > git rev-parse refs/remotes/origin/master^{commit} # timeout=10 > git rev-parse refs/remotes/origin/origin/master^{commit} # timeout=10 Checking out Revision aad0d2c559ba55885c28316776f2053e590b1393 (refs/remotes/origin/master) > git config core.sparsecheckout # timeout=10 > git checkout -f aad0d2c559ba55885c28316776f2053e590b1393 > git rev-list 41afcec2b4b430129f4d83a03837c215c942912e # timeout=10 [BrowserStack] Local: Starting BrowserStack Local... [BrowserStack] Local: Started [BrowserStack] BROWSERSTACK_USER=oliverveits1 [BrowserStack] BROWSERSTACK_ACCESSKEY=******************** [BrowserStack] BROWSERSTACK_LOCAL=true [BrowserStack] BROWSERSTACK_LOCAL_IDENTIFIER=bc7f6106f7f4421e843cd7dca7c039c1 [BrowserStack] BROWSERSTACK_BUILD=jenkins-BrowserStackJob-14 [BrowserStack] BROWSERSTACK_USER=oliverveits1 [BrowserStack] BROWSERSTACK_ACCESSKEY=******************** [BrowserStack] BROWSERSTACK_LOCAL=true [BrowserStack] BROWSERSTACK_LOCAL_IDENTIFIER=bc7f6106f7f4421e843cd7dca7c039c1 [BrowserStack] BROWSERSTACK_BUILD=jenkins-BrowserStackJob-14 [BrowserStackJob] $ /bin/sh -xe /tmp/hudson3133472361627303547.sh + export BROWSERSTACK_USERNAME=<removed manually> + export BROWSERSTACK_ACCESS_KEY=<removed manually> + npm install protractor-browserstack@0.1.0 /var/jenkins_home/workspace/BrowserStackJob ??? jasmine-reporters@2.2.1 ??? xmldom@0.1.27 + npm run local > protractor-browserstack@0.1.0 local /var/jenkins_home/workspace/BrowserStackJob > protractor conf/local.conf.js Connecting local Connected. Now testing... Using the selenium server at http://hub-cloud.browserstack.com/wd/hub [launcher] Running 1 instances of WebDriver [launcher] Error: TypeError: jasmine.JUnitXmlReporter is not a constructor at onPrepare (/var/jenkins_home/workspace/BrowserStackJob/conf/local.conf.js:25:7) at /var/jenkins_home/workspace/BrowserStackJob/node_modules/protractor/lib/util.js:56:41 at Function.promise (/var/jenkins_home/workspace/BrowserStackJob/node_modules/q/q.js:650:9) at Object.exports.runFilenameOrFn_ (/var/jenkins_home/workspace/BrowserStackJob/node_modules/protractor/lib/util.js:46:12) at Runner.runTestPreparer (/var/jenkins_home/workspace/BrowserStackJob/node_modules/protractor/lib/runner.js:76:17) at Object.exports.run (/var/jenkins_home/workspace/BrowserStackJob/node_modules/protractor/lib/frameworks/jasmine.js:68:17) at /var/jenkins_home/workspace/BrowserStackJob/node_modules/protractor/lib/runner.js:333:35 at _fulfilled (/var/jenkins_home/workspace/BrowserStackJob/node_modules/q/q.js:797:54) at self.promiseDispatch.done (/var/jenkins_home/workspace/BrowserStackJob/node_modules/q/q.js:826:30) at Promise.promise.promiseDispatch (/var/jenkins_home/workspace/BrowserStackJob/node_modules/q/q.js:759:13) [launcher] Process exited with error code 100 npm ERR! Linux 4.2.0-42-generic npm ERR! argv "/var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/NodeJS_7.7.1/bin/node" "/var/jenkins_home/tools/jenkins.plugins.nodejs.tools.NodeJSInstallation/NodeJS_7.7.1/bin/npm" "run" "local" npm ERR! node v7.7.1 npm ERR! npm v4.1.2 npm ERR! code ELIFECYCLE npm ERR! protractor-browserstack@0.1.0 local: `protractor conf/local.conf.js` npm ERR! Exit status 100 npm ERR! npm ERR! Failed at the protractor-browserstack@0.1.0 local script 'protractor conf/local.conf.js'. npm ERR! Make sure you have the latest version of node.js and npm installed. npm ERR! If you do, this is most likely a problem with the protractor-browserstack package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! protractor conf/local.conf.js npm ERR! You can get information on how to open an issue for this project with: npm ERR! npm bugs protractor-browserstack npm ERR! Or if that isn't available, you can get their info via: npm ERR! npm owner ls protractor-browserstack npm ERR! There is likely additional logging output above. npm ERR! Please include the following file with any support request: npm ERR! /var/jenkins_home/workspace/BrowserStackJob/npm-debug.log Build step 'Execute shell' marked build as failure [BrowserStack] Local: Stopping BrowserStack Local... [BrowserStack] Local: Stopped Finished: FAILURE
Resolution
Either change the Jasmine version in package.json to 1.0.0 or change the syntax in conf/local.conf.js to something similar to:
var jasmineReporters = require('jasmine-reporters'); jasmine.getEnv().addReporter( new jasmineReporters.JUnitXmlReporter('xmloutput', true, true) );
See e.g. the accepted answer of this StackOverflow question.
However, version 2.x.x did not create any XML reports in my case. This seems to be a known incompatibility with Protractor. Therefore, if you are using Protractor, I recommend to change the Jasmine version to 1.0.0 and keep the syntax in conf/local.conf.js in the version 1 syntax.
Appendix E: Jenkins Test Trend showing no Tests
Symptoms
The Jenkins Test Trend shows zero tests, even though the XML reports are present in the Workspace. Here in builds #19 to #23:
Resolution
Remove the aggregated downstream results under your project > configure:
See also Phil’s answer to this StackOverflow question, which has helped me to resolve the issue by removing the aggregation. And voila, the number of tests is correct again (build #24).
Appendix F: Updating Jenkins
Updating Jenkins (in my case: from 2.32.1 to 2.32.2) was as simple as following the steps below
Note: you might want to make a backup of your jenkins_home though. Just in case…
(dockerhost)$ cd <path_to_jenkins_home> # in my case: cd /vagrant/jenkins_home/ (dockerhost)$ docker pull jenkins # to update the jenkins image (dockerhost)$ docker rm jenkins # to make shure the container named jenkins is removed (dockerhost:jenkins_home)$ sudo docker run -d --rm --name jenkins -p8080:8080 -p50000:50000 -v`pwd`:/var/jenkins_home jenkins
However, after that, some data was unreadable:
I have clicked
-> Manage Jenkins
-> Manage
->
to resolve the issue (hopefully…). At least, after that, the warning was gone.
Summary
In this blog post, we
- got acquainted with BrowserStack
- performed manual tests
- learned about BrowserStack local testing that allows running remote browsers, but show the content of websites that are available locally only
- ran BrowserStack tests from the command line
- installed Node.js and NPM and Git
- cloned a Protractor example with BrowserStack
- performed automated tests from the command line
- integrated BrowserStack into Jenkins
- installed a Docker host and a Jenkins Docker Container
- installed the BrowserStack Plugin, Node.js, NPM and Protractor on Jenkins
- performed the NPM installation on the shell script
- performed the automated tests as part of the Jenkins pipeline
- installed Jasmine to make sure that individual and trend test reports are shown
- In the end, I have recorded several error situations and their resolutions as appendices
We have seen that BrowserStack can help to perform tests with many different browsers on many different operating systems and hardware without the need to buy and install any mobile equipment.
Thanks for sharing. I read many of your blog posts, cool, your blog is very good.
Can you be more specific about the content of your article? After reading it, I still have some doubts. Hope you can help me.