Author: Jarek

OUI issue NGINST-64002: Error occurred in validation of: “Host Name”

When installing an Oracle application using OUI (Oracle Universal Installer) sometimes it verifies if a given host is reachable. 

Unfortunately, in my case, it was always failing:

All this despite the host was perfectly reachable using Ping:

So what was happening? The OUI is using under the hood Java’s InetAddress.isReachable(). The algorithm is:

  1.  Try to send ICMP “ping”, if that fails
  2.  Try to use ICMP Echo service
 
Unfortunately, check (1) can only be attempted if you run the app with an elevated permissions (root or sudo), which typically does not happen.
 
So it goes to (2) and makes the following attempt:
 
[rms@tr005buwls11 ~]$ sudo tcpdump -nn -v -i eth0 host tr005buece12 and port not 22
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:40:57.566469 IP (tos 0x0, ttl 64, id 64840, offset 0, flags [DF], proto TCP (6), length 60)
    131.116.167.11.55766 > 131.116.167.13.7: Flags [S], cksum 0xaf64 (correct), seq 562514241, win 14600, options [mss 1460,sackOK,TS val 300069897 ecr 0,nop,wscale 7], length 0
14:40:57.566522 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
    131.116.167.13.7 > 131.116.167.11.55766: Flags [R.], cksum 0x1628 (correct), seq 0, ack 562514242, win 0, length 0

So it probes Echo service over TCP port 7. 

Solution

Here you are! It was a missing firewall rule. Just open TCP/7 port on the target (checked) system and the test is passing like a charm.

Details for nerds

A small tool to run the test. Just run it as shown below:

[rms@tr005buece12 tmp]$ ./test.sh tr005buwls11.ddc.teliasonera.net
Testing tr005buwls11.ddc.teliasonera.net
OK

[rms@tr005buwls11 ~]$ sudo tcpdump -nn -v -i eth0 host tr005buece12 and port not 22
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:40:57.566469 IP (tos 0x0, ttl 64, id 64840, offset 0, flags [DF], proto TCP (6), length 60)
    131.116.167.11.55766 > 131.116.167.13.7: Flags [S], cksum 0xaf64 (correct), seq 562514241, win 14600, options [mss 1460,sackOK,TS val 300069897 ecr 0,nop,wscale 7], length 0
14:40:57.566522 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 40)
    131.116.167.13.7 > 131.116.167.11.55766: Flags [R.], cksum 0x1628 (correct), seq 0, ack 562514242, win 0, length 0

Compare with same test ran using sudo. This time the test is done using ICMP, so no TCP/7 port needed. But as mentioned earlier, this is highly impractical and even not recommended:

[rms@tr005buece12 tmp]$ sudo ./test.sh tr005buwls11.ddc.teliasonera.net
Testing tr005buwls11.ddc.teliasonera.net
OK

tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
14:40:26.430473 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto ICMP (1), length 72)
    131.116.167.11 > 131.116.167.13: ICMP echo request, id 12072, seq 1, length 52
14:40:26.430508 IP (tos 0x0, ttl 64, id 56716, offset 0, flags [none], proto ICMP (1), length 72)
    131.116.167.13 > 131.116.167.11: ICMP echo reply, id 12072, seq 1, length 52

Prometheus Node Exporter /lib/init/init-d-script: /usr/bin/daemon: not found

After Ubuntu upgrade 18.04 -> 18.10, Prometheus Node Exporter started to complain:

root@grafana:~# /etc/init.d/prometheus-node-exporter 
startStarting Prometheus exporter for machine metrics prometheus-node-exporter                                                         
/etc/init.d/prometheus-node-exporter: 45: /lib/init/init-d-script: /usr/bin/daemon: not found

Fix for this is quite easy – just install missing dependency:

root@grafana:~# apt install daemon
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
  daemon
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 99.5 kB of archives.
After this operation, 288 kB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu cosmic/universe amd64 daemon amd64 0.6.4-1build1 [99.5 kB]
Fetched 99.5 kB in 0s (287 kB/s)
Selecting previously unselected package daemon.
(Reading database ... 22628 files and directories currently installed.)
Preparing to unpack .../daemon_0.6.4-1build1_amd64.deb ...
Unpacking daemon (0.6.4-1build1) ...
Processing triggers for man-db (2.8.4-2) ...
Setting up daemon (0.6.4-1build1) ...
root@grafana:~# /etc/init.d/prometheus-node-exporter stop
 * Stopping Prometheus exporter for machine metrics prometheus-node-exporter                                                  [ OK ]
root@grafana:~# /etc/init.d/prometheus-node-exporter start
 * Starting Prometheus exporter for machine metrics prometheus-node-exporter                                                  [ OK ]
root@grafana:~#

After that daemon can be started:

root@grafana:~# /etc/init.d/prometheus-node-exporter start
Starting Prometheus exporter for machine metrics prometheus-node-exporter                                                  [ OK ]
root@grafana:~#

Param2Clipboard

A MacOS application to grab an argument and set system Clipboard as per argument text.

How it works?

Under the hood it’s invoking pbcopy as below:

#!/bin/bash

if [[ -z "$1" ]]
then
  osascript -e 'display notification "Nothing copied!" with title "Param2Clipboard"'
else
	echo "$1" | pbcopy
	osascript -e 'display notification "Parameter copied to the Clipboard!" with title "Param2Clipboard"'
fi

The script has been wrapped into MacOS app using Platypus:

Flow

Eventually, registered required URL Types in Info.plist. Unfortunately, it was a manual process which has to be repeated every time when a new app is created using Platypus:

Flow

Why created?

Created to improve workflow when opening Microsoft Skype or Lync meetings.

Flow I’m using:

Flow

Broswer Fairy configuration

In order to capture opening of Skype/Lync URLs, I’m using Browser Fairy which is registered as a default app to open all URLs. Each URL is matched against defined list of patters and if a Skype URL is detected, the URL is passed to Param2Clipboard app.

Flow
Flow

References

Withings to Garmin Connect – resurrection

After dropping “legacy” APIs on Withings page, the script stopped to work…

It took quite a while to adjust it to OAuth2 but finally – it’s done!

Go to https://github.com/jaroslawhartman/withings-garmin-v2 to download the script.

References

  • Based on withings-garmin by Masayuki Hamasaki, improved to support SSO authorization in Garmin Connect 2.
  • SSO authorization derived from https://github.com/cpfair/tapiriik

Pre-requisites

$ sudo easy_install requests
  • simplejson
$ sudo easy_install simplejson

Usage

Usage: $python sync.py [options]

Options:
  -h, --help            show this help message and exit
  --garmin-username=<user>, --gu=<user>
                        username to login Garmin Connect.
  --garmin-password=<pass>, --gp=<pass>
                        password to login Garmin Connect.
  -f <date>, --fromdate=<date>
  -t <date>, --todate=<date>
  --no-upload           Won't upload to Garmin Connect and output binary-
                        string to stdout.
  -v, --verbose         Run verbosely

Obtaining Withings Authorization Code

When running for a very first time, you need to obtain Withings authorization:

$ ./sync.py -f 2019-01-25 -v
Can't read config file config/withings_user.json
***************************************
*         W A R N I N G               *
***************************************

User interaction needed to get Authentification Code from Withings!

Open the following URL in your web browser and copy back the token. You will have *30 seconds* before the token expires. HURRY UP!
(This is one-time activity)

https://account.withings.com/oauth2_user/authorize2?response_type=code&client_id=183e03e1f363110b3551f96765c98c10e8f1aa647a37067a1cb64bbbaf491626&state=OK&scope=user.metrics&redirect_uri=https://wieloryb.uk.to/withings/withings.html&

Token : _

You need to visit the URL listed by the script and then – copy Authentification Code back to the prompt.

This is one-time activity and it will not be needed to repeat.

Tips

You can hardcode your usernames and passwords in the script (sync.py):

GARMIN_USERNAME = ''
GARMIN_PASSWORD = ''

For advanced users – registering own Withings application

The script has been registered as a Withings application and got assigned Client ID and Consumer Secret. If you wish to create your own application – feel free!

Note, registering it is quite cumbersome, as you need to have a callback URL and an Icon. Anyway, when done, you should have the following identifiers:

IdentfierExample
Client ID183e03.................765c98c10e8f1aa647a37067a1......baf491626
Consumer Secreta75d65.................4c16719ef7bd69fa7c5d3fd0ea......ed48f1765
Callback URIhttps://jhartman.pl/withings/notify

Configure them in config/withings_app.json, for example:

{
    "callback_url": "https://wieloryb.uk.to/withings/withings.html",
    "client_id": "183e0******0b3551f96765c98c1******b64bbbaf491626",
    "consumer_secret": "a75d65******1df1514c16719ef7bd69fa7*****2e2b0ed48f1765"
}

Oracle Coherence – description of federation member states

States of Oracle Coherence federation are not very well described in the documentation. So I thought it would be good to ask at the source. Thanks for Patrick F for all these explanations!

Stopped states – Federation is not federating data to the destination, nor is it keeping a backlog of changes to send to the destination.  A “start” operation must be performed to start federating data again:
  • STOPPED – A stop operation was issued, or federation was set to start in the stopped state. Stopped states – Federation is not federating data to the destination, nor is it keeping a backlog of changes to send to the destination.  A “start” operation must be performed to start federating data again:
  • ERROR – An error occurred from which federation was unable to continue federating data
Paused state – Federation is not federating data, but is keeping a (growing) backlog of changes to be sent once a “start” operation is issued:
  • PAUSED – A pause operation was issued, or federation was set to start in the paused state.
Normal states – Federation is federating data:
  • INITIAL – default startup state.  A Coherence node will stay in this state until there is data to be federated
  • IDLE – federation is active and connected to the destination.  There is no data currently to send
  • READY – federation is transitioning out of CONNECTING, or YIELDING, or BACKLOG_NORMAL and will go to SENDING
  • SENDING – federation has data to send
  • CONNECTING – federation is connecting to the destination cluster
  • CONNECT_WAIT – federation is disconnected and will make a new connect attempt.  There may be a delay before making the next attempt depending on the circumstances under which federation was disconnected
  • YIELDING – federation has data to send, but is pausing briefly, likely due to a BACKLOG_EXCESSIVE event
  • DISCONNECTED – federation was disconnected from the remote destination.  If there is no data to send, federation may stay in this state. NB: DISCONNECTED is a “normal” state.  It means that a member of the cluster lost its federation connection to the remote cluster (probably because the remote member it was connected to was shut down).  If the member in the DISCONNECTED state has no data to send, it will stay in the DISCONNECTED state – basically the same as being IDLE.  Once there is some data for this member to send it will issue a new connection.
The following states do not exist – although they may have in 12.2.1.0.0 (federation should not be used with this version):
  • BACKLOG_EXCESSIVE 
  • BACKLOG_NORMAL

Shrinking VirtualBox VMs

This article is note to self, as I just gather information from other sites: