Bloggen min

Litt om min daglige koding

Debugging Network Connection/firewalls

I needed to do a minimal tcp server to check if I was able to connect to that host from another machine. I found out that I did not have any nc (NetCat) available on the machine, and no working repo for the machine either.

So I wanted to setup a small tcp listener that wasn’t nc based. I guess I could have used nc -l 443 for the same task if it was available on the system.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import socket
import sys
 
HOST = ''   # Symbolic name, meaning all available interfaces
PORT = 443 # Arbitrary non-privileged port
 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print 'Socket created'
 
#Bind socket to local host and port
try:
    s.bind((HOST, PORT))
except socket.error as msg:
    print 'Bind failed. Error Code : ' + str(msg[0]) + ' Message ' + msg[1]
    sys.exit()
     
print 'Socket bind complete'
 
#Start listening on socket
s.listen(10)
print 'Socket now listening'
 
#now keep talking with the client
while 1:
    #wait to accept a connection - blocking call
    conn, addr = s.accept()
    print 'Connected with ' + addr[0] + ':' + str(addr[1])
     
s.close()

Setup of port knocking to let networking guys get something to sniff for while I do other stuff:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[user@host1 ~]$ while true; do date ; echo trying... ; nc imap.mailserver.tld 143 -w 10; sleep 50; done
Tue Oct  3 08:53:10 CEST 2017
trying...
Tue Oct  3 08:54:10 CEST 2017
trying...
Tue Oct  3 08:55:10 CEST 2017
trying...
Tue Oct  3 08:56:10 CEST 2017
trying...
Tue Oct  3 08:57:10 CEST 2017
trying...
Tue Oct  3 08:58:10 CEST 2017
trying...
Tue Oct  3 08:59:10 CEST 2017
trying...

Install Nano Editor on Vmware Esxi 6.5

I downloaded this and extracted nano from the url below via midnightcommander. In windows, 7-zip can unzip this rpm file. Copy the binary nano-file found in ./usr/bin/ directory onto your esxi 6.5. Probably put it in directory where you got other executables, like in /bin or /usr/bin.

For windows users, the winscp client is great to copy the nano into the esxi host. If you run linux, just scp the binary to your server like this:

1
scp nano root@esxi:/bin/nano

http://download.opensuse.org/distribution/11.4/repo/oss/suse/x86_64/nano-2.2.6-3.1.x86_64.rpm

Starte Med Ansible

Jeg begynte med ansible og committed små endringer i git-repository på fredag 16 september 2016. I løpet av helgen leste jeg 216 sider om Ansible og jeg ble rett og slett bitt litt av basillen. Her kom et verktøy som gjorde noe av det jeg har savnet med puppet, som var mulig i chef, men chef er tyngre å skrive kode til og få til å fungere. Ansible derrimot fungerer mer som puppet med direkte yaml støtte og mange flotte moduler. Mange av de kjekke modulene følger med direkte som ansible core-moduler.

I løpet av en helg fikk jeg jafset i meg en hel del om ansible fra bøker og youtube-training. Jeg ble så frelst at jeg tok mye av det lille jeg hadde startet med egen chef-kode og porterte mesteparten over i ansible. Det gikk lekende lett.

Bildet er relatert til å fyre opp en virtual machine i vmware.

Screenly OSE and Cookies

Jeg jobber en god del med screenly for tiden. Installert på flere Raspberry pi og omkonfigurert disse ved hjelp av ansible og satt opp egen provisjonering av disse. Det som ikke fungerte helt av seg selv var å gå inn på websider som er lukket bak pålogging (forståelig nok). En måte å omgå sånt er å lagre en session-cookie som gjør at man ser ut å være brukeren man hentet cookien fra etter at vedkommende hadde logget seg på. Poenget er at Screenly ikke automatisk leser inn slike cookies i uzbl browseren som benyttes fordi denne leser configurasjon fra stdin slik at nettleseren kan få kommandoer på hva den skal gjøre. Den konfigurasjonen som ligger inne i Screenly OSE må endres for at man skal få lest inn cookies ved oppstart av uzbl nettleseren.

Legg inn cookie

i ~pi/.local/share/uzbl/cookies.txt legger man cookien man ønsker å bruke i samme format som de som ligger der.

i ~pi/.config/uzbl/config-screenly legger man noe sånn som dette:

1
2
sync_spawn_exec /usr/share/uzbl/examples/data/scripts/load_cookies.sh
sync_spawn_exec /usr/share/uzbl/examples/data/scripts/load_cookies.sh /home/pi/.local/share/uzbl/session-cookies.txt

Hvis man ønsker litt fancy status-bar i tillegg så kan man sette dette:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
set show_status = 0
set ssl_verify = 0
set status_background = #303030

set modcmd_style      = weight="bold" foreground="red"
set keycmd_style      = weight="light" foreground="red"
set prompt_style      = foreground="grey"
set cursor_style      = underline="single"
set completion_style  = foreground="green"
set hint_style        = weight="bold"

set mode_section      = <span background="khaki" foreground="black">[\@[\@mode_indicator]\@]</span>
set keycmd_section    = [<span \@prompt_style>\@[\@keycmd_prompt]\@</span><span \@modcmd_style>\@modcmd</span><span \@keycmd_style>\@keycmd</span><span \@completion_style>\@completion_list</span>]
set progress_section  = <span foreground="#606060">\@[\@progress.output]\@</span>
set scroll_section    = <span foreground="#606060">\@[\@scroll_message]\@</span>
set uri_section       = <span foreground="#99FF66">\@[\@uri]\@</span>
set name_section      = <span foreground="khaki">\@[\@NAME]\@</span>
set status_section    = <span foreground="orange">\@status_message</span>
set selected_section  = <span foreground="#606060">\@[\@SELECTED_URI]\@</span>

set download_section  = <span foreground="white">\@downloads</span>

set status_format       = <span font_family="monospace">@mode_section @keycmd_section @progress_section @name_section @status_section @scroll_section @selected_section @download_section</span>
set status_format_right = <span font_family="monospace"><span foreground="#666">uri:</span> @uri_section</span>

set title_format_long = \@keycmd_prompt \@raw_modcmd \@raw_keycmd \@TITLE - Uzbl browser <\@NAME> \@SELECTED_URI


# Progress bar config
# %d = done, %p = pending %c = percent done, %i = int done, %s = spinner,
# %t = percent pending, %o = int pending, %r = sprite scroll
set progress.width      = 8
set progress.format     = [%d>%p]%c
set progress.done       = =
set progress.pending    =

Nordre Lindeberg Gård

I forrige uke besøkte jeg og familien min, Norde Lindeberg gård to ganger. Kafèen hadde ikke åpent på hverdager, men jeg besøkte gården en gang på søndag og fikk tatt en kort tur innom kafèen da. Utvalget og kaffen var ikke så stort. Nå skal det kanskje nevnes at jeg er vant til god kaffe.

På jobben har vi hatt egen espressomaskin hvor jeg har laget kaffe og skummet melk. Etter dette skaffet jeg også en espressomaskin hjemme av likt merke. Nå har vi for en god stund siden gått over til automat-kaffe på jobb og hver gang kaffeknappen har utført service på kaffemaskinen så kommer det en liten søt bonus. Et glass med smarties ved hver maskin.

Vel, nok om kaffe og våre maskiner på jobb og tilbake til gårdsbesøket. Kafèen var ikke så imponerende, men at gårdsbesøket i seg selv er gratis var noe familien satte stor pris på. Det mener jeg at også kongsgården er hvis man ikke besøker når det er spesielle arrangementer. I slutten av september var vi på kongsgården hvor parkering og inngang kostet oss nesten 200 kr. Uansett, det koselig å se gårder og dyr så nære i Oslo.

PuppetConf 2016 Keynotes

I dag så jeg puppetconf 2016 keynotes i ekstra hastighet for å få mer ut av dagen og fikk med meg litt om det nyeste innen puppet og tanker om dagens operations. Framvisning utført av:

Ansible 101 at the PyCon 2016 Conference

Today, I had a look at the Ansible 101 speak from Luke Sneeringer while I was writing definitions for creating new vms at the different vmware clusters we have. I have ansible start up a new machine, get the mac address and put a configuration in the pxe configuration on a server to define what OS and hostname to give to the new VM.

Ansible was mentioned to me during an interview for a few weeks ago and this really caught my attention. I’ve configured raspberry pi and provisioned servers at digitalocean with it already. I rewrote most of my Chef code to ansible because I found it much easier and more logical. Writing the code when I already is used to Puppet with Hiera and yaml wasn’t hard at all.

I struggle with a few older OS-installed machines which does not have a new enough python required for ansible. I would love to get a statically linked and easy portable version of python with the needed python modules available to run from the homedirectory. I guess I could make one myself if I got time for it, and I guess that I rather install new boxes and move the data there instead of digging into how to do this the “wrong way”.

I found this, but I did not have a compiler on the specific box

Skiftet Tennplugger Og Olje

Jeg har ikke skrudd så mye på bil, men jeg har kommet dit at jeg fint kan skifte min egen olje. Nylig har jeg også byttet tennplugger på egen bil

Eventyret Om Zelda

Jeg har ikke for vane å spille spill lenger, men en kveld her etter å ha installert Raspberry Pi 3 med bootberry og mange forskjellige os, så ble jeg sittende og spille link, karakteren som skal redde prinsessen Zelda. De gamle spilla er og blir gode klassikere.

Connect to MSSQL From Python

I was helping a college at work today. He needed to connect to a MSSQL server and do some scripting on the data. His question was:

  • How do you connect to MSSQL from python

Install the pymssql module from the python libraries:

1
pip install pymssql

Make a script selecting the data you want..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env python

import pymssql # 
user="someuser"
password="somepassword"
db="DATABASE1"
host="DATABASE1"

con = pymssql.connect(user=user, password=password, host=host, database=db)
cur = con.cursor()
sql= "SELECT [name],[port],[link] FROM [TABLENAME]"

cur.execute(sql)
for row in cur.fetchall():
  print  str(row[0]) + "|" + str(row[1]) + "|" + str(row[2])

Make sure to have the freetds installed on the server:

1
2
freetds-0.64-1.el5.rf
freetds-devel-0.64-1.el5.rf

Configure your freetds.conf in /etc/

1
2
3
4
5
6
cat /etc/freetds.conf
[DATABASE1]
    host = my-hostname.domain.com
    port = 1234
    instance = MSSQL_SERVER_INSTANCE
    database = DATABASENAME