XiZi's Blog

手动给Mac(苹果)电脑,添加Nat,共享Internet。

费了半天劲,算是搞定了。

废话不多说,直接看命令吧!(好吧,其实这个是系统启动项目脚本(在/Library/StartupItems里面))

#!/bin/sh

. /etc/rc.common

function enipfw() #添加防火墙规则
{
    ipfw -f flush
    ipfw add allow all from any to me ssh
    ipfw allow all from any to me http
    ipfw allow all from any to me https
    ipfw add allow all from any to me openvpn
    ipfw add allow all from any to me ftp
    ipfw add 90 allow all from any to me 5900
    ipfw add divert natd all from any to any via en0
    ipfw add pass all from any to any
}

ConsoleMessage "NATD SYSTEM START ITEM."

  case $1 in
    start)
      ConsoleMessage "Starting NATD"
      sysctl -w net.inet.ip.forwarding=1 #设置网关
      natd -s -m -d -n en0 -dynamic #启动Nat
      enipfw
      sysctl -w net.inet.ip.fw.enable=1 #开启防火墙
      ;;
    stop)
      ConsoleMessage "Stopping NATD"
      sysctl -w net.inet.ip.forwarding=0
      killall natd
      ipfw -f flush
      sysctl -w net.inet.ip.fw.enable=0
      ;;
    restart)
      ConsoleMessage "Restarting NATD"
      killall natd
      sleep 10
      sysctl -w net.inet.ip.forwarding=1
      enipfw
      sysctl -w net.inet.ip.fw.enable=1
      ;;
  esac

如果你想让它随机启动,那么可以这么办

在/Library/StartupItems目录下建立目录NATD

在NATD目录下新建NATD文件,内容为以上内容。

在NATD目录先新建配置文件(StartupParameters.plist),内容如下:

{
  Description     = "NATD";
  Provides        = ("NATD");
  Requires        = ("Network");
  OrderPreference = "none";
  Messages        =
    {
      start       = "Starting NATD";
      stop        = "Stopping NATD";
      restart     = "Restarting NATD";
    };
}

OK, 完成以上工作可以修复文件夹权限并启动NATD服务了。

sudo chown -R 0:0 /Library/StartupItems/NATD #修复所有者
sudo chmod -R 755 /Library/StartupItems/NATD #修复权限
sudo SystemStarter -vd start NATD #启动服务

修改Mac安装盘,直接运行OSInstall.mpkg安装系统,到第二分区。

1、主要修改OSInstall.mpkg和BaseSystemResources.pkg两个文件(位于目录:System/Installation/Packages下面)。

2、修改OSInstall.mpkg,主要取消一些安装包没有但是在Distribution文件里面默认配置了,所以安装的时候提示出错。步骤如下

# 1. 创建OSInstall文件夹,并解压mpkg文件. 在这之前可能需要sudo获取root权限。
mkdir OSInstall
cd OSInstall
xar -x -f ../OSInstall.mpkg
# 2. 用你喜欢的文本编辑器编辑Distribution文件,主要修改4个地方
####(1)删除 eraseOptionAvailable="true" 是目标可以安装在MBR分区
@@ -1,6 +1,6 @@
 <?xml version="1.0" standalone="yes"?>
 <installer-gui-script minSpecVersion="1">
-    <options eraseOptionAvailable="true" hostArchitectures="i386" allow-external-scripts="yes"/>
+    <options hostArchitectures="i386" allow-external-scripts="yes"/>
     <title>MacOSX_Title</title>
     <license file="License.rtf"/>
     <conclusion file="Conclusion.rtfd"/>
#### (2) 修改isSupportedPlatform函数直接返回true
@@ -41,23 +41,7 @@
 
 function isSupportedPlatform(){
 
-	if( isVirtualMachine() ){
-		return true;
-	}
-	
-	var platformSupportValues=["Mac-F2268DC8","Mac-F22C86C8","Mac-F22587C8","Mac-F2218FA9","Mac-F2218EA9","Mac-F42D86A9","Mac-F22C8AC8","Mac-F22586C8","Mac-942B59F58194171B","Mac-F226BEC8","Mac-F4218FC8","Mac-942459F5819B171B","Mac-7BA5B2794B2CDB12","Mac-F4218EC8","Mac-F2208EC8","Mac-F22C89C8","Mac-F22587A1","Mac-F221DCC8","Mac-F42388C8","Mac-F223BEC8","Mac-F4238CC8","Mac-F222BEC8","Mac-F227BEC8","Mac-F4208AC8","Mac-F22788A9","Mac-F4238BC8","Mac-F221BEC8","Mac-C08A6BB70A942AC2","Mac-8ED6AF5B48C039E1","Mac-F2238AC8","Mac-F4208EAA","Mac-F22788C8","Mac-F2268EC8","Mac-F2218EC8","Mac-F22589C8","Mac-F4228EC8","Mac-F22788AA","Mac-F42C86C8","Mac-F4208CA9","Mac-942C5DF58193131B","Mac-F2238BAE","Mac-F42289C8","Mac-F2268CC8","Mac-F4208DC8","Mac-F2218FC8","Mac-742912EFDBEE19B3","Mac-F4208DA9","Mac-F42D89C8","Mac-F4208CAA","Mac-F42D89A9","Mac-F2268AC8","Mac-F42C89C8","Mac-942452F5819B1C1B","Mac-F42786A9","Mac-F42D88C8","Mac-F42187C8","Mac-94245B3640C91C81","Mac-F42D86C8","Mac-4BC72D62AD45599E","Mac-F2268DAE","Mac-F42C8CC8","Mac-F42C88C8","Mac-94245A3940C91C80","Mac-F42386C8","Mac-942B5BF58194151B","Mac-F42189C8"];
-	var boardID = system.ioregistry.fromPath('IOService:/')['board-id'];
-	
-	if( !boardID || platformSupportValues.length ==0 ) {
-		return false
-	}
-	for( var i = 0; i < platformSupportValues.length; i++ ){
-	 	if( boardID == platformSupportValues[i] ){
-				return true;
-	  	}	
-	}
-
-	return false;
+	return true;
 }
####(3)检查是否为Server版本系统
@@ -170,19 +154,9 @@
 					return false;
 				}
 				
-			// Media Snag Boot
-			} else if (system.env.__OSINSTALL_ENVIRONMENT == '1' && system.files.fileExistsAtPath("/System/Installation/Packages/OSInstall.mpkg")) {
-			
-				// Only allow install on server volumes if Server.app is installed
-				if (! system.files.bundleAtPath(my.target.mountpoint + "/Applications/Server.app")) {
-			
-					my.result.message = system.localizedString('VC_NeedServerApp_message');
-					my.result.type = 'Fatal';
-					return false;
-				}
 			
 			// Recovery HD
-			} else if (system.env.__OSINSTALL_ENVIRONMENT == '1' && ! system.files.fileExistsAtPath("/System/Installation/Packages/OSInstall.mpkg")) {
+			} else if (! system.files.fileExistsAtPath("/System/Installation/Packages/OSInstall.mpkg")) {
 				
 				// Block Server volumes
 				my.result.message = system.localizedString('VC_CannotUpgradeServerRecovery_message');

####(4)去掉没有的语言包制定
@@ -596,16 +543,6 @@
     <pkg-ref id="com.apple.MacOSX.lang.tr" auth="root">Turkish.pkg</pkg-ref>
     <pkg-ref id="com.apple.MacOSX.lang.cs" auth="root">Czech.pkg</pkg-ref>
     <pkg-ref id="com.apple.pkg.ServerEssentials" auth="root">ServerEssentials.pkg</pkg-ref>
-    <pkg-ref id="com.apple.MacOSX.lang.th" auth="root">Thai.pkg</pkg-ref>
-    <pkg-ref id="com.apple.MacOSX.lang.ca" auth="root">Catalan.pkg</pkg-ref>
-    <pkg-ref id="com.apple.MacOSX.lang.hr" auth="root">Croatian.pkg</pkg-ref>
-    <pkg-ref id="com.apple.MacOSX.lang.el" auth="root">Greek.pkg</pkg-ref>
-    <pkg-ref id="com.apple.MacOSX.lang.he" auth="root">Hebrew.pkg</pkg-ref>
-    <pkg-ref id="com.apple.MacOSX.lang.ro" auth="root">Romanian.pkg</pkg-ref>
-    <pkg-ref id="com.apple.MacOSX.lang.sk" auth="root">Slovak.pkg</pkg-ref>
-    <pkg-ref id="com.apple.MacOSX.lang.uk" auth="root">Ukrainian.pkg</pkg-ref>
-    <pkg-ref id="com.apple.mpkg.OSInstall" auth="root" version="10.7.0">OSInstall.mpkg</pkg-ref>
-    <system-image id="com.apple.dmg.MacOSX">BaseSystem.dmg</system-image>
     <pkg-ref id="com.apple.MacOSX.lang.ar" installKBytes="50124" version="10.7.0.1.1.1306847324"/>
     <pkg-ref id="com.apple.MacOSX.lang.ca" installKBytes="75279" version="10.7.0.1.1.1306847324"/>
     <pkg-ref id="com.apple.MacOSX.lang.cs" installKBytes="42768" version="10.7.0.1.1.1306847324"/>
#3. 重新打包OSInstall.mpkg
xar -c -f ../OSInstall.mpkg *

3. 修改BaseSystemResources.pkg

# 1. 创建BaseSystemResources文件夹,并解压mpkg文件. 在这之前可能需要sudo获取root权限。
mkdir BaseSystemResources
cd BaseSystemResources
xar -x -f ../BaseSystemResources.pkg
# 2. 创建Payload文件
touch Payload
# 3. 重新打包
xar -c -f ../BaseSystemResources.pkg *




Host by is-Programmer.com | Power by Chito 1.3.3 beta | © 2007 LinuxGem | Design by Matthew "Agent Spork" McGee