From 0b02fc56fc20cf7d90dfc5a04d1d8f9381638a5b Mon Sep 17 00:00:00 2001 From: siddontang Date: Sat, 23 Jul 2016 18:45:50 +0800 Subject: [PATCH 1/7] op-guide: add build manual. --- op-guide/build.md | 100 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 op-guide/build.md diff --git a/op-guide/build.md b/op-guide/build.md new file mode 100644 index 0000000000000..3a0c76173e8df --- /dev/null +++ b/op-guide/build.md @@ -0,0 +1,100 @@ +# Build + +## Supported platforms + +The following table lists TiDB support for common architectures and operations. + +|Architecture|Operating System|Status| +|------------|----------------|------| +|amd64|Linux Ubuntu (14.04+)|Stable| +|amd64|Linux CentOS (7+)|Stable| +|amd64|Mac OSX|Experimental| + +## Prerequisites + ++ Go [1.5+](https://golang.org/doc/install) ++ Rust [nightly version](https://www.rust-lang.org/downloads.html) ++ GCC 4.8+ ++ Git 1.8+ + +## Build TiDB project + +``` +# Create a root path for building and installing TiDB. +mkdir -p /Users/tidb +export TIDB_PATH=/Users/tidb +# All the binary executions are installed in `bin` directory. +mkdir -p $TIDB_PATH/bin +``` + +### Build TiDB + +```bash +# go is required +go version +# go version go1.6 darwin/amd64 + +# GOPATH should be set correctly. +export GOPATH=$TIDB_PATH/go + +git clone https://github.com/pingcap/tidb.git $GOPATH/src/github.com/pingcap/tidb +cd $GOPATH/src/github.com/pingcap/tidb + +make server +cp -f ./tidb-server/tidb-server $TIDB_PATH/bin +cd $TIDB_PATH +``` + +### Build PD + +```bash +export GOPATH=$TIDB_PATH/go + +git clone https://github.com/pingcap/pd.git $GOPATH/src/github.com/pingcap/pd +cd $GOPATH/src/github.com/pingcap/pd + +make build +cp -f ./bin/pd-server $TIDB_PATH/bin +cd $TIDB_PATH +``` + +### Build TiKV + +```bash +# rust nightly is required +rustc -V +# rustc 1.12.0-nightly (7ad125c4e 2016-07-11) + +git clone https://github.com/pingcap/tikv.git $TIDB_PATH/tikv +cd $TIDB_PATH/tikv + +ROCKSDB_SYS_STATIC=1 make release +cp -f ./target/release/tikv-server $TIDB_PATH/bin +cd $TIDB_PATH +``` + +## Build Portable TiDB project + +You can copy the binary executions to other machines and run it directly, but `tikv-server` may fail to start, you may meet following conditions: + ++ Missing `stdc++` library. You can install g++ in your machine or link static c++ library directly when building TiKV, for example: + + ```bash + ROCKSDB_SYS_STATIC=1 ROCKSDB_OTHER_STATIC=stdc++ ROCKSDB_OTHER_STATIC_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.8/ make release + ``` + + If you want to link static c++ directly, you must explicitly set c++ library path. + ++ Panic because of different platform. Building RocksDB is optimized for native platform you're compiling by default, but if you want to use this in another different platform, you must explicitly set portable, for example: + + ```bash + ROCKSDB_SYS_STATIC=1 ROCKSDB_SYS_PORTABLE=1 make release + ``` + +If you want to run `tikv-server` in different platforms and don't want to install g++, you can do + +```bash +ROCKSDB_SYS_STATIC=1 ROCKSDB_OTHER_STATIC=stdc++ ROCKSDB_OTHER_STATIC_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.8/ make release +``` + + From 350b987cf85c766b88e7cc9a192ffafa0c0fc164 Mon Sep 17 00:00:00 2001 From: siddontang Date: Sun, 24 Jul 2016 23:08:10 +0800 Subject: [PATCH 2/7] op-guild: add install requirement. --- op-guide/build.md | 55 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 50 insertions(+), 5 deletions(-) diff --git a/op-guide/build.md b/op-guide/build.md index 3a0c76173e8df..992ffb507ad78 100644 --- a/op-guide/build.md +++ b/op-guide/build.md @@ -2,7 +2,7 @@ ## Supported platforms -The following table lists TiDB support for common architectures and operations. +The following table lists TiDB support for common architectures and operating systems. |Architecture|Operating System|Status| |------------|----------------|------| @@ -14,8 +14,53 @@ The following table lists TiDB support for common architectures and operations. + Go [1.5+](https://golang.org/doc/install) + Rust [nightly version](https://www.rust-lang.org/downloads.html) -+ GCC 4.8+ -+ Git 1.8+ ++ GCC 4.8+ with static library + +### Install GO + +#### Linux + +```bash +curl -L https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz -o golang.tar.gz +tar -C /usr/local -xzf golang.tar.gz +``` + +#### Mac OS X + +```bash +curl -L https://storage.googleapis.com/golang/go1.6.3.darwin-amd64.tar.gz -o golang.tar.gz +tar -C /usr/local -xzf golang.tar.gz +``` + +### Install Rust + +```bash +curl -sSf https://static.rust-lang.org/rustup.sh | sh -s -- --channel=nightly +``` + +### Install GCC + +#### Linux Ubuntu + +```bash +apt-get update +apt-get install -y gcc g++ +``` + +#### Linux CentOS + +```bash +yum install -y gcc-c++ glibc-static libstdc++-static +``` + +#### Mac OS X + +```bash +xcode-select --install +brew update +brew tap homebrew/versions +brew install gcc48 --use-llvm +``` ## Build TiDB project @@ -23,7 +68,7 @@ The following table lists TiDB support for common architectures and operations. # Create a root path for building and installing TiDB. mkdir -p /Users/tidb export TIDB_PATH=/Users/tidb -# All the binary executions are installed in `bin` directory. +# All the binaries are installed in the `bin` directory. mkdir -p $TIDB_PATH/bin ``` @@ -75,7 +120,7 @@ cd $TIDB_PATH ## Build Portable TiDB project -You can copy the binary executions to other machines and run it directly, but `tikv-server` may fail to start, you may meet following conditions: +You can copy the binary executions to other machines and run them directly, but `tikv-server` may fail to start, you may meet following conditions: + Missing `stdc++` library. You can install g++ in your machine or link static c++ library directly when building TiKV, for example: From 56cdc1a28293fbc9b7c55362dcde2db8fb68b487 Mon Sep 17 00:00:00 2001 From: siddontang Date: Mon, 25 Jul 2016 17:27:38 +0800 Subject: [PATCH 3/7] *: update build. --- op-guide/build.md | 107 +++++--------------------------- scripts/check_requirement.sh | 117 +++++++++++++++++++++++++++++++++++ 2 files changed, 131 insertions(+), 93 deletions(-) create mode 100644 scripts/check_requirement.sh diff --git a/op-guide/build.md b/op-guide/build.md index 992ffb507ad78..db672b18200c7 100644 --- a/op-guide/build.md +++ b/op-guide/build.md @@ -6,9 +6,9 @@ The following table lists TiDB support for common architectures and operating sy |Architecture|Operating System|Status| |------------|----------------|------| -|amd64|Linux Ubuntu (14.04+)|Stable| -|amd64|Linux CentOS (7+)|Stable| -|amd64|Mac OSX|Experimental| +|AMD64|Linux Ubuntu (14.04+)|Stable| +|AMD64|Linux CentOS (7+)|Stable| +|AMD64|Mac OSX|Experimental| ## Prerequisites @@ -16,51 +16,8 @@ The following table lists TiDB support for common architectures and operating sy + Rust [nightly version](https://www.rust-lang.org/downloads.html) + GCC 4.8+ with static library -### Install GO - -#### Linux - -```bash -curl -L https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz -o golang.tar.gz -tar -C /usr/local -xzf golang.tar.gz -``` - -#### Mac OS X - -```bash -curl -L https://storage.googleapis.com/golang/go1.6.3.darwin-amd64.tar.gz -o golang.tar.gz -tar -C /usr/local -xzf golang.tar.gz -``` - -### Install Rust - -```bash -curl -sSf https://static.rust-lang.org/rustup.sh | sh -s -- --channel=nightly -``` - -### Install GCC - -#### Linux Ubuntu - -```bash -apt-get update -apt-get install -y gcc g++ -``` - -#### Linux CentOS - -```bash -yum install -y gcc-c++ glibc-static libstdc++-static -``` - -#### Mac OS X - -```bash -xcode-select --install -brew update -brew tap homebrew/versions -brew install gcc48 --use-llvm -``` +The [check requirement script](../scripts/check_requirement.sh) can help you check prerequisites and +install the missing automatically. ## Build TiDB project @@ -70,76 +27,40 @@ mkdir -p /Users/tidb export TIDB_PATH=/Users/tidb # All the binaries are installed in the `bin` directory. mkdir -p $TIDB_PATH/bin -``` - -### Build TiDB -```bash # go is required go version # go version go1.6 darwin/amd64 +# rust nightly is required +rustc -V +# rustc 1.12.0-nightly (7ad125c4e 2016-07-11) + # GOPATH should be set correctly. export GOPATH=$TIDB_PATH/go +# build TiDB git clone https://github.com/pingcap/tidb.git $GOPATH/src/github.com/pingcap/tidb cd $GOPATH/src/github.com/pingcap/tidb make server cp -f ./tidb-server/tidb-server $TIDB_PATH/bin cd $TIDB_PATH -``` - -### Build PD - -```bash -export GOPATH=$TIDB_PATH/go +# build PD git clone https://github.com/pingcap/pd.git $GOPATH/src/github.com/pingcap/pd cd $GOPATH/src/github.com/pingcap/pd make build cp -f ./bin/pd-server $TIDB_PATH/bin cd $TIDB_PATH -``` - -### Build TiKV - -```bash -# rust nightly is required -rustc -V -# rustc 1.12.0-nightly (7ad125c4e 2016-07-11) +# build TiKV git clone https://github.com/pingcap/tikv.git $TIDB_PATH/tikv cd $TIDB_PATH/tikv ROCKSDB_SYS_STATIC=1 make release + cp -f ./target/release/tikv-server $TIDB_PATH/bin cd $TIDB_PATH -``` - -## Build Portable TiDB project - -You can copy the binary executions to other machines and run them directly, but `tikv-server` may fail to start, you may meet following conditions: - -+ Missing `stdc++` library. You can install g++ in your machine or link static c++ library directly when building TiKV, for example: - - ```bash - ROCKSDB_SYS_STATIC=1 ROCKSDB_OTHER_STATIC=stdc++ ROCKSDB_OTHER_STATIC_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.8/ make release - ``` - - If you want to link static c++ directly, you must explicitly set c++ library path. - -+ Panic because of different platform. Building RocksDB is optimized for native platform you're compiling by default, but if you want to use this in another different platform, you must explicitly set portable, for example: - - ```bash - ROCKSDB_SYS_STATIC=1 ROCKSDB_SYS_PORTABLE=1 make release - ``` - -If you want to run `tikv-server` in different platforms and don't want to install g++, you can do - -```bash -ROCKSDB_SYS_STATIC=1 ROCKSDB_OTHER_STATIC=stdc++ ROCKSDB_OTHER_STATIC_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.8/ make release -``` - - +``` \ No newline at end of file diff --git a/scripts/check_requirement.sh b/scripts/check_requirement.sh new file mode 100644 index 0000000000000..cfe06eba93f30 --- /dev/null +++ b/scripts/check_requirement.sh @@ -0,0 +1,117 @@ +#!/bin/bash + +set -e + +echo "Checking requirements..." + +SUDO= +if which sudo &>/dev/null; then + SUDO=sudo +fi + +function get_linux_platform { + if [ -f /etc/redhat-release ]; then + # For CentOS or redhat, we treat all as CentOS. + echo "CentOS" + elif [ -f /etc/lsb-release ]; then + DIST=`cat /etc/lsb-release | grep '^DISTRIB_ID' | awk -F= '{ print $2 }'` + echo "$DIST" + else + echo "Unknown" + fi +} + +function install_go { + echo "Intall go ..." + case "$OSTYPE" in + linux*) + curl -L https://storage.googleapis.com/golang/go1.6.3.linux-amd64.tar.gz -o golang.tar.gz + ${SUDO} tar -C /usr/local -xzf golang.tar.gz + rm golang.tar.gz + ;; + + darwin*) + curl -L https://storage.googleapis.com/golang/go1.6.3.darwin-amd64.tar.gz -o golang.tar.gz + ${SUDO} tar -C /usr/local -xzf golang.tar.gz + rm golang.tar.gz + ;; + + *) + echo "unsupported $OSTYPE" + exit 1 + ;; + esac +} + +function install_gpp { + echo "Install g++ ..." + case "$OSTYPE" in + linux*) + dist=$(get_linux_platform) + case $dist in + Ubuntu) + ${SUDO} apt-get install -y g++ + ;; + CentOS) + ${SUDO} yum install -y gcc-c++ libstdc++-static + ;; + *) + echo "unsupported platform $dist, you may install g++ manually" + exit 1 + ;; + esac + ;; + + darwin*) + # refer to https://github.com/facebook/rocksdb/blob/master/INSTALL.md + xcode-select --install + brew update + brew tap homebrew/versions + brew install gcc48 --use-llvm + ;; + + *) + echo "unsupported $OSTYPE" + exit 1 + ;; + esac +} + +# Check rust +if which cargo &>/dev/null; then + if ! cargo --version | grep nightly &>/dev/null; then + echo "Please upgrade Rust to nightly." + exit 1 + fi +else + echo "Install Rust ..." + ${SUDO} curl -sSf https://static.rust-lang.org/rustup.sh | sh -s -- --channel=nightly +fi + +# Check go +if which go &>/dev/null; then + # requires go >= 1.5 + GO_VER_1=`go version | awk 'match($0, /([0-9])+(\.[0-9])+/) { ver = substr($0, RSTART, RLENGTH); split(ver, n, "."); print n[1];}'` + GO_VER_2=`go version | awk 'match($0, /([0-9])+(\.[0-9])+/) { ver = substr($0, RSTART, RLENGTH); split(ver, n, "."); print n[2];}'` + if [[ (($GO_VER_1 -eq 1 && $GO_VER_2 -lt 5)) || (($GO_VER_1 -lt 1)) ]]; then + echo "Please upgrade Go to 1.5 or later." + exit 1 + fi +else + install_go +fi + +# Check g++ +if which g++ &>/dev/null; then + # Check g++ version, RocksDB requires >= 4.7 + G_VER_1=`g++ -dumpversion | awk '{split($0, n, "."); print n[1];}'` + G_VER_2=`g++ -dumpversion | awk '{split($0, n, "."); print n[2];}'` + if [[ (($G_VER_1 -eq 4 && $G_VER_2 -lt 7)) || (($G_VER_1 -lt 4)) ]]; then + echo "Please upgrade g++ to 4.7 or later." + exit 1 + fi +else + install_gpp +fi + +echo OK \ No newline at end of file From 84f203b6b282e6c6296f1e3bafa54d68bb5effc8 Mon Sep 17 00:00:00 2001 From: siddontang Date: Mon, 25 Jul 2016 17:35:40 +0800 Subject: [PATCH 4/7] op-guide: Address comment --- op-guide/build.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/op-guide/build.md b/op-guide/build.md index db672b18200c7..5a742e91c3793 100644 --- a/op-guide/build.md +++ b/op-guide/build.md @@ -28,6 +28,9 @@ export TIDB_PATH=/Users/tidb # All the binaries are installed in the `bin` directory. mkdir -p $TIDB_PATH/bin +# Assume we install go in /usr/local/go +export PATH=$PATH:/usr/local/go/bin + # go is required go version # go version go1.6 darwin/amd64 @@ -53,6 +56,7 @@ cd $GOPATH/src/github.com/pingcap/pd make build cp -f ./bin/pd-server $TIDB_PATH/bin +cp -rf ./templates $TIDB_PATH/bin/templates cd $TIDB_PATH # build TiKV From d3092c8fdd4c18e92a555f601113268240b6bf12 Mon Sep 17 00:00:00 2001 From: siddontang Date: Tue, 26 Jul 2016 15:19:15 +0800 Subject: [PATCH 5/7] *: Address comment. --- op-guide/build.md | 51 ++---------------------------- scripts/build.sh | 61 ++++++++++++++++++++++++++++++++++++ scripts/check_requirement.sh | 0 3 files changed, 64 insertions(+), 48 deletions(-) create mode 100755 scripts/build.sh mode change 100644 => 100755 scripts/check_requirement.sh diff --git a/op-guide/build.md b/op-guide/build.md index 5a742e91c3793..fa410ef332ed7 100644 --- a/op-guide/build.md +++ b/op-guide/build.md @@ -17,54 +17,9 @@ The following table lists TiDB support for common architectures and operating sy + GCC 4.8+ with static library The [check requirement script](../scripts/check_requirement.sh) can help you check prerequisites and -install the missing automatically. +install the missing ones automatically. -## Build TiDB project +## Building and installing TiDB components -``` -# Create a root path for building and installing TiDB. -mkdir -p /Users/tidb -export TIDB_PATH=/Users/tidb -# All the binaries are installed in the `bin` directory. -mkdir -p $TIDB_PATH/bin +You can use the [build script](../scripts/build.sh) script to build and install TiDB components in the bin` directory. -# Assume we install go in /usr/local/go -export PATH=$PATH:/usr/local/go/bin - -# go is required -go version -# go version go1.6 darwin/amd64 - -# rust nightly is required -rustc -V -# rustc 1.12.0-nightly (7ad125c4e 2016-07-11) - -# GOPATH should be set correctly. -export GOPATH=$TIDB_PATH/go - -# build TiDB -git clone https://github.com/pingcap/tidb.git $GOPATH/src/github.com/pingcap/tidb -cd $GOPATH/src/github.com/pingcap/tidb - -make server -cp -f ./tidb-server/tidb-server $TIDB_PATH/bin -cd $TIDB_PATH - -# build PD -git clone https://github.com/pingcap/pd.git $GOPATH/src/github.com/pingcap/pd -cd $GOPATH/src/github.com/pingcap/pd - -make build -cp -f ./bin/pd-server $TIDB_PATH/bin -cp -rf ./templates $TIDB_PATH/bin/templates -cd $TIDB_PATH - -# build TiKV -git clone https://github.com/pingcap/tikv.git $TIDB_PATH/tikv -cd $TIDB_PATH/tikv - -ROCKSDB_SYS_STATIC=1 make release - -cp -f ./target/release/tikv-server $TIDB_PATH/bin -cd $TIDB_PATH -``` \ No newline at end of file diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 0000000000000..ecd28aca6d5c1 --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,61 @@ +#!/bin/bash + +set -e + +# Use current path for building and installing TiDB. +TIDB_PATH=`PWD` +echo "building TiDB components in $TIDB_PATH" + +# All the binaries are installed in the `bin` directory. +mkdir -p $TIDB_PATH/bin + +# Assume we install go in /usr/local/go +export PATH=$PATH:/usr/local/go/bin + +echo "checking go is installed" +# go is required +go version +# go version go1.6 darwin/amd64 + +echo "checking rust is installed" +# rust nightly is required +rustc -V +# rustc 1.12.0-nightly (7ad125c4e 2016-07-11) + +# GOPATH should be set correctly. +export GOPATH=$TIDB_PATH/deps/go + +# build TiDB +# echo "building TiDB..." +# rm -rf $GOPATH/src/github.com/pingcap/tidb +# git clone --depth=1 https://github.com/pingcap/tidb.git $GOPATH/src/github.com/pingcap/tidb +# cd $GOPATH/src/github.com/pingcap/tidb + +# make server +# cp -f ./tidb-server/tidb-server $TIDB_PATH/bin +# cd $TIDB_PATH +# echo "build TiDB OK" + +# # build PD +# echo "building PD..." +# rm -rf $GOPATH/src/github.com/pingcap/pd +# git clone --depth=1 https://github.com/pingcap/pd.git $GOPATH/src/github.com/pingcap/pd +# cd $GOPATH/src/github.com/pingcap/pd + +# make build +# cp -f ./bin/pd-server $TIDB_PATH/bin +# cp -rf ./templates $TIDB_PATH/bin/templates +# cd $TIDB_PATH +# echo "build PD OK" + +# build TiKV +echo "building TiKV..." +rm -rf $TIDB_PATH/deps/tikv +git clone --depth=1 https://github.com/pingcap/tikv.git $TIDB_PATH/deps/tikv +cd $TIDB_PATH/deps/tikv + +ROCKSDB_SYS_STATIC=1 make release + +cp -f ./target/release/tikv-server $TIDB_PATH/bin +cd $TIDB_PATH +echo "build TiKV OK" \ No newline at end of file diff --git a/scripts/check_requirement.sh b/scripts/check_requirement.sh old mode 100644 new mode 100755 From ceb17cd22617776d465932ec3d194a93b97ecf7c Mon Sep 17 00:00:00 2001 From: siddontang Date: Tue, 26 Jul 2016 15:21:06 +0800 Subject: [PATCH 6/7] scripts: fix typo. --- scripts/build.sh | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/scripts/build.sh b/scripts/build.sh index ecd28aca6d5c1..cb07fb74edcb6 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -25,28 +25,28 @@ rustc -V # GOPATH should be set correctly. export GOPATH=$TIDB_PATH/deps/go -# build TiDB -# echo "building TiDB..." -# rm -rf $GOPATH/src/github.com/pingcap/tidb -# git clone --depth=1 https://github.com/pingcap/tidb.git $GOPATH/src/github.com/pingcap/tidb -# cd $GOPATH/src/github.com/pingcap/tidb - -# make server -# cp -f ./tidb-server/tidb-server $TIDB_PATH/bin -# cd $TIDB_PATH -# echo "build TiDB OK" - -# # build PD -# echo "building PD..." -# rm -rf $GOPATH/src/github.com/pingcap/pd -# git clone --depth=1 https://github.com/pingcap/pd.git $GOPATH/src/github.com/pingcap/pd -# cd $GOPATH/src/github.com/pingcap/pd - -# make build -# cp -f ./bin/pd-server $TIDB_PATH/bin -# cp -rf ./templates $TIDB_PATH/bin/templates -# cd $TIDB_PATH -# echo "build PD OK" +build TiDB +echo "building TiDB..." +rm -rf $GOPATH/src/github.com/pingcap/tidb +git clone --depth=1 https://github.com/pingcap/tidb.git $GOPATH/src/github.com/pingcap/tidb +cd $GOPATH/src/github.com/pingcap/tidb + +make server +cp -f ./tidb-server/tidb-server $TIDB_PATH/bin +cd $TIDB_PATH +echo "build TiDB OK" + +# build PD +echo "building PD..." +rm -rf $GOPATH/src/github.com/pingcap/pd +git clone --depth=1 https://github.com/pingcap/pd.git $GOPATH/src/github.com/pingcap/pd +cd $GOPATH/src/github.com/pingcap/pd + +make build +cp -f ./bin/pd-server $TIDB_PATH/bin +cp -rf ./templates $TIDB_PATH/bin/templates +cd $TIDB_PATH +echo "build PD OK" # build TiKV echo "building TiKV..." From 4f25c429fdba025357fb2b9da9be20ec3b7f5adc Mon Sep 17 00:00:00 2001 From: siddontang Date: Tue, 26 Jul 2016 15:30:43 +0800 Subject: [PATCH 7/7] op-guide: Address comment. --- op-guide/build.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/op-guide/build.md b/op-guide/build.md index fa410ef332ed7..a7d5bd7c8c2dd 100644 --- a/op-guide/build.md +++ b/op-guide/build.md @@ -21,5 +21,5 @@ install the missing ones automatically. ## Building and installing TiDB components -You can use the [build script](../scripts/build.sh) script to build and install TiDB components in the bin` directory. +You can use the [build script](../scripts/build.sh) to build and install TiDB components in the bin` directory.