When i run the command rpmbuild -bb mypackage.spec, on centos, i get an error
error: Package already exists: %package debuginfo
following is part of the spec file:
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}
BuildRequires: gcc = 4.1.2
BuildRequires: make >= 3.81
BuildRequires: postgresql84-devel = 8.4.9
%description
ElementalCORE
%prep
%setup -qn pcore
%build
%{__make}
%install
mkdir -p %{_tmppath}/%{name}-%{version}-%{release}
mkdir -p %{name}
mkdir -p %{_bindir}
install -d %{name}
#This is to ensure that the BuildRoot will be created fresh during the %install section.
#mkdir -p %{buildroot}
#install -p -m 0755 $RPM_BUILD_ROOT/%{name}/obj/ggsnc/ggsnc %{_bindir}
%clean
%files
%defattr(-,root,root)
%doc NEWS
The problem is the %install in the comment. Replace it with %_install.
Related
Pls answer me i first time put inside rpm bash skrip. May someone can sent link or tip what i must coorrect in my .spec
This rpm pakage must make just two thing - copy in linux folder /bin/ one file(inet.dbg) and next when cp make must start bash skrip for check library for this file.
This my bash skript
#!/bin/bash
ldd inet.dbg > t.t
ERR=`grep -i "not" t.t | wc -l`
if [[ $ERR -gt 0 ]]; then
grep -i "not" t.t > erg.e
echo "Die folgenden Bibliotheken wurden nicht gefunden:"
cat erg.e
rm t.t erg.e
else
ls -a ss.tar &> t.t
if [[ $? -eq 0 ]]; then
echo alles ok
else
echo no
fi
fi '
This .spec
# %_topdir and %_tmppath are defined in ~/.rpmmacros
%define name inetdbg
%define version 0.1
%define release 1
%define buildroot %{_tmppath}/%{name}-%{version}-%{release}
%define tarfile %{tarversion}.tar
%define installscript /home/adis/rpmbuild/SOURCES/skript.sh
Name: %{name}
Version: %{version}
Release: %{release}
BuildArch: noarch
Summary: adisc
License: -
Source1: %{installscript}
Source2: /home/adis/rpmbuild/SOURCES/inetdbg.tar.xz
BuildRoot: %{_builddir}/%{name}-root
%description
Tested RPM
%prep
%build
%install
mkdir -p %{buildroot}%{_bindir}
install -D -pm 755 %{SOURCE2} %{buildroot}/bin/inetdbg.tar.xz
cp -a %{installscript} %{buildroot}%{_bindir}/
chmod a+x %{buildroot}%{_bindir}/%{installscript}
%files
%{_bindir}/%{installscript}
%{SOURCE2}
%post
%{_bindir}%{installscript}
%clean
[ ${RPM_BUILD_ROOT} != "/" ] && rm -rf ${RPM_BUILD_ROOT}
%changelog
* 25 Jan 2023 <user>
- Add script.sh
- Add definit
Try it make rpmbuild but have fehler when start rpmbuild read skript what i try put
I tried to run
bitbake core-image-minimal
but I got
ERROR: Nothing RPROVIDES 'libcrypto' (but /home/yocto/fsl-4-14-98/sources/poky/meta/recipes-core/images/core-image-minimal.bb RDEPENDS on or otherwise requires it)
In core-image-minimal.bb I have
SUMMARY = "A console-only image that fully supports the target device \ hardware."
IMAGE_FEATURES += "splash"
LICENSE = "MIT"
inherit core-image
I also got a second error
ERROR: Required build target 'core-image-minimal' has no buildable providers.
Missing or unbuildable dependency chain was: ['core-image-minimal', 'libcrypto']
What am I missing? It's my first time using Yocto.
You can find the tutorial I'm using below:
- prepare system for Yocto
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \
xz-utils debianutils iputils-ping
$ sudo apt-get install libsdl1.2-dev xterm
$ sudo apt-get install make xsltproc docbook-utils fop dblatex xmlto
$ sudo apt-get install ncurses-dev
- setting up repo
$ mkdir ~/bin
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
- Add the following line to the .bashrc file to ensure that the ~/bin folder is in your PATH variable.
export PATH=~/bin:$PATH
- configure git:
$ git config --global user.name "Your Name"
$ git config --global user.email "Your Email"
$ git config --list
NEW YOCTO RELEASE WITH KERNEL 4.14.98 AND OPEN SSL 1.1.1J
----
$ cd /usr/bin
$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt-get update
$ sudo apt-get install python3.6
$ sudo rm python
$ sudo ln -s python3.6 python
- load iMX recipes
$ cd
### OLD RELEASE ### $ mkdir fsl-release-bsp
### OLD RELEASE ### $ cd fsl-release-bsp
### OLD RELEASE ### $ repo init -u https://source.codeaurora.org/external/imx/fsl-arm-yocto-bsp -b imx-4.1-krogoth
### OLD RELEASE ### $ repo sync
$ mkdir fsl-4-14-98
$ cd fsl-4-14-98
$ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-sumo -m imx-4.14.98-2.3.3.xml
### IMPORTANT ### $ git config --global url."https://".insteadOf git://
$ repo sync
$ sudo rm /usr/bin/python
$ sudo ln -s /usr/bin/python2 /usr/bin/python
- configure machine
$ DISTRO=fsl-imx-fb MACHINE=imx6solosabresd source fsl-setup-release.sh -b rsr1296
- create shared directory
$ mkdir ~/yocto
$ mkdir ~/yocto/download
$ mkdir ~/yocto/sstate-cache
$ gedit conf/local.conf
and add this lines:
DL_DIR="/home/multi/yocto/download"
SSTATE_DIR="/home/multi/yocto/sstate-cache"
CONNECTIVITY_CHECK_URIS ?= "https://www.google.com"
IMAGE_INSTALL_append = "pcsc-lite openssl-bin libcrypto"
PREFERRED_VERSION_openssl = "1.1.1j"
IMAGE_INSTALL_remove += "packagegroup-fsl-optee-imx"
BAD_RECOMMENDATIONS += "udev-hwdb"
comment out this lines
#PACKAGECONFIG_append_pn-qemu-native = " sdl"
#PACKAGECONFIG_append_pn-nativesdk-qemu = " sdl"
- update Open SSL to 1.1.1J (http://cgit.openembedded.org/openembedded-core/tree/meta/recipes-connectivity/openssl?h=master)
$ cd ~/fsl-4-14-98/sources/poky/meta/recipes-connectivity
$ mv openssl /home/multi/Documents
$ tar xvzf /home/multi/Documents/openssl_1.1.1j.tar.gz
$ cd -
- compile full system
$ bitbake core-image-minimal
Everything is fine with no errors in log until bitbake core-image-minimal
Is there a way to install OpenMapTiles server without docker? I need to use this on redhat linux and docker needs to be enterprise version in order to use it on redhat. Please let me know.
Thanks
You just need to manually perform all scripts they run inside their separate docker containers.
They set up 1 database server by running the commands in
https://github.com/openmaptiles/openmaptiles-tools/blob/master/docker/postgis/Dockerfile
and
https://github.com/openmaptiles/openmaptiles-tools/blob/master/docker/postgis/initdb-postgis.sh
And then continue to download data in a few different docker files by running some commands, this is a pattern that comes back again and again, run the commands in the Dockerfile and the scripts in for all these subfolders in https://github.com/openmaptiles/openmaptiles-tools/tree/master/docker in the order they appear in the documentation at
https://github.com/openmaptiles/openmaptiles/blob/master/README.md
If you're on ubuntu this should be pretty straightforward.
I don't have access to a redhat linux instance, but after translating those ubuntu commands I got something that worked on centos7, so should work on your RHEL7:
(This needs some serious cleanup, I do not recommend using this in a nice production system. Someone should package these commands up in rpm's and push them to a repository (I didn't have the time at the moment and I'm not sure if someone would actually want to do this, let me know if you would be interested in having rpm's of these tools))
# install dependencies
# Install PostgreSQL and PostGIS
yum -y install epel-release
rpm -ivh https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
yum install postgis30_11 postgresql11-server postgis30_11-client
yum install postgresql11-devel postgis30_11-docs postgis30_11-utils pgrouting_11
# tools needed later
yum install boost169-devel libffi-devel openssl-devel protobuf-lite-devel sparsehash-devel leveldb-devel golang-bin utf8proc-devel sqlite pandoc lbzip2 vim libpng libtiff libjpeg freetype gdal cairo pycairo sqlite geos boost curl libcurl libicu bzip2-devel libpng-devel libtiff-devel zlib-devel libjpeg-devel libxml2-devel python-setuptools proj-devel proj proj-epsg proj-nad freetype-devel libicu-devel gdal-devel sqlite-devel libcurl-devel cairo-devel pycairo-devel geos-devel protobuf-devel protobuf-c-devel lua-devel cmake proj boost-thread proj-devel autoconf automake libtool pkgconfig ragel gtk-doc glib2 glib2-devel libpng libpng-devel libwebp libtool-ltdl-devel python-devel harfbuzz harfbuzz-devel harfbuzz-icu boost-devel cabextract xorg-x11-font-utils fontconfig perl-DBD-Pg mesa-libGLU-devel graphviz sqlite3 aria2 osmctools python3 wget
# GCC++ 14 standards are required for Mapnik so we shall install the Dev Toolset from the CentOS Software Collections
yum install centos-release-scl
yum install devtoolset-6
scl enable devtoolset-6 bash
export JOBS=$(nproc)
# Initialise PostgreSQL and Basic Setup
/usr/pgsql-11/bin/postgresql-11-setup initdb
systemctl enable postgresql-11.service
cd /var/lib/pgsql/11
vim data/postgresql.conf
# Add the IP addresses on which the server should listen for connections
listen_addresses = 'localhost,192.168.1.1'
systemctl start postgresql-11.service
vim /etc/profile.d/pgsql.sh
$ export PATH=$PATH:/usr/pgsql-11/bin:/usr/pgsql-11/lib:/usr/local/lib
source /etc/profile.d/pgsql.sh
git clone https://github.com/loretoparisi/kakasi.git
cd kakasi
./configure && make
make install
vim /etc/ld.so.conf.d/libkakasi.conf
/usr/lib64
/usr/local/lib
ldconfig
cd ..
git clone https://github.com/openmaptiles/mapnik-german-l10n.git
cd mapnik-german-l10n
make
make install
su - postgres
psql --dbname="openmaptiles" <<-'EOSQL'
CREATE DATABASE template_postgis;
UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template_postgis';
EOSQL
# i don't find this step anywhere, but it is needed
psql
CREATE DATABASE openmaptiles;
for db in template_postgis "openmaptiles"; do
psql --dbname="$db" <<-'EOSQL'
CREATE EXTENSION postgis;
CREATE EXTENSION hstore;
CREATE EXTENSION unaccent;
CREATE EXTENSION fuzzystrmatch;
CREATE EXTENSION osml10n;
EOSQL
done
# these 3 commands start a docker container that downlaods data
#make import-water
#make import-natural-earth
#make import-lakelines
cd
mkdir data
cd data
wget --quiet http://osmdata.openstreetmap.de/download/water-polygons-split-3857.zip
unzip -oj water-polygons-split-3857.zip
su - postgres
ogr2ogr -progress -f Postgresql -s_srs EPSG:3857 -t_srs EPSG:3857 -lco OVERWRITE=YES -lco GEOMETRY_NAME=geometry -nln "osm_ocean_polygon" -nlt geometry --config PG_USE_COPY YES PG:"dbname=openmaptiles" "/root/data/water_polygons.shp"
wget --quiet http://naciscdn.org/naturalearth/packages/natural_earth_vector.sqlite.zip
unzip -oj natural_earth_vector.sqlite.zip -d . '*natural_earth_vector.sqlite'
wget https://raw.githubusercontent.com/openmaptiles/openmaptiles-tools/master/docker/import-natural-earth/clean-natural-earth.sh
hmod +x clean-natural-earth.sh
NATURAL_EARTH_DB=./natural_earth_vector.sqlite ./clean-natural-earth.sh
ogr2ogr -progress -f Postgresql -s_srs EPSG:4326 -t_srs EPSG:3857 -clipsrc -180.1 -85.0511 180.1 85.0511 -lco GEOMETRY_NAME=geometry -lco OVERWRITE=YES -lco DIM=2 -nlt GEOMETRY -overwrite PG:"dbname=openmaptiles" "natural_earth_vector.sqlite"
wget https://github.com/lukasmartinelli/osm-lakelines/releases/download/v0.9/lake_centerline.geojson
ogr2ogr -progress -f Postgresql -s_srs EPSG:4326 -t_srs EPSG:3857 -lco OVERWRITE=YES -overwrite -nln "lake_centerline" PG:"dbname=openmaptiles" "lake_centerline.geojson"
quit
cd data
#get some pbf
wget https://download.geofabrik.de/europe/belgium-latest.osm.pbf
# make import-osm
export GOPATH=~/.go
mkdir -p $GOPATH/src/github.com/omniscale/imposm3
#export IMPOSM_REPO="https://github.com/openmaptiles/imposm3.git"
export IMPOSM_REPO="https://github.com/omniscale/imposm3.git"
#export IMPOSM_VERSION="v2017-10-18"
export IMPOSM_VERSION="v0.8.1"
cd $GOPATH/src/github.com/omniscale/imposm3
go get github.com/tools/godep
go get -u github.com/golang/protobuf/protoc-gen-go
git clone --quiet --depth 1 $IMPOSM_REPO -b $IMPOSM_VERSION $GOPATH/src/github.com/omniscale/imposm3
make build
/usr/local/bin/generate-imposm3 /root/openmaptiles/openmaptiles.yaml > mapping.yaml
export DIFF_DIR=~/data/import
mkdir $DIFF_DIR
export IMPOSM_CACHE_DIR=/tmp/cache
mkdir $IMPOSM_CACHE_DIR
wget https://raw.githubusercontent.com/openmaptiles/openmaptiles-tools/master/docker/import-osm/config.json
./imposm import -connection "postgis://postgres#localhost/openmaptiles" -mapping mapping.yaml -overwritecache -diffdir "$DIFF_DIR" -cachedir "$IMPOSM_CACHE_DIR" -read "$pbf_file" -deployproduction -write $diff_flag -config "$CONFIG_JSON"
# make import-borders
cd
git clone https://github.com/mapbox/protozero
cd protozero
mkdir build
cd build
cmake ..
make -j ${JOBS}
make install
cd
git clone https://github.com/osmcode/libosmium.git
cd libosmium
mkdir build
cmake ..
make -j ${JOBS}
make install
cd
git clone https://github.com/pnorman/osmborder.git
cd osmborder
mkdir build
cmake ..
make -j ${JOBS}
make install
cd
git clone https://github.com/openmaptiles/openmaptiles-tools.git
cd openmaptiles-tools/bin
export PGHOST=localhost
export PGDATABASE=openmaptiles
export PGUSER=postgres
export PGPASSWORD=
./import-borders ~/data/belgium-latest.osm.pbf
# make import-wikidata
cd
wget https://www.python.org/ftp/python/3.8.2/Python-3.8.2.tgz
tar xf Python-3.8.2
cd Python-3.8.2
./configure --enable-optimizations
make -j ${JOBS} altinstall
cd ~/openmaptiles-tools/bin
python3.8 -m pip install --upgrade pip
python3.8 -m pip install -r ../requirements.txt
export PYTHONPATH=$PYTHONPATH:$PWD/../
# workaround for asyncpg.exceptions.UndefinedTableError: relation "wd_names" does not exist
# see https://github.com/openmaptiles/openmaptiles/pull/785
su - postgres
psql openmaptiles
$ CREATE TABLE IF NOT EXISTS wd_names (id varchar(20) UNIQUE, page varchar(200) UNIQUE, labels hstore);
$ TRUNCATE wd_names;
$ quit
quit
python3.8 import-wikidata --user=postgres ../../openmaptiles/openmaptiles.yaml
#make
# openmaptiles-tools generate-tm2source openmaptiles.yaml
python3.8 generate-tm2source ../../openmaptiles/openmaptiles.yaml --port 5432 > tm2source.yaml
# openmaptiles-tools generate-sql openmaptiles.yaml
python3.8 generate-sql ../../openmaptiles/openmaptiles.yaml > openmaptiles.sql
#make import-sql
# openmaptiles-tools import-sql
export PSQL_OPTIONS=-a
export OMT_UTIL_DIR=../sql/
export VT_UTIL_DIR=../vt_util_sql/
mkdir $VT_UTIL_DIR
wget https://raw.githubusercontent.com/openmaptiles/postgis-vt-util/master/postgis-vt-util.sql
mv postgis-vt-util.sql ../vt_util_sql/
export SQL_DIR=$PWD
./import-sql
# make generate-tiles
- generate-vectortiles
yum install nodejs xdg-utils
cd
git clone git://github.com/mapnik/mapnik
cd mapnik
git checkout remotes/origin/v3.0.x
./bootstrap.sh
./configure BOOST_INCLUDES=/usr/include/boost169/ BOOST_LIBS=/usr/lib64/boost169/
git submodule sync
git submodule update --init
make -j ${JOBS}
make install
ldconfig
npm install --build-from-source=mapnik -g #mapbox/tiletype mapnik#3.7.2 #mapbox/mbtiles #mapbox/tilelive tilelive-tmsource #mapbox/tilelive-vector tilelive-bridge tilelive-mapnik
cp tm2source.yaml data.yml
sed -i "s|host: .*|host: \"localhost\"|g" data.yml
sed -i "s|port: .*|port: \"5432\"|g" data.yml
sed -i "s|dbname: .*|dbname: \"openmaptiles\"|g" data.yml
sed -i "s|user: .*|user: \"postgres\"|g" data.yml
sed -i "s|password: .*|password: \"$POSTGRES_HOST\"|g" data.yml
export BBOX="-180,-85.0511,180,85.0511"
export MIN_ZOOM=0
export MAX_ZOOM=14
tilelive-copy --scheme=pyramid --bounds=BBOX --timeout="18000000" --concurrency="10"--minzoom=MIN_ZOOM --maxzoom=MAX_ZOOM "tmsource://$PWD" "mbtiles://root/data/tiles.mbtiles"
generate-metadata ~/data/tiles.mbtiles
How to install the latest MongoDB 3.4 or even 3.6?
They support with Ubuntu, but my server is Debian Buster and I am stuck with MongoDB 3.2.
I don't know if this is a good idea yet, but I just installed it by adding the sid repos and installing using the mongodb-server package. For me this installs version 3.4.18.
I created /etc/apt/sources.list.d/sid.list with:
deb http://deb.debian.org/debian/ sid main
deb-src http://deb.debian.org/debian/ sid main
then did
apt update
apt install mongodb-server
and verified that it's working by connecting with mongo.
I have found the solution for a build script, the description is found here:
https://github.com/patrikx3/docker-debian-testing-mongodb-stable
The description:
Debian Stretch / Buster / Bullseye / Testing MongoDB and MongoDB Tools build stable builder script, what it does as exactly:
It is basically a built for the latest MongoDB for Debian.
The current varsion is the r4.0.x build (release).
Warning It will remove all mongodb* apt packages in ./scripts/build-server.sh and /etc/systemd/system/mongodb-server.service is replaced.
It install the required apt dependencies and generates the SystemD service and makes it enabled.
Check if the build works (building is below). It runs all tests, so if it works, then it really does, actually. If there is an error, of course, you will not deploy on your server. So, if building and testing works, then it puts the binaries as it follow and you are sure and done.
The build as follows build-server.sh:
#!/usr/bin/env bash
# based on https://github.com/mongodb/mongo/wiki/Build-Mongodb-From-Source
# the current directory
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# if an error exit right away, don't continue the build
set -e
# some info
echo
#echo "Works like command, use a tag: sudo ./scripts/build-server.sh r4.2.0"
echo "Works like command, use a tag: sudo ./scripts/build-server.sh r4.0.12"
echo
# check if we are root
if [[ $EUID -ne 0 ]]; then
echo "This script must be ran via root 'sudo' command or using in 'sudo -i'."
exit 1
fi
# require mongo branch
#if [ -z "${1}" ]; then
# echo "First argument must be the MONGODB_BRANCH for example 'v4.1'"
# exit 1
#fi
#MONGODB_BRANCH="${1}"
# require mongo release
#if [ -z "${2}" ]; then
# echo "The second argument must be the MONGODB_RELEASE for example 'r4.1.0'"
# exit 1
#fi
#MONGODB_RELEASE="${2}"
# require mongo release
if [ -z "${1}" ]; then
echo "The first argument must be the MONGODB_RELEASE for example 'r4.0.12'"
exit 1
fi
MONGODB_RELEASE="${1}"
# delete all mongo other programs, we self compile
apt remove --purge mongo*
# the required packages for debian
apt -y install libboost-filesystem-dev libboost-program-options-dev libboost-system-dev libboost-thread-dev build-essential gcc python scons git glibc-source libssl-dev python-pip libffi-dev python-dev libcurl4-openssl-dev #libcurl-dev
pip install -U pip pyyaml typing
# generate build directory variable
BUILD=$DIR/../build
# delete previous build directory
rm -rf $BUILD/mongo
# generate new build directory
mkdir -p $BUILD
# the mongodb.conf and systemd services files in a directory variable
ROOT_FS=$DIR/../artifacts/root-filesystem
# find out how many cores we have and we use that many
if [ -z "$CORES" ]; then
CORES=$(grep -c ^processor /proc/cpuinfo)
fi
echo Using $CORES cores
# go to the build directory
pushd $BUILD
# clone the mongo by branch
#git clone -b ${MONGODB_BRANCH} https://github.com/mongodb/mongo.git
# clone the mongo by branch
git clone https://github.com/mongodb/mongo.git
# the mongo directory is a variables
MONGO=$BUILD/mongo
# go to the mongo directory
pushd $MONGO
# checkout the mongo release
git checkout tags/${MONGODB_RELEASE}
# hack to old version python pip cryptography from 1.7.2 to use the latest
sed -i 's#cryptography == 1.7.2#\#cryptography == 1.7.2#g' buildscripts/requirements.txt
# this is only because 4.0.12 uses 1.7.2 and
# https://github.com/pyca/cryptography/issues/4193#issuecomment-381236459
# support minimum latest (2.2)
pip install cryptography
# install the python requirements
#pip install -r etc/pip/dev-requirements.txt
pip install -r buildscripts/requirements.txt
# somewhere in the build it says if we install this, it is faster to build
pip2 install --user regex
# build everything
scons all --disable-warnings-as-errors -j $CORES --ssl
# install the mongo programs all
scons install --disable-warnings-as-errors -j $CORES --prefix /usr
# create a copy of the old config
#TIMESTAMP=$(($(date +%s%N)/1000000))
#cp /etc/mongodb.conf /etc/mongodb.conf.$TIMESTAMP.save
# copy the mongodb.conf configured and the systemd service file
# dangerous!!! removed
# cp -avr $ROOT_FS/. /
MONGODB_SERVICE=etc/systemd/system/mongodb-server.service
cp $ROOT_FS/$MONGODB_SERVICE /$MONGODB_SERVICE
chown root:root /$MONGODB_SERVICE
chmod o-rwx /$MONGODB_SERVICE
# generate mongodb user and group
useradd mongodb -d /var/lib/mongodb -s /bin/false || true
# create the required mongodb database directory and add safety
mkdir -p /var/lib/mongodb
chmod o-rwx -R /var/lib/mongodb
chown -R mongodb:mongodb /var/lib/mongodb
# create the required mongodb log directory and add safety
mkdir -p /var/log/mongodb
chmod o-rwx -R /var/log/mongodb
chown -R mongodb:mongodb /var/log/mongodb
# create the required run socket directory and add safety
mkdir -p /run/mongodb
chmod o-rwx -R /run/mongodb
chown -R mongodb:mongodb /run/mongodb
# add safety to the mongodb config file
chmod o-rwx /etc/mongodb.conf || true
chown mongodb:mongodb /etc/mongodb.conf || true
# reload systemd services
systemctl daemon-reload
# enable the mongodb-server
systemctl enable mongodb-server
# start the mongodb-server
#service mongodb-server start
# exit of the mongo directory
popd
# exit the build directory
popd
# delete current build directory
rm -rf $BUILD/mongo
The build as follows build-tools.sh:
#!/usr/bin/env bash
# based on https://github.com/mongodb/mongo-tools
# the current directory
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# if an error exit right away, don't continue the build
set -e
# some info
echo
echo "Works like command: sudo ./scripts/build-tools.sh r4.0.12"
echo
# check if we are root
if [[ $EUID -ne 0 ]]; then
echo "This script must be ran via root 'sudo' command or using in 'sudo -i'."
exit 1
fi
# require mongo release
if [ -z "${1}" ]; then
echo "The first argument must be the MONGODB_RELEASE for example 'r4.0.12'"
exit 1
fi
MONGODB_RELEASE="${1}"
## delete all mongo other programs, we self compile
##apt remove --purge mongo*
## the required packages for debian
##apt -y install gcc python scons git glibc-source libssl-dev python-pip
apt -y install golang libpcap-dev
export GOROOT=$(go env GOROOT)
# generate build directory variable
BUILD=$DIR/../build/src/github.com/mongodb/
# delete previous build directory
rm -rf $BUILD/mongo-tools
# generate new build directory
mkdir -p $BUILD
# find out how many cores we have and we use that many
CORES=$(grep -c ^processor /proc/cpuinfo)
# go to the build directory
pushd $BUILD
# clone the mongo by branch
git clone https://github.com/mongodb/mongo-tools
# the mongo directory is a variables
MONGO_TOOLS=$BUILD/mongo-tools
# go to the mongo directory
pushd $MONGO_TOOLS
# checkout the mongo release
git checkout tags/${MONGODB_RELEASE}
bash ./build.sh
chown root:adm -R ./bin
chmod o-rwx -R ./bin
chmod ug+rx ./bin/*
cp -r ./bin/. /usr/bin
# for PROGRAM in bsondump mongodump mongoexport mongofiles mongoimport mongoreplay mongorestore mongostat mongotop
# do
# go build -o bin/${PROGRAM} -tags "ssl sasl" ${PROGRAM}/main/${PROGRAM}.go
# done
# exit of the mongo directory
popd
# exit the build directory
popd
# delete current build directory
rm -rf $BUILD/mongo-tools
popd
# delete current build directory
rm -rf $BUILD/mongo-tools
I need to rebuild rabbitmq-server-3.1.5 with my changes to some of the static files.
But before doing that I thought of being sure if I can rebuild the rpm without my changes first, and struck with the below issue.
I just installed the source-rpm and edited the SPEC file and changed the version to next minor number, and run the command
rpmbuild -ba rabbitmq-server.spec
Below is the SPEC file,
%define debug_package %{nil}
Name: rabbitmq-server
Version: 3.1.5
Release: 2%{?dist}
License: MPLv1.1 and MIT and ASL 2.0 and BSD
Group: %{group_tag}
#Source: http://www.rabbitmq.com/releases/rabbitmq-server/v%{version}/%{name}-%{version}.tar.gz
Source:rabbitmq-server-3.1.5.tar.gz
Source1: rabbitmq-server.init
Source2: rabbitmq-script-wrapper
Source3: rabbitmq-server.logrotate
Source4: rabbitmq-server.ocf
URL: http://www.rabbitmq.com/
BuildArch: noarch
BuildRequires: erlang >= R12B-3, python-simplejson, xmlto, libxslt
Requires: erlang >= R12B-3, logrotate
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-%{_arch}-root
Summary: The RabbitMQ server
Requires(post): chkconfig initscripts
Requires(pre): chkconfig initscripts
%description
RabbitMQ is an implementation of AMQP, the emerging standard for high
performance enterprise messaging. The RabbitMQ server is a robust and
scalable implementation of an AMQP broker.
# We want to install into /usr/lib, even on 64-bit platforms
%define _rabbit_libdir %{_exec_prefix}/lib/rabbitmq
%define _rabbit_erllibdir %{_rabbit_libdir}/lib/rabbitmq_server-%{version}
%define _rabbit_wrapper %{_builddir}/`basename %{S:2}`
%define _rabbit_server_ocf %{_builddir}/`basename %{S:4}`
%define _plugins_state_dir %{_localstatedir}/lib/rabbitmq/plugins
%define _maindir %{buildroot}%{_rabbit_erllibdir}
%prep
%setup -q
%build
cp %{S:2} %{_rabbit_wrapper}
cp %{S:4} %{_rabbit_server_ocf}
make %{?_smp_mflags}
%install
rm -rf %{buildroot}
make install TARGET_DIR=%{_maindir} \
SBIN_DIR=%{buildroot}%{_rabbit_libdir}/bin \
MAN_DIR=%{buildroot}%{_mandir}
mkdir -p %{buildroot}%{_localstatedir}/lib/rabbitmq/mnesia
mkdir -p %{buildroot}%{_localstatedir}/log/rabbitmq
#Copy all necessary lib files etc.
install -p -D -m 0755 %{S:1} %{buildroot}%{_initrddir}/rabbitmq-server
install -p -D -m 0755 %{_rabbit_wrapper} %{buildroot}%{_sbindir}/rabbitmqctl
install -p -D -m 0755 %{_rabbit_wrapper} %{buildroot}%{_sbindir}/rabbitmq-server
install -p -D -m 0755 %{_rabbit_wrapper} %{buildroot}%{_sbindir}/rabbitmq-plugins
install -p -D -m 0755 %{_rabbit_server_ocf} %{buildroot}%{_exec_prefix}/lib/ocf/resource.d/rabbitmq/rabbitmq-server
install -p -D -m 0644 %{S:3} %{buildroot}%{_sysconfdir}/logrotate.d/rabbitmq-server
mkdir -p %{buildroot}%{_sysconfdir}/rabbitmq
rm %{_maindir}/LICENSE %{_maindir}/LICENSE-MPL-RabbitMQ %{_maindir}/INSTALL
#Build the list of files
echo '%defattr(-,root,root, -)' >%{_builddir}/%{name}.files
find %{buildroot} -path %{buildroot}%{_sysconfdir} -prune -o '!' -type d -printf "/%%P\n" >>%{_builddir}/%{name}.files
%pre
if [ $1 -gt 1 ]; then
# Upgrade - stop previous instance of rabbitmq-server init.d script
/sbin/service rabbitmq-server stop
fi
# create rabbitmq group
if ! getent group rabbitmq >/dev/null; then
groupadd -r rabbitmq
fi# create rabbitmq user
if ! getent passwd rabbitmq >/dev/null; then
useradd -r -g rabbitmq -d %{_localstatedir}/lib/rabbitmq rabbitmq \
-c "RabbitMQ messaging server"
fi
%post
/sbin/chkconfig --add %{name}
if [ -f %{_sysconfdir}/rabbitmq/rabbitmq.conf ] && [ ! -f %{_sysconfdir}/rabbitmq/rabbitmq-env.conf ]; then
mv %{_sysconfdir}/rabbitmq/rabbitmq.conf %{_sysconfdir}/rabbitmq/rabbitmq-env.conf
fi
%preun
if [ $1 = 0 ]; then
#Complete uninstall
/sbin/service rabbitmq-server stop
/sbin/chkconfig --del rabbitmq-server
# We do not remove /var/log and /var/lib directories
# Leave rabbitmq user and group
fi
# Clean out plugin activation state, both on uninstall and upgrade
rm -rf %{_plugins_state_dir}
for ext in rel script boot ; do
rm -f %{_rabbit_erllibdir}/ebin/rabbit.$ext
done
%files -f ../%{name}.files
%defattr(-,root,root,-)
%attr(0755, rabbitmq, rabbitmq) %dir %{_localstatedir}/lib/rabbitmq
%attr(0755, rabbitmq, rabbitmq) %dir %{_localstatedir}/log/rabbitmq
%dir %{_sysconfdir}/rabbitmq
%{_initrddir}/rabbitmq-server
%config(noreplace) %{_sysconfdir}/logrotate.d/rabbitmq-server
%doc LICENSE*
%clean
rm -rf %{buildroot}
I got the below error,
escript generate_app ebin/rabbit_app.in ebin/rabbit.app src
erlc -I include -o ebin -Wall -v +debug_info -Duse_specs -pa ebin src/app_utils.erl
erlc -I include -o ebin -Wall -v +debug_info -Duse_specs -pa ebin src/gen_server2.erl
erlc -I include -o ebin -Wall -v +debug_info -Duse_specs -pa ebin src/credit_flow.erl
src/credit_flow.erl:40: Warning: opaque type bump_msg() is not exported
erlc -I include -o ebin -Wall -v +debug_info -Duse_specs -pa ebin src/delegate_sup.erl
src/gen_server2.erl:526: Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in Erlang" chapter of the ERTS User's Guide for more information.
src/gen_server2.erl:590: Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in Erlang" chapter of the ERTS User's Guide for more information.
src/gen_server2.erl:598: Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in Erlang" chapter of the ERTS User's Guide for more information.
erlc -I include -o ebin -Wall -v +debug_info -Duse_specs -pa ebin src/dtree.erl
erlc -I include -o ebin -Wall -v +debug_info -Duse_specs -pa ebin src/file_handle_cache.erl
src/dtree.erl:44: type gb_tree() undefined
make: *** [ebin/dtree.beam] Error 1
make: *** Waiting for unfinished jobs....
src/file_handle_cache.erl:476: Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in Erlang" chapter of the ERTS User's Guide for more information.
src/file_handle_cache.erl:571: Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in Erlang" chapter of the ERTS User's Guide for more information.
src/file_handle_cache.erl:605: Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in Erlang" chapter of the ERTS User's Guide for more information.
src/file_handle_cache.erl:640: Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in Erlang" chapter of the ERTS User's Guide for more information.
src/file_handle_cache.erl:1139: Warning: erlang:now/0: Deprecated BIF. See the "Time and Time Correction in Erlang" chapter of the ERTS User's Guide for more information.
error: Bad exit status from /var/tmp/rpm-tmp.FjNb8Z (%build)
RPM build errors:
Bad exit status from /var/tmp/rpm-tmp.FjNb8Z (%build)
[david#thetemplate SPECS]$
whereas I didn't face this issue while performing these steps on the other higher version of Rabbitmq-server, and I successfully rebuilt the rpms too. I've no clue why this is happening and also I'm very new to these kind of builds.
would need some expert advice to solve this issue.
This is the important line in the error output:
src/dtree.erl:44: type gb_tree() undefined
In Erlang/OTP 17.0, the type gb_tree() was deprecated, and the type gb_trees:tree() was introduced to replace it. gb_tree() was finally removed in Erlang/OTP 18.0.
RabbitMQ 3.4.0 changed the type spec to use the newer type, and it is thus the earliest RabbitMQ version that can be built with Erlang/OTP 18. Here's the commit where the change was made.
To solve this problem, either use a newer version of RabbitMQ or an older version of Erlang/OTP.