_hacks – Page 6 – jozefmares.com
Home top_menu _hacks
Category:

_hacks

Today, one guy I know called and asked if I can help him with accounting system in his restaurant. There was cryptic message from accounting software with some sort of DB error.

I saw system like this first time in my life so I started to investigate DB backend and I found Firebird / InterBase. Actually I saw Firebird in production for first time in my life. I started to think about fixing database from command line and i googled a lot ’till found solution. I should verify DB, prepare for dump and then restore.

This is how I achieved task:
1. disconnect users – in my case accounting software;
2. create backup copy of database file;
3. run gfix to validate database;

gfix -v dbname

4. I prefer full validation;

gfix -v -f dbname

5. prepare corrupted database for backup;

gfix -mend dbname

6. backup database – -g switch disables garbage collection;

gbak -g -b dbname.backup

7. restore database -r replaces existing database (remember that part about copy?);

gbak -v -c -r dbname.backup dbname

If you are lucky enough you have now working database. I wasn’t. During restore there was problem with primary key on one of the tables. I “fixed” (i mean – it worked for me) it running this:

gbak -v -c -r -i dbname.backup dbname

-i switch creates indexes as inactive which worked for me.

People were happy today and my introduction to Firebird was only one hour long. ;)

Having two machines for work has a lot of advantages but there are few disadvantages. I have covered file synchronisation issue in my previous post.

Today issue is sharing screen – e.g. I hate two separate sets of input devices. Solutions is called Synergy and I am using this project for years. Yet, even developers and admins who work with separate (not virtual) machines on their physical desktops do not know this beautiful piece of software. Time to change this!

Synergy basically works this way: one computer acts as a server (this is the computer with main input device – keyboard and mouse for example). Clients connects to this server which have stored configuration with physical position of clients. One picture worth thousand words, check this (image courtesy of Synergy project):synergy scheme

 

My setup is based on Fedora box with two screens in the middle and right (second screen) and OS X box on the left. I’m using pretty basic setup (no special Synergy hacks) and server configuration file looks like this:

section: screens
fedora_box:
os_x_box:
alt = meta
meta = alt
end

section: links
fedora_box:
left = os_x_box
os_x_box:
right = fedora_box
end

Name this file .synergy.conf and run Synergy to check if it works:

synergys -f

I would like to mention only one speciality compared to “extremely basic setup” and it is:

alt = meta
meta = alt

This configuration options are switching meta (win) key on IBM keyboard with alt key. I have this setup because Mac keyboard I’m using all day when I’m away from my home office has CMD key left of space followed by alt key from right to left. This way I’m not making typos in keyboard shortcuts. Productivity on!

You can download on project page binaries for your favourite distributions and OS X. Be careful – version in Fedora 18 repositories is 1.3.X and version downloaded from project page will be likely 1.4.X – server will return error about incompatible client.

Finally you should automate somehow startup of binaries but way how to achieve is up to you. I have server always started (binary started after Gnome 3 startup) and on OS X box I’m starting binary on demand. In future post I might write how to start applications and change network profile on OS X based on location.

My workflow is based on using OS X and Fedora together. I’m using OS X for business work and Fedora for actual work. This post is about a way which I use to keep my files in sync, post about my workflow might come later.

I tested a few solutions like rsync and manual copying (really, this was bad idea :) ). I’m not able to keep my files in sync manually thus i need to automate. To automate is good idea even if you are capable to keep files in sync – automation makes (at least me) things go smooth.

So I decided to go Unison way. Unison is beautiful piece of software written by Benjamin C. Pierce in pretty cool programming language – OCaml.

I have few machines always on on Internet so I can use start topology which has few advantages over direct synchronisation. One of the greatest (for me) is that central server for Unison is available over SSH (password-less login) and central server is in my office where I’m rarely but when I’m in office i always want some of my files which is few hundred kilometres from me.

So let’s assume we have two machines (clients) and one server. One machine is called NTB-1, second is DESKTOP-1 and server is called SERVER-1.

In this part I should mention that Unison is extremely sensitive to own version. You must have available exact same version on every synchronised machine (at least i would not try doing job without it). Fedora 18 has Unison 2.4 default version, you can get this version to OS X using homebrew. Server is running Centos 6.3 where Unison 2.4 is also by default (provided by unison package). I’m lucky bastard – this was pain free for me.

Let’s setup first client – NTB-1 running OS X. First we should install Unison:

brew install unison 

Then I created folder for Unison config:

mkdir ~/.unison

Next step is to create configuration file, mine (pretty basic) is looking like this:

# Sync roots
root = /Users/jozef
root = ssh://jozef@vserver-1//home/jozef/TrustedPoint

# What to synchronize
path = Current
path = Documents
path = .ssh
path = .bashrc
path = .vimrc

# What to ignore
ignore = Name *~
ignore = Name .DS_Store
ignore = Name .tmp
ignore = Path .ssh/known_hosts

# Keep backup copy of every file
backuplocation = central
backup = Name *
backupprefix = $VERSION.
backupsuffix =

# Log actions
logfile = /Users/jozef/.unison/sync.log

On Fedora box i created config directory:

mkdir ~/.unison

On Fedora box config file look like this:

# Sync roots
root = /home/jozef
root = ssh://jozef@server-1//home/jozef/TrustedPoint

# What to synchronize
path = Current
path = Documents
path = .ssh
path = .bashrc
path = .vimrc

# What to ignore
ignore = Name *~
ignore = Name *.swp
ignore = Name .tmp
ignore = Path .ssh/known_hosts

# Keep backup copy of every file
backuplocation = central
backup = Name *
backupprefix = $VERSION.
backupsuffix =

# Log actions
logfile = /home/jozef/.unison/sync.log

You should adjust at least sync roots and what to synchronize. I would not describing each option as you can find it here.

I would like to especially mention two / after server address and backuplocation option. They are pretty important for me, you might look to manual why. :)

Server setup is pretty easy – just create paths and install Unison:

mkdir ~/TrustedPoint
yum install unison

If you want password-less login you should setup SSH which is beyond scope of this quick how-to. Happy synchronizing and no conflicts.

Older Posts