Submit Hint Search The Forums LinksStatsPollsHeadlinesRSS
14,000 hints and counting!

How to set up a Mac as a PXE boot server, with Debian Live Network
Here is how to set up a Mac, running OS X Client 10.5 or later, as a PXE boot server.  We will configure OS X's built-in DHCP, TFTP, and NFS servers, start the servers, and put the client boot files in place.  (The NFS server may be optional, depending on the operating system we are booting.)

You'll need the Mac, a PXE-capable PC, and an ethernet cable.  Some steps will require being logged in as an administrator on the Mac.

We'll boot Debian Live on the client PC as an example.  We'll show a regular setup with NFS, an alternate setup without NFS, and how to uninstall.
Regular setup (with NFS):
  1. Connect the Mac and the client PC with the ethernet cable.

  2. On the Mac, in System Preferences > Network, click "Ethernet" and enter the following settings:
    Configure IPv4: Manually
    IP Address: 192.168.1.1
    Subnet Mask: 255.255.255.0
    (All others can be left blank)
    
    Note the status may read "Cable Unplugged" at this point, which is ok.

  3. In Terminal, make new directories /srv and /srv/debian-live (we'll be sharing /srv/debian-live over NFS) with the following commands:
    $ sudo mkdir /srv
    $ sudo mkdir /srv/debian-live
    
  4. To create the NFS configuration file, enter the following command:
    $ sudo nano /etc/exports
    
    paste the following text into the editor:
    /srv/debian-live -ro -network 192.168.1.0 -mask 255.255.255.0
    
    and press Control-O to save and Control-X to exit nano.

    This will share /srv/debian-live to the ethernet network as read-only.

    For more information, type man nfsd and man exports in Terminal, and see this hint.

  5. Check the /etc/exports file created in step 4 (no output means ok):
    $ nfsd checkexports
    
    check the status of the NFS server (should say enabled and running):
    $ nfsd status
    
    and check the server's exports list (should show the /srv/debian-live directory):
    $ showmount -e
    
    For more information, see man nfsd and man showmount.

  6. To create the DHCP configuration file, enter the following command:
    $ sudo nano /etc/bootpd.plist
    
    paste the following text into the editor:
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
    	<key>dhcp_enabled</key>
    	<string>en0</string>
    	<key>Subnets</key>
    	<array>
    		<dict>
    			<key>name</key>
    			<string>192.168.1</string>
    			<key>net_mask</key>
    			<string>255.255.255.0</string>
    			<key>net_address</key>
    			<string>192.168.1.0</string>
    			<key>net_range</key>
    			<array>
    				<string>192.168.1.2</string>
    				<string>192.168.1.254</string>
    			</array>
    			<key>allocate</key>
    			<true/>
    			<key>dhcp_option_66</key>
    			<string>192.168.1.1</string>
    			<key>dhcp_option_67</key>
    			<data>cHhlbGludXguMAA=</data>
    		</dict>
    	</array>
    </dict>
    </plist>
    


    and press Control-O to save and Control-X to exit nano.

    Notes:

    • If the file /etc/bootpd.plist already exists, turn off Internet Sharing in System Preferences > Sharing.  Then the file will be removed, and you can create it as in this step.

      (Make sure to move /etc/bootpd.plist to the Trash and disable the DHCP server before turning Internet Sharing back on.  See "Uninstall steps" below.)

    • If you are using an ethernet port other than en0 (see System Information or System Profiler for the port name), change the value for the dhcp_enabled key to the port you are using.

    • The data for the dhcp_option_67 key is the bootloader filename "pxelinux.0" (see step 9 below), null terminated and encoded into base64.  This can be generated with the free DHCP Option Code Utility, or by entering the following command in Terminal:
      $ printf %s00 `echo -n pxelinux.0 | xxd -p` | xxd -r -p | openssl base64
      
      (See this discussion thread.)

    • The string for the dhcp_option_66 key is the IP address of the tftp server, i.e. the address of the Mac from step 2.

    • See man bootpd and man tftpd.


  7. Enable the DHCP and TFTP servers with the following commands:
    $ sudo launchctl load -w /System/Library/LaunchDaemons/bootps.plist
    $ sudo launchctl load -w /System/Library/LaunchDaemons/tftp.plist
    
    See man launchd, man launchctl, man launchd.plist, and this article.

  8. Download a Debian Live netboot archive, gnome-desktop or another flavor, from one of the following (choose i386 or amd64 depending on the client PC's architecture):


    Place the .tar.gz file on the Desktop (or anywhere convenient), then double-click it to expand the archive.

  9. Open the folder that is created (with a name like "debian-live-6.0.7-i386-gnome-desktop-net"), open the "tftpboot" subdirectory, select all of the files, and move them to /private/tftpboot.  (This includes the pxelinux.0 file mentioned in step 6, and other boot menu and kernel files.)

    Note that files in /private/tftpboot should be readable by everyone (so they will transfer), but not writeable by everyone (so they can't be modified).  Check permissions with Get Info or ls -l if needed.

  10. Click the Back button to leave the "tftpboot" subdirectory, then open the "debian-live" subdirectory, then select the folder called "live" and move it to /srv/debian-live.  (When Debian Live is booting, it will look for the file /srv/debian-live/live/filesystem.squashfs over NFS, which contains the root filesystem.)

  11. Optionally, test the TFTP server:
    $ tftp localhost
    tftp> get pxelinux.0
    tftp> quit
    $ ls -l pxelinux.0
    
    You should see that a copy of the file pxelinux.0 has been downloaded to the current directory.

  12. Turn on the client PC, and press or hold the key to bring up the boot options (something like F2 or F12; check the documentation for your machine or look for a message onscreen).

  13. Choose to boot from the network (PXE).  The PC receives an IP address from the DHCP server, loads pxelinux from the TFTP server, and displays the Debian Live boot menu.

  14. Choose a boot option, and after the kernel is downloaded, the root filesystem is accessed over NFS, and the operating system is loaded, you'll end up at your graphical desktop or shell prompt of choice!
To uninstall, see "Uninstall steps" below.


Alternate setup (no NFS):

This is a shorter method, because NFS is not required.  Debian Live will download its root filesystem over TFTP.  (However, the largest file that can be downloaded is limited by a bug.)
  1. Follow steps 1, 2, 6, and 7 of the regular setup, and skip steps 3, 4, and 5.

  2. In step 8, choose a smaller archive, like the standard flavor from 6.0.7, or the lxde-desktop flavor from 5.0.10.  (A bug causes some of the larger versions to stall when downloading the root filesystem over TFTP.)  Place the .tar.gz file on the Desktop, then double-click it to expand the archive.

  3. Follow step 9 of the regular setup.

  4. In step 10, instead of moving the folder "live", open it and move the file "filesystem.squashfs" to /private/tftpboot.

  5. Open the file /private/tftpboot/debian-live/i386/boot-screens/live.cfg in TextEdit.  Edit the kernel parameters for the boot menu option you'll be using, replacing the two parameters
    netboot=nfs nfsroot=192.168.1.1:/srv/debian-live
    
    with a single parameter
    fetch=tftp://192.168.1.1/filesystem.squashfs
    
    then save the file and quit TextEdit.

  6. Follow the regular setup steps 11, 12, 13, and 14.  The root filesystem may take some time to download in step 14 (1 to 2 minutes over 100mbps ethernet), but when it finishes, you'll end up booted into Debian Live!
To uninstall, follow steps 1, 3, and 4 under "Uninstall steps", but ignore the /etc/exports file in step 1, and the /srv/debian-live directory in step 4.  Skip steps 2 and 5.


Uninstall steps:
  1. Move the files /etc/bootpd.plist and /etc/exports to the Trash.

  2. Restart the NFS server:
    $ sudo nfsd restart
    
    and check the status of the server (should say enabled, not running):
    $ nfsd status
    
  3. Disable the DHCP and TFTP servers:
    $ sudo launchctl unload -w /System/Library/LaunchDaemons/bootps.plist
    $ sudo launchctl unload -w /System/Library/LaunchDaemons/tftp.plist
    
  4. Move the files and folders from /private/tftpboot and /srv/debian-live to the Trash.

  5. Remove the /srv/debian-live and /srv directories:
    $ sudo rmdir /srv/debian-live
    $ sudo rmdir /srv
    
Lex adds: I haven't tested this one.
  Post a comment  •  Comments (6)  
  • Currently 2.80 / 5
  You rated: 1 / 5 (5 votes cast)
 
[12,916 views] Email Article To a Friend View Printable Version
More easily ignore unwanted calls to your iPhone Phones
You can identify unwanted calls. I still have a land line, but I am forwarding all calls to my iPhone. To identify unwanted calls (new windows, green energy, political adds...), I created a Contact named Don't Answer.

When I answer the phone and it is one of those annoying calls, if the number shows up, I can just use the 'add to existing contact' feature. Of course, this doesn't work if the number is blocked. But, in two weeks, I have a long list of calls that show up as Don't Answer and I can just not answer or choose Decline—there's no guesswork involved.

Lex adds: I do something similar for another reason. I use Google's two-factor authentication, and Google uses a variety of phone numbers to text me my passcode when I log in. So I created a Google entry in my contacts, and add each different number the company texts me from to that contact. That way, instead of ending up with lots of old entries from Google in Messages, there's just one that all their texts get grouped in.

iOS 7, of course, will provide a way to block specific unwanted callers, too. But this hint makes a nice stopgap!
  Post a comment  •  Comments (9)  
  • Currently 2.86 / 5
  You rated: 3 / 5 (7 votes cast)
 
[7,868 views] Email Article To a Friend View Printable Version
Making Juniper Network Connect use Keychain Network
Password managers are a good thing, as they encourage you to maintain strong passwords. Just the sort of thing you’d want if you were opening every port on every computer on your enterprise network. Unfortunately, Juniper doesn’t see it this way. This can be resolved with some crafty scripting.

First, we need a scripting addition called Useable Keychain Scripting. Download it and copy it to /Library/Scripting Additions. You'll need to type your password to do this.

Next, you need to be able to connect to your VPN, so do this, then disconnect. Network Connect should retain the address of your server (e.g. https://vpn.example.com).

Now create a password item for the server (https://vpn.example.com), and grant access to Usable Keychain Scripting. Or not, your call.

Now fire up the script. It will get the address of the server from Network Connect, get your username and password from Keychain Access, and log you in.

Modified from https://github.com/seanfisk/juniper-network-connect-vpn-applescript:
property appName : "Network Connect"

on main()
	tell application "Network Connect"
		if connected then
			sign out
			delay 5
			quit
		else
			tell application "System Events"
				-- Recover the name of the VPN from Network Connect.
			set myAddress to value of combo box 1 of group 2 of tool bar 1 of 
				window appName of application process appName
				set ASTID to AppleScript's text item delimiters
				set AppleScript's text item delimiters to "://"
				-- Get just the server address
				set vpnName to (text items 2 through -1 of myAddress) as text
				set AppleScript's text item delimiters to ASTID
			end tell
			tell application "Usable Keychain Scripting" to tell current keychain
			-- Recover the username and password from the login keychain
				set myPass to password of first internet password 
					whose name contains vpnName
				set myAccount to account of first internet password 
					whose name contains vpnName
			end tell
			connect to vpnName
			delay 5
			tell application "System Events"
			-- enter the account name and password in the dialog box and click 'Sign In"
			set value of text field 1 of group 7 of UI element 1 of scroll area 1 of 
				window appName of application process appName to myAccount of
			set value of text field 1 of group 10 of UI element 1 of scroll area 1
				window appName of application process appName to myPass
			click button "Sign In" of group 14 of UI element 1 of scroll area 1 of 
				window appName of application process appName
			end tell
			-- Could launch an application here if it's scriptable.
			return
		end if
	end tell
end main

main()
Lex adds: I haven't tested this one.
  Post a comment  •  Comments (4)  
  • Currently 2.25 / 5
  You rated: 4 / 5 (4 votes cast)
 
[5,540 views] Email Article To a Friend View Printable Version
Avoid triggering Hot Corners accidentally Apps
The truth is, our old friend Rob Griffiths posted a version of this hint years ago. But that one was enough incarnations of OS X ago that we felt it's worth a refresh.

Many of us use Hot Corners (accessed from System Preferences -> Mission Control or System Preferences -> Desktop & Screen Savers) to trigger various actions. On my Mac, slamming the mouse to the bottom right corner reveals the desktop; the bottom left corner triggers Mission Control. You can also use the corners to trigger things like Notification Center, Launchpad, starting a screen saver, or putting your display to sleep.

But anyone who uses Hot Corners (which OS X refers to interchangeably as Active Screen Corners) triggers those mouse-controlled shortcuts accidentally sometimes. The solution is this: When you're choosing a Hot Corner setting from one of the drop-down menus, hold down your preferred modifier key or keys. You'll see the options change from, say, Mission Control to Option Mission Control" instead.

From then on, your corner will only work when you're also holding down the modifier key(s) you specified. Now, trips to the Apple menu won't trigger your Hot Corner shortcut—unless you're pressing your selected modifier key, too.
  Post a comment  •  Comments (17)  
  • Currently 4.10 / 5
  You rated: 5 / 5 (10 votes cast)
 
[10,218 views] Email Article To a Friend View Printable Version
Prevent a Mac from sleeping from the command line UNIX
We've run a number of hints about preventing a Mac from sleeping, such as this and this.

I came across another really simple way to do this, using the pmset command. Just run this command in terminal:

pmset noidle

Terminal will display the following text:

Preventing idle sleep (^C to exit)...

To allow the Mac to go back to sleep, according to its current Energy Saver settings, just press Control-C.
  Post a comment  •  Comments (4)  
  • Currently 3.14 / 5
  You rated: 5 / 5 (7 votes cast)
 
[9,367 views] Email Article To a Friend View Printable Version
Quickly spot-check your laptop battery's health System
Though it's come up in a comment in the past, we've never specifically called out a handy, quick way to check how healthy your Mac laptop's battery really is.

If you hold down the Option key before you click on the battery status icon in the menu bar, an additional entry appears in the menu: Condition. You're hoping to see "Condition: Normal." (The Condition line won't appear if you hold down Option after you've already clicked on the menu.)

The other options besides Normal are Replace Soon, Replace Now, and Service Battery, which reflect progressively more serious battery woes. In each of the two Replace modes, your battery is still functioning normally, though it holds less charge than it used to (or significantly less, in the case of Replace Now). But even in Service Battery mode, which may not impact how long the battery lasts but could indicate other under-the-hood problems, you can continue to use your laptop's battery without fear of causing long-term harm.
  Post a comment  •  Comments (2)  
  • Currently 3.29 / 5
  You rated: 5 / 5 (7 votes cast)
 
[8,346 views] Email Article To a Friend View Printable Version
Hide apps on the Apple TV Apps
As the Apple TV gains new apps, some users may find that the device's home screen is getting a bit cluttered. For example, I don't care to watch sports on my Apple TV, and it'd be nice if I didn't have to see those apps.

David Chartier, writing on Finer Things in Tech, has pointed out an easy way to clean up excess apps. Go to Settings > General > Parental Controls, turn on Parental Controls if it's not already activated (you'll be asked to enter a 4-digit PIN), then scroll down and click on the apps you want to hide to toggle their visibility.

David also points out, in his article, how to move apps around on the Apple TV's home screen. We posted a hint about this last year.
  Post a comment  •  Comments (2)  
  • Currently 4.29 / 5
  You rated: 5 / 5 (7 votes cast)
 
[6,642 views] Email Article To a Friend View Printable Version
Install OS X 10.9 Mavericks Developer Preview on a virtual machine System
If you have an OS X developer account, and want to work with OS X 10.9 Mavericks, you may prefer to do so using a virtual machine, in Parallels Desktop or VMware Fusion. However, you won't be able to create a new virtual machine in either of these programs using the Mavericks installer.

John Martellaro, on The Mac Observer, posted an article with links to Parallels knowledge base articles explaining how to do this. You'll need to update Parallels Desktop, then create a snapshot of an existing virtual machine and install Mavericks on that.

For VMware Fusion, the process is quite simple: take an existing virtual machine, running 10.7 or 10.8, duplicate it in the Finder, then launch VMware Fusion. Choose File > Open, then select the duplicate virtual machine. Rename it, then launch it. Fusion will ask if you moved or copied the virtual machine; click I copied it.

After you've launched the duplicated virtual machine, run the Mavericks installer from within that virtual machine.

Note: as always, we will not be publishing hints about using OS X 10.9 until its release.
  Post a comment  •  Comments (9)  
  • Currently 4.33 / 5
  You rated: 5 / 5 (6 votes cast)
 
[18,778 views] Email Article To a Friend View Printable Version
How to repair damaged disks that crash Disk Utility and DiskWarrior Apps
Some damaged disks do not show up with Disk Utility and DiskWarrior, and may hang and crash such repair utilities. Yet, there is a trick to repair such broken disks using Disk Arbitrator.

1. Open Disk Arbitrator and select "Activated - Block mounts." This prevents the damaged disk from crashing the repair utilities and allows such disks to be displayed by these utilities.

2. Connect the damaged disk.

3. Open Disk Utility or DiskWarrior. The damaged disk should show now and it should not crash the repair utility.

4. Deactivate Disk Arbitrator (uncheck the Activated box). This allows the repair utility to handle the damaged disk properly (mounting it once repaired).

5. Run Disk Utility or DiskWarrior.

Then, the utility should repair the disk, or at least, mount a Preview disk (DiskWarrior), allowing you to inspect and even copy or backup some files or the full disk, reformat it and restore it.

[kirkmc adds: Well, I guess I'm fortunate that I can't test this. If anyone has any severely damaged hard disks around, and wants to try, feel free to post in the comments whether or not this works.]
  Post a comment  •  Comments (12)  
  • Currently 3.55 / 5
  You rated: 5 / 5 (11 votes cast)
 
[25,610 views] Email Article To a Friend View Printable Version
Another Dropbox permissions errors problem, and fix Apps
Some time ago, I posted a hint about fixing Dropbox Permissions Denied errors. This fix works in many cases, but I came across another, similar issue this weekend which Dropbox couldn't fix.

In addition to using Dropbox to sync files across two Macs, and access them from iOS devices, I back up my home folder (with the exception of my media files). I have a selected of folders in my home folder that back up: these include my Documents folder and others, and only parts of my Library folder. I back these up because of settings that would be useful to have in case of local data loss.

Recently, I found that there were some files that couldn't sync. The Dropbox menu showed a Permissions Denied error, so I tried the solution in the above-mentioned hint; it didn't work. Not only were these files not syncing, but Dropbox was in an endless loop trying to sync them.

After much searching, I finally found the culprits. I use Acorn for image editing, and this app creates a folder in ~/Library/Application Support with a number of files. in the ~/Library/Application Support/Acorn/Acorn Actions folder are several aliases to iPhoto, Mail and Preview. It turned out that these were not syncing, because Dropbox follows aliases to copy the original files. Apparently the apps were getting sent to Dropbox, and the permissions issues were caused by this.

The moral of the story, then, is to look for any app aliases that may be getting synced. But it's also worth noting that Dropbox doesn't sync aliases, but rather their targets, and this could also lead to issues in the amount of space you use in your Dropbox folder.
  Post a comment  •  Comments (0)  
  • Currently 3.80 / 5
  You rated: 5 / 5 (5 votes cast)
 
[5,680 views] Email Article To a Friend View Printable Version