How to build OpenSSH with no dependence on OpenSSL? - security

I am trying to build OpenSSH 7.3 without OpenSSL.
I ran $ ./configure --without-openssl.
And then running either $ make OPENSSL=no or $ make give the following error:
In file included from ../entropy.h:30:0,
from ../includes.h:174,
from arc4random.c:27:
../buffer.h:50:29: fatal error: openssl/objects.h: No such file or directory
compilation terminated.
make[1]: *** [arc4random.o] Error 1
make[1]: Leaving directory /local/store/openssh/openssh-7.3p1/openbsd-compat'
make: *** [openbsd-compat/libopenbsd-compat.a] Error 2
These includes are not properly wrapped with #ifdef WITH_OPENSSL, so are still reachable. What am I doing wrong?
How do I configure and build OpenSSH 7.3 without OpenSSL dependencies?
It seems that as of version 6.8 OpenSSH can be built without OpenSSL. From 6.8 release notes:
Support --without-openssl at configure time
Disables and removes dependency on OpenSSL. Many features,
including SSH protocol 1 are not supported and the set of crypto
options is greatly restricted. This will only work on systems
with native arc4random or /dev/urandom.
Also I found this message on OpenBSD CVS:
CVSROOT: /cvs
Module name: src
Changes by: markus#cvs.openbsd.org 2014/04/29 12:01:49
Modified files:
usr.bin/ssh : Makefile.inc auth.c authfd.c authfile.c
bufaux.c cipher.c cipher.h hostfile.c kex.c
key.c mac.c monitor.c monitor_wrap.c
myproposal.h packet.c roaming_client.c
ssh-agent.c ssh-keygen.c ssh-keyscan.c
ssh-keysign.c ssh-pkcs11.h ssh.c sshconnect.c
sshconnect2.c sshd.c
usr.bin/ssh/lib: Makefile
usr.bin/ssh/ssh: Makefile
usr.bin/ssh/sshd: Makefile
Log message:
make compiling against OpenSSL optional (make OPENSSL=no);
reduces algorithms to curve25519, aes-ctr, chacha, ed25519;
allows us to explore further options; with and ok djm

I built OpenSSH 7.7p1 without openssl using:
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-privsep-path=/var/empty --libexecdir=/usr/lib/openssh --without-openssl
I also used the patch from Linux From Scratch.

Related

error: field 'ctx' has incomplete type EVP_CIPHER_CTX

Problem: I need to install Cepstral (tts engine) into Freeswitch running Debian 8. Freeswitch is already up and running, but I needed to build it from source in order for it create the mod_cepstral module.
When I run make this is the error I get:
In file included from ./crypto/include/prng.h:17:0,
from ./crypto/include/crypto_kernel.h:50,
from ./include/srtp.h:53,
from srtp/srtp.c:46:
./crypto/include/aes_icm_ossl.h:66:20: error: field ‘ctx’ has incomplete type
EVP_CIPHER_CTX ctx;
^~~
In file included from srtp/srtp.c:50:0:
./crypto/include/aes_gcm_ossl.h:58:18: error: field ‘ctx’ has incomplete type
EVP_CIPHER_CTX ctx;
^~~
Makefile:646: recipe for target 'srtp.lo' failed
make[1]: *** [srtp.lo] Error 1
make[1]: Leaving directory '/usr/src/freeswitch/libs/srtp'
Makefile:3931: recipe for target 'libs/srtp/libsrtp.la' failed
make: *** [libs/srtp/libsrtp.la] Error 2
I have been scouring the internet for solutions, but I am not a developer and this is way over my head. Any help would be appreciated.
cause newer OpenSSL don't expose struct EVP_CIPHER_CTX ,
try this
EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new();
EVP_CIPHER_CTX_init(ctx);
//do sth here
//...
EVP_CIPHER_CTX_free(ctx);
wget https://github.com/cisco/libsrtp/archive/v2.1.0.tar.gz
tar xfv v2.1.0.tar.gz
cd libsrtp-2.1.0
./configure --prefix=/usr --enable-openssl
make shared_library && sudo make install
Get the latest version of libsrtp.
It appears that there is a dependency on OpenSSL, but the version of OpenSSL you are using is incompatible. You are using OpenSSL 1.1.0 but you need to use OpenSSL 1.0.2
After talking with support at Cepstral, we determined that Jessie (Debian 8) is not yet fully compatible. I rebuilt the server with Debian 7 and it is working fine now.

Unbound module llvm

I have been working through the LLVM Kaleidoscope Tutorial for OCaml. On the third part of the tutorial, I have navigated to the example code in the folder
OCaml-Kaleidoscope\Chapter3
I am encountering an issue when compiling with
ocamlbuild toy.byte
on cygwin. This is the code given in the tutorial to compile.
The error I am getting is
''ocamlc.opt -c -o codegen.cmo codegen.ml
File "codegen.ml", line 5, characters 5-9:
Error: Unbound module Llvm
Exit code 2 while executing this command:
''ocamlc.opt -c -o codegen.cmo codegen.ml
I looked up some solutions to this issue. One solution I found was to use
ocamlbuild -use-ocamlfind toy.byte -package llvm
instead of
ocamlbuild toy.byte
However, when I tried that I received this error:
Failure: ocamlfind not found on path, but -no-ocamlfind not used.
To fix this I tried:
opam install ocamlfind
But ocamlfind is already installed.
Another solution I found was to use:
opam install llvm
This resulted in:
The following actions will be performed:
- install llvm 3.7
=-=- Gathering sources =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=-=- Processing actions -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
[llvm: ./install.sh 3.7] Command started
[ERROR] The installation of llvm failed at "./install.sh 3.7 make
C:\\cygwin64\\home\\setup\\.opam\\system
C:\\cygwin64\\home\\setup\\.opam\\system\\lib".
[llvm: ocamlfind remove] Command started
#=== ERROR while installing llvm.3.7 ==========================================#
# opam-version 1.3.0~dev2 (d4f7e01216dbb44af4e7cc6539a1b0afa9be9d2c)
# os win32
# command bash -c ./install.sh 3.7 make C:/cygwin64/home/setup/.opa m/system C:/cygwin64/home/setup/.opam/system/lib
# path C:\cygwin64\home\setup\.opam\system\build\llvm.3.7
# exit-code 2
# env-file C:\cygwin64\home\setup\.opam\system\build\llvm.3.7\llvm-1 0768-58c514.env
# stdout-file C:\cygwin64\home\setup\.opam\system\build\llvm.3.7\llvm-1 0768-58c514.out
# stderr-file C:\cygwin64\home\setup\.opam\system\build\llvm.3.7\llvm-1 0768-58c514.err
### stdout ###
# [...]
# config.status: executing bindings/ocaml/Makefile.ocaml commands
# make: Entering directory '/home/setup/.opam/system/build/llvm.3.7/build/bindin gs'
# llvm[0]: Constructing LLVMBuild project information.
# make[1]: Entering directory '/home/setup/.opam/system/build/llvm.3.7/build/bin dings/ocaml'
# make[2]: Entering directory '/home/setup/.opam/system/build/llvm.3.7/build/bin dings/ocaml/llvm'
# llvm[2]: Compiling llvm_ocaml.c for Release+Asserts build
# /home/setup/.opam/system/build/llvm.3.7/Makefile.rules:1536: recipe for target '/home/setup/.opam/system/build/llvm.3.7/build/bindings/ocaml/llvm/Release+Asse rts/llvm_ocaml.o' failed
# make[2]: Leaving directory '/home/setup/.opam/system/build/llvm.3.7/build/bind ings/ocaml/llvm'
# /home/setup/.opam/system/build/llvm.3.7/Makefile.rules:880: recipe for target 'all' failed
# make[1]: Leaving directory '/home/setup/.opam/system/build/llvm.3.7/build/bind ings/ocaml'
# /home/setup/.opam/system/build/llvm.3.7/Makefile.rules:939: recipe for target 'ocaml/.makeall' failed
# make: Leaving directory '/home/setup/.opam/system/build/llvm.3.7/build/binding s'
### stderr ###
# [...]
# configure: WARNING: dlopen() not found - disabling plugin support
# configure: WARNING: mmap() of a fixed address required but not supported
# configure: WARNING: mmap() of files required but not found
# configure: WARNING: --enable-bindings=ocaml specified, but OUnit 2 is not inst alled. Tests will not run
# + make -C bindings all SYSTEM_LLVM_CONFIG=llvm-config
# gcc.exe: error: /home/setup/.opam/system/build/llvm.3.7/bindings/ocaml/llvm/ll vm_ocaml.c: No such file or directory
# gcc.exe: fatal error: no input files
# compilation terminated.
# /usr/bin/rm: cannot remove '/home/setup/.opam/system/build/llvm.3.7/build/bind ings/ocaml/llvm/Release+Asserts/llvm_ocaml.d.tmp': No such file or directory
# make[2]: *** [/home/setup/.opam/system/build/llvm.3.7/build/bindings/ocaml/llv m/Release+Asserts/llvm_ocaml.o] Error 1
# make[1]: *** [all] Error 1
# make: *** [ocaml/.makeall] Error 2
=-=- Error report -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
The following actions failed
- install llvm 3.7
No changes have been performed
=-=- llvm.3.7 troubleshooting -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
=> This package relies on external (system) dependencies that may be missing.
`opam depext llvm.3.7' may help you find the correct installation for your
system.
I am using version 3.8.0 of llvm and version 4.02.3 of OCaml from this link.
Am I on the right track? What do I need to do to fix this?
As I have answered in your question LLVM tutorial OCaml Compilation Assembler Error, your best way is not to use Windows.
OPAM is now usable in Cygwin OCaml or even in MinGW OCaml (using Cygwin opam binary) but packages in the OPAM repository are not tested in these environments. Just avoid them unless you are experienced with OCaml program development in Windows.
If you stick to Windows, then check the build at C:\cygwin64\home\setup\.opam\system\build\llvm.3.7. There should be stdout and stderr log files which can help to understand what happend.

Can't compile QT 5.5.1 on Amazon Centos: Project ERROR: Unknown module(s) in QT: quick

I am trying to compile QT 5.5.1 on Amazon AMI 2015.09, which looks la lot like Centos 6.5.
I keep getting this error:
Project ERROR: Unknown module(s) in QT: quick
However, there is no quick module that I can find, and no obvious way to enable to disable it from looking at the ./configure script.
My procedure:
I downloaded qt-everywhere-opensource-src-5.5.1.tar.gz
I unpacked it.
I ran ./configure
Confirmed that I want the opensource license and agreed to the LGPL.
Ran gmake -j4 (but I get the same behavior with gmake.
Interestingly, make distclean gives me this error:
Project ERROR: Unknown module(s) in QT: quick-private
Here are all of the errors sent to STDERR:
Checking for openal... Checking for bluez... no
Checking for bluez_le... no
Checking for btapi10_2_1... no
/home/ec2-user/qt-everywhere-opensource-src-5.5.1/qtmultimedia/qtmultimedia.pro:28: Variable GST_VERSION is not defined.
Checking for resourcepolicy... no
Checking for gpu_vivante... no
Checking for libbb2... no
no
Project MESSAGE: Unsupported Bluetooth platform, will not build a working QtBluetooth library.
Project MESSAGE: Either no Qt D-Bus found or no BlueZ headers.
qbluetoothdevicediscoveryagent_p.h:0: Note: No relevant classes found. No output generated.
qbluetoothservicediscoveryagent_p.h:0: Note: No relevant classes found. No output generated.
qbluetoothserver_p.h:0: Note: No relevant classes found. No output generated.
qbluetoothlocaldevice_p.h:0: Note: No relevant classes found. No output generated.
Checking for assimp... no
Project ERROR: Unknown module(s) in QT: quick
gmake[4]: *** [sub-textureandlight-make_first] Error 3
gmake[3]: *** [sub-canvas3d-make_first] Error 2
gmake[2]: *** [sub-canvas3d-make_first] Error 2
gmake[1]: *** [sub-examples-make_first] Error 2
gmake: *** [module-qtcanvas3d-make_first] Error 2
gmake: *** Waiting for unfinished jobs....
At another poster's suggestion I tried ./configure -skip qtquick but that didn't work:
$ ./configure -skip qtquick
+ cd qtbase
+ /home/ec2-user/qt-everywhere-opensource-src-5.5.1/qtbase/configure -top-level -skip qtquick
Attempting to skip non-existent module qtquick.
$
this is what I think will solve your problems:
You have use `make confclean' instead of making distclean for deleting the previous configuration.
Configure in verbose mode — more information will be provided, sorry, I don't remember exact flag, if I'm not mistaken, it's -v.
If you don't need quick, add -skip qtquick to the configure.

Unsupported protocol while download tar.gz package

I have just upgrade my CMake from version 2.8 to 3.2.
It's working like a charm in CMake 2.8 but, after the upgrade, it's failing.
I'm trying to build third party library using ExternalProject_Add() CMake function.
ExternalProject_Add(
luacov
URL https://github.com/keplerproject/luacov/archive/v0.7.tar.gz
DOWNLOAD_DIR ${EXTERNAL_PROJECT_DOWNLOAD_DIR}
CMAKE_ARGS -DCMAKE_TOOLCHAIN_FILE=${MY_TOOLCHAIN_FILE}
SOURCE_DIR ${EXTERNAL_PROJECT_SRC_DIR}/luacov
BINARY_DIR ${EXTERNAL_PROJECT_BUILD_DIR}/luacov
UPDATE_COMMAND ""
PATCH_COMMAND ""
)
MY OBSERVATION:
Using GIT_REPOSITORY option, ExternalProject_Add() allow http and https protocol to download external project.
Using URL option, ExternalProject_Add() only allow http, but not https protocol to download external project.
PROBLEM:
Is there any way to download and build external project using https protocol?
ERROR:
[ 16%] Performing download step (download, verify and extract) for 'luacov'
-- downloading...
src='https://github.com/keplerproject/luacov/archive/v0.7.tar.gz'
dst='/home/build/my_build/external_projects/downloads/v0.7.tar.gz'
timeout='none'
CMake Error at /home/build/my_build/luacov-prefix/src/luacov-stamp/download-luacov.cmake:21 (message):
error: downloading
'https://github.com/keplerproject/luacov/archive/v0.7.tar.gz' failed
status_code: 1
status_string: "Unsupported protocol"
log: Protocol "https" not supported or disabled in libcurl
Closing connection -1
make[3]: *** [luacov-prefix/src/luacov-stamp/luacov-download] Error 1
make[2]: *** [CMakeFiles/luacov.dir/all] Error 2
make[1]: *** [CMakeFiles/luacov.dir/rule] Error 2
make: *** [luacov] Error 2
The problem may be that the CURL library shipped with CMake isn't build with SSL support by default. I had to compile cmake with:
./bootstrap --system-curl
make
sudo make install
... and that worked, because my system's curl has SSL support.
What it worked for me is the following:
Update openssl
sudo apt-get install openssl libssl-dev
Modify bootstrap file to enable CMAKE_USE_OPENSSL. Replace this line by:
cmake_options="-DCMAKE_BOOTSTRAP=1 -DCMAKE_USE_OPENSSL=ON"
Run bootstrap script normally in cmake folder
/#path_to_cmake/bootstrap
In my ExternalProject_Add(), I have use GIT_REPOSITORY insted of URL option.
#URL https://github.com/keplerproject/luacov/archive/v0.7.tar.gz
GIT_REPOSITORY https://github.com/keplerproject/luacov.git
And luacov download and build successfully.
For any https protocol use DOWNLOAD_COMMAND option of ExternalProject_Add() function.
DOWNLOAD_COMMAND wget https://github.com/keplerproject/luacov/archive/v0.7.tar.gz
and its working as expected.
Thanks.
I was having the same problem building a library in a computer in which CMake had not support to https protocol.
I had to build cmake myself with the option -DCMAKE_USE_OPENSSL=ON as suggested by #dekkard's comment.
For CMake 3.8.0 this worked for me:
Install/update openssl:
yum install openssl openssl-devel
Adapt the solution from a CMake forum reply by Brad King:
./configure --prefix=/software/cmake-3.8.0/ --parallel=${NPROC} -- \
-/DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_USE_OPENSSL:BOOL=ON
make -j ${NPROC}
make install
Enjoy!
Looks like with Cmake 3.2.1 it works as expected.
Here's my sample project/CMakeLists.txt:
PROJECT(TestDownload)
SET(CMAKE_CXX_COMPILER "/path/to/bin/g++")
SET(CMAKE_C_COMPILER "/path/to/bin/gcc")
SET(CMAKE_CXX_FLAGS "")
SET(CMAKE_C_FLAGS "")
cmake_minimum_required(VERSION 3.2)
include(ExternalProject)
ExternalProject_Add(
luacov
URL https://github.com/keplerproject/luacov/archive/v0.7.tar.gz
DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/luacov
UPDATE_COMMAND ""
PATCH_COMMAND ""
INSTALL_COMMAND ""
)
And the commands:
$ cd project
$ mkdir build && cd build
$ cmake ..
...
$ make all
Scanning dependencies of target luacov
[ 12%] Creating directories for 'luacov'
[ 25%] Performing download step (download, verify and extract) for 'luacov'
-- downloading...
src='https://github.com/keplerproject/luacov/archive/v0.7.tar.gz'
dst='/tmp/project/build/luacov/v0.7.tar.gz'
timeout='none'
-- [download 7% complete]
-- [download 21% complete]
-- [download 76% complete]
-- [download 100% complete]
-- downloading... done
-- verifying file...
file='/tmp/project/build/luacov/v0.7.tar.gz'
-- verifying file... warning: did not verify file - no URL_HASH specified?
-- extracting...
src='/tmp/project/build/luacov/v0.7.tar.gz'
dst='/tmp/project/build/luacov-prefix/src/luacov'
-- extracting... [tar xfz]
-- extracting... [analysis]
-- extracting... [rename]
-- extracting... [clean up]
-- extracting... done
[ 37%] No patch step for 'luacov'
[ 50%] No update step for 'luacov'
...
I will often just modify the url from https to http.

build octave package from source

I want to install octaviz package in octave software.
From the documentation there is stated:
-You'll need octave 2.1.53 or later and VTK CVS to build octaviz. To compile octaviz, run ccmake . in the root directory of the source tree, then make and finally make install.
I first ran ccmake ., and it completed successfully after I installed some libs that I was missing.
But, the I ran "make" and it exits with the following errors:
>> make
[ 1%] Built target vtkWrapOctave
[ 1%] Building CXX object Common/CMakeFiles/octaviz.dir/octaviz.o
/home/user12345/octave/octaviz/Common/octaviz.cc:31:24: fatal error: octave/oct.h: No such file or directory
#include <octave/oct.h>
^
compilation terminated.
make[2]: *** [Common/CMakeFiles/octaviz.dir/octaviz.o] Error 1
make[1]: *** [Common/CMakeFiles/octaviz.dir/all] Error 2
make: *** [all] Error 2
Any idea what I am missing here?
You are missing the octave/oct.h header. This usually means that you don't have Octave installed. If you do have it installed, maybe you are missing the header files and shared libraries (if you are using Linux, did you install octave's -dev or -devel packaqes?) If you have them installed, you must have ran the configure script incorrectly. Either specify the correct options or set the CXX_FLAGS. If you don't know about compiler flags you probably should not change them and instead figure out how to install the octave libraries correctly.

Resources