OpenvSwitch building, installation and testing problem - openvswitch

I am trying to install OpenvSwitch on Ubuntu 18.04.
I have two kernels version which are 5.11.0-27-generic and 5.4.0-42-generic.
I set ./configure to build 5.4.0-42-generic version.
Then I use command 'make modules_install', and I get the following message
"[openvswitch-2.16.2]make modules_install
cd datapath/linux && make modules_install
make[1]: 進入目錄「/home/user/下載/openvswitch-2.16.2/datapath/linux」
make -C /lib/modules/5.4.0-42-generic/build M=/home/user/下載/openvswitch-2.16.2/datapath/linux modules_install
make[2]: 進入目錄「/usr/src/linux-headers-5.4.0-42-generic」
INSTALL /home/user/下載/openvswitch-2.16.2/datapath/linux/openvswitch.ko
INSTALL /home/user/下載/openvswitch-2.16.2/datapath/linux/vport-geneve.ko
INSTALL /home/user/下載/openvswitch-2.16.2/datapath/linux/vport-gre.ko
INSTALL /home/user/下載/openvswitch-2.16.2/datapath/linux/vport-lisp.ko
INSTALL /home/user/下載/openvswitch-2.16.2/datapath/linux/vport-stt.ko
INSTALL /home/user/下載/openvswitch-2.16.2/datapath/linux/vport-vxlan.ko
DEPMOD 5.4.0-42-generic
Warning: modules_install: missing 'System.map' file. Skipping depmod.
make[2]: 離開目錄「/usr/src/linux-headers-5.4.0-42-generic」
/sbin/depmod sed -n 's/#define UTS_RELEASE "\([^"]*\)"/\1/p' /lib/modules/5.4.0-42-generic/build/include/generated/utsrelease.h"
The result seems to be success.
However, I use mininet to set a topology which have three eths connect to a switch.
'mn --topo=single,3 --controller=none --mac'
Next I add a flow that is 'ovs-ofctl add-flow s1 action=normal'
and 'pingall'
The wireshark gets all icmp packets.
I add a code in vport.c in advance.
The code is 'printk(KERN_ERR "\r\n!!!print1 !!!\r\n)"'
However, dmesg doesn't show printk.
I found the 'insmod' command will show the following error
'insmod: ERROR: could not insert module openvswitch.ko: Invalid module format'
Is there anything wrong in my building and installation process?
How can I show printk message in dmesg?

Related

Manjaro install ncurses5-compat-libs

I'm trying to install this package ncurses5-compat-libs but I can because of the following problem.
What I did:
1. yay ncurses5-compat-libs
There are 2 types of errors:
Either I will check 'Y' and I will add the key, so in this case, I will receive the error message as follow
gpg: keyserver receive failed: Permission denied
==> Error: Problem importing keys
Or I will check as 'n' to don't add the key and I will receive
==> Verifying source file signatures with gpg...
ncurses-6.1.tar.gz ... FAILED (unknown public key 702353E0F7E48EDB)
==> ERROR: One or more PGP signatures could not be verified!
Error downloading sources: ncurses5-compat-libs
2. sudo gpg --recv-keys C52048C0C0748FEE227D47A2702353E0F7E48EDB
I've tried to add it manually but it didn't work.
3. sudo gpg --recv-keys 702353E0F7E48EDB
Also this one I've tried to add it manually but it didn't work
4. yay -S --noconfirm --needed ncurses5-compat-libs
5. Trying to fallow this forum
and least but not last
6. I've tried to clone the repository by hand by following
git clone http://aur.archlinux.org/ncurses5-compat-libs.git
cd ncurses5-compat-libs
sudo gpg --recv-keys C52048C0C0748FEE227D47A2702353E0F7E48EDB
makepkg -sic
cd ..
sudo rm -r ncurses5-compat-libs
And guess what, I'm back from where I started...
==> Verifying source file signatures with gpg...
ncurses-6.1.tar.gz ... FAILED (unknown public key 702353E0F7E48EDB)
==> ERROR: One or more PGP signatures could not be verified!
Error downloading sources: ncurses5-compat-libs
Dose any of you guys have any idea how can I fix this problem? If so let me know because I'm getting crazy already not been able to fix this.
You shouldn't need specifically ncurses5-compat-libs if you have a higher version of ncurses. Because version 6 is backwards compatible with version 5. You need to check whether you have libtinfo.so.6 or not. If you have it then you just need to create a system link. Check if you have libtinfo.so.6, so Run:
ls /lib/ | grep libtinfo
if you can't see libtinfo.so.6, you need to install ncurses (the current latest version of it: 6.2) and then create a system link that I mentioned below. so run:
sudo pacman -S ncurses
sudo pacman -S lib32-ncurses
if you have libtinfo.so.6 then run:
sudo link /lib/libtinfo.so.6 /lib/libtinfo.so.5
I went a step further from creating the link in the other answer here:
sudo link /lib/libtinfo.so.6 /lib/libtinfo.so.5
And created a dummy package so I could build something that depended on that being a thing:
$ cat /opt/aur/ncurses5-compat-libs-dummy/PKGBUILD
pkgname='ncurses5-compat-libs'
pkgver=6.1
pkgrel=1
arch=(any)
provides=('libtinfo5')
$ cd /opt/aur/ncurses5-compat-libs/dummy
$ makepkg -si
worked like a charm

Issue while installing Redis on a Pi

I'm trying to install Redis on my Pi. Sames steps as explained in next link: https://redis.io/download
$ wget http://download.redis.io/releases/redis-5.0.5.tar.gz
$ tar xzf redis-5.0.5.tar.gz
$ cd redis-5.0.5
$ make
After a while next messages gets returned-->
/usr/bin/ld: networking.o: in function `createClient':
/home/pi/redis-stable/src/networking.c:109: undefined reference to `__atomic_fetch_add_8'
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:219: redis-server] Error 1
make[1]: Leaving directory '/home/pi/redis-stable/src'
make: *** [Makefile:6: all] Error 2
Other approaches:
#!/bin/bash
# Installing redis from tar, we need the newest for Redis Stream
rm -rf /etc/redis
mkdir -p /etc/redis
cd /etc/redis
wget http://download.redis.io/releases/redis-5.0.3.tar.gz
tar xzf redis-5.0.3.tar.gz
cd redis-5.0.3
make cleandist
make
make install
I haven't run into this issue myself, but it seems that libatomic.so provides the symbol on my Raspberry Pi. So try adding -latomic to the linker flags (LDFLAGS='-latomic' to configure if the project uses GNU Autoconf, -DCMAKE_SHARED_LINKER_FLAGS='-latomic' if it uses cmake, etc).
You may also have to install the package libatomic-ops-dev as well (if not already installed)
EDIT: Seems other people have run into this. See for example this redis bug: https://github.com/antirez/redis/issues/6275
Also redis seems to have it's own obscure build system. It may work to do: make FINAL_LIBS=-latomic or you may have to patch src/Makefile to add -latomic to the FINAL_LIBS variable

Installation of sql relay fails

I just created a docker container and tried to install SQL Relay inside it.
I've checked the prerequisites here and followed the installation documents here.
However, at the end of make install of sqlrelay, I saw an error like this:
update-rc.d: /etc/init.d/sqlrelay: file does not exist
update-rc.d: /etc/init.d/sqlrcachemanager: file does not exist
make[1]: *** [install] Error 1
make[1]: Leaving directory `/sqlrelay-0.66.0/init'
make: *** [install-init] Error 2
What might be wrong with my installation?
Here's the docker file I used to start my installation:
FROM ubuntu:trusty
RUN apt-get update && \
apt-get install libxml2-dev libpcre3 libpcre3-dev libmysqld-dev -y
RUN apt-get install mysql-server libmysqlclient-dev -y
# sql relay prerequisites
RUN apt-get install g++ make perl php5-dev python-dev ruby-dev \
tcl-dev openjdk-7-jdk erlang-dev nodejs-dev node-gyp mono-devel \
libmariadbclient-dev libpq-dev firebird-dev libfbclient2 libsqlite3-dev \
unixodbc-dev freetds-dev mdbtools-dev -y
COPY rudiments-0.56.0.tar.gz /
COPY sqlrelay-0.66.0.tar.gz /
EXPOSE 80
Here are the outputs of ./configure, make, and make install inside sqlrelay-0.66.0 folder:
configure_log
make_log
make_install_log
If you need more information of my installation process, just let me know. I can provide it.
I think you should use ADD instead of COPY in your lines such as
COPY rudiments-0.56.0.tar.gz /
Your COPY just copies the .tar.gz, but does not unpack them
as with ADD
If the <src> parameter of ADD is an archive in a recognised compression format, it will be unpacked
This is extracted from
What is the difference between the `COPY` and `ADD` commands in a Dockerfile?
I have recently hit the same issue. The issue I found was that the init Makefile was incorrectly detecting the use of systemctl on Ubuntu Trusty and putting the scripts there. Later on the script would try to find the scripts in init.d and fail.
The solution is to edit the Makefile: sqlrelay-X.X.X/init/Makefile
Replace:
install:
if ( test -d "/lib/systemd/system" ); \
With:
install:
if ( test -d "/lib/systemd/system_x" ); \
Make a similar change to the uninstall option later in the script and it will now correctly install on Ubuntu.

automake-1.13: command not found

I was try to install Apache 2.4.
This requires apr, apr-util and pcre.
I was trying to configure pcre. I use the below command inside pcre directory :
$ ./configure --prefix=/usr/httpd*/srclib/pcre/
after this,
$ make
Output is like this :
cd . && /bin/sh /usr/httpd-2.4.9/srclib/pcre-8.33/missing automake-1.13 --gnu Makefile
/usr/httpd-2.4.9/srclib/pcre-8.33/missing: line 81: automake-1.13: command not found
WARNING: 'automake-1.13' is missing on your system.
You should only need it if you modified 'Makefile.am' or
'configure.ac' or m4 files included by 'configure.ac'.
The 'automake' program is part of the GNU Automake package:
http://www.gnu.org/software/automake
make: * [Makefile.in] Error 127
I tried configuring automake 1.13, but it didn't worked for me and I do not have permission to do something in root directory.
Please help !
Thank you in advance.
I found a workaround here: https://github.com/hyperrealm/libconfig/issues/22
Run these so to keep the executables that are being issues from running:
make AUTOCONF=: AUTOHEADER=: AUTOMAKE=: ACLOCAL=:
make install AUTOCONF=: AUTOHEADER=: AUTOMAKE=: ACLOCAL=:
I'm still having issues with the pcre-config but I'm pretty sure that's network time issue for me.

when I do a 'make install' it does not create Directory

This is my first attempt with autoconf, I changed and added some different code to a utility then I took the make.am and other files I needed, I modified them to work with what I wrote, into the same program. as it worked with that one, all I needed to change was the name and version and main.c and header file names. When I do, configure, then, make, it all goes well. it is when I get to the "make install" then I get this error, and I am not sure why.
Making install in src
make[1]: Entering directory `/home/userx/Dropbox/mhsetroot-MAKE/src'
make[2]: Entering directory `/home/userx/Dropbox/mhsetroot-MAKE/src'
/bin/bash ../config/mkinstalldirs /usr/local/bin
/usr/bin/install -c mhsetroot /usr/local/bin/mhsetroot
/usr/bin/install: cannot create regular file `/usr/local/bin/mhsetroot': Permission denied
make[2]: *** [install-binPROGRAMS] Error 1
make[2]: Leaving directory `/home/userx/Dropbox/mhsetroot-MAKE/src'
make[1]: *** [install-am] Error 2
make[1]: Leaving directory `/home/userx/Dropbox/mhsetroot-MAKE/src'
make: *** [install-recursive] Error 1
it does not let it make a directory. So, I tired it.
mkdir /usr/local/bin/mhsetroot
I get the same error, therefore it is just a permissions problem, right ?
If that is all that it is, then it should work on someone else's computer, just not mine? Also, then what permissions do I need to have set on my "local/bin" so that the "make install" will work without having to be in "sudo" mode first?
Try doing it with
sudo make install
command as you need to have root access for this.
So instead of typing make install in command, whenever you
get permission error, try putting sudo in beginning of command and then enter the root password. It works.
:)
I get the same error, therefore it is just a permissions problem, right ?
Right. It cannot create /usr/local/bin/mhsetroot.
If that is all that it is, then it should work on someone else's computer, just not mine?
It depends on what the permissions of /usr/local/bin is.
Also, then what permissions do I need to have set on my "local/bin" so that the "make install" will work without having to be in "sudo" mode first?
It depends on what the permissions of /usr/local/bin is. Usually you will need root permission to install there (e.g. sudo make install). Alternately, you can set DESTDIR for make install:
make DESTDIR=/some/writable/path install
but that also might need more setup, too (e.g. LD_LIBRARY_PATH).
make && make install is not a single command, it is two.
sudo make && install will execute make as superuser, but the && part is telling make install to wait until the first part has completed. 'make install' is it's own command, so what you need is:
sudo make && sudo make install
This is what I needed to do on slackware to get efl to build. I had exactly the same error as OP (searching it brought me here).
A more common example is
sudo apt update && sudo apt upgrade
where these are more commonly written as 2 lines without the '&&'. You have to sudo both parts.