Install R Package XML with Ubuntu amd64

8 08 2009

install.packages("XML")

failed while complaining

Cannot find xml2-config

Seth Falcon pointed out library libxml2-dev – Development files for the GNOME XML library – where missing.

sudo aptitude install libxml2-dev

fixed the problem.





Installing RODBC with Ubuntu/Debian amd64

8 08 2009

Trying to install RODBC in Ubuntu with
install.packages("RODBC")
failed throwing an error message
ODBC headers sql.h and sqlext.h not found

A glance at the r-help showed that it had to do with something called unixODBC – an ODBC driver manager.

The package was installed, but not the development package and thus not the headers which R complained about.

Again a not-so-obvious-for-the-newbee-Linux-Unix-Shell-goblish thing. The fix is
sudo aptitude install unixodbc-dev





Listing Hardware Specs in the Shell

6 08 2009

Just recently found a nice compilation of shell command, listing your computers specs in plain text:

List of hardware:
lspci

Linux Kernel configuration (which version of Linux are you using):
uname -a

Hardisk and memory available and used:
free -m

Very nice: Checking the buffered reading speed of your harddisk or whatever device attached:
sudo hdparm -t /dev/sda
/dev/sda is my harddisk in this example and produced 60Mb/s three times faster than my USB-disk /dev/sdb.

To find the names /dev/WhatName of the devices:
sudo fdisk -l

Checking the cache reading speed, which represents well more reading from RAM then from the specified device:
sudo hdparm -T /dev/sda





.dmrc Beeing Ignored

30 07 2009

After installing the Fluxbox desktop in addition to the default Xfce4 in Xubuntu a persistent error message started to show up:

User's $home/.dmrc file is being ignored. This prevents the default session and language from being saved. File should be owned by user and have 644 permission. User's $home directory must be owned by user and not writable by other user's.

It seems to be a bug in Ubuntu. It turned out that the same error message appeared on a Ubuntu Jaunty (Gnome) fresh install and on my Linux Mint 7 (based on Ubuntu Jaunty) fresh install. From time to time it shows up and I have not figured out how to (re-)produce it.

Anyway:
chmod 644 .dmrc
chmod o-w /home/USER

does the job, where USER has to be replaced by you username.





Add Firefox Shiretoko (3.5) to Ubuntu Jaunty (9.04)

24 07 2009

To install the latest Firefox 3.5 (final) or Firefox 3.6 in Ubuntu, open a terminal and:

sudo sh -c "echo 'deb http://ppa.launchpad.net/ubuntu-mozilla-daily/ppa/ubuntu jaunty main' >> /etc/apt/sources.list"

Then add the Launchpad PPA GPG key:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 247510BE

And finally, install Firefox 3.5:

sudo aptitude update && sudo aptitude install firefox-3.5





USB-disk Refuses to Eject

24 07 2009

… suddenly my backupscript refuses to eject the USB-disk after syncronizing all files. Trying manually to eject the drive, by
umount /media/home
(with /media/home representing my USB-disk) throws an error message
umount: /media/home is not in the fstab (and you are not root)

Of course it is not in the file system table, since it is a removable disk. So the problem is that all of a sudden I have to be root user to eject it properly, after it worked well for months?!

This an example of Linux issues which surprise newbies (like me) and windows converts … but google is our friend

SonicSteve on Ubuntuforums wrote:

Well I see it has been a couple of weeks and I am not sure if anyone has come up with a solution but here is what worked for me when I started receiving the un-mount error after the most recent kernel update.

Go to the /media directory and remove the file “.hal-mtab” and “.hal-mtab-lock” and then reboot. After I did that I stopped seeing the un-mount errors. Not sure what is in a zero byte file that could cause the grief but there it is.

Awesome, this bug has been bitting me for far too long. I see it if a umount fails and I have to unplug the device.
FYI, this fix worked without even rebooting.

In the .hal-mtab file it contained what looked like stale mount information from a usb drive that had been plugged in some time ago. The .hal-mtab-lock file was empty. I’m guessing that when a usb drive is plugged in the connection info is stored in these files and when they are umounted they are supposed to be cleared.

Wow, now it became a big surprise! I posted this before trying it out, and after I did I found that you had to remove the folder /media/home (so called mountpoint) before restarting. Now I ended up with

  1. the problem prevailing,
  2. .hal-mtab and .hal-mtab-lock in place again and
  3. two mountpoints /home and
  4. trying to remove them (sudo rm -R home) throwing an input/output error!!




Editing Textfiles via One-line Scripts for Stream EDitor

23 07 2009

Editing textfiles often requires repeating the same action in every line or every paragraph or maybe even every word. Examples are: Removing empty lines or inserting them, removing linebreaks or replacing words or expressions. SED, the Stream EDitor is a command line tool, which allows even complex replacements of text, renaming of files and much more with a single line of script.

Eric Pement has compiled an extensive repartoir of these one-line scripts for SED. I have taken a selection of version 5.5 of his compilation.

FILE SPACING:

# double space a file
sed G

# double space a file which already has blank lines in it. Output file
# should contain no more than one blank line between lines of text.
sed ‘/^$/d;G’

# triple space a file
sed ‘G;G’

# undo double-spacing (assumes even-numbered lines are always blank)
sed ‘n;d’

# insert a blank line above every line which matches “regex”
sed ‘/regex/{x;p;x;}’

# insert a blank line below every line which matches “regex”
sed ‘/regex/G’

# insert a blank line above and below every line which matches “regex”
sed ‘/regex/{x;p;x;G;}’

NUMBERING:

# number each line of a file (simple left alignment). Using a tab (see
# note on ‘\t’ at end of file) instead of space will preserve margins.
sed = filename | sed ‘N;s/\n/\t/’

# number each line of a file (number on left, right-aligned)
sed = filename | sed ‘N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /’

# number each line of file, but only print numbers if line is not blank
sed ‘/./=’ filename | sed ‘/./N; s/\n/ /’

# count lines (emulates “wc -l”)
sed -n ‘$=’

TEXT CONVERSION AND SUBSTITUTION:

# IN UNIX ENVIRONMENT: convert DOS newlines (CR/LF) to Unix format.
sed ‘s/.$//’ # assumes that all lines end with CR/LF
sed ‘s/^M$//’ # in bash/tcsh, press Ctrl-V then Ctrl-M
sed ‘s/\x0D$//’ # works on ssed, gsed 3.02.80 or higher

# IN UNIX ENVIRONMENT: convert Unix newlines (LF) to DOS format.
sed “s/$/`echo -e \\\r`/” # command line under ksh
sed ‘s/$’”/`echo \\\r`/” # command line under bash
sed “s/$/`echo \\\r`/” # command line under zsh
sed ‘s/$/\r/’ # gsed 3.02.80 or higher

# IN DOS ENVIRONMENT: convert Unix newlines (LF) to DOS format.
sed “s/$//” # method 1
sed -n p # method 2

# IN DOS ENVIRONMENT: convert DOS newlines (CR/LF) to Unix format.
# Can only be done with UnxUtils sed, version 4.0.7 or higher. The
# UnxUtils version can be identified by the custom “–text” switch
# which appears when you use the “–help” switch. Otherwise, changing
# DOS newlines to Unix newlines cannot be done with sed in a DOS
# environment. Use “tr” instead.
sed “s/\r//” infile >outfile # UnxUtils sed v4.0.7 or higher
tr -d \r outfile # GNU tr version 1.22 or higher

# delete leading whitespace (spaces, tabs) from front of each line
# aligns all text flush left
sed ‘s/^[ \t]*//’ # see note on ‘\t’ at end of file

# delete trailing whitespace (spaces, tabs) from end of each line
sed ‘s/[ \t]*$//’ # see note on ‘\t’ at end of file

# delete BOTH leading and trailing whitespace from each line
sed ‘s/^[ \t]*//;s/[ \t]*$//’

# insert 5 blank spaces at beginning of each line (make page offset)
sed ‘s/^/ /’

# align all text flush right on a 79-column width
sed -e :a -e ‘s/^.\{1,78\}$/ &/;ta’ # set at 78 plus 1 space

# center all text in the middle of 79-column width. In method 1,
# spaces at the beginning of the line are significant, and trailing
# spaces are appended at the end of the line. In method 2, spaces at
# the beginning of the line are discarded in centering the line, and
# no trailing spaces appear at the end of lines.
sed -e :a -e ‘s/^.\{1,77\}$/ & /;ta’ # method 1
sed -e :a -e ‘s/^.\{1,77\}$/ &/;ta’ -e ‘s/\( *\)\1/\1/’ # method 2

# substitute (find and replace) “foo” with “bar” on each line
sed ‘s/foo/bar/’ # replaces only 1st instance in a line
sed ‘s/foo/bar/4′ # replaces only 4th instance in a line
sed ‘s/foo/bar/g’ # replaces ALL instances in a line
sed ‘s/\(.*\)foo\(.*foo\)/\1bar\2/’ # replace the next-to-last case
sed ‘s/\(.*\)foo/\1bar/’ # replace only the last case

# substitute “foo” with “bar” ONLY for lines which contain “baz”
sed ‘/baz/s/foo/bar/g’

# substitute “foo” with “bar” EXCEPT for lines which contain “baz”
sed ‘/baz/!s/foo/bar/g’

# change “scarlet” or “ruby” or “puce” to “red”
sed ‘s/scarlet/red/g;s/ruby/red/g;s/puce/red/g’ # most seds
gsed ‘s/scarlet\|ruby\|puce/red/g’ # GNU sed only

# reverse order of lines (emulates “tac”)
# bug/feature in HHsed v1.5 causes blank lines to be deleted
sed ’1!G;h;$!d’ # method 1
sed -n ’1!G;h;$p’ # method 2

# reverse each character on the line (emulates “rev”)
sed ‘/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//’

# join pairs of lines side-by-side (like “paste”)
sed ‘$!N;s/\n/ /’

# if a line ends with a backslash, append the next line to it
sed -e :a -e ‘/\\$/N; s/\\\n//; ta’

# if a line begins with an equal sign, append it to the previous line
# and replace the “=” with a single space
sed -e :a -e ‘$!N;s/\n=/ /;ta’ -e ‘P;D’

# add commas to numeric strings, changing “1234567″ to “1,234,567″
gsed ‘:a;s/\B[0-9]\{3\}\>/,&/;ta’ # GNU sed
sed -e :a -e ‘s/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta’ # other seds

# add commas to numbers with decimal points and minus signs (GNU sed)
gsed -r ‘:a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta’

# add a blank line every 5 lines (after lines 5, 10, 15, 20, etc.)
gsed ’0~5G’ # GNU sed only
sed ‘n;n;n;n;G;’ # other seds

SELECTIVE PRINTING OF CERTAIN LINES:

# print first 10 lines of file (emulates behavior of “head”)
sed 10q

# print first line of file (emulates “head -1″)
sed q

# print the last 10 lines of a file (emulates “tail”)
sed -e :a -e ‘$q;N;11,$D;ba’

# print the last 2 lines of a file (emulates “tail -2″)
sed ‘$!N;$!D’

# print the last line of a file (emulates “tail -1″)
sed ‘$!d’ # method 1
sed -n ‘$p’ # method 2

# print the next-to-the-last line of a file
sed -e ‘$!{h;d;}’ -e x # for 1-line files, print blank line
sed -e ’1{$q;}’ -e ‘$!{h;d;}’ -e x # for 1-line files, print the line
sed -e ’1{$d;}’ -e ‘$!{h;d;}’ -e x # for 1-line files, print nothing

# print only lines which match regular expression (emulates “grep”)
sed -n ‘/regexp/p’ # method 1
sed ‘/regexp/!d’ # method 2

# print only lines which do NOT match regexp (emulates “grep -v”)
sed -n ‘/regexp/!p’ # method 1, corresponds to above
sed ‘/regexp/d’ # method 2, simpler syntax

# print the line immediately before a regexp, but not the line
# containing the regexp
sed -n ‘/regexp/{g;1!p;};h’

# print the line immediately after a regexp, but not the line
# containing the regexp
sed -n ‘/regexp/{n;p;}’

# print 1 line of context before and after regexp, with line number
# indicating where the regexp occurred (similar to “grep -A1 -B1″)
sed -n -e ‘/regexp/{=;x;1!p;g;$!N;p;D;}’ -e h

# grep for AAA and BBB and CCC (in any order)
sed ‘/AAA/!d; /BBB/!d; /CCC/!d’

# grep for AAA and BBB and CCC (in that order)
sed ‘/AAA.*BBB.*CCC/!d’

# grep for AAA or BBB or CCC (emulates “egrep”)
sed -e ‘/AAA/b’ -e ‘/BBB/b’ -e ‘/CCC/b’ -e d # most seds
gsed ‘/AAA\|BBB\|CCC/!d’ # GNU sed only

# print paragraph if it contains AAA (blank lines separate paragraphs)
# HHsed v1.5 must insert a ‘G;’ after ‘x;’ in the next 3 scripts below
sed -e ‘/./{H;$!d;}’ -e ‘x;/AAA/!d;’

# print paragraph if it contains AAA and BBB and CCC (in any order)
sed -e ‘/./{H;$!d;}’ -e ‘x;/AAA/!d;/BBB/!d;/CCC/!d’

# print paragraph if it contains AAA or BBB or CCC
sed -e ‘/./{H;$!d;}’ -e ‘x;/AAA/b’ -e ‘/BBB/b’ -e ‘/CCC/b’ -e d
gsed ‘/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d’ # GNU sed only

# print only lines of 65 characters or longer
sed -n ‘/^.\{65\}/p’

# print only lines of less than 65 characters
sed -n ‘/^.\{65\}/!p’ # method 1, corresponds to above
sed ‘/^.\{65\}/d’ # method 2, simpler syntax

# print section of file from regular expression to end of file
sed -n ‘/regexp/,$p’

# print section of file based on line numbers (lines 8-12, inclusive)
sed -n ’8,12p’ # method 1
sed ’8,12!d’ # method 2

# print line number 52
sed -n ’52p’ # method 1
sed ’52!d’ # method 2
sed ’52q;d’ # method 3, efficient on large files

# beginning at line 3, print every 7th line
gsed -n ’3~7p’ # GNU sed only
sed -n ’3,${p;n;n;n;n;n;n;}’ # other seds

# print section of file between two regular expressions (inclusive)
sed -n ‘/Iowa/,/Montana/p’ # case sensitive

SELECTIVE DELETION OF CERTAIN LINES:

# print all of file EXCEPT section between 2 regular expressions
sed ‘/Iowa/,/Montana/d’

# delete duplicate, consecutive lines from a file (emulates “uniq”).
# First line in a set of duplicate lines is kept, rest are deleted.
sed ‘$!N; /^\(.*\)\n\1$/!P; D’

# delete duplicate, nonconsecutive lines from a file. Beware not to
# overflow the buffer size of the hold space, or else use GNU sed.
sed -n ‘G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P’

# delete all lines except duplicate lines (emulates “uniq -d”).
sed ‘$!N; s/^\(.*\)\n\1$/\1/; t; D’

# delete the first 10 lines of a file
sed ’1,10d’

# delete the last line of a file
sed ‘$d’

# delete the last 2 lines of a file
sed ‘N;$!P;$!D;$d’

# delete the last 10 lines of a file
sed -e :a -e ‘$d;N;2,10ba’ -e ‘P;D’ # method 1
sed -n -e :a -e ’1,10!{P;N;D;};N;ba’ # method 2

# delete every 8th line
gsed ’0~8d’ # GNU sed only
sed ‘n;n;n;n;n;n;n;d;’ # other seds

# delete lines matching pattern
sed ‘/pattern/d’

# delete ALL blank lines from a file (same as “grep ‘.’ “)
sed ‘/^$/d’ # method 1
sed ‘/./!d’ # method 2

# delete all CONSECUTIVE blank lines from file except the first; also
# deletes all blank lines from top and end of file (emulates “cat -s”)
sed ‘/./,/^$/!d’ # method 1, allows 0 blanks at top, 1 at EOF
sed ‘/^$/N;/\n$/D’ # method 2, allows 1 blank at top, 0 at EOF

# delete all CONSECUTIVE blank lines from file except the first 2:
sed ‘/^$/N;/\n$/N;//D’

# delete all leading blank lines at top of file
sed ‘/./,$!d’

# delete all trailing blank lines at end of file
sed -e :a -e ‘/^\n*$/{$d;N;ba’ -e ‘}’ # works on all seds
sed -e :a -e ‘/^\n*$/N;/\n$/ba’ # ditto, except for gsed 3.02.*

# delete the last line of each paragraph
sed -n ‘/^$/{p;h;};/./{x;/./p;}’

SPECIAL APPLICATIONS:

# remove nroff overstrikes (char, backspace) from man pages. The ‘echo’
# command may need an -e switch if you use Unix System V or bash shell.
sed “s/.`echo \\\b`//g” # double quotes required for Unix environment
sed ‘s/.^H//g’ # in bash/tcsh, press Ctrl-V and then Ctrl-H
sed ‘s/.\x08//g’ # hex expression for sed 1.5, GNU sed, ssed

# get Usenet/e-mail message header
sed ‘/^$/q’ # deletes everything after first blank line

# get Usenet/e-mail message body
sed ’1,/^$/d’ # deletes everything up to first blank line

# get Subject header, but remove initial “Subject: ” portion
sed ‘/^Subject: */!d; s///;q’

# get return address header
sed ‘/^Reply-To:/q; /^From:/h; /./d;g;q’

# parse out the address proper. Pulls out the e-mail address by itself
# from the 1-line return address header (see preceding script)
sed ‘s/ *(.*)//; s/>.*//; s/.*[: /'

# delete leading angle bracket & space from each line (unquote a message)
sed 's/^> //'

# remove most HTML tags (accommodates multiple-line tags)
sed -e :a -e 's/]*>//g;/zipup.bat
dir /b *.txt | sed “s/^\(.*\)\.TXT/pkzip -mo \1 \1.TXT/” >>zipup.bat

OPTIMIZING FOR SPEED: If execution speed needs to be increased (due to
large input files or slow processors or hard disks), substitution will
be executed more quickly if the “find” expression is specified before
giving the “s/…/…/” instruction. Thus:

sed ‘s/foo/bar/g’ filename # standard replace command
sed ‘/foo/ s/foo/bar/g’ filename # executes more quickly
sed ‘/foo/ s//bar/g’ filename # shorthand sed syntax

On line selection or deletion in which you only need to output lines
from the first part of the file, a “quit” command (q) in the script
will drastically reduce processing time for large files. Thus:

sed -n ’45,50p’ filename # print line nos. 45-50 of a file
sed -n ’51q;45,50p’ filename # same, but executes much faster





Permissions and Ownership

22 07 2009

Surprise!

Nothing is perfect. Period. Hard to accept and entertaining sometimes. I do not know why, but after installing the fluxbox desktop manager as an alternative to the default XFCE4 desktop of Xubuntu, an error appeared after login:

User's $home/.dmrc file is being ignored. This prevents the default session and language from being saved. File should be owned by user and have 644 permission. User's $home directory must be owned by user and not writable by other user's.

Uhuu?!

What does permission 644 mean?

The keyword here are owner and permission. And the Community Documentation has an explanation.

In Linux and Unix, everything is a file. Directories are files, files are files and devices are files. [...] All of the files on a system have permissions that allow or prevent others from viewing, modifying or executing. The super user “root” has the ability to access any file on the system. Each file has access restrictions with permissions, user restrictions with owner/group association. [...]

Back to my issue:
ls -al
lists all files (-a inclusive the hidden ones like .dmrc) in the directory as an extensive list (-l) showing particularly ownership and permissions:
-rw------- 1 reinhard reinhard 25 2009-07-22 12:11 .dmrc

The easy part is “reinhard reinhard” which means that owner is reinhard (1st “reinhard”) and group is reinhard (2nd “reinhard”), the way it should be.

The permission is the part saying -rw——-. To understand this have a look at the Community Documentation.

User permission
owner -rwx------
group ----rwx---
other -------rwx

Thus -rw——- means:

  • rw- user may read and write but not execute,
  • group has no permission at all and
  • others have no permission at all, too.

The error log was asking for permission 644. What does that mean then? It is allowed to express the permissions as read, write or execute or as a number.

Permission chmod option
read r or 4
write w or 2
execute x or 1

Combinations of permissions as rwx are then expressed as a sum of r=4, w=2, x=1 equals 7. This means 644 equals rw for owner, r for group and read for others. And is not rw for owner and nothing for group and others.

How to change the permission?

With chmod.
chmod 644 .dmrc

The same reasoning applies for the second point of the error message. The directory $HOME /home/reinhard/ in my case has to be owned by me “reinhard” and must not be writable by others. ls -l /home reveals that permission is drwxrwxrwx (note the “d” denoting that /home/reinhard is a directory). Others have write permission but should not.

chmod o-w reinhard/
meaning others minus - writable.

Surprise.





Frequently Edited System Files

22 07 2009

Thanks Ubuntucat for the list (I always wanted to write it down myself, but found me googling every fresh-install-time again :) ):

  • /etc/fstab (making hard drives and partitions viewable as folders)
  • /boot/grub/menu.lst (controlling the boot menu that lets you choose which operating system to boot to)
  • /etc/apt/sources.list (the list of sources from which you can easily install software)
  • /etc/X11/xorg.conf (screen resolution options, among other things)

There is probably a way a desktop user can avoid editing those system files … anyway even new to Ubuntu I prefer to edit some system files in a text editor instead of endless clicking through menues.





Reinstalling Applications after a Fresh Install

20 07 2009

Once a while I am tempted to upgrade my OS or try another flavor. Now I started trying them on cheap 8-16GB USB-disks so I do not need to mess up my working system anymore…

The problem always is, that after using an OS for some month a lot of applications were installed and configuered. This took a lot of time. It is always a lot of work to get them all in place again and often I forgot about them, until I needed them. Preferably in a situtation without internet connection, so no way “sudo aptitude install” …

I was already up and going to create a script, manually punching everything which I found necessary , but then I found a preconfigured solution.

According to the great Ubuntu Guide:

If you upgrade your Ubuntu system with a fresh install, it is possible to mark the packages and services installed on your old system (prior to the upgrade) and save the settings (“markings”) into a file. Then install the new version of Ubuntu and allow the system to reinstall packages and services using the settings saved in the “markings” file. For instructions, see this Ubuntu forum thread. In brief:

  • On the old system: Synaptic Package Manager -> File -> Save Markings
  • Save the markings file to an external medium, such as USB drive.
  • Complete the backup of your system’s other important files (e.g. the /home directory) before the fresh install of the new system.
  • In the freshly installed new system, again open Synaptic Package Manager -> File -> Read markings and load the file on your USB drive (or other external storage) previously saved.

Note: Many packages, dependencies, and compatibilities change between version of Ubuntu, so this method does not always work. Automated updates remains the recommended method.








Follow

Get every new post delivered to your Inbox.