Python on Solaris: Wrong ELF class: ELFCLASS64

If “pip” installed 64-bit libraries, while python is a 32-bit binary, “pkg” might stop working with the following error messages:

ImportError: ld.so.1: bootadm: fatal: /usr/lib/python2.7/site-packages/lxml/etree.so: wrong ELF class: ELFCLASS64
ImportError: ld.so.1: python2.7: fatal: /usr/lib/python2.7/site-packages/_cffi_backend.so: wrong ELF class: ELFCLASS64
$ file `which python`
/usr/bin/python:	ELF 32-bit LSB executable 80386 Version 1 [SSE], dynamically linked, not stripped

The workaround is to remove the corresponding python packages (in this case cffi and lxml), download and recompile them manually with “-m32”:

$ export CFLAGS="-m32"

One-liner: how to generate group-url for all remote-access tunnel-groups (Cisco ASA)

This one-liner takes Cisco ASA config, checks for “tunnel-group … remote-access” and generates the following two lines:

tunnel-group GROUPNAME webvpn-attributes
 group-url https://CISCO_ASA_FW_FQDN/GROUPNAME enable
for i in `fgrep tunnel-group CISCO_ASA.conf | fgrep remote-access | awk '{print $2}'`
do
echo "tunnel-group $i webvpn-attributes"
echo " group-url https://CISCO_ASA_FW_FQDN/$i enable"
done

One-liner: how to get image URLs from Google Image search

Let’s search for “red apple”:

For Solaris (use gsed instead of sed):

curl -A "Mozilla/5.0 (X11; SunOS i86pc; rv:52.0) Gecko/20100101 Firefox/52.0" \
'https://www.google.nl/search?q=red+apple&tbm=isch' 2>/dev/null | \ 
tail -1 | gsed -e 's/,"ow":/*/g' -e 's/,"ou":/*Image:/g' | \ 
tr '*' '\n' | grep "^Image" | sed -e 's/^Image:"//' -e 's/"$//' 

For Linux:

curl -A "Mozilla/5.0 (X11; SunOS i86pc; rv:52.0) Gecko/20100101 Firefox/52.0" \
'https://www.google.nl/search?q=red+apple&tbm=isch' 2>/dev/null | \ 
tail -1 | sed -e 's/,"ow":/*/g' -e 's/,"ou":/*Image:/g' | \ 
tr '*' '\n' | grep "^Image" | sed -e 's/^Image:"//' -e 's/"$//' 

One-liner: how to check the SSL certificate expiration of several servers

for i in cnn.com bbc.co.uk
do
  exp=`echo | openssl s_client -connect $i:443  2>/dev/null | 
  openssl x509 -noout -dates | fgrep notAfter | sed -e 's/^.*=//'`
  echo "$i        $exp"
done

cnn.com	    Feb  6 12:00:00 2018 GMT
bbc.co.uk   Apr 20 10:01:10 2017 GMT

One-liner: how to count the total amount of specific lines in several files

Let’s calculate the amount of lines, containing the word “extended” in */*.conf files:

egrep -c extended */*.conf | 
awk 'BEGIN {FS=":"; sum=0;}{sum +=$2} END {print sum}'  

BTW, using awk alone is slower:

time awk 'BEGIN {sum=0;}/extended/{sum++} END {print sum}' */*.conf
110653

real	0m0.94s
user	0m0.91s
sys	0m0.01s

time egrep -c extended */*.conf | 
awk 'BEGIN {FS=":"; sum=0;}{sum +=$2} END {print sum}'
110653

real	0m0.13s
user	0m0.10s
sys	0m0.02s

fgrep is slower than egrep:

time fgrep -c extended */*.conf | 
awk 'BEGIN {FS=":"; sum=0;}{sum +=$2} END {print sum}'
110653

real	0m0.21s
user	0m0.17s
sys	0m0.03s

traceroute 216.81.59.173

> traceroute -m 100 216.81.59.173
traceroute: Warning: Multiple interfaces found; using x.x.x.x @ net0
traceroute to 216.81.59.173 (216.81.59.173), 30 hops max, 40 byte packets
. . .
8  10gigabitethernet1-2.core1.atl1.he.net (184.105.213.110)  122.807 ms  150.309 ms  168.517 ms
9  216.66.0.26 (216.66.0.26)  160.820 ms  164.675 ms  157.556 ms
10  * * *
11  Episode.IV (206.214.251.1)  188.004 ms  188.078 ms  277.575 ms
12  A.NEW.HOPE (206.214.251.6)  212.980 ms  182.796 ms  217.315 ms
13  It.is.a.period.of.civil.war (206.214.251.9)  208.230 ms  231.501 ms  187.249 ms
14  Rebel.spaceships (206.214.251.14)  223.330 ms  185.769 ms  231.825 ms
15  striking.from.a.hidden.base (206.214.251.17)  222.702 ms  199.810 ms  227.345 ms
16  have.won.their.first.victory (206.214.251.22)  186.517 ms  221.058 ms  201.745 ms
17  against.the.evil.Galactic.Empire (206.214.251.25)  185.988 ms  216.445 ms  186.553 ms
 Continue reading "traceroute 216.81.59.173"

Simple log-rotator

Non-compressing log-rotator:

# more logrotate.sh
#!/bin/bash
for file in $*
do
mv ${file}.5 ${file}.6
mv ${file}.4 ${file}.5
mv ${file}.3 ${file}.4
mv ${file}.2 ${file}.3
mv ${file}.1 ${file}.2
mv ${file} ${file}.1
touch ${file}
pkill -1 syslog
done

Compressing version:

#!/bin/bash
for file in $*
do
mv ${file}.5.gz ${file}.6.gz
mv ${file}.4.gz ${file}.5.gz
mv ${file}.3.gz ${file}.4.gz
mv ${file}.2.gz ${file}.3.gz
mv ${file}.1.gz ${file}.2.gz
mv ${file} ${file}.1
touch ${file}
pkill -1 syslog
gzip ${file}.1
done

Usage:

# logrotate.sh asa1.log cisco2.log templog
#