Waiting for root device

Bei meinem Late 2007er iMac wollte ich ein neues System installieren, nachdem die Festplatte den Geist aufgegeben hatte. Neue Festplatte eingebaut und einen mit createinstallmedia erstellten USB-Stick eingestöpselt. Der Bootvorgang endete immer mit dem Verbotszeichen. Booten im Verbose-Mode (⌘-V) endete immer mit „Still waiting for root device“.

Das Problem lag anscheinend am USB-Stick. Nachdem ich das Install-Medium auf einem anderen USB-Stick geschrieben habe, hat der iMac anstandslos gebootet und ich konnte das System installieren.

Autotest, Growl und RSpec

John Nunemaker beschreibt in Autotest Growl Pass/Fail Notifications wie man mit Growl sich die Ergebnisse von Autotest darstellen lassen kann. Hierzu muß man nur eine ~/.autotest-Datei anlegen, die die Benachrichtigunren anzeigt. Anscheinend haben jedoch letzte Änderungen in RSpec diese Beispielskripte unwirksam gemacht. Schuld ist das Ausgabeformat des Testlaufs. Doch mit wenigen Änderungen kann man das wieder hinbiegen. Nun klappen die Growl-Benachrichtigungen bei mir. Hier ist die ~/.autotest-Datei, die ich benutze. (Ich habe auch die Bilder an einen anderen Ort abgelegt)

require 'autotest/redgreen'
require 'autotest/timestamp'

module Autotest::Growl

  def self.growl title, msg, img, pri=0, sticky=""
    system "growlnotify -n autotest --image #{img} -p #{pri} -m #{msg.inspect} #{title} #{sticky}"
  end

  Autotest.add_hook :ran_command do |at|
    image_root = "~/Library/Autotest/Images"
    results = [at.results].flatten.join("
")
    output = results.slice(/(\d+)\sexamples*,\s(\d+)\sfailures*/)
    if output
      if $~[2].to_i > 0
        growl "FAIL", "#{output}", "#{image_root}/fail.png", 1
      else
        growl "Pass", "#{output}", "#{image_root}/pass.png"
      end
    end
  end
end

PostgreSQL auf Mac OS X, diesmal mit Syslog-Logging

Ich hatte vor einer Weile geschrieben, wie man PostgreSQL auf Mac OS X sauber installiert. Das klappt zwar prima, doch die Logfiles waren ein wenig chaotisch. Bei der Installation von PostgreSQL 8.2 habe ich also beschlossen, via Syslog zu loggen. Die eigentliche Installation läuft wie im letzten Artikel beschrieben ab. Erst bei Punkt 10 mußte ich von der alten Anleitung abweichen.

In der /Users/Shared/PostgreSQL/data/postgresql.conf habe ich folgende Änderungen durchgeführt:

--- postgresql.conf.orig  2006-12-08 13:29:39.000000000 +0100
+++ postgresql.conf 2006-12-08 13:31:28.000000000 +0100
@@ -221,6 +221,7 @@

 # - Where to Log -

+log_destination = "syslog"
 #log_destination = 'stderr'    # Valid values are combinations of
          # stderr, syslog and eventlog,
          # depending on platform.
@@ -252,6 +253,7 @@

 # These are relevant when logging to syslog:
 #syslog_facility = 'LOCAL0'
+syslog_facility = 'LOCAL1'
 #syslog_ident = 'postgres'

@@ -313,6 +315,7 @@
 #log_connections = off
 #log_disconnections = off
 #log_duration = off
+log_line_prefix = '%u@%h:/%d '
 #log_line_prefix = ''      # Special values:
          #   %u = user name
          #   %d = database name
@@ -331,6 +334,7 @@
          #   %% = '%'
          # e.g. '<%u%%%d> '
 #log_statement = 'none'      # none, ddl, mod, all
+log_statement = 'all'
 #log_hostname = off

Damit habe ich PostgreSQL gesagt, es möge seine Nachrichten an den Syslog senden. Nun muß der Syslog noch wissen, was er damit anstellen soll. Das steht in der /etc/syslog.conf.

--- syslog.conf.orig  2006-12-08 13:34:26.000000000 +0100
+++ syslog.conf 2006-12-08 13:34:11.000000000 +0100
@@ -17,5 +17,6 @@
 install.*            /var/log/install.log
 install.*            @127.0.0.1:32376
 local0.*           /var/log/ipfw.log
+local1.*           /var/log/pgsql/pgsql.log

 *.emerg              *

Fast geschafft. Jetzt mußte ich nur noch aus dem Launchd-Skript die Zeilen entfernen, die dem PostgreSQL-Server gesagt haben, daß er sich selbst um die Logfiles kümmern soll.

--- org.postgresql.postmaster.plist.orig  2006-12-08 13:37:13.000000000 +0100
+++ org.postgresql.postmaster.plist 2006-12-08 13:37:25.000000000 +0100
@@ -15,10 +15,6 @@
    <string>redirect_stderr=YES</string>
    <string>-c</string>
    <string>log_connections=YES</string>
-   <string>-c</string>
-   <string>log_directory=/var/log/pgsql</string>
-   <string>-c</string>
-   <string>log_filename=postgres_log</string>
  </array>
  <key>ServiceDescription</key>
  <string>PostgreSQL Server</string>

Dann habe ich nur noch ein leeres Logfile für den Syslog mit sudo touch /var/log/pgsql/pgsql.log angelegt. (Es könnte nötig sein, vorher das dazugehörige Verzeichnis mit sudo mkdir /var/log/pgsql anzulegen). Damit der Syslog nun seine Konfigurationsdatei neu einliest, habe ich ihn mit sudo killall -HUP syslogd angeregt, sich zu restarten.

Nun kann der PostgreSQL wie in der alten Anleitung gestartet werden.