imposm3/packaging.sh

202 lines
5.1 KiB
Bash
Raw Normal View History

2016-03-08 16:23:37 +03:00
#! /bin/bash
cat <<EOF
2016-03-08 17:03:53 +03:00
=================== Imposm Packaging Script ============================
2016-03-08 16:23:37 +03:00
This script creates binary packages for Imposm 3 for Linux.
It installs and builds all dependencies, compiles the master
branch of this local repository and creates a .tar.gz with
the imposm3 binary and all 3rd party dependencies.
This script is made for Debian 6, so that the resulting binaries
are compatible with older Linux distributions, namely SLES 11, RHEL 6,
Ubuntu 10.04 and Debian 6.
'Vagrantfile' defines a working Debian VM that will call this script
during the provision phase. Please install Vagrant and Virtualbox first:
https://www.vagrantup.com/
To start the VM and the packaging:
$ vagrant up --provision
The resulting .tar.gz should appear in dist/
To build another package, e.g. after you commited new changes:
$ vagrant provision
or
$ vagrant ssh
% bash /vagrant/packaging.sh
2016-03-08 17:03:53 +03:00
You can specify a revision or branch by setting the REVISION
environment. REVISION defaults to the master branch:
$ REVISION=mybranch vagrant provision
2016-03-08 16:23:37 +03:00
To shutdown the VM:
$ vagrant halt
To remove the VM:
$ vagrant destroy
2016-03-08 17:03:53 +03:00
2016-03-08 16:23:37 +03:00
EOF
set -e
# set -x
2016-03-08 17:03:53 +03:00
REVISION=${1:-master}
2016-03-08 16:23:37 +03:00
BUILD_BASE=$HOME/imposm
PREFIX=$BUILD_BASE/local
SRC=$BUILD_BASE/src
export GOPATH=$BUILD_BASE/gopath
export PATH=$PATH:$BUILD_BASE/go/bin
export GOROOT=$BUILD_BASE/go
IMPOSM_SRC=$GOPATH/src/github.com/omniscale/imposm3
BUILD_TMP=$BUILD_BASE/imposm-build
2016-11-16 18:28:10 +03:00
GEOS_VERSION=3.5.1
2016-03-08 16:23:37 +03:00
export CGO_CFLAGS=-I$PREFIX/include
export CGO_LDFLAGS=-L$PREFIX/lib
export LD_LIBRARY_PATH=$PREFIX/lib
CURL="curl --silent --show-error --location"
mkdir -p $SRC
mkdir -p $PREFIX
mkdir -p $GOPATH
if ! grep --silent 'Debian GNU/Linux 6.0' /etc/issue; then
echo
echo "ERROR: This script only works for Debian 6.0 (Squeeze), see above."
exit 1
fi
if [ ! -e /usr/bin/git ]; then
echo "-> installing dependencies"
# squeeze is EOL, use debian-archive
cat <<EOF | sudo tee /etc/apt/sources.list
deb http://ftp.de.debian.org/debian-archive/debian squeeze main
deb-src http://ftp.de.debian.org/debian-archive/debian squeeze main
EOF
sudo apt-get update -y
sudo apt-get install -y build-essential unzip autoconf libtool git-core chrpath
fi
if [ ! -e $BUILD_BASE/go/bin/go ]; then
echo "-> installing go"
pushd $SRC
2017-04-03 16:18:42 +03:00
rm -rf $BUILD_BASE/go
$CURL https://storage.googleapis.com/golang/go1.8.linux-amd64.tar.gz -O
tar xzf go1.8.linux-amd64.tar.gz -C $BUILD_BASE/
2016-03-08 16:23:37 +03:00
popd
fi
if [ ! -e $PREFIX/lib/libhyperleveldb.so ]; then
echo "-> installing hyperleveldb"
pushd $SRC
$CURL https://github.com/rescrv/HyperLevelDB/archive/master.zip -O
unzip master.zip
pushd HyperLevelDB-master
autoreconf -i
./configure --prefix=$PREFIX
make -j4
make install
popd
popd $SRC
fi
if [ ! -e $PREFIX/include/leveldb ]; then
echo "-> linking hyperleveldb as leveldb"
pushd $PREFIX/lib
for s in 'a', 'la', 'so'; do
ln -sf libhyperleveldb.$s libleveldb.$s
done
popd
ln -s $PREFIX/include/hyperleveldb $PREFIX/include/leveldb
fi
if [ ! -e $PREFIX/lib/libprotobuf.so ]; then
echo "-> installing protobuf"
pushd $SRC
$CURL https://github.com/google/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.bz2 -O
tar jxf protobuf-2.6.1.tar.bz2
pushd protobuf-2.6.1/
./configure --prefix=$PREFIX
make -j2
make install
popd
popd
fi
if [ ! -e $PREFIX/lib/libgeos-$GEOS_VERSION.so ]; then
2016-03-08 16:23:37 +03:00
echo "-> installing GEOS"
pushd $SRC
$CURL http://download.osgeo.org/geos/geos-$GEOS_VERSION.tar.bz2 -O
tar jxf geos-$GEOS_VERSION.tar.bz2
pushd geos-$GEOS_VERSION/
./configure --prefix=$PREFIX
make -j2
make install
popd
popd
fi
echo '-> fetching imposm'
mkdir -p $IMPOSM_SRC
git init $IMPOSM_SRC
pushd $IMPOSM_SRC
git config --add receive.denyCurrentBranch ignore
pushd /vagrant
git push --all -f $IMPOSM_SRC
popd
git reset --hard
2016-03-08 17:03:53 +03:00
git checkout $REVISION
2016-03-08 16:23:37 +03:00
echo '-> compiling imposm'
make clean
make build
popd
echo '-> building imposm package'
rm -rf $BUILD_TMP
mkdir -p $BUILD_TMP
pushd $IMPOSM_SRC
cp imposm3 $BUILD_TMP
cp example-mapping.json $BUILD_TMP/mapping.json
popd
mkdir -p $BUILD_TMP/lib
pushd $PREFIX/lib
cp libgeos_c.so $BUILD_TMP/lib
ln -s libgeos_c.so $BUILD_TMP/lib/libgeos_c.so.1
cp libgeos.so $BUILD_TMP/lib
ln -s libgeos.so $BUILD_TMP/lib/libgeos-$GEOS_VERSION.so
cp libhyperleveldb.so $BUILD_TMP/lib
ln -s libhyperleveldb.so $BUILD_TMP/lib/libhyperleveldb.so.0
ln -s libhyperleveldb.so $BUILD_TMP/lib/libleveldb.so.1
popd
pushd $BUILD_TMP/lib
chrpath libgeos_c.so -r '${ORIGIN}'
popd
pushd $BUILD_BASE
VERSION=`$BUILD_TMP/imposm3 version`-linux-x86-64
rm -rf imposm3-$VERSION
mv imposm-build imposm3-$VERSION
tar zcvf imposm3-$VERSION.tar.gz imposm3-$VERSION
mkdir -p /vagrant/dist
mv imposm3-$VERSION.tar.gz /vagrant/dist/
echo "placed final package in: ./dist/imposm3-$VERSION.tar.gz"
popd