Package generation for Ubuntu and CentOS
Summary:
I put together a script to assist in the generation of deb's and
rpm's. I've tested that this works on ubuntu via vagrant. I've included the
Vagrantfile here, but I can remove it if it's not useful. The package.sh
script should work on any ubuntu or centos machine, I just added a bit of
logic in there to allow a base Ubuntu or Centos machine to be able to build
RocksDB from scratch.
Example output on Ubuntu 14.04:
```
root@vagrant-ubuntu-trusty-64:/vagrant# ./tools/package.sh
[+] g++-4.7 is already installed. skipping.
[+] libgflags-dev is already installed. skipping.
[+] ruby-all-dev is already installed. skipping.
[+] fpm is already installed. skipping.
Created package {:path=>"rocksdb_3.5_amd64.deb"}
root@vagrant-ubuntu-trusty-64:/vagrant# dpkg --info rocksdb_3.5_amd64.deb
new debian package, version 2.0.
size 17392022 bytes: control archive=1518 bytes.
275 bytes, 11 lines control
2911 bytes, 38 lines md5sums
Package: rocksdb
Version: 3.5
License: BSD
Vendor: Facebook
Architecture: amd64
Maintainer: rocksdb@fb.com
Installed-Size: 83358
Section: default
Priority: extra
Homepage: http://rocksdb.org/
Description: RocksDB is an embeddable persistent key-value store for fast storage.
```
Example output on CentOS 6.5:
```
[root@localhost vagrant]# rpm -qip rocksdb-3.5-1.x86_64.rpm
Name : rocksdb Relocations: /usr
Version : 3.5 Vendor: Facebook
Release : 1 Build Date: Mon 29 Sep 2014 01:26:11 AM UTC
Install Date: (not installed) Build Host: localhost
Group : default Source RPM: rocksdb-3.5-1.src.rpm
Size : 96231106 License: BSD
Signature : (none)
Packager : rocksdb@fb.com
URL : http://rocksdb.org/
Summary : RocksDB is an embeddable persistent key-value store for fast storage.
Description :
RocksDB is an embeddable persistent key-value store for fast storage.
```
Test Plan:
How this gets used is really up to the RocksDB core team. If you
want to actually get this into mainline, you might have to change `make
install` such that it install the RocksDB shared object file as well, which
would require you to link against gflags (maybe?) and that would require some
potential modifications to the script here (basically add a depends on that
package).
Currently, this will install the headers and a pre-compiled statically linked
object file. If that's what you want out of life, than this requires no
modifications.
Reviewers: ljin, yhchiang, igor
Reviewed By: igor
Differential Revision: https://reviews.facebook.net/D24141
10 years ago
|
|
|
#/usr/bin/env bash
|
|
|
|
|
|
|
|
set -e
|
|
|
|
|
|
|
|
function log() {
|
|
|
|
echo "[+] $1"
|
|
|
|
}
|
|
|
|
|
|
|
|
function fatal() {
|
|
|
|
echo "[!] $1"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
function platform() {
|
|
|
|
local __resultvar=$1
|
|
|
|
if [[ -f "/etc/yum.conf" ]]; then
|
|
|
|
eval $__resultvar="centos"
|
|
|
|
elif [[ -f "/etc/dpkg/dpkg.cfg" ]]; then
|
|
|
|
eval $__resultvar="ubuntu"
|
|
|
|
else
|
|
|
|
fatal "Unknwon operating system"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
platform OS
|
|
|
|
|
|
|
|
function package() {
|
|
|
|
if [[ $OS = "ubuntu" ]]; then
|
|
|
|
if dpkg --get-selections | grep --quiet $1; then
|
|
|
|
log "$1 is already installed. skipping."
|
|
|
|
else
|
|
|
|
apt-get install $@ -y
|
|
|
|
fi
|
|
|
|
elif [[ $OS = "centos" ]]; then
|
|
|
|
if rpm -qa | grep --quiet $1; then
|
|
|
|
log "$1 is already installed. skipping."
|
|
|
|
else
|
|
|
|
yum install $@ -y
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
function detect_fpm_output() {
|
|
|
|
if [[ $OS = "ubuntu" ]]; then
|
|
|
|
export FPM_OUTPUT=deb
|
|
|
|
elif [[ $OS = "centos" ]]; then
|
|
|
|
export FPM_OUTPUT=rpm
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
detect_fpm_output
|
|
|
|
|
|
|
|
function gem_install() {
|
|
|
|
if gem list | grep --quiet $1; then
|
|
|
|
log "$1 is already installed. skipping."
|
|
|
|
else
|
|
|
|
gem install $@
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
function main() {
|
|
|
|
if [[ $# -ne 1 ]]; then
|
|
|
|
fatal "Usage: $0 <rocksdb_version>"
|
|
|
|
else
|
|
|
|
log "using rocksdb version: $1"
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [[ -d /vagrant ]]; then
|
|
|
|
if [[ $OS = "ubuntu" ]]; then
|
|
|
|
package g++-4.8
|
|
|
|
export CXX=g++-4.8
|
Package generation for Ubuntu and CentOS
Summary:
I put together a script to assist in the generation of deb's and
rpm's. I've tested that this works on ubuntu via vagrant. I've included the
Vagrantfile here, but I can remove it if it's not useful. The package.sh
script should work on any ubuntu or centos machine, I just added a bit of
logic in there to allow a base Ubuntu or Centos machine to be able to build
RocksDB from scratch.
Example output on Ubuntu 14.04:
```
root@vagrant-ubuntu-trusty-64:/vagrant# ./tools/package.sh
[+] g++-4.7 is already installed. skipping.
[+] libgflags-dev is already installed. skipping.
[+] ruby-all-dev is already installed. skipping.
[+] fpm is already installed. skipping.
Created package {:path=>"rocksdb_3.5_amd64.deb"}
root@vagrant-ubuntu-trusty-64:/vagrant# dpkg --info rocksdb_3.5_amd64.deb
new debian package, version 2.0.
size 17392022 bytes: control archive=1518 bytes.
275 bytes, 11 lines control
2911 bytes, 38 lines md5sums
Package: rocksdb
Version: 3.5
License: BSD
Vendor: Facebook
Architecture: amd64
Maintainer: rocksdb@fb.com
Installed-Size: 83358
Section: default
Priority: extra
Homepage: http://rocksdb.org/
Description: RocksDB is an embeddable persistent key-value store for fast storage.
```
Example output on CentOS 6.5:
```
[root@localhost vagrant]# rpm -qip rocksdb-3.5-1.x86_64.rpm
Name : rocksdb Relocations: /usr
Version : 3.5 Vendor: Facebook
Release : 1 Build Date: Mon 29 Sep 2014 01:26:11 AM UTC
Install Date: (not installed) Build Host: localhost
Group : default Source RPM: rocksdb-3.5-1.src.rpm
Size : 96231106 License: BSD
Signature : (none)
Packager : rocksdb@fb.com
URL : http://rocksdb.org/
Summary : RocksDB is an embeddable persistent key-value store for fast storage.
Description :
RocksDB is an embeddable persistent key-value store for fast storage.
```
Test Plan:
How this gets used is really up to the RocksDB core team. If you
want to actually get this into mainline, you might have to change `make
install` such that it install the RocksDB shared object file as well, which
would require you to link against gflags (maybe?) and that would require some
potential modifications to the script here (basically add a depends on that
package).
Currently, this will install the headers and a pre-compiled statically linked
object file. If that's what you want out of life, than this requires no
modifications.
Reviewers: ljin, yhchiang, igor
Reviewed By: igor
Differential Revision: https://reviews.facebook.net/D24141
10 years ago
|
|
|
|
|
|
|
# the deb would depend on libgflags2, but the static lib is the only thing
|
|
|
|
# installed by make install
|
|
|
|
package libgflags-dev
|
|
|
|
|
|
|
|
package ruby-all-dev
|
|
|
|
elif [[ $OS = "centos" ]]; then
|
|
|
|
pushd /etc/yum.repos.d
|
|
|
|
if [[ ! -f /etc/yum.repos.d/devtools-1.1.repo ]]; then
|
|
|
|
wget http://people.centos.org/tru/devtools-1.1/devtools-1.1.repo
|
|
|
|
fi
|
|
|
|
package devtoolset-1.1-gcc --enablerepo=testing-1.1-devtools-6
|
|
|
|
package devtoolset-1.1-gcc-c++ --enablerepo=testing-1.1-devtools-6
|
|
|
|
export CC=/opt/centos/devtoolset-1.1/root/usr/bin/gcc
|
|
|
|
export CPP=/opt/centos/devtoolset-1.1/root/usr/bin/cpp
|
|
|
|
export CXX=/opt/centos/devtoolset-1.1/root/usr/bin/c++
|
|
|
|
export PATH=$PATH:/opt/centos/devtoolset-1.1/root/usr/bin
|
|
|
|
popd
|
|
|
|
if ! rpm -qa | grep --quiet gflags; then
|
|
|
|
rpm -i https://github.com/schuhschuh/gflags/releases/download/v2.1.0/gflags-devel-2.1.0-1.amd64.rpm
|
|
|
|
fi
|
|
|
|
|
|
|
|
package ruby
|
|
|
|
package ruby-devel
|
|
|
|
package rubygems
|
|
|
|
package rpm-build
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
gem_install fpm
|
|
|
|
|
|
|
|
make static_lib
|
|
|
|
make install INSTALL_PATH=package
|
|
|
|
|
|
|
|
cd package
|
|
|
|
|
|
|
|
LIB_DIR=lib
|
|
|
|
if [[ -z "$ARCH" ]]; then
|
|
|
|
ARCH=$(getconf LONG_BIT)
|
|
|
|
fi
|
|
|
|
if [[ ("$FPM_OUTPUT" = "rpm") && ($ARCH -eq 64) ]]; then
|
|
|
|
mv lib lib64
|
|
|
|
LIB_DIR=lib64
|
|
|
|
fi
|
|
|
|
|
Package generation for Ubuntu and CentOS
Summary:
I put together a script to assist in the generation of deb's and
rpm's. I've tested that this works on ubuntu via vagrant. I've included the
Vagrantfile here, but I can remove it if it's not useful. The package.sh
script should work on any ubuntu or centos machine, I just added a bit of
logic in there to allow a base Ubuntu or Centos machine to be able to build
RocksDB from scratch.
Example output on Ubuntu 14.04:
```
root@vagrant-ubuntu-trusty-64:/vagrant# ./tools/package.sh
[+] g++-4.7 is already installed. skipping.
[+] libgflags-dev is already installed. skipping.
[+] ruby-all-dev is already installed. skipping.
[+] fpm is already installed. skipping.
Created package {:path=>"rocksdb_3.5_amd64.deb"}
root@vagrant-ubuntu-trusty-64:/vagrant# dpkg --info rocksdb_3.5_amd64.deb
new debian package, version 2.0.
size 17392022 bytes: control archive=1518 bytes.
275 bytes, 11 lines control
2911 bytes, 38 lines md5sums
Package: rocksdb
Version: 3.5
License: BSD
Vendor: Facebook
Architecture: amd64
Maintainer: rocksdb@fb.com
Installed-Size: 83358
Section: default
Priority: extra
Homepage: http://rocksdb.org/
Description: RocksDB is an embeddable persistent key-value store for fast storage.
```
Example output on CentOS 6.5:
```
[root@localhost vagrant]# rpm -qip rocksdb-3.5-1.x86_64.rpm
Name : rocksdb Relocations: /usr
Version : 3.5 Vendor: Facebook
Release : 1 Build Date: Mon 29 Sep 2014 01:26:11 AM UTC
Install Date: (not installed) Build Host: localhost
Group : default Source RPM: rocksdb-3.5-1.src.rpm
Size : 96231106 License: BSD
Signature : (none)
Packager : rocksdb@fb.com
URL : http://rocksdb.org/
Summary : RocksDB is an embeddable persistent key-value store for fast storage.
Description :
RocksDB is an embeddable persistent key-value store for fast storage.
```
Test Plan:
How this gets used is really up to the RocksDB core team. If you
want to actually get this into mainline, you might have to change `make
install` such that it install the RocksDB shared object file as well, which
would require you to link against gflags (maybe?) and that would require some
potential modifications to the script here (basically add a depends on that
package).
Currently, this will install the headers and a pre-compiled statically linked
object file. If that's what you want out of life, than this requires no
modifications.
Reviewers: ljin, yhchiang, igor
Reviewed By: igor
Differential Revision: https://reviews.facebook.net/D24141
10 years ago
|
|
|
fpm \
|
|
|
|
-s dir \
|
|
|
|
-t $FPM_OUTPUT \
|
|
|
|
-n rocksdb \
|
|
|
|
-v $1 \
|
|
|
|
--prefix /usr \
|
|
|
|
--url http://rocksdb.org/ \
|
|
|
|
-m rocksdb@fb.com \
|
|
|
|
--license BSD \
|
|
|
|
--vendor Facebook \
|
|
|
|
--description "RocksDB is an embeddable persistent key-value store for fast storage." \
|
|
|
|
include $LIB_DIR
|
Package generation for Ubuntu and CentOS
Summary:
I put together a script to assist in the generation of deb's and
rpm's. I've tested that this works on ubuntu via vagrant. I've included the
Vagrantfile here, but I can remove it if it's not useful. The package.sh
script should work on any ubuntu or centos machine, I just added a bit of
logic in there to allow a base Ubuntu or Centos machine to be able to build
RocksDB from scratch.
Example output on Ubuntu 14.04:
```
root@vagrant-ubuntu-trusty-64:/vagrant# ./tools/package.sh
[+] g++-4.7 is already installed. skipping.
[+] libgflags-dev is already installed. skipping.
[+] ruby-all-dev is already installed. skipping.
[+] fpm is already installed. skipping.
Created package {:path=>"rocksdb_3.5_amd64.deb"}
root@vagrant-ubuntu-trusty-64:/vagrant# dpkg --info rocksdb_3.5_amd64.deb
new debian package, version 2.0.
size 17392022 bytes: control archive=1518 bytes.
275 bytes, 11 lines control
2911 bytes, 38 lines md5sums
Package: rocksdb
Version: 3.5
License: BSD
Vendor: Facebook
Architecture: amd64
Maintainer: rocksdb@fb.com
Installed-Size: 83358
Section: default
Priority: extra
Homepage: http://rocksdb.org/
Description: RocksDB is an embeddable persistent key-value store for fast storage.
```
Example output on CentOS 6.5:
```
[root@localhost vagrant]# rpm -qip rocksdb-3.5-1.x86_64.rpm
Name : rocksdb Relocations: /usr
Version : 3.5 Vendor: Facebook
Release : 1 Build Date: Mon 29 Sep 2014 01:26:11 AM UTC
Install Date: (not installed) Build Host: localhost
Group : default Source RPM: rocksdb-3.5-1.src.rpm
Size : 96231106 License: BSD
Signature : (none)
Packager : rocksdb@fb.com
URL : http://rocksdb.org/
Summary : RocksDB is an embeddable persistent key-value store for fast storage.
Description :
RocksDB is an embeddable persistent key-value store for fast storage.
```
Test Plan:
How this gets used is really up to the RocksDB core team. If you
want to actually get this into mainline, you might have to change `make
install` such that it install the RocksDB shared object file as well, which
would require you to link against gflags (maybe?) and that would require some
potential modifications to the script here (basically add a depends on that
package).
Currently, this will install the headers and a pre-compiled statically linked
object file. If that's what you want out of life, than this requires no
modifications.
Reviewers: ljin, yhchiang, igor
Reviewed By: igor
Differential Revision: https://reviews.facebook.net/D24141
10 years ago
|
|
|
}
|
|
|
|
|
|
|
|
main $@
|