Skip to content

Latest commit

 

History

History
202 lines (142 loc) · 5.95 KB

README.md

File metadata and controls

202 lines (142 loc) · 5.95 KB

flashlight-build Travis CI Status Coverage Status

flashlight-build is a gost project that provides repeatable builds and consolidated pull requests for flashlight (now lantern). It's very important to read the gost documentation thoroughly in order to build this project.

Building Flashlight

Requisites

We are going to create a Docker image that will take care of compiling Lantern for Windows and Linux, in order to compile Lantern for OSX you'll need an OSX host, this is a limitation caused by Lantern depending on C code and OSX build tools for certain features.

Building the docker image

In order to build the docker image open a terminal, cd into the flashlight-build project and execute make docker:

cd $FLASHLIGHT_BUILD
make docker

This will take a while, be patient, you only need to do this once.

Building Lantern binaries

Building for Linux

If you want to build for Linux on all supported architectures, use:

make linux

You can also build for Linux 386:

make linux-386
file lantern_linux_386
# lantern_linux_386: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

Or only for amd64:

make linux-amd64
file lantern_linux_amd64
# lantern_linux_amd64: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), not stripped

Building for Windows

Lantern supports the 386 architecture on Windows. In order to build Lantern on Windows use:

make windows
file lantern_windows_386.exe
# lantern_windows_386.exe: PE32 executable for MS Windows (GUI) Intel 80386 32-bit

Building for OSX

Lantern supports the amd64 architecture on OSX. In order to build Lantern on OSX you'll need an OSX host. Run the following command:

make darwin
file lantern_darwin_amd64
# lantern_darwin_amd64: Mach-O 64-bit executable x86_64

Building all binaries

If you want to build all supported binaries of Lantern you may use this shortcut:

make binaries

Packaging

Packaging requires some special environemnt variables.

OSX

Lantern on OS X is packaged as the Lantern.app app bundle, distributed inside of a drag-and-drop dmg installer. The app bundle and dmg can be created using:

VERSION=2.0.0-beta2 make package-darwin
file Lantern.dmg
# Lantern.dmg: bzip2 compressed data, block size = 100k

make package-darwin signs the Lantern.app using the BNS code signing certificate in your KeyChain. The certificate and password can be obtained from too-many-secrets.

If signing fails, the script will still build the app bundle and dmg, but the app bundle won't be signed. Unsigned app bundles can be used for testing but should never be distributed to end users.

The background image for the DMG is installer-resources/darwin/dmgbackground.svg.

Packaging for Windows

Lantern on Windows is distributed as an installer built with nsis. The installer is built and signed with make package-windows.

For make package-windows to be able to sign the executable, the environment varaibles SECRETS_DIR and BNS_CERT_PASS must be set to point to the secrets directory and the password of the BNS certificate. You can set the environment variables and run the script on one line, like this:

SECRETS_DIR=$PATH_TO_TOO_MANY_SECRETS BNS_CERT_PASS='***' \
VERSION=2.0.0-beta1 make package-windows

Packaging for Ubuntu

Lantern on Ubuntu is distributed as a .deb package. You can generate a Debian package with:

VERSION=2.0.0-beta2 make package-linux

The version string must match the Debian requirements:

https://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Version

This will build both 386 and amd64 packages.

Generating all packages

SECRETS_DIR=$PATH_TO_TOO_MANY_SECRETS BNS_CERT_PASS='***' \
VERSION=2.0.0-beta1 make packages

Other tasks

Generating assets

make genassets

If the environemnt variable UPDATE_DIST=true is set, make genassets also updates the resources in the dist folder.

An annotated tag can be added like this:

git tag -a v1.0.0 -m"Tagged 1.0.0"
git push --tags

The script tagandbuild.bash tags and runs crosscompile.bash.

./tagandbuild.bash <tag>

Note - ./crosscompile.bash omits debug symbols to keep the build smaller.

Note - tagandbuild.bash requires the BNS_CERT and BNS_CERT_PASS environment variables to sign the windows executable. See Packaging for Windows below.

Updating Icons

The icons used for the system tray are stored in src/github/getlantern/flashlight/icons. To apply changes to the icons, make your updates in the icons folder and then run ./updateicons.bash.

Continuous Integration with Travis CI

Continuous builds are run on Travis CI. These builds use the .travis.yml configuration. The github.com/getlantern/cf unit tests require an envvars.bash to be populated with credentials for cloudflare. The original envvars.bash is available here. An encrypted version is checked in as envvars.bash.enc, which was encrypted per the instructions here.