Monday, January 19, 2015

Updating mac mini from snow leopard to Yosemite

I need to run Quicken on the lovely Carol's mac mini, so I ran over to OfficeMax and picked up a copy of Quicken 2015, on sale with $10 off. I wish I had remembered my $15 off gift card, which I guess will have to wait for another trip.

I ran the installation script and learned the awful truth: Quicken requires Mac OS X 10.7 or later, and we were running 10.6.8 or thereabouts on the mini. Today, of course, you can't upgrade to 10.7 (at least not easily); you upgrade to Yosemite. Having read stories of angst and annoyance, I wasn't looking forward to the update process, but I plunged ahead.

First, I had an argument with the app store, which insisted I add "security" questions. I'll spare you the rant. Then I started the download. Some hours later, the download was complete and I started the installation. The whole thing, start to finish, was done Saturday, probably within twelve hours.

Sunday

However, I somehow noticed that we weren't fetching email from our ISP's server. I don't remember how I decided this (it was a long time ago—last night). After a good night's sleep, I took a look at the computers this morning. My Linux box was OK to start, and I was delighted to find that the mac mini was serving NFS just fine. Even the mini's POP server was running.

So why weren't we fetching email from our ISP? A little detective work revealed that unlike with snow leopard, fetchmail isn't installed on Yosemite. To wit:

mini1:~ collin$ uname -a
Darwin mini1.local 14.0.0 Darwin Kernel Version 14.0.0: Fri Sep 19 00:26:44 PDT 2014; root:xnu-2782.1.97~2/RELEASE_X86_64 x86_64
mini1:~ collin$ type fetchmail
-bash: type: fetchmail: not found
mini1:~ collin$ 
Well. I thought I would update ports so I became root and fumbled around a bit:
bash-3.2# port selfupdate
Warning: port definitions are more than two weeks old, consider using selfupdate
--->  Updating the ports tree
--->  Updating MacPorts base sources using rsync
MacPorts base version 1.9.1 installed,
MacPorts base version 2.3.3 downloaded.
--->  MacPorts base is outdated, installing new version 2.3.3
Installing new MacPorts release in /opt/local as root:admin; permissions 0755; Tcl-Package in /Library/Tcl

Error: /opt/local/bin/port: port selfupdate failed: Error installing new MacPorts base: shell command failed
bash-3.2# ^D
Hrmpf. Ran a web search, which led me to this stackoverflow article which in turn pointed me to a blog entry that mentioned the XCode command line tools: apparently I need to open the XCode preferences pane.

But first I needed to install XCode, which I'm doing now... done. Next:

bash-3.2# port selfupdate
--->  Updating the ports tree
--->  Updating MacPorts base sources using rsync
MacPorts base version 1.9.1 installed,
MacPorts base version 2.3.3 downloaded.
--->  MacPorts base is outdated, installing new version 2.3.3
Installing new MacPorts release in /opt/local as root:admin; permissions 0755; Tcl-Package in /Library/Tcl

 
The ports tree has been updated. To upgrade your installed ports, you should run
  port upgrade outdated
bash-3.2#
So I did that and saw several times the admonition that
bash-3.2# port upgrade outdated
Warning: The Xcode Command Line Tools don't appear to be installed; most ports will likely fail to build.
Warning: Install them by running `xcode-select --install'.
H'm... Not sure. I looked at the Xcode preferences panel, as Well, fools rush in where wise men fear to tread, so following the previous link ... but the preferences panel doesn't have anything about the command line tools. Another web search led to this set of instructions, which don't work, either. :(

Following this link I tried to simply snag fetchmail using mac ports.

bash-3.2# port install fetchmail +ssl 
Warning: The Xcode Command Line Tools don't appear to be installed; most ports will likely fail to build.
Warning: Install them by running `xcode-select --install'.
--->  Computing dependencies for fetchmail
Error: Dependency 'libcomerr' not found.
To report a bug, follow the instructions in the guide:
    http://guide.macports.org/#project.tickets
Error: Processing of port fetchmail failed
bash-3.2# 
At this point, it was time to stop and make dinner.

Monday morning

Okay, I'm going to give up on ports for now because I found this set of instructions which informs me that
fetchmail ceased to be bundled with server a while ago (it was last bundled with Lion), but it still works.
So I downloaded the archive fetchmail-6.3.26.tar.xz from the sourceforge site and said this on my Linux box (I'm not sure if the Mac tar groks xz): tar -xJf ~/Downloads/fetchmail-6.3.26.tar.xz. Then, back on the mac mini:
mini1:fetchmail-6.3.26 collin$ ./configure && make
checking build system type... x86_64-apple-darwin14.0.0
checking host system type... x86_64-apple-darwin14.0.0
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... ./install-sh -c -d
checking for gawk... no
checking for mawk... no
checking for nawk... no
checking for awk... awk
checking whether make sets $(MAKE)... yes
…
mv -f .deps/odmr.Tpo .deps/odmr.Po
gcc  -g -O2   -o fetchmail socket.o getpass.o fetchmail.o env.o idle.o options.o daemon.o driver.o transact.o sink.o smtp.o idlist.o uid.o mxget.o md5ify.o cram.o gssapi.o opie.o interface.o netrc.o unmime.o conf.o checkalias.o lock.o rcfile_l.o rcfile_y.o norm_charmap.o  pop3.o imap.o etrn.o odmr.o     libfm.a    -lresolv
( echo '#! /bin/sh' && echo 'exec /usr/bin/python /usr/local/lib/python2.7/site-packages/fetchmailconf.py "$@"' ) >fetchmailconf && chmod +x fetchmailconf || { rm -f fetchmailconf ; exit 1; }
Making all in po
mini1:fetchmail-6.3.26 collin$ echo $?
0
mini1:fetchmail-6.3.26 collin$ sudo make install
Password:
/Applications/Xcode.app/Contents/Developer/usr/bin/make  install-recursive
Making install in .
test -z "/usr/local/bin" || ./install-sh -c -d "/usr/local/bin"
  /usr/bin/install -c fetchmail '/usr/local/bin'
test -z "/usr/local/bin" || ./install-sh -c -d "/usr/local/bin"
 /usr/bin/install -c fetchmailconf '/usr/local/bin'
test -z "/usr/local/share/man/man1" || ./install-sh -c -d "/usr/local/share/man/man1"
 /usr/bin/install -c -m 644 'fetchmail.man' '/usr/local/share/man/man1/fetchmail.1'
 /usr/bin/install -c -m 644 'fetchmailconf.man' '/usr/local/share/man/man1/fetchmailconf.1'
test -z "/usr/local/lib/python2.7/site-packages" || ./install-sh -c -d "/usr/local/lib/python2.7/site-packages"
 /usr/bin/install -c -m 644 fetchmailconf.py '/usr/local/lib/python2.7/site-packages'
Byte-compiling python modules...
fetchmailconf.py
Byte-compiling python modules (optimized versions) ...
fetchmailconf.py
Making install in po
if test "fetchmail" = "gettext-tools"; then \
   .././install-sh -c -d /usr/local/share/gettext/po; \
   for file in Makefile.in.in remove-potcdate.sin quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot   Makevars.template; do \
     /usr/bin/install -c -m 644 ./$file \
       /usr/local/share/gettext/po/$file; \
   done; \
   for file in Makevars; do \
     rm -f /usr/local/share/gettext/po/$file; \
   done; \
 else \
   : ; \
 fi
mini1:fetchmail-6.3.26 collin$ echo $?
0
mini1:fetchmail-6.3.26 collin$ type fetchmail
fetchmail is /usr/local/bin/fetchmail
mini1:fetchmail-6.3.26 collin$ 
OK, now does it work? I became "postman" and said
mini1:~ postman$ fetchmail
115 messages for cpark at see.postman.fetchmailrc.invalid (4437146 octets).
reading message cpark@localhost:1 of 115 (3264 octets) flushed
reading message cpark@localhost:2 of 115 (14305 octets) flushed
reading message cpark@localhost:3 of 115 (2974 octets) flushed
…
reading message cpark@localhost:113 of 115 (102452 octets) flushed
reading message cpark@localhost:114 of 115 (38129 octets) flushed
reading message cpark@localhost:115 of 115 (33972 octets) flushed
mini1:~ postman$ 
Nice. But I'm not seeing any mail :(
mini1:~ collin$ ls Mail/new
mini1:~ collin$ ls -ot Mail/cur|head -n4
total 66872
-rw-r--r--  1 collin      334 Jan 19 07:27 1421681270.M564345P8389.mini1.local,S=334,W=345:2,S
-rw-r--r--  1 collin      611 Jan 18 14:24 1421619847.M476474P8389.mini1.local,S=611,W=631:2,S
-rw-------  1 collin    12584 Jan 17 15:48 1421538531.32538_2.mini1:2,S
mini1:~ collin$ date
Mon Jan 19 08:37:18 PST 2015
mini1:~ collin$
Now the mail has got to my backup directory
mini1:~ collin$ ls -o Mail/backup/|grep -c "Jan 19 08:28"
36
mini1:~ collin$ 
so that says we got this far in my .procmailrc
 11 # Back up!!
 12 :0 c
 13 backup/.
 14 
 15 :0 ic
 16 | cd backup && rm -f dummy `ls -t | sed -e 1,128d`
so why didn't it get anywhere else?
Now I have a number of unanswered questions.
  1. Why isn't fetchmail running periodically? It should be going every minute, but it's not.
    mini1:~ collin$ sudo su - postman
    mini1:~ postman$ ls -ot Mail/backup|head
    total 10128
    -rw-------  1 postman  102879 Jan 19 08:28 358256
    -rw-------  1 postman   38546 Jan 19 08:28 358257
    -rw-------  1 postman   34346 Jan 19 08:28 358258
    -rw-------  1 postman    9247 Jan 19 08:28 358250
    -rw-------  1 postman   29631 Jan 19 08:28 358251
    -rw-------  1 postman   78060 Jan 19 08:28 358252
    -rw-------  1 postman    1652 Jan 19 08:28 358253
    -rw-------  1 postman   26749 Jan 19 08:28 358254
    -rw-------  1 postman   93590 Jan 19 08:28 358255
    mini1:~ postman$ ls -ot Mail/backup|grep -c "19 08:28"
    115
    mini1:~ postman$ ^Dlogout
    mini1:~ collin$ ssh sonic ls -ot Mail/backup|head
    total 24264
    -rw-------    1 cpark       59916 Jan 19 09:06 26889
    -rw-------    1 cpark       32443 Jan 19 09:06 26888
    -rw-------    1 cpark        5121 Jan 19 09:01 26887
    -rw-------    1 cpark       75745 Jan 19 08:48 26886
    -rw-------    1 cpark       51549 Jan 19 08:42 26885
    -rw-------    1 cpark       18291 Jan 19 08:29 26884
    -rw-------    1 cpark       33997 Jan 19 08:03 26883
    -rw-------    1 cpark       38197 Jan 19 08:02 26882
    -rw-------    1 cpark      102530 Jan 19 08:00 26881
    mini1:~ collin$ 
  2. I have mail in my Mail/backup, but why not in Maildir/new or Maildir/cur?
    mini1:~ collin$ ls -ot Maildir/backup|head -n5
    total 6920
    -rw-------  1 collin   29533 Jan 19 08:34 92744
    -rw-------  1 collin   23841 Jan 19 08:34 92745
    -rw-------  1 collin    3769 Jan 19 08:34 92746
    -rw-------  1 collin   38595 Jan 19 08:34 92747
    mini1:~ collin$ ls -A Maildir/new
    mini1:~ collin$ ls -A Maildir/tmp
    mini1:~ collin$ ls -ot Maildir/cur|head -n5
    total 66872
    -rw-r--r--  1 collin      334 Jan 19 07:27 1421681270.M564345P8389.mini1.local,S=334,W=345:2,S
    -rw-r--r--  1 collin      611 Jan 18 14:24 1421619847.M476474P8389.mini1.local,S=611,W=631:2,S
    -rw-------  1 collin    12584 Jan 17 15:48 1421538531.32538_2.mini1:2,S
    -rw-------  1 collin    18806 Jan 17 14:26 1421533571.31911_2.mini1:2,S
    mini1:~ collin$ 
  3. The mail gets from postman to my procmail, locally, but why doesn't procmail continue?
    mini1:~ collin$ tail Mail/vlog
    procmail: [42278] Mon Jan 19 08:28:58 2015
    procmail: Executing "sed 1d | formail -I reply-to: -I resent-from: -I return-path: |         formail -rzxTo:"
    procmail: [42290] Mon Jan 19 08:28:58 2015
    procmail: Executing "sed 1d | formail -I reply-to: -I resent-from: -I return-path: |         formail -rzxTo:"
    procmail: [42304] Mon Jan 19 08:28:58 2015
    procmail: Executing "sed 1d | formail -I reply-to: -I resent-from: -I return-path: |         formail -rzxTo:"
    procmail: [42316] Mon Jan 19 08:28:59 2015
    procmail: Executing "sed 1d | formail -I reply-to: -I resent-from: -I return-path: |         formail -rzxTo:"
    procmail: [42330] Mon Jan 19 08:28:59 2015
    procmail: Executing "sed 1d | formail -I reply-to: -I resent-from: -I return-path: |         formail -rzxTo:"
    mini1:~ collin$ 
    The more usual sequence looks like this:
    1617017 procmail: [32538] Sat Jan 17 15:48:51 2015
    1617018 procmail: Executing "sed 1d | formail -I reply-to: -I resent-from: -I return-path: |         formail -rzxTo:"
    1617019 procmail: [32538] Sat Jan 17 15:48:51 2015
    1617020 procmail: Assigning "FROM=jresneck@sungevity.com"
    1617021 procmail: No match on "^From:.*lazarjanet"
    1617022 procmail: No match on "(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?)criticalcare@rc5\.us"
    1617023 procmail: No match on "^From:.*@mpbta.org"
    1617024 procmail: Match on ! "^content-type:.*multipart/mixed"
    1617025 procmail: Match on ! "HB ^content-transfer-encoding:.*base64"
    1617026 procmail: No match on "^x-rc5-to: \/.*$"
    1617027 procmail: No match on "(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?)biblecollin@rc5"
    1617028 procmail: No match on "^From:.*zhohaome.*parka001"
    1617029 procmail: No match on "(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?)cpark\+junk@sonic.net"
    1617030 procmail: No match on "(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?)cpark\+tr@sonic.net"
    1617031 procmail: No match on "(^((Original-)?(Resent-)?(To|Cc|Bcc)|(X-Envelope|Apparently(-Resent)?)-To):(.*[^-a-zA-Z0-9_.])?)cpark\+bn@sonic.net"
    1617032 procmail: Assigning "VERBOSE=no"
    1617033 From postman@rc5.us  Sat Jan 17 15:48:51 2015
    1617034  Subject: Collin - New Year, New Rate Hikes - Park - 96922
    1617035   Folder: /Users/collin/Maildir/new/1421538531.32538_2.mini1              12584
  4. Isn't dovecot running? Why can't mail.app connect to it?
    mini1:~ collin$ sudo su - carol
    Password:
    mini1:~ carol$ ls Maildir/new|wc
          88      88    2728
    mini1:~ carol$ 
    Oddly enough, I can connect to dovecot from the Linux box, but not from the mac mini or from an MBA.
So I want to get #4 figured out. And Maybe if I answer #3 then #2 will take care of itself?

More to come...

No comments: