<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
	xmlns:media="http://search.yahoo.com/mrss/"
>

<channel>
	<title>Micks Distractions&#187; Tech</title>
	<atom:link href="http://onut.net/blog/archives/category/tech/feed" rel="self" type="application/rss+xml" />
	<link>http://onut.net/blog</link>
	<description>Life is too short to be not interested in everything.</description>
	<lastBuildDate>Thu, 15 Dec 2011 10:59:03 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
	<copyright>Copyright &#xA9; Micks Distractions 2011 </copyright>
	<managingEditor>website@boutade.net (Micks Distractions)</managingEditor>
	<webMaster>website@boutade.net (Micks Distractions)</webMaster>
	<image>
		<url>http://onut.net/wp/wp-content/plugins/podpress/images/powered_by_podpress.jpg</url>
		<title>Micks Distractions</title>
		<link>http://onut.net/blog</link>
		<width>144</width>
		<height>144</height>
	</image>
	<itunes:subtitle></itunes:subtitle>
	<itunes:summary>Life is too short to be not interested in everything.</itunes:summary>
	<itunes:keywords></itunes:keywords>
	<itunes:category text="Society &#38; Culture" />
	<itunes:author>Micks Distractions</itunes:author>
	<itunes:owner>
		<itunes:name>Micks Distractions</itunes:name>
		<itunes:email>website@boutade.net</itunes:email>
	</itunes:owner>
	<itunes:block>no</itunes:block>
	<itunes:explicit>no</itunes:explicit>
	<itunes:image href="http://onut.net/wp/wp-content/plugins/podpress/images/powered_by_podpress.jpg" />
		<item>
		<title>Solaris 8 brandz getppid hack</title>
		<link>http://onut.net/blog/archives/577#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://onut.net/blog/archives/577#comments</comments>
		<pubDate>Sat, 12 Sep 2009 08:24:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Sun Microsystems]]></category>

		<guid isPermaLink="false">http://onut.net/blog/?p=577</guid>
		<description><![CDATA[Sun has always said that any application written for Solaris 6 will be forwards compatible with any other version. It’s a big claim, but as long as the application adheres to the API it’s possible. Occasionally you bump into things that don’t adhere to the API, (quite a lot of applications really). This is usually [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>Sun has always said that any application written for Solaris 6 will be forwards compatible with any other version. It’s a big claim, but as long as the application adheres to the API it’s possible.<br />
Occasionally you bump into things that don’t adhere to the API, (quite a lot of applications really). This is usually caused by developers thinking that they should do things “this way”, because Sun does it oh so wrong all the time. Consequently, you end up with legacy applications that can’t run on Solaris 10.</p>
<p>Enter Solaris 8 brandz zones. Being able to run legacy applications in a Solaris 8 brandz generally gets you around most of the issues in the remaining apps that do stupid things. However, there’s a couple of quirks with a zone that can introduce odd behaviour in an application.</p>
<p>Progress for example.…… Read On.<br />
<span id="more-577"></span></p>
<h4>The issue</h4>
<p>An old legacy Progress database was sitting on an old legacy server which was so EOL that it would make even Bill cringe… or laugh… Running Solaris 6 was not an option, but running anything else, (even Solaris 9), would be adventurous to say the least. Can I say legacy again?</p>
<h4>The solution</h4>
<p>So first try a brandz Solaris 8. Configured, installed, and booted a brand spanking new zone. Copy the data over. Attempt a start of the Progress database.</p>
<pre LANGUAGE="text">
10:03:21 BROKER  0: Multi-user session begin. (333)
10:03:24 BROKER  0: Begin Physical Redo Phase at 13312 . (5326)
10:03:30 BROKER  0: Physical Redo Phase Completed at blk 13743 off 2457 upd 2636. (7161)
10:03:31 BROKER  0: Started for mfglive using TCP, pid 20533. (5644)
10:04:02 BROKER  0: SYSTEM ERROR: Unable to kill parent process, errno= 4. (1680)
10:04:02 BROKER  0: SYSTEM ERROR: The broker is exiting unexpectedly, beginning Abnormal Shutdown. (5292)
10:04:02 BROKER  0: drexit: Initiating Abnormal Shutdown
10:04:02 BROKER  0: ** Save file named core for analysis by Progress Software Corporation. (439)
10:04:02 BROKER  0: Begin ABNORMAL shutdown code 2 (2249)
10:04:04 BROKER   : Removed shared memory with segment_id: 41
10:04:04 BROKER   : Multi-user session end. (334)
</pre>
<p>Nada. Mmmmm. Seems to start up OK, but then crashes in a screaming heap a short while later.</p>
<p>Checking shared libraries seemed to be OK. Nothing missing or odd.</p>
<pre LANGUAGE="text">
root % ldd -r /mfgpro/dlc91c/bin/_mprosrv
        /usr/lib/secure/s8_preload.so.1
        libsocket.so.1 =>        /usr/lib/libsocket.so.1
        libnsl.so.1 =>   /usr/lib/libnsl.so.1
        libintl.so.1 =>  /usr/lib/libintl.so.1
        libdl.so.1 =>    /usr/lib/libdl.so.1
        libm.so.1 =>     /usr/lib/libm.so.1
        libthread.so.1 =>        /usr/lib/libthread.so.1
        libc.so.1 =>     /usr/lib/libc.so.1
        libmp.so.2 =>    /usr/lib/libmp.so.2
        /usr/platform/SUNW,Sun-Fire-V490/lib/libc_psr.so.1
</pre>
<p>So, I thought I’d truss, (the old friend), a few processes to see what was going on. Chucking the below in various scripts, and comparing the working server to the non-working server. (This produces VERY NOISY output, but it’s great for diagnosing what’s going on.)</p>
<pre LANGUAGE="text">
truss -feal -vall -xall -rall -wall -sall -mall -o /tmp/logfile exec_process
</pre>
<p>If you look at the appendices to this post, I’ve added the relevant, sections of the truss. You may notice an interesting thing. The working server roughly follows this process, (in the snippet):<br />
– Bind to 0.0.0.0 port 3500.<br />
– fstat64() filehandles.<br />
– Yadda, yadda, write output to STDOUT.<br />
– getpid() — find parent process, (24012).<br />
– kill –TERM 24012<br />
– wait()<br />
– Parent — ALRM signal<br />
– Parent — die.<br />
– Child — Context switch.<br />
– getpid() — find parent process, (1). OK!</p>
<p>Now this is a little odd. It would seem that some developer thought that it’d be a damn good idea to re-invent the old “I’m going to fork a child process in the background” API calls, and chuck in their own.</p>
<p>They are checking the parent process, killing it, and rechecking to see if it’s now 1, (which is sysvinit), then it progresses on.</p>
<p>Now, the non-working server.<br />
– Bind to 0.0.0.0 port 3500.<br />
– fstat64() filehandles.<br />
– Yadda, yadda, write output to STDOUT.<br />
– getpid() — find parent process, (21267).<br />
– kill –TERM 21267<br />
– wait()<br />
– Parent — ALRM signal <-IMPORTANT<br />
– Parent — no die.<br />
– getpid() — find parent process, (21267).<br />
– kill –TERM 21267<br />
– wait()<br />
– Parent — ALRM signal <-IMPORTANT<br />
– Parent — no die.<br />
Ad naseum.….</p>
<p>A quick process check:</p>
<pre LANGUAGE="text">
     UID   PID  PPID  C    STIME TTY      TIME CMD
    root  2260  1417  0   May 27 ?        0:09 /etc/init
    root  1417  1417  0   May 27 ?        0:00 zsched
    root  2960  1417  0   May 27 ?        0:00 /usr/lib/picl/picld
</pre>
<p>Hey! Of course you’re not gonna be able to kill zsched! You see in a Solaris zone the ‘root’ process is called ‘zsched’, and it will never ever be 1 at all, and neither will init for that matter. Not only that you’re not ever going to be able to kill the zsched process from within the zone as it’s protected within the global zone memory space.</p>
<p>Well, it’s too late to kick the developer up the bum. So time to hack.</p>
<h4>The hack</h4>
<p>Preloading shared libs has been around since I was a Mars Bar in my Dad’s top pocket, (well almost). So it should be a simple case of replacing any getpid() API call with my own. Simple enough, done it before.</p>
<p>See the appendix for the getpidhack.c file that I used. This is a shared lib that replaces both getppid() and getpid(), (for good measure, but not really needed in my case), API calls. It will return the PID 1, when _getppid() returns the same PID as the environment variable PIDHACK.<br />
Note that I call _getppid() which allows me to fetch the REAL PID so I can return it when they don’t match.</p>
<p>So, to use it. First build it:</p>
<pre LANGUAGE="bash">
gcc -fPIC -c getpidhack.c
gld getpidhack.o -L/usr/lib -lc -G -assert pure-text -o /usr/local/lib/libgetpidhack.so
</pre>
<p>Set an environment variable called PIDHACK to the currently running zsched process:</p>
<pre LANGUAGE="bash">
HACKPID=`ps -e | awk '/zsched/{print$1}'`
export HACKPID
</pre>
<p>Then set your LD_PRELOAD variable to point to the shared lib:</p>
<pre LANGUAGE="bash">
LD_PRELOAD="/usr/local/lib/libgetpidhack.so"
export LD_PRELOAD
</pre>
<p>After this the Progress database just started. Woot! The DB can now run on hardware that it would never in it’s life be able to run on under a brandz zone. Another EOL server to chuck out the computer room window to see what happens.</p>
<p>BTW, if you are having issues with this, you can run a DTrace to see if you’re calling the real getpid(), or the getpidhack version. Create the following script, and run it with one argument, (the PID of your zsched). Every time you hit the getppid() API call it’ll register — this means that you are not replacing the API call and your shared lib preload isn’t working.</p>
<pre LANGUAGE="c">
#!/usr/sbin/dtrace -s

syscall::getpid:return
/ppid == $1/
{
        printf("%d %d", ppid, pid);
}
</pre>
<hr />
<h4>Appendix 1 — getpidhack.c</h4>
<pre LANGUAGE="c">
#include &lt;sys/types.h&gt;
#include &lt;unistd.h&gt;
#include &lt;stdio.h&gt;

pid_t getppid(void)
{
        pid_t hackppid;
        pid_t realppid;

        // hackpid - the PID of the zsched process.
        hackppid = atol(getenv("HACKPID"));

        // realppid - the real PID of the parent process.
        realppid = _getppid();

        // If the realppid equals hackppid, then we want to reset it to 1.
        if (realppid == hackppid)
        {
                return((pid_t) 1);
        }

        // Else return whatever PID we were given.
        return(realppid);
}

pid_t getpid(void)
{
        pid_t hackpid;
        pid_t realpid;

        // hackpid - the PID of the zsched process.
        hackpid = atol(getenv("HACKPID"));

        // realpid - the real PID of the parent process.
        realpid = _getpid();

        // If the realpid equals hackpid, then we want to reset it to 1.
        if (realpid == hackpid)
        {
                return((pid_t) 1);
        }

        // Else return whatever PID we were given.
        return(realpid);
}
</pre>
<h4>Appendix 2 — The working server</h4>
<pre LANGUAGE="text">
24013/1:        setsockopt(76, 65535, 4, 0xEFFFF7FC, 4)         = 0
24013/1:        setsockopt(76, 65535, 8, 0xEFFFF7FC, 4)         = 0
24013/1:        bind(76, 0x0015DCA8, 16)                        = 0
24013/1:                name = 0.0.0.0/3500
24013/1:        listen(76, 10)                                  = 0
24013/1:        getpid()                                        = 24013 [24012]
24013/1:        lseek(3, 457164, 0)                             = 457164
24013/1:        read(3, 0xEFFFF66C, 81)                         = 81
24013/1:           % L S t a r t e d   f o r   % s   u s i n g   % s ,   p i d  %
24013/1:           l .   ( 5 6 4 4 )\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0
24013/1:          \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
24013/1:        time()                                          = 1252542477
24013/1:        write(9, 0xEFFFF154, 69)                        = 69
24013/1:           1 0 : 2 7 : 5 7   B R O K E R     0 :   S t a r t e d   f o r
24013/1:           m f g l i v e   u s i n g   T C P ,   p i d   2 4 0 1 3 .   ( 5
24013/1:           6 4 4 )\n
24013/1:        fstat64(0, 0xEFFFF058)                          = 0
24013/1:            d=0x01540000 i=17139 m=0020620 l=1  u=0     g=7     rdev=0x0 0600005
24013/1:                at = Sep 10 10:27:46 EST 2009  [ 1252542466 ]
24013/1:                mt = Sep 10 10:27:56 EST 2009  [ 1252542476 ]
24013/1:                ct = Sep 10 09:39:31 EST 2009  [ 1252539571 ]
24013/1:            bsz=8192  blks=0     fs=ufs
24013/1:        fstat64(1, 0xEFFFF058)                          = 0
24013/1:            d=0x01540000 i=17139 m=0020620 l=1  u=0     g=7     rdev=0x0 0600005
24013/1:                at = Sep 10 10:27:46 EST 2009  [ 1252542466 ]
24013/1:                mt = Sep 10 10:27:56 EST 2009  [ 1252542476 ]
24013/1:                ct = Sep 10 09:39:31 EST 2009  [ 1252539571 ]
24013/1:            bsz=8192  blks=0     fs=ufs
24013/1:        fstat64(2, 0xEFFFF058)                          = 0
24013/1:            d=0x01540000 i=17139 m=0020620 l=1  u=0     g=7     rdev=0x0 0600005
24013/1:                at = Sep 10 10:27:46 EST 2009  [ 1252542466 ]
24013/1:                mt = Sep 10 10:27:56 EST 2009  [ 1252542476 ]
24013/1:                ct = Sep 10 09:39:31 EST 2009  [ 1252539571 ]
24013/1:            bsz=8192  blks=0     fs=ufs
24013/1:        write(1, 0xEFFFF154, 69)                        = 69
24013/1:           1 0 : 2 7 : 5 7   B R O K E R     0 :   S t a r t e d   f o r
24013/1:           m f g l i v e   u s i n g   T C P ,   p i d   2 4 0 1 3 .   ( 5
24013/1:           6 4 4 )\n
24013/1:        pwrite64(7, 0xEFFFF908, 4, 0)                   = 4
24013/1:             0xEFFFF908: "\0\0\002"
24013/1:        close(7)                                        = 0
24013/1:        getpid()                                        = 24013 [24012]
24013/1:        getpid()                                        = 24013 [24012]
24013/1:        kill(24012, 0x0000000F)                         = 0
24012/2:        signotifywait()                                 = 15
24013/1:        lwp_alarm(1)                                    = 0
24012/2:            Incurred fault #11, FLTPAGE  %pc = 0xEF5CDC80  addr = 0xEF67 0F48
24012/2:            Incurred fault #11, FLTPAGE  %pc = 0xEF64A3C8  addr = 0xEF66 FA68
24012/2:        lwp_sigredirect(1, 0x0000000F)                  = 0
24012/1:            Received signal #15, SIGTERM, in wait() [caught]
24012/1:              siginfo: SIGTERM pid=24013 uid=0
24012/1:        wait()                                          Err#4 EINTR
24012/1:        sigprocmask(3, 0xEF667DF8, 0x00000000)          = 0
24012/1:                 set = 0 0 0 0
24012/1:            Incurred fault #11, FLTPAGE  %pc = 0x0004593C  addr = 0x0013 10F4
24012/1:            Incurred fault #11, FLTPAGE  %pc = 0x000459A8  addr = 0x0015 3AEC
24012/1:        _exit(0)
24013/1:            Received signal #14, SIGALRM, in pause() [caught]
24013/1:        pause()                                         Err#4 EINTR
24013/1:            Incurred fault #11, FLTPAGE  %pc = 0xEF5CDCE8  addr = 0xEF5C DCE8
24013/1:        sigprocmask(3, 0xEF667DF8, 0x00000000)          = 0
24013/1:                 set = 0 0 0 0
24013/1:        context(1, 0xEFFFF240)
24013/1:        getpid()                                        = 24013 [1]
24013/1:        close(0)                                        = 0
24013/1:        open(0xEFFFF920, 0)                             = 0
24013/1:             0xEFFFF920: "/qaddb/eblive/mfglive.lg"
24013/1:        close(1)                                        = 0
24013/1:        open(0xEFFFF920, 0)                             = 1
24013/1:             0xEFFFF920: "/qaddb/eblive/mfglive.lg"
24013/1:        close(2)                                        = 0
24013/1:        open(0xEFFFF920, 0)                             = 2
24013/1:             0xEFFFF920: "/qaddb/eblive/mfglive.lg"
24013/1:        lseek(3, 342954, 0)                             = 342954
24013/1:        read(3, 0xEFFFF570, 81)                         = 81
24013/1:           % L P R O G R E S S   V e r s i o n   % s   o n   % s .   ( 4 2
24013/1:           3 4 )\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0
24013/1:          \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
24013/1:        time()                                          = 1252542478
24013/1:        write(9, 0xEFFFF05C, 61)                        = 61
24013/1:           1 0 : 2 7 : 5 8   B R O K E R     0 :   P R O G R E S S   V e r
24013/1:           s i o n   9 . 1 C   o n   S O L A R I S .   ( 4 2 3 4 )\n
24013/1:        fstat64(0, 0xEFFFEF60)                          = 0
24013/1:            d=0x01540002 i=68332 m=0100644 l=1  u=0     g=1     sz=97192 88
24013/1:                at = Sep 10 03:01:28 EST 2009  [ 1252515688 ]
24013/1:                mt = Sep 10 10:27:58 EST 2009  [ 1252542478 ]
24013/1:                ct = Sep 10 10:27:58 EST 2009  [ 1252542478 ]
24013/1:            bsz=8192  blks=19008 fs=ufs
24013/1:        fstat64(1, 0xEFFFEF60)                          = 0
24013/1:            d=0x01540002 i=68332 m=0100644 l=1  u=0     g=1     sz=97192 88
24013/1:                at = Sep 10 03:01:28 EST 2009  [ 1252515688 ]
24013/1:                mt = Sep 10 10:27:58 EST 2009  [ 1252542478 ]
24013/1:                ct = Sep 10 10:27:58 EST 2009  [ 1252542478 ]
24013/1:            bsz=8192  blks=19008 fs=ufs
24013/1:        fstat64(2, 0xEFFFEF60)                          = 0
24013/1:            d=0x01540002 i=68332 m=0100644 l=1  u=0     g=1     sz=97192 88
24013/1:                at = Sep 10 03:01:28 EST 2009  [ 1252515688 ]
24013/1:                mt = Sep 10 10:27:58 EST 2009  [ 1252542478 ]
24013/1:                ct = Sep 10 10:27:58 EST 2009  [ 1252542478 ]
24013/1:            bsz=8192  blks=19008 fs=ufs
24013/1:        write(1, 0xEFFFF05C, 61)                        Err#9 EBADF
24013/1:           1 0 : 2 7 : 5 8   B R O K E R     0 :   P R O G R E S S   V e r
24013/1:           s i o n   9 . 1 C   o n   S O L A R I S .   ( 4 2 3 4 )\n
24013/1:        lseek(3, 346761, 0)                             = 346761
24013/1:        read(3, 0xEFFFF570, 81)                         = 81
24013/1:           % L S e r v e r   s t a r t e d   b y   % s   o n   % s .   ( 4
24013/1:           2 8 1 )\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0 \0
24013/1:          \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
24013/1:        time()                                          = 1252542478
24013/1:        write(9, 0xEFFFF05C, 65)                        = 65
24013/1:           1 0 : 2 7 : 5 8   B R O K E R     0 :   S e r v e r   s t a r t
24013/1:           e d   b y   r o o t   o n   / d e v / p t s / 5 .   ( 4 2 8 1)
24013/1:          \n
</pre>
<h4>Appendix 3 — The non-working server</h4>
<pre LANGUAGE="text">
21268/1:        setsockopt(76, 65535, 4, 0xFFBFF9AC, 4, 1)      = 0
21268/1:        setsockopt(76, 65535, 8, 0xFFBFF9AC, 4, 1)      = 0
21268/1:        bind(76, 0x0015DCA8, 16, 3)                     = 0
21268/1:                AF_INET  name = 0.0.0.0  port = 3500
21268/1:        listen(76, 10, 1)                               = 0
21268/1:        getpid()                                        = 21268 [21267]
21268/1:        lseek(3, 457164, 0)                             = 457164
21268/1:        read(3, 0xFFBFF81C, 81)                         = 81
21268/1:           % L S t a r t e d   f o r   % s   u s i n g   % s ,   p i d   %
21268/1:           l .   ( 5 6 4 4 )\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
21268/1:          \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
21268/1:        time()                                          = 1252542489
21268/1:        write(9, 0xFFBFF304, 69)                        = 69
21268/1:           1 0 : 2 8 : 0 9   B R O K E R     0 :   S t a r t e d   f o r
21268/1:           m f g l i v e   u s i n g   T C P ,   p i d   2 1 2 6 8 .   ( 5
21268/1:           6 4 4 )\n
21268/1:        fstat64(0, 0xFFBFF208)                          = 0
21268/1:            d=0x05980009 i=4426329 m=0020620 l=1  u=0     g=7     rdev=0x00600011
21268/1:                at = Sep 10 10:27:57 EST 2009  [ 1252542477 ]
21268/1:                mt = Sep 10 10:28:09 EST 2009  [ 1252542489 ]
21268/1:                ct = Sep 10 09:44:02 EST 2009  [ 1252539842 ]
21268/1:            bsz=8192  blks=0     fs=lofs
21268/1:        fstat64(1, 0xFFBFF208)                          = 0
21268/1:            d=0x05980009 i=4426329 m=0020620 l=1  u=0     g=7     rdev=0x00600011
21268/1:                at = Sep 10 10:27:57 EST 2009  [ 1252542477 ]
21268/1:                mt = Sep 10 10:28:09 EST 2009  [ 1252542489 ]
21268/1:                ct = Sep 10 09:44:02 EST 2009  [ 1252539842 ]
21268/1:            bsz=8192  blks=0     fs=lofs
21268/1:        fstat64(2, 0xFFBFF208)                          = 0
21268/1:            d=0x05980009 i=4426329 m=0020620 l=1  u=0     g=7     rdev=0x00600011
21268/1:                at = Sep 10 10:27:57 EST 2009  [ 1252542477 ]
21268/1:                mt = Sep 10 10:28:09 EST 2009  [ 1252542489 ]
21268/1:                ct = Sep 10 09:44:02 EST 2009  [ 1252539842 ]
21268/1:            bsz=8192  blks=0     fs=lofs
21268/1:        write(1, 0xFFBFF304, 69)                        = 69
21268/1:           1 0 : 2 8 : 0 9   B R O K E R     0 :   S t a r t e d   f o r
21268/1:           m f g l i v e   u s i n g   T C P ,   p i d   2 1 2 6 8 .   ( 5
21268/1:           6 4 4 )\n
21268/1:        pwrite64(7, 0xFFBFFAB8, 4, 0)                   = 4
21268/1:             0xFFBFFAB8: "\0\0\002"
21268/1:        close(7)                                        = 0
21268/1:        getpid()                                        = 21268 [21267]
21268/1:        kill(21267, 0x0000000F)                         = 0
21267/1:            Received signal #15, SIGTERM, in wait() [caught]
21267/1:              siginfo: SIG#0
21268/1:            Incurred fault #11, FLTPAGE  %pc = 0x000C3048  addr = 0x58900137234
21267/1:        wait()                                          Err#4 EINTR
21268/1:        alarm(1)                                        = 0
21267/1:        lwp_sigtimedwait(0xFFBFF570, 0xFFBFF498, 0x00000010) = 0
21267/1:                sigmask = 0 0 0 0
21267/1:              siginfo: SIG#0
21267/1:        lwp_sigtimedwait(0xFFBFF488, 0xFFBFF570, 0x00000010) = 0
21267/1:                sigmask = 0 0 0 0
21267/1:              siginfo: SIG#0
21267/1:        lwp_sigtimedwait(0xFFBFF484, 0xFFBFF2B8, 0x00000010) = 0
21267/1:                sigmask = 0x00004000 0 0 0
21267/1:              siginfo: SIG#16384
21267/1:        lwp_sigtimedwait(0xFFBFF2A8, 0xFFBFF330, 0x00000010) = 0
21267/1:                sigmask = 0x00004000 0 0 0
21267/1:              siginfo: SIG#16384
21267/1:        sigprocmask(3, 0xFFBFF330, 0x00000000)          = 0
21267/1:                 set = 0x00004000 0 0 0
21267/1:            Incurred fault #11, FLTPAGE  %pc = 0x0004593C  addr = 0x589001310F4
21267/1:            Incurred fault #11, FLTPAGE  %pc = 0x000459A8  addr = 0x58900153AEC
21267/1:        _exit(0)
21268/1:            Received signal #14, SIGALRM, in pause() [caught]
21268/1:              siginfo: SIG#0
21268/1:        pause()                                         Err#4 EINTR
21268/1:        lwp_sigtimedwait(0xFFBFF698, 0xFFBFF5C0, 0x00000010) = 0
21268/1:                sigmask = 0 0 0 0
21268/1:              siginfo: SIG#0
21268/1:        lwp_sigtimedwait(0xFFBFF5B0, 0xFFBFF698, 0x00000010) = 0
21268/1:                sigmask = 0 0 0 0
21268/1:              siginfo: SIG#0
21268/1:        lwp_sigtimedwait(0xFFBFF5AC, 0xFFBFF3E0, 0x00000010) = 0
21268/1:                sigmask = 0x00002000 0 0 0
21268/1:              siginfo: SIG#8192
21268/1:        lwp_sigtimedwait(0xFFBFF3D0, 0xFFBFF458, 0x00000010) = 0
21268/1:                sigmask = 0x00002000 0 0 0
21268/1:              siginfo: SIG#8192
21268/1:        sigprocmask(3, 0xFFBFF458, 0x00000000)          = 0
21268/1:                 set = 0x00002000 0 0 0
21268/1:        lwp_sigtimedwait(0xFF1D7C18, 0xFFBFF1B0, 0x00000010) = 0
21268/1:                sigmask = 0xFFBFFEFF 0x00001FFF 0 0
21268/1:              siginfo: SIG#-4194561
21268/1:        lwp_sigtimedwait(0xFFBFF1A0, 0xFFBFF228, 0x00000010) = 0
21268/1:                sigmask = 0xFFBFFEFF 0x0000FF1F 0 0
21268/1:              siginfo: SIG#-4194561
21268/1:        sigprocmask(3, 0xFFBFF228, 0xFFBFF238)          = 0
21268/1:                 set = 0xFFBFFEFF 0x0000FF1F 0 0
21268/1:                oset = 0x00002000 0 0 0
21268/1:        lwp_sigtimedwait(0xFFBFF238, 0xFFBFF1B0, 0x00000010) = 0
21268/1:                sigmask = 0x00002000 0 0 0
21268/1:              siginfo: SIG#8192
21268/1:        lwp_sigtimedwait(0xFFBFF1A0, 0xFFBFF360, 0x00000010) = 0
21268/1:                sigmask = 0x00002000 0 0 0
21268/1:              siginfo: SIG#8192
21268/1:        lwp_park(1, 1, 1)                               = 0
21268/1:        lwp_sigtimedwait(0xFFBFF370, 0xFFBFF088, 0x000001C0) = 0
21268/1:                sigmask = 0x0000082F 0 0 0
21268/1:              siginfo: SIG#2095
21268/1:        lwp_sigtimedwait(0xFFBFF090, 0xFFBFEFF8, 0x00000010) = 0
21268/1:                sigmask = 0 0 0 0
21268/1:              siginfo: SIG#0
21268/1:        lwp_sigtimedwait(0xFFBFEFE8, 0xFFBFF090, 0x00000010) = 0
21268/1:                sigmask = 0 0 0 0
21268/1:              siginfo: SIG#0
21268/1:        context(1, 0xFFBFF088)
21268/1:        getpid()                                        = 21268 [1417]
21268/1:        kill(1417, 0x0000000F)                          = 0
21268/1:        alarm(1)                                        = 0
21268/1:            Received signal #14, SIGALRM, in pause() [caught]
21268/1:              siginfo: SIG#0
21268/1:        pause()                                         Err#4 EINTR
</pre>
<p class="fbconnect_share"><fb:share-button class="url" href="http://onut.net/blog/archives/577" /></p><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://onut.net/blog/archives/577/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Prowl — the “anything” push to your iPhone</title>
		<link>http://onut.net/blog/archives/565#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://onut.net/blog/archives/565#comments</comments>
		<pubDate>Thu, 10 Sep 2009 22:53:49 +0000</pubDate>
		<dc:creator>Mick</dc:creator>
				<category><![CDATA[Mobiles]]></category>

		<guid isPermaLink="false">http://onut.net/blog/archives/565</guid>
		<description><![CDATA[I came across this cool little iPhone app in my recent adventures into the world of distractedness. A growl client for the iPhone. What Prowl does is send “push” events to your iPhone from virtually anything. Install the app, register on the Prowl website, generate an API key, and you’re home and hosed for some [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>I came across this cool little iPhone app in my recent adventures into the world of distractedness. A growl client for the iPhone.</p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/10/506.jpg' rel='shadowbox[sbpost-565];player=img;'><img src='http://blogpress.w18.net/photos/09/09/10/s_506.jpg' border='0' width='187' height='281' style='margin:5px'></a></center><br />
<span id="more-565"></span></p>
<p>What Prowl does is send “push” events to your iPhone from virtually anything.<br />
Install the app, register on the Prowl website, generate an API key, and you’re home and hosed for some good hacking.</p>
<p>This means that any application that wants to push a notification to your iPhone contacts the Prowl servers, which then sends the notification on to your iPhone. So far it’s reliable enough, but even they say not to trust it for critical or emergency applications.</p>
<p>There is an API, and it is fairly complete, supporting all your language preferences, (Java, perl, PHP, etc, etc — sorry no COBOL).</p>
<p>Of course, there’s even a plugin for WordPress, (which I have to say is <b>so much easier</b> than Joomla). It will send push alerts for new posts, comments, and other things.</p>
<h4>WordPress post alert</h4>
<p>Looks like someone has posted another blog entry.</p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/10/692.jpg' rel='shadowbox[sbpost-565];player=img;'><img src='http://blogpress.w18.net/photos/09/09/10/s_692.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<p>Viewing the notification brings you here:</p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/10/693.jpg' rel='shadowbox[sbpost-565];player=img;'><img src='http://blogpress.w18.net/photos/09/09/10/s_693.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<h4>Alerts</h4>
<p>Alerts can be adjusted, the nice feature is being able to silence them for a given time.</p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/11/5.jpg' rel='shadowbox[sbpost-565];player=img;'><img src='http://blogpress.w18.net/photos/09/09/11/s_5.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<p>And adjust what sounds are played and when, although the default sounds are too quiet I find.</p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/11/6.jpg' rel='shadowbox[sbpost-565];player=img;'><img src='http://blogpress.w18.net/photos/09/09/11/s_6.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<h4>Redirects</h4>
<p>Redirects allow a specified application to start when a particular event comes in. Trouble is that there’s no way of selecting anything else but the given set of applications. Maybe in the next release.</p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/11/7.jpg' rel='shadowbox[sbpost-565];player=img;'><img src='http://blogpress.w18.net/photos/09/09/11/s_7.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/11/8.jpg' rel='shadowbox[sbpost-565];player=img;'><img src='http://blogpress.w18.net/photos/09/09/11/s_8.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/11/9.jpg' rel='shadowbox[sbpost-565];player=img;'><img src='http://blogpress.w18.net/photos/09/09/11/s_9.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/11/10.jpg' rel='shadowbox[sbpost-565];player=img;'><img src='http://blogpress.w18.net/photos/09/09/11/s_10.jpg' border='0' width='187' height='281' style='margin:5px'></a></center><br />
– Posted from my iPhone<br /></p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://onut.net/blog/archives/565" /></p><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://onut.net/blog/archives/565/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WordPress + iPhone + BlogPress</title>
		<link>http://onut.net/blog/archives/525#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://onut.net/blog/archives/525#comments</comments>
		<pubDate>Wed, 09 Sep 2009 12:34:50 +0000</pubDate>
		<dc:creator>Mick</dc:creator>
				<category><![CDATA[Mobiles]]></category>

		<guid isPermaLink="false">http://onut.net/blog/archives/525</guid>
		<description><![CDATA[I recently moved my blog away from Joomla and over to WordPress. This was for several reasons: 1. Joomla is a pain in the bum for blogging. Its too complex for a blog and I keep forgetting the differences between a “com”, “module” and a “plugin”. 2. Upgrading is a pain in the bum. I [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>I recently moved my blog away from Joomla and over to WordPress. </p>
<p>This was for several reasons:<br />
1. Joomla is a pain in the bum for blogging. Its too complex for a blog and I keep forgetting the differences between a “com”, “module” and a “plugin”.<br />
2. Upgrading is a pain in the bum. I just recently noticed that half my content went missing as part of a recent upgrade.<br />
3. I had bought an iPhone and wanted to be able to post while out and about. Getting this going in Joomla was a pain in the bum, (although I discovered after switching to WordPress that it wasn’t really Joomla’s fault).<br />
4. My old TreeCam blog was running on an old version of s9y, and I wanted to combine it all.<br />
<span id="more-525"></span><br />
Not that Joomla is all bad, it’s a great CMS app, but just not for blogging. It has a fantastic plugin, (module or whatever the heck you call it), for eCommerce, (virtuemart), and even a blog thingy. I always found it to be a struggle. One of those things. It’s not designed for blogging.</p>
<p>It was a good decision to move. WordPress is infinitely easier than Joomla. None of the learning curve. So far there seems to be the same number of plugins for both, but it looks like Joomla is getting a little “stale”. Installing plugins for WordPress is damn easy. Almost a “one click” install or upgrade for all plugins and templates.</p>
<p>Since the switch I’ve discovered all sorts of goodies. EG out of the box weblog API, RPC calls, blog pings, dead link monitoring.</p>
<p>Nice. Really polished app.</p>
<p>Even better is the fact that I didn’t need to do anything for my iPhone to start posting to my blog. Just install BlogPress, (and the free WordPress app), from the Apple app store, enter in my site, and start blogging. I even used it to migrate from Joomla to WordPress, as you can post to multiple sites in one hit.</p>
<h3>BlogPress’ settings page</h3>
<p>You can post piccies and videos to Picasa and YouTube. Specify multiple blogs to post to.</p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/09/148.jpg' rel='shadowbox[sbpost-525];player=img;'><img src='http://blogpress.w18.net/photos/09/09/09/s_148.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<h3>Pulling down posts</h3>
<p><center><a href='http://blogpress.w18.net/photos/09/09/09/149.jpg' rel='shadowbox[sbpost-525];player=img;'><img src='http://blogpress.w18.net/photos/09/09/09/s_149.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<h3>Posting a story</h3>
<p>Is dead easy, although may be a problem for those who don’t know their HTML.</p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/09/150.jpg' rel='shadowbox[sbpost-525];player=img;'><img src='http://blogpress.w18.net/photos/09/09/09/s_150.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<h3>Inserting images</h3>
<p>Just click on the camera icon top right, and you can insert photos directly into the post.</p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/09/151.jpg' rel='shadowbox[sbpost-525];player=img;'><img src='http://blogpress.w18.net/photos/09/09/09/s_151.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<h3>Save or post?</h3>
<p>You can post it, or save it as a draft for later.</p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/09/152.jpg' rel='shadowbox[sbpost-525];player=img;'><img src='http://blogpress.w18.net/photos/09/09/09/s_152.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/09/154.jpg' rel='shadowbox[sbpost-525];player=img;'><img src='http://blogpress.w18.net/photos/09/09/09/s_154.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<h3>Posting an entry</h3>
<p><center><a href='http://blogpress.w18.net/photos/09/09/09/157.jpg' rel='shadowbox[sbpost-525];player=img;'><img src='http://blogpress.w18.net/photos/09/09/09/s_157.jpg' border='0' width='187' height='281' style='margin:5px'></a></center></p>
<p>You’re also given the option of viewing it in Safari, which is a minor annoyance for me. It’d be good to be able to turn it off.</p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/09/158.jpg' rel='shadowbox[sbpost-525];player=img;'><img src='http://blogpress.w18.net/photos/09/09/09/s_158.jpg' border='0' width='187' height='281' style='margin:5px'></a></center><br />
Which ends up looking like the following of you have installed the iPhone WordPress plugin.</p>
<p><center><a href='http://blogpress.w18.net/photos/09/09/09/160.jpg' rel='shadowbox[sbpost-525];player=img;'><img src='http://blogpress.w18.net/photos/09/09/09/s_160.jpg' border='0' width='187' height='281' style='margin:5px'></a></center><br />This is all cool stuff, and it just all works the way you’d expect it to.</p>
<p>– Posted from my iPhone<br /><!--more--></p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://onut.net/blog/archives/525" /></p><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://onut.net/blog/archives/525/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sun Java Web Console</title>
		<link>http://onut.net/blog/archives/61#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://onut.net/blog/archives/61#comments</comments>
		<pubDate>Thu, 09 Jul 2009 10:22:31 +0000</pubDate>
		<dc:creator>Mick</dc:creator>
				<category><![CDATA[Sun Microsystems]]></category>

		<guid isPermaLink="false">http://onut.net/wp/archives/61</guid>
		<description><![CDATA[This is a little rant from several angles.

Sun's Java Web Console is a nice little toy. Great for those people who prefer the less extreme learning curve of a CLI, and great for manager types who like pictures.

I've used it several times before, but thought I'd try it in on x86 Solaris10u6 box I have here. Bloody Sun. You think a <strong>released version</strong> implies that it's stable, and working.

No related posts.]]></description>
			<content:encoded><![CDATA[<p>This is a little rant from several angles.</p>
<p>Sun’s Java Web Console is a nice little toy. Great for those people who prefer the less extreme learning curve of a CLI, and great for manager types who like pictures.</p>
<p>I’ve used it several times before, but thought I’d try it in on x86 Solaris10u6 box I have here. Bloody Sun. You think a <strong>released version</strong> implies that it’s stable, and working.<br />
<span id="more-61"></span><br />
For me the issue was that when I originally installed the server, I used a temporary hostname, and DHCP for network because I couldn’t be bothered to change my local DNS and figure out a spare IP. I then changed to fixed IP and hostname later.</p>
<p>The ramifications of this is that my hostname ended up being assigned to localhost, (aka 127.0.0.1). This means that when the WebConsole was initially installed and configured it used 127.0.0.1 throughout it’s hardcoded, (stupid Tomcat — hate it with a vengence), config files.</p>
<p>This is something that annoys the heck out of me: I understand developers making ‘packages’ that they can ‘deploy’ to a web server, (Tomcat). It’s nice to be able to ‘deploy’ a package. But for heck’s sake, why shove hostname/IP/port definitions in not just one file, but 50 stupid files that are zipped up along with shared libs and binaries? Why? Haven’t they heard of /etc/hosts, or even putting these definitions into somewhere common? Why do they have to have these definitions in multiple places?</p>
<p>Another great example of letting the developer take the lead in systems management.</p>
<p>Anyway, digging around the net trying to resolve my issue showed up a lot of similar complaints, but nothing really to sort it out. ‘wcadmin’  refused to start the ‘deployed’ packages, because they couldn’t connect to the Tomcat server running on my old hostname.</p>
<pre>root@somewhere % wcadmin list

Deployed web applications (application name, context name, status):

console  ROOT            [stopped]
console  com_sun_web_ui  [stopped]
console  console         [stopped]
console  manager         [stopped]
console  zfs             [stopped]

Registered jar files (application name, identifier, path):

console  audit_jar     /usr/lib/audit/Audit.jar
console  console_jars  /usr/share/webconsole/lib/*.jar
console  jato_jar      /usr/share/lib/jato/jato.jar
console  javahelp_jar  /usr/jdk/packages/javax.help-2.0/lib/*.jar
console  shared_jars   /usr/share/webconsole/private/container/shared/lib/*.jar

Registered login modules (application name, service name, identifier):

console  ConsoleLogin  userlogin
console  ConsoleLogin  rolelogin

Persistent Jvm options:

-server
-Xmx128m
-XX:+UseParallelGC
-XX:ParallelGCThreads=4</pre>
<p>I tried using wcadmin ro ‘undeploy’ and ‘deploy’ packages, and even the brut force method of</p>
<pre class="code">root@somewhere % find /var/webconsole /usr/share/webconsole /etc/webconsole /usr/lib/webconsole -type f | xargs egrep -l '127.0.0.1|localhost'</pre>
<p>and manually modifying any config files found.</p>
<p>In the end I did a pkgrm/remove configs/pkgadd cycle:</p>
<p>1. Remove WebConsole packages.</p>
<pre>system      SUNWasac  Sun Java System Application Server Admin Client
application SUNWmcon  Sun Java(TM) Web Console 3.0.2 (Core)
system      SUNWmconr Sun Java(TM) Web Console 3.0.2 (Root)
application SUNWmcos  Implementation of Sun Java(TM) Web Console (3.0.2) services
application SUNWmcosx Implementation of Sun Java(TM) Web Console (3.0.2) services
application SUNWmctag Sun Java(TM) Web Console 3.0.2 (Tags &amp; Components)
application SUNWzfsgr ZFS Administration for Sun Java(TM) Web Console (Root)
application SUNWzfsgu ZFS Administration for Sun Java(TM) Web Console (usr)</pre>
<p>The usual removal:</p>
<pre>root@somewhere % pkgrm SUNWzfsgu SUNWmcosx SUNWmcos SUNWasac SUNWmcon SUNWzfsgr SUNWmconr SUNWmctag</pre>
<p>Then remove all the config files:</p>
<pre class="code">root@somwehere % rm -rf /var/webconsole /usr/share/webconsole /etc/webconsole /usr/lib/webconsole</pre>
<p>Or tarball up and then remove:</p>
<pre>root@somewhere % tar cvf /tmp/webconsole.tar /var/webconsole /usr/share/webconsole /etc/webconsole /usr/lib/webconsole
root@somewhere % rm -rf /var/webconsole /usr/share/webconsole /etc/webconsole /usr/lib/webconsole</pre>
<p>2. Re-install the WebConsole packages:<br />
If you have your original install DVD/CD handy, then just chuck it in, and install the packages from the Product directory:</p>
<pre>root@somewhere % pkgadd -d /cdrom/cdrom0/s2/Solaris_10/Product SUNWzfsgu SUNWmcosx SUNWmcos SUNWasac SUNWmcon SUNWzfsgr SUNWmconr SUNWmctag
The following packages are available:
 1  SUNWasac      Sun Java System Application Server Admin Client
 (i386) 8.2,REV=2006.08.16.08.46
 2  SUNWmcon      Sun Java(TM) Web Console 3.0.2 (Core)
 (i386) 3.0.2,REV=2006.12.08.20.48
 3  SUNWmconr     Sun Java(TM) Web Console 3.0.2 (Root)
 (i386) 3.0.2,REV=2006.12.08.23.39
 4  SUNWmcos      Implementation of Sun Java(TM) Web Console (3.0.2) services
 (i386) 3.0.2,REV=2006.12.08.23.39
 5  SUNWmcosx     Implementation of Sun Java(TM) Web Console (3.0.2) services
 (i386) 3.0.2,REV=2006.12.08.23.39
 6  SUNWmctag     Sun Java(TM) Web Console 3.0.2 (Tags &amp; Components)
 (i386) 3.0.2,REV=2006.12.08.20.48
 7  SUNWzfsgr     ZFS Administration for Sun Java(TM) Web Console (Root)
 (i386) 1.0,REV=2006.10.24.20.44
 8  SUNWzfsgu     ZFS Administration for Sun Java(TM) Web Console (usr)
 (i386) 1.0,REV=2006.10.24.20.44</pre>
<p>Even though you are installing version 3.1 of the Java Web Console, it actually appears as 3.0.2 for some stupid reason.</p>
<p>Everything will startup as expected using the new hostname defined.</p>
<pre>root@somewhere % wcadmin list

Deployed web applications (application name, context name, status):

console  ROOT            [running]
console  com_sun_web_ui  [running]
console  console         [running]
console  manager         [running]
console  zfs             [running]

Registered jar files (application name, identifier, path):

console  audit_jar     /usr/lib/audit/Audit.jar
console  console_jars  /usr/share/webconsole/lib/*.jar
console  jato_jar      /usr/share/lib/jato/jato.jar
console  javahelp_jar  /usr/jdk/packages/javax.help-2.0/lib/*.jar
console  shared_jars   /usr/share/webconsole/private/container/shared/lib/*.jar

Registered login modules (application name, service name, identifier):

console  ConsoleLogin  userlogin
console  ConsoleLogin  rolelogin

Persistent Jvm options:

-server
-Xmx128m
-XX:+UseParallelGC
-XX:ParallelGCThreads=4</pre>
<p></p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://onut.net/blog/archives/61" /></p><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://onut.net/blog/archives/61/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rant — Solaris vs Linux Part I</title>
		<link>http://onut.net/blog/archives/59#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://onut.net/blog/archives/59#comments</comments>
		<pubDate>Thu, 13 Nov 2008 13:37:42 +0000</pubDate>
		<dc:creator>Mick</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Sun Microsystems]]></category>

		<guid isPermaLink="false">http://onut.net/wp/archives/59</guid>
		<description><![CDATA[A rant about the state of play with Sun, and what I’d like to see Sun do to improve Solaris. I was midly amused when Sun made claims some time back that Solaris is a better Linux than Linux itself. I’ve been a Linux user since the early 0.9 kernel days, and nothing beats it. [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>A rant about the state of play with Sun, and what I’d like to see Sun do to improve Solaris.<br />
<span id="more-59"></span><br />
I was midly amused when Sun made claims some time back that Solaris is a better Linux than Linux itself. I’ve been a Linux user since the early 0.9 kernel days, and nothing beats it. Sure there are issues that crop up from time to time, but overall. It’s a pretty pleasant experience. I must admit I was a little offended by that Sun comment.<br />
<br />
I have been an admin of Solaris and HP systems for many years, both commercial versions of UNIX have goodness and badness to them.<br />
<br />
But, then along came ZFS. I usually balk at companies’ gargantuan claims of their products meeting all requirements, providing easy administration, seamless integration, and making sure your cat is out for the night. But I suspect that Sun’s ZFS may be just that… It’s fantastic. No longer having to worry about slices, disks with different geometries, having to fsck disks after a crash, waiting 3 hours for a 500G FS to be created, then having to redo it all again ’cause you got the sizes slightly wrong.<br />
<br />
It is/was Sun’s saviour, (along with dtrace, zones, and performance)… couldn’t have come at a better time.<br />
<br />
But, now, finally we have <a href="http://www.sun.com/aboutsun/pr/2008-10/sunflash.20081031.1.xml" target="_self">ZFS booting</a> . Woohoo! We can BOOT ZFS now. No more UFS. Damn fantastic that is.<br />
<br />
This is just one more nail in Linux’s coffin, (unfortunately), for me. These days, on the server side, I run Solaris exclusively, the desktop side still Linux, but I’d switch like I change my light bulbs if only Sun would address the very last… nagging.….horrible… frustrating aspect of Solaris, (OK, there’s more, but this is one that has frustrated me for YEARS).<br />
<br />
Sun’s package management<br />
<br />
It’s a HORRIBLE hack. I detest it with a vengeance. IMO the best package management system is HPUX’s Software Distributor. A close second is Debian’s apt-get/dpkg. You can install via network, tape, disk, CD. You can install and rollback. You can checksum verify package contents. You can see what it actually installs, and what it has installed. You can do a dry-run. Has all the pre/post script execution goodness.<br />
<br />
If only Sun came out with something similar. Maybe even a combination of apt-get, (or yum), and SDUX. That’d be gold. I really expect this to happen. If Sun is heading down the command/admin simplification path. I look forward to being able to type:</p>
<pre>
% pkg install gnome
</pre>
<p>Or</p>
<pre>
% pkg remove hugin
</pre>
<p>Or</p>
<pre>
% pkg verify firefox
</pre>
<p>Or</p>
<pre>
% pkg list
</pre>
<p>I mean.… Why not Sun?<br />
<br />
(And what about my cat?)</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://onut.net/blog/archives/59" /></p><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://onut.net/blog/archives/59/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>HOWTO — Opera Mini + Linux</title>
		<link>http://onut.net/blog/archives/58#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://onut.net/blog/archives/58#comments</comments>
		<pubDate>Thu, 11 Sep 2008 02:45:25 +0000</pubDate>
		<dc:creator>Mick</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[Mobiles]]></category>

		<guid isPermaLink="false">http://onut.net/wp/archives/58</guid>
		<description><![CDATA[I’ve been a user of Opera Mini for a long time. On my mobile it’s great. However, there’s times when I need to view the web in a bigger than 240x320 format. I spend a fair amount of time on the train, and I have a laptop with bluetooth, and a phone with GPRS and [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>I’ve been a user of <a href="http://www.operamini.com/" target="_self">Opera Mini</a>  for a long time. On my mobile it’s great. However, there’s times when I need to view the web in a bigger than 240x320 format. I spend a fair amount of time on the train, and I have a laptop with bluetooth, and a phone with GPRS and bluetooth.… but GPRS is slow and running firefox over it is a pain… even with images turned off.</p>
<p>So, this howto shows you how to run Opera Mini on Linux in glorious 1440x900.… and take advantage of the speed increase.<br />
<span id="more-58"></span></p>
<h4>Requirements</h4>
<p>The Linux distribution I run is Debian, but this HOWTO will apply to any distribution really. In fact it should work on Windows as well. All you need initially is a running version of Java. However the complete list is:<br />
<a href="http://www.java.com/en/download/index.jsp" target="_self">Java 6</a><br />
<a href="http://www.microemu.org/" target="_self">Micro Emulator</a><br />
<a href="http://www.operamini.com/" target="_self">Opera Mini</a></p>
<h4>Installing Java</h4>
<p>On Debian I just do the usual installation process:</p>
<pre>root@localhost % apt-get install sun-java6-bin sun-java6-jre</pre>
<p>That’s it for java.</p>
<h4>Installing MicroEmulator</h4>
<p>Now for MicroEmulator. Fetch whatever the <a href="http://sourceforge.net/project/showfiles.php?group_id=30014" target="_self">latest release is</a> . I used 2.0.2 for this setup.</p>
<p>Extract the tarball to somewhere. Doesn’t matter where. I put it under $HOME/lib</p>
<pre>mick@localhost [~/lib] # tar zxvf microemulator-2.0.2.tar.gz</pre>
<p>I put in a symlink so that I can reference different version if need be. But you can skip this step if you want.</p>
<pre>mick@localhost [~/lib] # ln -s microemulator-2.0.2 microemulator</pre>
<p>Now, fire up java and point it to the microemulator jar file.</p>
<pre>mick@localhost [~/lib] # java -jar $HOME/lib/microemulator/microemulator.jar</pre>
<p>This window will now pop-up.<br />
<img src="/media/howto-operamini/Screenshot-MicroEmulator-1.png" /></p>
<p>Now Click on ‘Options’, and then ‘Select device’. There’s nothing stopping you from running Opera in this virtual device. But remember you want to run it in a big window, right!<br />
<img src="/media/howto-operamini/Screenshot-MicroEmulator-2.png" /></p>
<p>The window below will pop-up.<br />
<img src="/media/howto-operamini/Screenshot-Select_device-1.png" /></p>
<p>Click on Add… You want to traverse to your {directory where you installed the microemulator}/devices/, and select the microemu-device-resizable.jar file.<br />
<img src="/media/howto-operamini/Screenshot-Open.png" /></p>
<p>It will now appear in your virtual devices list. Click on ‘Set as default’ to use it every time you start it up.<br />
<img src="/media/howto-operamini/Screenshot-Select_device-2.png" /><br />
<img src="/media/howto-operamini/Screenshot-Select_device-3.png" /></p>
<p>The MicroEmulator window will change to a ‘not as snazzy’ window like this:<br />
<img src="/media/howto-operamini/Screenshot-MicroEmulator-2b.png" /></p>
<p>That’s it for the microemulator.</p>
<h4>Installing Opera Mini</h4>
<p>Installing Opera Mini is easy too. There’s two ways to do it.<br />
Click <a href="http://mini.opera.com/download-4/opera-mini-latest-advanced-int.jad" target="_self" class="broken_link">here</a> , and <a href="http://mini.opera.com/download-4/opera-mini-latest-advanced-int.jar" target="_self" class="broken_link">here</a>  and save somewhere.</p>
<p>Or follow these instructions, (I’ve put them here, because, as you know, links change on the internet, and I hate 404s).</p>
<p>Just fetch the <a href="http://www.operamini.com/download/" target="_self">latest version</a>  from Opera. There’s 4 steps to download:<br />
1. Select ‘Download to PC’.<br />
2. Select ‘Generic version’.<br />
3. Select ‘Advanced MIDP 2′<br />
4. Select you preferred language, and download the JAD and JAR files.</p>
<p>I placed these two files under $HOME/lib/opera. You will have to create a symlink so that the version you have downloaded will be used properly.</p>
<pre>mick@localhost [~/lib/opera] # ln -s opera-mini-latest-advanced-int.jar opera-mini-4.1.11355-advanced-int.jar</pre>
<p>Your version may/will vary. You’ll need to symlink, (or rename), the file for it to work, though.</p>
<p>Now you want to open the Opera Mini JAD file you just downloaded.<br />
<img src="/media/howto-operamini/Screenshot-MicroEmulator-3.png" /></p>
<p>Find it and open it.<br />
<img src="/media/howto-operamini/Screenshot-Open_JAD_File.png" /></p>
<p>Now you will see it in the list of applications that can be launched by Micro Emulator.<br />
<img src="/media/howto-operamini/Screenshot-MicroEmulator-4.png" /></p>
<p>Now just double click on it.<br />
<img src="/media/howto-operamini/Screenshot-MicroEmulator-5.png" /></p>
<p>Hooley Dooley Batman! It works! Cool!<br />
<img src="/media/howto-operamini/Screenshot-MicroEmulator-6.png" /><br />
<img src="/media/howto-operamini/Screenshot-MicroEmulator-last.png" /></p>
<p>
Either use your mouse and click, or you can use up/down/left/right keys and enter to traverse web pages.
</p>
<h4>One last thing</h4>
<p>I created the following script to make it easier for me to startup, and called it ‘operamini’.</p>
<pre>
#!/bin/bash

exec >&#038; /tmp/operamini.log

java -jar $HOME/lib/microemulator/microemulator.jar $HOME/lib/opera/opera-mini-latest-advanced-int.jad
</pre>
<p>Now I have my super fast GPRS internet connection. Also, a side benefit is that all my bookmarks are synced up to my phone.</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://onut.net/blog/archives/58" /></p><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://onut.net/blog/archives/58/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cooling the cupboard</title>
		<link>http://onut.net/blog/archives/54#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://onut.net/blog/archives/54#comments</comments>
		<pubDate>Mon, 23 Jun 2008 16:50:22 +0000</pubDate>
		<dc:creator>Mick</dc:creator>
				<category><![CDATA[Hacking]]></category>

		<guid isPermaLink="false">http://onut.net/wp/archives/54</guid>
		<description><![CDATA[I have a lot of hardware running 24x7 — PCs, routers, switches, firewalls, SAN, and it’s all contained within a cupboard where I stick it all. It’s pretty cool, in that it’s a dust free environment, and keeps the noise at bay, which is my intent. It’s basically a small contained computer room. What’s not [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>I have a lot of hardware running 24x7 — PCs, routers, switches, firewalls, SAN, and it’s all contained within a cupboard where I stick it all. It’s pretty cool, in that it’s a dust free environment, and keeps the noise at bay, which is my intent. It’s basically a small contained computer room. What’s not cool about it, is that it isn’t.<br />
<span id="more-54"></span></p>
<p>
You see it lacks the thermal control. I’ve been mucking around for a while trying to get the thermal issues under control on the cheap. That is; making use of old power supply fans to keep the air circulating, pulling in cool air, and pushing out warm air. In winter it’s really not a problem. I used to have the door ajar, (and getting dust in at<br />
the same time), and a fan pulling air into the house, which actually warmed up the house a bit. Even in winter, with the door closed and all fans turned off, the cupboard gets to 35C in around 30 minutes. Summer is much worse. With temperatures soaring to 40C, any device will cark it quickly. I’ve had several hard disks die this way.
</p>
<p>
It’s winter here at the moment, so decided to do something about it. Winter is the easy part. Just suck in cold air from the outside. We’re seeing between 5C to 10C at night so sucking that air in will cool that cupboard down well. I trotted off to Bunnings and bought an inline fan unit that’s designed to pull air from one room and distribute it to<br />
another. It was a bit steep, IMO, at $80, but is just the ticket.
</p>
<p><img src="/media/cooling/timg_0327.jpg" alt="" /></p>
<p>
I had to, though, run a large diameter pipe, or tubing from the side of the house which is 6m away. I could have cut into the roof sheeting, but didn’t like compromising the roof, and I wanted to pull in the air from the south side of the house. We fortunately had some left over 100mm PVC drain pipe, so I cut a hole in the side of the house, shoved a 6m length of pipe in, and connected it up with 100mm elbows, to inside the cupboard. I put a filter on the inlet on the side of the house, (hopefully it won’t block up quickly).
</p>
<p><img src="/media/cooling/timg_0332.jpg" alt="" /> <br />
<img src="/media/cooling/timg_0331.jpg" alt="" /> </p>
<p>
The fan is a 150mm fan, so I had to buy a 100mm to 150mm PVC expander. On the end of that I gaffed some springy tubing to the inline fan, and attached some more tubing off the other side. There’s enough there to direct the cold air directly at the air inlets of all the equipment.
</p>
<p><img src="/media/cooling/timg_0328.jpg" alt="" /> <br />
<img src="/media/cooling/timg_0329.jpg" alt="" /> </p>
<p>
I had to dangle the fan from some coat hangers from the ceiling to avoid noise from vibration. I quickly discovered that a 40W fan can generate some loud vibrations. Note the use of coat hangers which are the second best hacking tools, (which I’m sure MacGyver used more than once).
</p>
<p><img src="/media/cooling/timg_0330.jpg" alt="" /> </p>
<p>
The results were pretty amazing. Below are some RRD graphs of one of my servers, with 4 1Terabyte disks in it. Already you can see a 10C drop:
</p>
<p><img src="/media/cooling/hddtemp-8-0-1day.png" /><BR /><br />
<img src="/media/cooling/hddtemp-8-16-1day.png" /><BR /><br />
<img src="/media/cooling/hddtemp-8-32-1day.png" /><BR /><br />
<img src="/media/cooling/hddtemp-8-48-1day.png" /><BR /></p>
<p>Next thing to sort out is the summer cooling.</p>
<p>The handy thing with this inline fan is that it has a trap door to stop back drafts. What I might do is, (sort of), the reverse in summer. That is: suck air from the inside of the house, through the cupboard, and into the roof cavity. The cooler air being forced into that space will disperse the hotter air already there, and will consequently make the house cooler. So, I’ll probably need another one of these inline fan units, or else make a valve attachment.</p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://onut.net/blog/archives/54" /></p><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://onut.net/blog/archives/54/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>laser projectors</title>
		<link>http://onut.net/blog/archives/52#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://onut.net/blog/archives/52#comments</comments>
		<pubDate>Fri, 06 Jun 2008 01:37:03 +0000</pubDate>
		<dc:creator>Mick</dc:creator>
				<category><![CDATA[Tech]]></category>

		<guid isPermaLink="false">http://onut.net/wp/archives/52</guid>
		<description><![CDATA[Laser projectors have been around for a while. You would see them at discos, (showing my age there), along with fog machines, creating ambience. More recently companies have been trying to make into something more useful than mere ambience, but is there any real practical use for them? What would you say to a device [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>Laser projectors have been around for a while. You would see them at discos, (showing my age there), along with fog machines, creating ambience. More recently companies have been trying to make into something more useful than mere ambience, but is there any real practical use for them?</p>
<p><a href="http://www.audioholics.com/news/editorials/laser-projectors-coming-to-cell-phones-and-pdas" target="_self"><img src="http://www.audioholics.com/news/editorials/laser-projectors-coming-to-cell-phones-and-pdas/image_mini" ilo-full-src="http://www.audioholics.com/news/editorials/laser-projectors-coming-to-cell-phones-and-pdas/image_mini" style="margin: 5px; float: right" /></a>What would you say to a device that can project a 2048x1280 screen on<br />
any surface, infinite focus, no moving parts, that consumes only 1.5W<br />
of power, and is the size of a matchbox?</p>
<p><a href="http://www.audioholics.com/news/editorials/laser-projectors-coming-to-cell-phones-and-pdas" target="_self">This device</a> seems to be such a device. If it was a typical 1st April day post, then I would have casually laughed and moved on. But if this device does what it promises, then laser projectors will be the demise of these bulky LCD screens, (LOL).</p>
<p>If only it wasn’t announced a year ago.…. Where is it now?</p>
<p>Read on for more.….</p>
<p></p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://onut.net/blog/archives/52" /></p><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://onut.net/blog/archives/52/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cable laying — ile de Sein</title>
		<link>http://onut.net/blog/archives/50#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://onut.net/blog/archives/50#comments</comments>
		<pubDate>Mon, 07 Apr 2008 14:11:58 +0000</pubDate>
		<dc:creator>Mick</dc:creator>
				<category><![CDATA[Engineering]]></category>
		<category><![CDATA[Panoramas]]></category>

		<guid isPermaLink="false">http://onut.net/wp/archives/50</guid>
		<description><![CDATA[One of the things I enjoy seeing is big engineering. That is: Engineering on a big scale. I had the good fortune to be offered a guided tour of a cable laying ship. Which is a ship that lays cables, (funnily enough). Read on. You will have to excuse the quality of these photos — [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>One of the things I enjoy seeing is big engineering. That is: Engineering on a big scale. I had the good fortune to be offered a guided tour of a cable laying ship. Which is a ship that lays cables, (funnily enough).<br />
<img src="/media/ile-de-sein/Ile-de-Sein-JE01.thumb.jpg" rel="shadowbox[ile-de-sein]" alt="ile de sein" title="ile de sein" /><br />
Read on.<br />
<span id="more-50"></span></p>
<p>You will have to excuse the quality of these photos — they were all taken with my Nokia camera phone and stitched together afterwards. The quality is shocking, but at least you get the idea.</p>
<h3>Laying cables?</h3>
<p>A cable laying ship’s primary job is laying fibre cables in the ocean. When you type ‘google.com.au’ most likely, (if you’re not in the US), your traffic is passed along these cables via fibre. Voice calls are also carried over it. A whole tonne of traffic is carried over these little fibres.</p>
<h3>Ile de Sein</h3>
<p>This ship is big, but not massive. It’s gross tonnage is 13,978, and has the capacity to store 5000 tonnes of cable.</p>
<p><img src="/media/ile-de-sein/Ile-de-Sein-JE01.thumb.jpg" rel="shadowbox[ile-de-sein]" alt="ile de sein" title="ile de sein" />ile de sein</p>
<p><img src="/media/ile-de-sein/Side.Of.Ship.2.thumb.png" rel="shadowbox[ile-de-sein]" alt="Docked in Sydney" title="Docked in Sydney" />Docked in Sydney</p>
<p><img src="/media/ile-de-sein/Side.Of.Ship.3.thumb.png" rel="shadowbox[ile-de-sein]" alt="Docked in Sydney" title="Dockedin Sydney" />Docked in Sydney</p>
<h3>Cable bins</h3>
<p>Cables are stored in massive cable bins. The Lle de Sein has two bins, as pictured below. These two bins had deep water cable and shallow water cable.</p>
<p><img src="/media/ile-de-sein/Deep.Water.Cable.Bin.thumb.png" rel="shadowbox[ile-de-sein]" alt="Deep water cable bin" title="Deep water cable bin" />Deep water cable bin</p>
<p><img src="/media/ile-de-sein/Shallow.Water.Cable.Bin.thumb.png" rel="shadowbox[ile-de-sein]" alt="Shallow water cable bin" title="Shallow water cable bin" />Shallow water cable bin</p>
<p>The difference between the two types of cable is that the shallow cable needs to be armoured and strengthened to avoid ships scraping the cable, whereas the deep sea cable just needs to protect the fibre cables.</p>
<p>The ship lays the deep water cable at around 10km/h. The cable will finally rest on the ocean floor some 20km behind the ship. Shallow water cable is layed at 500m/h. The reason for the slow speed is that at shallow depths they have to bury the cable to at least a metre below the ocean floor. To do this they use the.…</p>
<h3>Trencher</h3>
<p>Which is just a massive plough that they drag behind the ship and it lays the cable in the trench as it goes. The trencher depth can be controlled from the bridge.</p>
<p><img src="/media/ile-de-sein/Trenching.Tool.1.thumb.png" rel="shadowbox[ile-de-sein]" alt="Trenching tool" title="Trenching tool" />Trenching tool — side on</p>
<p>The leading edge, which is on the left hand side of this photo has replaceable titanium blades. Apparently after a long haul the blades come up smooth and shiny and as sharp as a razor blade.</p>
<p><img src="/media/ile-de-sein/Trenching.Tool.2.thumb.png" rel="shadowbox[ile-de-sein]" alt="Trenching tool" title="Trenching tool" />Trenching tool — closeup</p>
<p><img src="/media/ile-de-sein/Trenching.Tool.3.thumb.png" rel="shadowbox[ile-de-sein]" alt="Trenching tool" title="Trenching tool" />Trenching tool — from it’s rear.</p>
<h3>Roller feeders</h3>
<p>Whether it’s deep water or shallow water cable that’s being layed; the laying speed has to be controlled accurately. To do this the cable is brought out of the bins .…</p>
<p><img src="/media/ile-de-sein/Cable.Run.thumb.png" rel="shadowbox[ile-de-sein]" alt="Cable run" title="Cable run" />Cable run — from the cable bins</p>
<p>.… and fed through a series of rollers. In the background of the following picture you can see the series of rollers that feed the cable out. The foreground is the roller drum which is used during cable repair.</p>
<p><img src="/media/ile-de-sein/Cable.Feed.1.thumb.png" rel="shadowbox[ile-de-sein]" alt="Cable feeders" title="Cable feeders" />Cable feeders — laying feeders</p>
<p><img src="/media/ile-de-sein/Cable.Feed.2a.thumb.png" rel="shadowbox[ile-de-sein]" alt="Cable feeders" title="Cable feeders" />Cable feeders — repair feeder</p>
<p><img src="/media/ile-de-sein/Cable.Feed.2b.thumb.png" rel="shadowbox[ile-de-sein]" alt="Cable feeders" title="Cable feeders" />Cable feeders — repair feeder</p>
<p>When cable has to be repaired, the ship will sever the cable on the ocean floor, pick up the cable and move back 6km. The reason is that the cable doesn’t have enough slack to pull it all the way up from the ocean floor, (5000km down). Cable to be repaired will be wrapped several times around the big drum and hauled from the ocean floor. A join will then be made on the cable.</p>
<h3>Repeaters</h3>
<p>Repeaters have the job of amplifying the signal every so often. There is usually a repeater every 75km.</p>
<p><img src="http://onut.net/media/ile-de-sein/Repeater.Air.Conditioning.Unit.jpg" rel="shadowbox[ile-de-sein]" alt="Repeater A/C unit" title="Repeater A/C unit" />Repeater A/C unit</p>
<p>Unfortunately I didn’t get a chance to take a photo of one of them. But I took a photo of the A/C unit. The repeaters have to be kept cool and at a constant temperature. The reason is that temperature changes can affect them — and when you’re about to literally sink $100k for each repeater you want to look after it. The seabed is roughly 2C.</p>
<p>Each repeater also has to be powered which by a 5kV DC source. When the ship is laying cable they actually power up the cable and run the repeaters. This is so they can check the quality of the layed cable and ensure there are no issues.</p>
<h3>The Bridge</h3>
<p>The Bridge is where all the action is.</p>
<p><img src="/media/ile-de-sein/Bridge.thumb.png" rel="shadowbox[ile-de-sein]" alt="The Bridge" title="The Bridge" />The Bridge</p>
<p><img src="/media/ile-de-sein/Control.Room.thumb.png" rel="shadowbox[ile-de-sein]" alt="Cable control room" title="Cable control room" />Cable control room</p>
<p>These days cable laying ships are fully automated. They have high accuracy GPS that can enable them to lay cables pretty exactly. The ship is kept at a constant speed to ensure the cable doesn’t over-stretch or sag. There are two bridges one facing forwards for general operations, (coming and going into port), and one facing backwards for cable laying.</p>
<p>You can download all these images by clicking on the download image below:</p>
<p><img src="/media/images/download.gif" /><a href="/media/ile-de-sein/#utm_source=feed&amp;utm_medium=feed&amp;utm_campaign=feed"><img src="/media/images/download.gif" /></a></p>
<p class="fbconnect_share"><fb:share-button class="url" href="http://onut.net/blog/archives/50" /></p><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://onut.net/blog/archives/50/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Solaris jumpstart common problems</title>
		<link>http://onut.net/blog/archives/43#utm_source=feed&#038;utm_medium=feed&#038;utm_campaign=feed</link>
		<comments>http://onut.net/blog/archives/43#comments</comments>
		<pubDate>Wed, 24 Oct 2007 05:11:35 +0000</pubDate>
		<dc:creator>Mick</dc:creator>
				<category><![CDATA[Sun Microsystems]]></category>

		<guid isPermaLink="false">http://onut.net/wp/archives/43</guid>
		<description><![CDATA[I’ve been playing around with Solaris jumpstart recently. I haven’t used it since the early days. It seems that a lot of the old problems still exist. So, I’ve listed most of the common problems and their solution here. This also covers Sun’s JET, (Jumpstart Enterprise Toolkit). This is a Work In Progress — so [...]
No related posts.]]></description>
			<content:encoded><![CDATA[<p>I’ve been playing around with Solaris jumpstart recently. I haven’t used it since the early days. It seems that a lot of the old problems still exist. So, I’ve listed most of the common problems and their solution here. This also covers Sun’s JET, (Jumpstart Enterprise Toolkit).<br />
This is a Work In Progress — so I’ll be updating this from time time as I come across issues.<br />
<span id="more-43"></span></p>
<h4>The ‘ERROR: (_app_set_slice) Disk is not selected’ error message.</h4>
<p>So, you’re trying to setup some DiskSuite metadevices during the jumpstart installation. You are getting this error because you don’t have the slices properly defined in your JET template. You will need to have something similar to the following defined in your JET template file, (under /opt/SUNWjet/Templates):</p>
<pre>
base_config_profile_root=512
base_config_profile_swap=16384
base_config_profile_s3_mtpt="/usr"
base_config_profile_s3_size="8192"
base_config_profile_s4_mtpt="/opt"
base_config_profile_s4_size="2048"
base_config_profile_s5_mtpt="/var"
base_config_profile_s5_size="2048"
base_config_profile_s6_mtpt=""
base_config_profile_s6_size=""

base_config_profile_disk_c0t1d0s0_mtpt="free"
base_config_profile_disk_c0t1d0s0_size="512"
base_config_profile_disk_c0t1d0s1_mtpt="free"
base_config_profile_disk_c0t1d0s2_size="8192"
base_config_profile_disk_c0t1d0s3_mtpt="free"
base_config_profile_disk_c0t1d0s3_size="8192"
base_config_profile_disk_c0t1d0s4_mtpt="free"
base_config_profile_disk_c0t1d0s4_size="2048"
base_config_profile_disk_c0t1d0s5_mtpt="free"
base_config_profile_disk_c0t1d0s5_size="2048"
base_config_profile_disk_c0t1d0s6_mtpt=""
base_config_profile_disk_c0t1d0s6_size=""
sds_root_mirror="c0t1d0"
sds_database_locations="c0t0d0s7:3 c0t1d0s7:3"
sds_database_partition="c0t0d0s7:64 c0t1d0s7:64"
sds_device_numbers="/:d100:d0:d10 swap:d101:d1:d11 /usr:d103:d3:d13 /opt:d104:d4:d14 /var:d105:d5:d15"
</pre>
<p>I had this error when I hadn’t specified the *_mtpt and set it to’free’, I had just left it blank.</p>
<h4>Jumpstart directory not found</h4>
<p>I had the following issue and it took me a while to figure it out.</p>
<pre>Searching for JumpStart directory...
not found
Warning: Could not find matching rule in rules.ok
Press the return key for an interactive Solaris install program...
</pre>
<p>In the end I started to debug the ‘install-solaris’, and ‘profind’ scripts line by line. It turns out that I had defined my hosts with FQDN in my /etc/hosts file. When the server starts to look for the jumpstart directory it’ll use the /usr/sbin/install.d/profind s<br />
cript to determine this. Contained within that is the line:</p>
<pre> set -- `/sbin/bpgetfile -retries 1 install_config`</pre>
<p>Because I was using the standard RARP method of booting, bpgetfile was called to determine where to nfs mount the jumpstart directory. bootparams didn’t return any information from the boot server, because it was asking for ‘hostname’, rather than ‘hostname.domain.name’. So, if you get this issue. run the command
<pre>/sbin/bpgetfile -retries 1 install_config</pre>
<p> from your install shell.</p>
<p>If you get nothing, then this is your issue. You will need to ensure you define your hosts not with a FQDN.</p>
<p>Actually, in my travels on this issue. Most of the resolutions to ‘no matching rule found in rules.ok’ issues had to do with accessing the jumpstart server from the client. So, check all your network settings, (netmasks, routes, etc). If not, then the above resolution will be it. On my clients, this was all OK, so it was baffling for a while.</p>
<p>Also, make sure that you have the matching swap and root partitions set correctly:</p>
<pre>base_config_profile_root=512
base_config_profile_disk_c0t1d0s0_mtpt="free"
base_config_profile_disk_c0t1d0s0_size="512"
base_config_profile_swap=8192
base_config_profile_disk_c0t1d0s1_mtpt="free"
base_config_profile_disk_c0t1d0s1_size="8192"
</pre>
<p class="fbconnect_share"><fb:share-button class="url" href="http://onut.net/blog/archives/43" /></p><p>No related posts.</p>]]></content:encoded>
			<wfw:commentRss>http://onut.net/blog/archives/43/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

