Skip to content

           

Preparing a Mac for Resale with OS X Leopard

When reselling a Mac, it’s nice to give the new owner an experience similar to buying a new Mac. This means reinstalling a clean copy of OS X and, if you’re super nice, installing the latest software updates and additional software. Finally, the Setup Assistant needs to be reset so that it runs when the new owner turns on the computer.

Note: The steps below were used to prepare a MacBook Pro running OS X Leopard for resale. Although the steps are similar for other versions of OS X, I have only tested them with Leopard.

Backup Your Data

If the Mac you’re reselling is your own, you should do a full system backup before proceeding.

My favorite method for doing this is to use an external USB hard drive and Carbon Copy Cloner (free). Carbon Copy Cloner can be used to take a snapshot of your entire drive and make it bootable. This means you can actually boot from your backup drive, given you’re booting from identical hardware. At the very least, you’ll have an identical copy of everything on the computer.

You can also use Time Machine to backup your data. I don’t use Time Machine, so I cannot recommend it.

The bottom line is, you want to backup anything important on the Mac you’re reselling because the next steps will erase everything.

Reinstall Mac OS X Leopard

  1. Insert Mac OS X Leopard Install Disc
  2. Restart the computer
  3. Hold down the Option key while the computer is restarting. The system will then prompt you to select a startup disk. Choose the Mac OS X Leopard Install Disc.
  4. On the “Select a Destination” screen, click “Options” and choose “Erase and Install”. This will ensure a clean installation of Mac OS X Leopard.
  5. Follow the remaining steps to install Mac OS X; they are all self explanatory.
  6. When the installation finishes, the Mac will reboot and you’ll be presented with the Setup Assistant.

If you’re not interested in installing the software updates or any additional software, press Command+Q to quit the Setup Assistant and choose Shutdown. The next time you turn on the machine, the Setup Assistant will launch again.

Install Software Updates & Additional Software

If you want to be super nice to the new owner of your Mac, you’ll need to complete the Setup Assistant and create a temporary user. We will use that user to download and install the software updates as well as install any additional applications (Firefox, MS Office, etc.). Once we’re done updating the system and installing software, we’ll delete the temporary user and reset the Setup Assistant.

  1. Complete the Setup Assistant and create the first user account (we’ll delete this user and reset the Setup Assistant later, so it doesn’t matter what you use). Make note of the shortname for the user you create as we’ll need that in the next section (e.g., user “Raam Dev” will probably have a shortname of “raamdev”).
  2. At this point, you should be logged into the newly reinstalled system using the temporary account you created.
  3. Connect to the Internet (using a wired or wireless connection)
  4. Run Software Update (Apple Icon -> Software Update) and install any available updates. This may take awhile!
  5. After the system reboots, run Software Update again. There will most likely be more updates to install. Repeat this process until there are no more updates to install.
  6. Install any additional applications, being sure to install for “All Users” if prompted. Also, make sure the new applications are installed in /Applications/ and not ~/Applications/

Clean Up and Reset the Setup Assistant

Now that we’ve installed the latest updates and installed any additional software, we need to clean things up. First, we’ll delete the temporary user we created and then we’ll reset the Setup Assistant to ensure it launches the next time we boot up.

First, you’ll need to start the Mac in Single User mode by restarting and holding down Command+S. This mode does not have a graphical user interface (GUI) and is entirely command-based.

Once you’re in Single User mode, run the following commands and press Enter at the end of each line. (Note: The $ represents the command prompt; you don’t actually type the $.)

By default, the hard drive is mounted as read-only in Single User mode. Before we continue, we need to make the disk writable:

$ mount -uw /

Next, we clean up that temporary user we created. Replace USERNAME with the shortname of the user you created in the previous section.

$ rm -R /Library/Preferences/
$ rm -R /Users/USERNAME/
$ /bin/launchctl load /System/Library/LaunchDaemons/com.apple.DirectoryServices.plist &
$ dscl . -delete /Users/USERNAME

And lastly, we need to reset the Setup Assistant so it runs the next time we start the Mac:

$ rm /var/db/.AppleSetupDone

Now that everything is cleaned up and the Setup Assistant has been reset, we can shutdown the system and ship or deliver the Mac to its new owner!

$ shutdown -h now

If you want to boot the Mac to make sure it looks the way it should when the user gets it (i.e., the intro video and Setup Assistant start), just make sure you press Command+Q and choose Shutdown.

Posted in OS X.

Tagged with , , .


Unix/Linux: Finding and Killing Processes by User

If you’ve ever run ps aux | grep user to list processes and hunt for process IDs, you’ll be happy to know there is a simpler alternative. Both finding and killing processes owned by a particular user is made simple using the handy pgrep and pkill utilities.

Listing Processes with pgrep

Listing all the processes owned by the user raam can be done like this (the -l switch causes the output to include the process name):

$ pgrep -l -u raam
9614 screen
9628 bash
9644 irssi
16165 bash
16297 rtorrent
19462 ssh
19515 bash
19526 ssh
20964 sshd

You can also filter the list of results by appending a full (or partial) process name to the command:

$ pgrep -l -u raam bash
9628 bash
16165 bash
19515 bash

Killing Processes with pkill

The pkill command does basically the same thing as pgrep, except it kills the processes instead of listing them. This is useful if you have a user with several dead processes, or if you were deleting a user and you wanted to kill any running processes first.

Killing all the processes owned by the user raam looks like this:

$ pkill -u raam

And once again, if you only wanted to kill all the bash processes owned by raam, you would append the process name to the command:

$ pkill -u raam bash

As always, check the man pages for pgrep and pkill for more information and switch options.

Posted in Linux.

Tagged with , , .


Mac OS X: Resizing Oversized Windows to Fit the Screen

I recently switched from a 15″ MacBook Pro (2007 model) to the latest 13″ MacBook Pro (2009, unibody model). After transferring my iTunes library to the new laptop, I found that the size of the iTunes window exceeded the size of the screen (the 15” MBP had a 1440×900, while the 13” MBP has a slightly smaller 1280×800). This meant I was unable to grab the bottom right corner of the window to resize it:

iTunes too large to resize!

Unfortunately, the maximize button in iTunes only cycles through Previous Size and the Mini Player mode; at no point does it actually maximize the window to fit the screen!

Note: As Ondrej commented below, you might be able to fix this by simply holding down the Alt/Option key and pressing the zoom/maximize button (the green button).

I tried installing an application called RightZoom which changes the behavior of the maximize button in OS X by maximizing the window to fill the screen (as opposed to simply maximizing for “best fit”). However, that did nothing to change the behavior of iTunes.

After searching the web for solutions and finding nothing, I remembered a trick I had used in the past on Windows computers: Change the display resolution to something smaller, thereby forcing the operating system to resize windows to fit the new resolution. Then, after the OS resizes the windows, change the resolution back to the original. Of course this only works if the original resolution is not already set for the lowest one (it most likely isn’t).

To my relief, this trick worked perfectly! When I switched to a smaller resolution, the iTunes window was resized to fit the smaller screen.

For your reference, here are the steps:

  1. Launch System Preferences -> Displays
  2. Select a smaller resolution
  3. iTunes (or any other application) will be resized to fit the smaller resolution
  4. Change the resolution back to the default
  5. Oversized window problems solved!

Posted in OS X.

Tagged with , .


MAC Address Validation Regex with egrep

I needed an easy way to validate a MAC address in a bash script that generated a unique hostname based on the MAC address of the system. This gem did the trick:

echo "00:11:24:3e:a5:78" | egrep "^([0-9a-fA-F]{2}\:){5}[0-9a-fA-F]{2}$"

In the event that there was a problem getting the MAC address (e.g., faulty NIC or unstable device driver), I generate a random hostname instead of basing the hostname generation on the MAC. Here’s how I validated the MAC in the script:

if [ `echo $ACTIVE_INTERFACE_MAC | egrep "^([0-9a-fA-F]{2}\:){5}[0-9a-fA-F]{2}$"` ]; then
	# generate unique hostname based on MAC
else
	# generate random-character hostname
fi

Posted in Bash, Linux, Regex.

Tagged with , , , .


A Script to Install & Configure ifplugd on Debian

The default configuration on some older Linux systems is to only send a DHCP request while booting up. This means if the network cable gets unplugged, or if the router is powered off, the system may lose its IP configuration. To restore the network connection, the system may need to be manually rebooted or have someone at the local console run the dhclient command to request a DHCP lease.

For systems that are only accessed remotely via SSH, such a scenario can be painful. What is needed is a daemon that watches the link status of the Ethernet jack and reconfigures the network (or sends out another DHCP request) when it detects a cable is plugged in (or the power to the router is restored).

ifplugd does exactly that:

ifplugd is a Linux daemon which will automatically configure your ethernet device when a cable is plugged in and automatically unconfigure it if the cable is pulled.

On a Debian system, installing and configuring ifplugd is relatively simple using apt-get install ifplugd. Once its been installed, it needs to be configured by editing /etc/default/ifplugd. The most basic configuration is to simply set INTERFACES="auto" and HOTPLUG_INTERFACES="all". This configuration tells ifplugd to watch all network interfaces for a new link status and automatically reconfigure them using the Debian network configuration defined in /etc/network/interfaces.

I recently needed to automate the install and configuration of ifplugd on many remote Linux systems, so I wrote this simple script.

Download: install-ifplugd.tar.gz

#!/bin/sh

#########################################
# Author: Raam Dev
#
# This script installs ifplugd and configures
# it to automatically attempt to restore any
# lost connections.
#
# Must be run as root!
#########################################

# Check if we're running this as root
if [ $EUID -ne 0 ]; then
   echo "This script must be run as root" 1>&2
   exit 1
fi

# Files used when configuring ifplugd
OUTFILE=/tmp/outfile.$$
CONFIG_FILE=/etc/default/ifplugd

# Update package list and install ifplugd, assuming yes to any questions asked
# (to insure the script runs without requiring manual intervention)
apt-get update --assume-yes ; apt-get install --assume-yes ifplugd

# Configure ifplugd to watch all interfaces and automatically attempt configuration
sed 's/INTERFACES=\"\"/INTERFACES=\"auto\"/g' < $CONFIG_FILE > $OUTFILE
mv $OUTFILE $CONFIG_FILE

sed 's/HOTPLUG_INTERFACES=\"auto\"/HOTPLUG_INTERFACES=\"all\"/g' < $CONFIG_FILE > $OUTFILE
mv $OUTFILE $CONFIG_FILE

If you’re interested in doing more with ifplugd, check out this article.

Posted in Debian, Linux, Networking.