My old Mac crashes a lot. I’m wondering if it’s because of some bad third-party extension.
Here’s how to list non-Apple kernel extensions (kext’s):
kextstat | grep -v apple
My old Mac crashes a lot. I’m wondering if it’s because of some bad third-party extension.
Here’s how to list non-Apple kernel extensions (kext’s):
kextstat | grep -v apple
Our new MacBook Pro Retina arrived while we were in Hawaii.
Our old MacBook Pro was getting long in the tooth. It was a pre-unibody, 2007 model, 2.4 GHz Intel Core 2 Duo with 4 GB of RAM, a 500 GB spinning disk drive, and OS X 10.6.8 (Snow Leopard).
The new one has a Retina display, 2.8 GHz processor, 16 GB RAM and a 1 TB SSD and it’s running OS X 10.9.4 (Mavericks).
It’s been challenging to migrate files from the old laptop to the new one, as the old one keeps crashing.
I blogged previously about how to build _bsddb for Python 2.6 by hacking the Python source code to accommodate changes in berkeley-db.
Here’s an easier way that doesn’t require hacking source code.
Install berkeley-db using Homebrew:
brew install berkeley-db
Install the bsddb3 module, pointing it at an installation of berkeley-db:
sudo \ BERKELEYDB_DIR=/usr/local/Cellar/berkeley-db/5.3.28 \ pip-2.6 install bsddb3
Simply copy it into the appropriate place as _bsddb.so
. This is super hacky and will fail if the interfaces of these two ever change, but for now for my limited purpose, it seems to work:
cp \ /Library/Python/2.6/site-packages/bsddb3/_pybsddb.so \ /Library/Frameworks/Python.framework/Versions/2.6/lib \ /python2.6/lib-dynload/_bsddb.so
Enjoy:
$ python2.6 Python 2.6.7 (r267:88850, Oct 11 2012, 20:15:00) [GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import bsddb >>> dir(bsddb) ['MutableMapping', '_DBWithCursor', '_DeadlockWrap', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__version__', '_bsddb', '_checkflag', '_db', '_iter_mixin', '_openDBEnv', 'absolute_import', 'btopen', 'collections', 'db', 'dbutils', 'error', 'hashopen', 'os', 'ref', 'rnopen', 'sys']
It’s well-known that the Python that comes with OS X machines typically doesn’t have _bsddb
.
I downloaded Python 2.6.8 and attempted to build it and it wouldn’t build the _bsddb
module.
Here’s what I did to fix this.
I used Homebrew to install berkeley-db4
. For me, this grabbed version 4.8.30.
brew install berkeley-db4
Edited Modules/_bsddb.c
and replaced all instances of DB_XIDDATASIZE
with DB_GID_SIZE
. I removed lines that had DB_XA_CREATE
.
Compiled and linked with:
gcc -fno-strict-aliasing -fno-common -dynamic -g -O2 -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -I/usr/local/Cellar/berkeley-db4/4.8.30/include/ -I/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -c /Users/marca/src/Python-2.6.8/Modules/_bsddb.c -o _bsddb.o gcc -bundle -undefined dynamic_lookup _bsddb.o -L/Library/Frameworks/Python.framework/Versions/2.6/lib -L/usr/local/lib -ldb -o _bsddb.so -Wl,-search_paths_first
This created the file Modules/_bsddb.so
.
At this point, I can import if I run python in the Modules
directory where I built _bsddb.so
:
$ python2.6 Python 2.6.7 (r267:88850, Oct 11 2012, 20:15:00) [GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import bsddb >>> dir(bsddb) ['MutableMapping', '_DBWithCursor', '_DeadlockWrap', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '__version__', '_bsddb', '_checkflag', '_db', '_iter_mixin', '_openDBEnv', 'absolute_import', 'btopen', 'collections', 'db', 'dbutils', 'error', 'hashopen', 'os', 'ref', 'rnopen', 'sys']
Now you can copy _bsddb.so
into your lib-dynload
directory — e.g.:
sudo cp _bsddb.so /System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload
(above is for the system Python 2.6 that comes with OS X)
or
sudo cp _bsddb.so sudo cp /Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/lib-dynload
(above is for a Python 2.6 installed from a .dmg from Python.org or built from source as a framework build)
References:
Here’s a pull request I just submitted to homebrew to make it possible to build FreeTDS from master on its gitorious repo:
https://github.com/mxcl/homebrew/pull/21309
Example of using it:
$ brew install freetds --HEAD --universal ==> Cloning https://git.gitorious.org/freetds/freetds.git Updating /Library/Caches/Homebrew/freetds--git ==> autoreconf -i ==> ./configure --prefix=/usr/local/Cellar/freetds/HEAD --with-openssl=/usr/bin --with-tdsver=7.1 --mandir=/usr/local/Cellar/freetds/HEAD/share/man ==> make ==> make install 🺠/usr/local/Cellar/freetds/HEAD: 63 files, 3.6M, built in 67 seconds $ brew test freetds --HEAD -v Testing freetds ==> /usr/local/Cellar/freetds/HEAD/bin/tsql -C /usr/local/Cellar/freetds/HEAD/bin/tsql -C Compile-time settings (established with the "configure" script) Version: freetds v0.92.dev.20130718 freetds.conf directory: /usr/local/Cellar/freetds/HEAD/etc MS db-lib source compatibility: no Sybase binary compatibility: no Thread safety: yes iconv library: yes TDS version: 7.1 iODBC: yes unixodbc: no SSPI "trusted" logins: no Kerberos: no
Pretty simple:
commit 3d786f23bc2ff5d73a22474f9256330a17f01e23 Author: Marc AbramowitzDate: Thu Jul 18 09:10:33 2013 -0700 freetds.rb: Enable support for building FreeTDS from HEAD (gitorious) diff --git a/Library/Formula/freetds.rb b/Library/Formula/freetds.rb index 0a700e6..362b411 100644 --- a/Library/Formula/freetds.rb +++ b/Library/Formula/freetds.rb @@ -5,10 +5,19 @@ class Freetds < Formula url 'http://mirrors.ibiblio.org/freetds/stable/freetds-0.91.tar.gz' sha1 '3ab06c8e208e82197dc25d09ae353d9f3be7db52' + head 'https://git.gitorious.org/freetds/freetds.git' + depends_on "pkg-config" => :build depends_on "unixodbc" => :optional + if build.head? + depends_on :automake + depends_on :libtool + end + def install + system "autoreconf -i" if build.head? + args = %W[--prefix=#{prefix} --with-openssl=/usr/bin --with-tdsver=7.1
Here’s the commit on GitHub.
I also added support for a test and for doing a universal build.
A note for my future self on how to compile a library as universal binary in Mac OS X.
For a while, I’ve been getting warnings like these when building pymssql:
ld: warning: ignoring file /usr/local/lib/libsybdb.dylib, file was built for unsupported file format ( 0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0 ) which is not the architecture being linked (i386): /usr/local/lib/libsybdb.dylib ld: warning: ignoring file /usr/local/lib/libct.dylib, file was built for unsupported file format ( 0xcf 0xfa 0xed 0xfe 0x 7 0x 0 0x 0 0x 1 0x 3 0x 0 0x 0 0x 0 0x 6 0x 0 0x 0 0x 0 ) which is not the architecture being linked (i386): /usr/local/lib/libct.dylib
I finally decided to do something about them. I rebuilt FreeTDS from source as follows:
./configure \ CFLAGS="-arch i386 -arch x86_64" \ CXXFLAGS="-arch i386 -arch x86_64" \ LDFLAGS="-arch i386 -arch x86_64" \ --disable-dependency-tracking make make install
Goodbye warnings!
This Stack Overflow post was helpful: Stack Overflow: How to compile universal libraries on Mac OS X?
Finally fixed one little thing that was annoying me on my work laptop with OS X 10.8.4. I couldn’t double-tap to drag files or make selections.
The fix is dead simple and it’s from this CNET article:
If you want to reactivate the classic double-tap-and-drag gesture, it’s possible, but the option is well-hidden. Instead of being in System Preferences under Trackpad, it’s actually under System Preferences > Universal Access > Mouse and Trackpad > Trackpad Options. Click the check box that says “Dragging” and you should be all set.
In Mountain Lion, it seems that “Universal Access” was renamed to “Accessibility”.