shingy92 / ussd-openbts

GNU Affero General Public License v3.0
2 stars 15 forks source link

make doesn't work #1

Closed the-bobo closed 6 years ago

the-bobo commented 6 years ago

following the README.md cd ./openbts/ make make: *** No targets specified and no makefile found. Stop.

make -f Makeflie.am
Makefile.am:22: /Makefile.common: No such file or directory
Makefile.am:50: *** missing separator.  Stop.

make -f Makefile.common
make: *** No targets.  Stop.

None of these work with sudo either. Any tips?

the-bobo commented 6 years ago

trying autoconf seems to do nothing (echo $? returns 0 so it exits successfully), trying automake fails:

Makefile.am: error: required file './README' not found
configure.ac:142: error: required file 'CommonLibs/Makefile.in' not found
configure.ac:142: error: required file 'NodeManager/Makefile.in' not found
TransceiverRAD1/Makefile.am:119: warning: source file '../apps/GetConfigurationKeys.cpp' is in a subdirectory,
TransceiverRAD1/Makefile.am:119: but option 'subdir-objects' is disabled
automake: warning: possible forward-incompatibility.
automake: At least a source file is in a subdirectory, but the 'subdir-objects'
automake: automake option hasn't been enabled.  For now, the corresponding output
automake: object file(s) will be placed in the top-level directory.  However,
automake: this behaviour will change in future Automake versions: they will
automake: unconditionally cause object files to be placed in the same subdirectory
automake: of the corresponding sources.
automake: You are advised to start using 'subdir-objects' option throughout your
automake: project, to avoid future incompatibilities.
the-bobo commented 6 years ago

trying more things fails as well:

git clone --recursive https://github.com/ctxis/openbts.git

sudo apt-get update && sudo apt-get install automake autoconf autogen libtool shtool

autoconf

sudo autoconf

sudo autoconf

sudo autoreconf -i

sudo ./configure

doing sudo autoconf twice makes the second autoconf exit without an error, but we need to do autoreconf -i to get the libtool and other stuff to be recognized

once we do this we can ./configure and it will run, but then crash saying it cannot find Makefile.in

...
checking for x86-AVX xgetbv  output... unknown
checking for zmq_init in -lzmq... yes
checking whether libzmq installation works... yes
checking for _init in -la53... yes
checking ortp api version... >= 0.22.0
checking for gethostbyname_r... yes
checking for gethostbyname2_r... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: error: cannot find input file: `Makefile.in'
the-bobo commented 6 years ago

trying

sudo aclocal
sudo autoconf
sudo autoheader
sudo ./configure

fails with the same error:

checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: error: cannot find input file: `Makefile.in'
the-bobo commented 6 years ago

changing line 31 in configure.ac from AM_INIT_AUTOMAKE([-Wno-portability]) to AM_INIT_AUTOMAKE([subdir-objects]) makes sudo automake --add-missing shut up about subdir-objects, but it still spews a bunch of warnings and gives a non-zero exit code of 1 if you echo $? after:

Makefile.common:23: warning: ':='-style assignments are not portable
CLI/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
CLI/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
CommonLibs/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
CommonLibs/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
Control/Makefile.am:23:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
Control/Makefile.am:23:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
GPRS/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
GPRS/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
GSM/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
GSM/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
GSMShare/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
GSMShare/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
Globals/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
Globals/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
Makefile.am:22:   'Makefile.common' included from here
Makefile.am: error: required file './README' not found
Makefile.common:23: warning: ':='-style assignments are not portable
NodeManager/Makefile.am:21:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
NodeManager/Makefile.am:21:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
Peering/Makefile.am:23:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
Peering/Makefile.am:23:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
SGSNGGSN/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
SGSNGGSN/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
SIP/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
SIP/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
SMS/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
SMS/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
Scanning/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
Scanning/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
TRXManager/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
TRXManager/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
Transceiver52M/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
Transceiver52M/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
TransceiverRAD1/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
TransceiverRAD1/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
apps/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
apps/Makefile.am:22:   'Makefile.common' included from here
apps/Makefile.am:24: warning: ':='-style assignments are not portable
Makefile.common:23: warning: ':='-style assignments are not portable
config/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
config/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:23: warning: ':='-style assignments are not portable
doc/Makefile.am:22:   'Makefile.common' included from here
Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)
doc/Makefile.am:22:   'Makefile.common' included from here

The ./configure still ends with the same error about not finding Makefile.in

the-bobo commented 6 years ago

Looking more closely at the errors from sudo automake --add-missing it looks like this one is important:

Makefile.common:47: warning: shell ./$(top_builddir: non-POSIX variable name
Makefile.common:47: (probably a GNU make extension)

this error seems to repeat a lot before automake exits with error code 1.

looking at line 47 of Makefile.common we see: REPOREV = -D'REPO_REV="$(shell ./$(top_builddir)/Globals/GrabRepoInfo.sh $(top_builddir))"'

top_builddir doesn't seem to ever be defined anywhere in Makefile.common but it's used a lot - what should this value be?

FYI i'm on Ubuntu 16.04 (16.04.3 LTS Xenial)

the-bobo commented 6 years ago

Changing the AM_INIT_AUTOMAKE line from line 31 of configure.ac to AM_INIT_AUTOMAKE([subdir-objects -Wno-portability]) now gives us a different error when we run sudo automake --add-missing.

we no longer have subdir-objects or non-POSIX variable name errors, but now we have this:

Makefile.am: error: required file './README' not found

doing sudo ./configure still gives the missing Makeflie.in error:

configure: creating ./config.status
config.status: error: cannot find input file: `Makefile.in'
the-bobo commented 6 years ago

doing sudo touch README makes automake happy, and now sudo ./configure is happy too. both exit with status 0 (seen using echo $?).

now doing sudo make seems to be running...and it exits with an error status of 0 (successful)!

the-bobo commented 6 years ago

here's the way to solve this:

old setup instructions:

git clone https://github.com/RangeNetworks/dev.git
cd dev
./clone.sh
./switchto.sh master
./build.sh B200
rm -rf openbts
git clone https://github.com/ctxis/openbts.git
cd openbts
make

new setup instructions: assuming fresh install of Ubuntu 16.04 (lsb_release -a shows 16.04.3 after i update the install, may have done sudo apt-get dist-upgrade before that)

sudo apt-get update && sudo apt-get upgrade
git clone https://github.com/RangeNetworks/dev.git
cd dev
./clone.sh
# removed the ./switch.to because you are already on master and this can cause problems in ubuntu
./build.sh B200
rm -rf openbts
git clone --recursive https://github.com/ctxis/openbts.git # changed to recursive to solve some other problems with Makefiles in subdirectories
cd openbts
# change AM_INIT_AUTOMAKE([-Wno-portability]) in configure.ac to AM_INIT_AUTOMAKE([subdir-objects -Wno-portability]) and save the file (line 31 of configure.ac)
sudo apt-get update && sudo apt-get install automake autoconf autogen libtool shtool
sudo touch README
sudo autoreconf -vi
sudo autoconf
sudo ./configure
sudo make

hopefully this works, if it doesn't just retrace my steps above. these changes should be merged into the README.md and checking for dependencies should happen before trying to do autoconf or autoreconf

the-bobo commented 6 years ago

Okay I verified that my instructions in https://github.com/shingy92/ussd-openbts/issues/1#issuecomment-362730821 will successfully build this modified version of OpenBTS, but I can't get it to actually run.

when i cd /OpenBTS and then sudo ./sipauthserve & sudo ./smqueue & sudo ./OpenBTS it still runs the old version of OpenBTS without USSD support. This can be verified at the OpenBTS> command prompt where the command sendss does nothing.

How do I get ./OpenBTS to call the new USSD-enabled version of OpenBTS? I can't find that executable to call it, where should it be after the make process successfully completes?

after i make the modified OpenBTS i do the following:

// install
- cd BUILDS/the-build
- sudo dpkg -i *.deb
- choose to overwrite odbcinst.ini
# don't have to overwrite anything because i've already installed OpenBTS once
- sudo apt-get -f install
- choose to overwrite named.conf.options
- choose to overwrite bind9
# don't have to overwrite anything because i've already installed OpenBTS once

- configure 2nd wired interface to 192.168.10.1/24
# skipped this step because i'm accessing via a USB connected to the B200

// This might be necessary to make sure the Ettus radio firmware/fpga match
// the API used in UHD 3.9
- sudo /usr/lib/uhd/utils/uhd_images_downloader.py
- uhd_image_loader --args="type=usrp2,addr=192.168.10.3"

// Start the services
- cd /OpenBTS
- sudo ./sipauthserve &
- sudo ./smqueue &
- sudo ./OpenBTS

These instructions found at: https://sourceforge.net/p/openbts/mailman/message/35207656/

the-bobo commented 6 years ago

Found the new, hopefully USSD-enabled version of OpenBTS in <snip>/dev/openbts/app. Trying to run sudo ./OpenBTS && sudo /OpenBTS/sipauthserve & sudo /OpenBTS/smqueue results in error: OpenBTS.cpp:185:startTransceiver: Transceiver quit with status 256. Exiting.

is it because osmo-trx is not included in this USSD-modified version of OpenBTS?

the-bobo commented 6 years ago

Okay, somehow it all works now. Here's the exact process I followed:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install git
cd WhateverDirYouWant
git clone https://github.com/RangeNetworks/dev.git
cd dev
./clone.sh
./build.sh B200
# consider editing build.sh to call dpkg -j4 to use 4 cores, or whatever number of cores you want
rm -rf openbts
git clone --recursive https://github.com/ctxis/openbts.git 
# changed to recursive to solve some other problems with Makefiles in subdirectories
cd openbts
# change AM_INIT_AUTOMAKE([-Wno-portability]) in configure.ac to AM_INIT_AUTOMAKE([subdir-objects -Wno-portability]) and save the file (line 31 of configure.ac)
sudo apt-get update && sudo apt-get install automake autoconf autogen libtool shtool
sudo touch README
sudo autoreconf -vi
# removed this, didn't need it - sudo autoconf
sudo ./configure --with-uhd
# added --with-uhd here, this made a difference i think
sudo make
cd ../BUILDS/the-build
sudo dpkg -i *.deb
# choose to overwrite odbcinst.ini - didn't need to do this, was already done first time i installed OpenBTS
sudo apt-get -f install
# choose to overwrite named.conf.options - didn't need to do this, was already done first time i installed OpenBTS
# choose to overwrite bind9 - didn't need to do this, was already done first time i installed OpenBTS
sudo /usr/lib/uhd/utils/uhd_images_downloader.py 
# didn't need to do this, was already done first time i installed OpenBTS
uhd_image_loader --args="type=usrp2,addr=192.168.10.3
# didn't need to do this, was already done first time i installed OpenBTS
cd /OpenBTS
sudo ./sipauthserve &
sudo ./smqueue &
sudo ./OpenBTS
# i think the order you start these in is relevant

Now you should see an OpenBTS> prompt. Type help sendss - if you get meaningful explanation back then you have done it correctly!

First time i tried this my test phone wasn't in the tmsis database anymore, but after unplugging plugging back in the B200 radio i was able to find it again. Here is how i startup OpenBTS:

#unplug USB cord of B200 from laptop
#plug back in
uhd_find_devices #may have to do twice if it errors
uhd_usrp_probe #may have to do twice if it errors
cd /OpenBTS
sudo ./sipauthserve &
sudo ./smqueue &
sudo ./OpenBTS

in a separate terminal window cd to whatever/dev/NodeManager' andsudo asterisk -c(make sure you've already done thechownstuff and added the IMSI of your phone usingnmcli.py` per the instructions in https://sourceforge.net/p/openbts/mailman/message/35217704/ see the email with timestamp 2016-07-07 20:39:19)

then your stuff should run.

EDIT: getting this awful can't write to mem_sip_buddies error when trying to run ./sipauthserve now.

remediation: 1) flashing down to an earlier UHD driver version -- run the following: sudo ./uhd_images_downloader.py -f uhd-images_003.008.002-release.zip -c 164e052f2192f3652b03ee5976c9f53b --verbose