How to compile Bluefish 1.3.x under OpenSolaris or Solaris Nevada

  1. Get intltool package (for example, from blastwave)

    If you use the bundled intltool, you will get the following error:

    Undefined first referenced
    symbol in file
    libintl_bind_textdomain_codeset bluefish.o
    libintl_gettext bf_lib.o
    libintl_textdomain bluefish.o
    libintl_bindtextdomain bluefish.o
    libintl_ngettext file.o
    ld: fatal: symbol referencing errors. No output written to bluefish-unstable
    collect2: ld returned 1 exit status
    gmake[3]: *** [bluefish-unstable] Error 1
    gmake[3]: Leaving directory `/var/tmp/bluefish-unstable-1.3.2/src’
    gmake[2]: *** [all-recursive] Error 1
    gmake[2]: Leaving directory `/var/tmp/bluefish-unstable-1.3.2/src’
    gmake[1]: *** [all] Error 2
    gmake[1]: Leaving directory `/var/tmp/bluefish-unstable-1.3.2/src’
    gmake: *** [all-recursive] Error 1
  2. Set the LIBS variable:
    export LIBS=”-lsocket -lnsl -L/usr/csw/lib -lintl”
  3. Put /usr/gnu/bin directory in the first place in PATH. For example:
    export PATH=/usr/gnu/bin:/usr/bin:/usr/sbin:/usr/openwin/bin:
    /sbin:/usr/dt/bin:/usr/sfw/bin:/usr/csw/bin:/usr/local/bin

    The reason is two different xgettext programs. The configure script wants the GNU version:

    checking for xgettext… (cached) /usr/bin/xgettext
    checking for msgmerge… /usr/bin/msgmerge
    checking for msgfmt… (cached) /usr/bin/msgfmt
    /usr/bin/xgettext: illegal option — version
    Usage: xgettext [-a [-x exclude-file]] [-jns][-c comment-tag]
    [-d default-domain] [-m prefix] [-M suffix] [-p pathname] files …
    xgettext -h
    ERROR: Cannot open file –version.
    configure: error: GNU gettext tools not found; required for intltool

Compiling Wine 1.1.14 for OpenSolaris or Solaris Nevada

Update 15.02.2009 @ 14:04: Same for wine 1.1.15…

The following error:

ipstats.c: In function `getInterfaceStatsByName’:
ipstats.c:279: error: called object is not a function
ipstats.c: In function `getICMPStats’:
ipstats.c:472: error: called object is not a function
ipstats.c: In function `getIPStats’:
ipstats.c:641: error: called object is not a function
ipstats.c: In function `getTCPStats’:
ipstats.c:778: error: called object is not a function
ipstats.c: In function `getUDPStats’:
ipstats.c:862: error: called object is not a function
ipstats.c: In function `getNumWithOneHeader’:
ipstats.c:985: error: called object is not a function
ipstats.c: In function `getRouteTable’:
ipstats.c:1255: error: called object is not a function
ipstats.c: In function `getTcpTable’:
ipstats.c:1607: error: called object is not a function
gmake[2]: *** [ipstats.o] Error 1
gmake[2]: Leaving directory `/var/tmp/wine-1.1.14/dlls/iphlpapi’
gmake[1]: *** [iphlpapi] Error 2
gmake[1]: Leaving directory `/var/tmp/wine-1.1.14/dlls’
gmake: *** [dlls] Error 2

Is caused by redefinition of the ERR function in the wrong place. To fix move #include “wine/debug.h” behind all includes in dlls/iphlpapi/ipstats.c:

From (line 24):
. . .
#include “config.h”
#include “wine/port.h”
#include “wine/debug.h”

#include
#include
. . .

to (line 126):

. . .
#include “windef.h”
#include “winbase.h”
#include “iprtrmib.h”
#include “ifenum.h”
#include “ipstats.h”
#include “wine/debug.h”
. . .

Upgrade x (Solaris + SqueezeCenter)

Here’s a quick way to upgrade one or both Solaris (tested with Nevada snv_107) and SqueezeCenter (tested with SC 7.4 24827).

  1. Remove the CPAN directory in the SC root directory
    # mv CPAN CPAN.orig
  2. Install missing CPAN modules
    # perl -MCPAN -e shell
    cpan> install Bundle::CPAN
    . . .
    cpan> reload CPAN
    cpan> install I18N::LangTags
    cpan> force install Scalar::Util
  3. Disable Encode::Detect::Detector module in Slim/Utils/Unicode.pm (line 40). The module can’t be compiled for Solaris.
    # vi Slim/Utils/Unicode.pm
    . . .
    #use Encode::Detect::Detector;

Jumbo frames on Solaris

For e1000g (Solaris):
Change /kernel/drv/e1000g.conf to:

MaxFrameSize=3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3;
# 0 is for normal ethernet frames.
# 1 is for upto 4k size frames.
# 2 is for upto 8k size frames.
# 3 is for upto 16k size frames.
# These are maximum frame limits, not the actual ethernet frame
# size. Your actual ethernet frame size would be determined by
# protocol stack configuration (please refer to ndd command man pages)
# For Jumbo Frame Support (9k ethernet packet)
# use 3 (upto 16k size frames)

For rge (Solaris):
Maximum MTU supported by rge is 7000.
Change /kernel/drv/rge.conf to:

default_mtu = 7000;

Then reboot.

The result:

xeon# ifconfig -a
. . .
e1000g1: flags=201000843 mtu 9000 index 2
inet 10.0.10.1 netmask ffffff00 broadcast 10.0.10.255
ether 0:18:f3:ef:2a:d1

Short script for searching mail logs

Today I had to search through dozens of mail logs (syslog) located on several mail relays and find all entries related to a particular user.

Given:

  • All servers are managed via a remote tty console,
  • The ksh-script must be copy&pasteable
  • All logs are gzipped
  • I need all entries with the same message number (the ninth field) as the found log entry

This is what I came up with:

Continue reading “Short script for searching mail logs”

CPU power management

Some CPU’s and system boards allow you to change operating voltage and frequency, resulting in a corresponding change in performance, and power consumed.

To test what frequencies are supported:

# kstat -m cpu_info -s supported_frequencies_Hz
module: cpu_info instance: 0
name: cpu_info0 class: misc
supported_frequencies_Hz 2000000000:2667000000module: cpu_info instance: 1
name: cpu_info1 class: misc
supported_frequencies_Hz 2000000000:2667000000module: cpu_info instance: 2
name: cpu_info2 class: misc
supported_frequencies_Hz 2000000000:2667000000

module: cpu_info instance: 3
name: cpu_info3 class: misc
supported_frequencies_Hz 2000000000:2667000000

In this example (Xeon x5355), two frequencies are supported: 2.000 and 2.667 GHz

What is the current frequency:

# kstat -m cpu_info -s current_clock_Hz
module: cpu_info instance: 0
name: cpu_info0 class: misc
current_clock_Hz 2000000000module: cpu_info instance: 1
name: cpu_info1 class: misc
current_clock_Hz 2000000000

module: cpu_info instance: 2
name: cpu_info2 class: misc
current_clock_Hz 2667000000

module: cpu_info instance: 3
name: cpu_info3 class: misc
current_clock_Hz 2667000000

In this example, two cores are running at 2.00GHz and two at 2.667GHz

To enable CPU power management add the following lines to /etc/power.conf and let pmconfig reread the config:

# vi /etc/power.conf
...
cpupm enable
cpu-threshold 1s
...
# pmconfig
#

Or download and install powertop. When you start it, press “p” to enable CPU power management.

Using dtpower:

To be able run dtpower as a superuser (only) edit /etc/default/power:

# vi /etc/default/power
. . .
PMCHANGEPERM=-
CPRCHANGEPERM=-
. . .
#

ATTENTION: If you have an ASUS DSBF motherboard you need to upgrade the BIOS to AT LEAST version 1004. Older revisions do not support multiple frequencies.

Additional information: