<!-- $FreeBSD$ -->
<!-- The FreeBSD Documentation Project -->
<!-- Translate into Chinese by foxfair@FreeBSD.org -->
<!-- English version: 1.22 -->

  <sect>
    <heading>系統管理<label id="admin"></heading>

    <sect1>
      <heading>系統起始設定檔在哪？</heading>

      <p>從 2.0.5R 到 2.2.1R，主要的設定檔是 <tt>/etc/sysconfig</tt>。
         所有的選項都被指定在這個檔，而其他像 <htmlurl url=
         "http://www.FreeBSD.org/cgi/man.cgi?rc" name="/etc/rc">
         和 <tt>/etc/netstart</tt> 只是引用它。

      <p>觀察 <tt>/etc/sysconfig</tt> 這個檔並修正其值以適合你的系統。
	這個檔用註解填滿以表示何處該放置什麼設定。

      <p>在 2.2.1 以後及 3.0 ，<tt>/etc/sysconfig</tt> 更名為一個更容
        易描述的檔名叫 <htmlurl 
      url="http://www.FreeBSD.org/cgi/man.cgi?rc.conf(5)" name="rc.conf">
	，並且語法簡化了些。<tt>/etc/netstart</tt> 亦更名為 
        <tt>/etc/rc.network</tt> 因此所有的檔案都可以用 <tt><htmlurl 
      url="http://www.FreeBSD.org/cgi/man.cgi?cp" name="cp"> /usr/src/etc/rc*
      /etc</tt> 來拷貝。

      <p><tt>/etc/rc.local</tt> 出現並可以用來啟動額外的本地服務像是
      <htmlurl url="http://www.FreeBSD.org/cgi/ports.cgi?^inn" name="INN">
	或某些自訂選項。  

      <p><tt>/etc/rc.serial</tt> 用來初始化序列埠(像是鎖定埠的特性等）。

      <p><tt>/etc/rc.i386</tt> 是 Intel 專用設定，像是 iBCS2 模擬或是 PC
	系統主控台設定。

      <p>由 2.1.0R 開始，你也可以在 <tt>/etc/sysconfig</tt> (或
   	<tt>/etc/rc.conf</tt>) 裡指定一個目錄擁有"本地"起始檔：

      <verb>
        # Location of local startup files.
        local_startup=/usr/local/etc/rc.local.d
      </verb>

      <p>每個以 <tt/.sh/ 結尾的檔將以字母順序被執行。

      <p>假如你想確保某個執行順序又不想改所有的檔名，你可以使用一個簡單
	 的架構如下，利用事先安排到每個檔名前的數字來確保順序：

      <verb>
        10news.sh
        15httpd.sh
        20ssh.sh
      </verb>

      <p>這可能看起來有點醜(或類似 SysV :-)) 但是它提供一個簡單而規律的
	 架構讓本地加入的套件不須編輯 <tt>/etc/rc.local</tt> 就能重新排
	 序。許多的 ports/packages 假設 <tt>/usr/local/etc/rc.d</tt> 是
	 本地起始的目錄。

    <sect1>
      <heading>我該如何簡單地加入使用者﹖</heading>

      <p>使用 <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?adduser"
      name="adduser"> 指令。如果需要更複雜的使用方式，請用 <htmlurl
      url="http://www.FreeBSD.org/cgi/man.cgi?pw" name="pw"> 這個指令。

      <p>要再次移除使用者，使用 <htmlurl
      url="http://www.FreeBSD.org/cgi/man.cgi?rmuser" name="rmuser"> 指令。

    <sect1>
      <heading>我該怎麼把新硬碟加入 FreeBSD 系統中﹖</heading>

      <p>察看 <url url="../../tutorials/diskformat/" name="www.FreeBSD.org">
	的磁碟格式化指導文件。

    <sect1>
      <heading>我有一個新的可移除裝置，我該怎麼使用﹖</heading>

      <p>可移除裝置無論是 ZIP 或 EZ(或甚至是軟碟機，如果你要這樣使用
	 它)，或是一個新的硬碟，只要是安裝並由系統重組，而你有磁片匣
	 /軟碟片/或其他東西可以插入，那這些裝置都是類似功能的東西。

      <p><label id="disklabel">(本節主要由 <url 
    	url="http://www.vmunix.com/mark/FreeBSD/ZIP-FAQ.html"
      name="Mark Mayo's ZIP FAQ"> 引入)

      <p>假如是 ZIP 或軟碟機，你已經在上面有 DOS 檔案系統，可以使用
	 像這樣的命令：

      <verb>
        mount -t msdos /dev/fd0c /floppy
      </verb>

      <p>這是針對軟碟機，或是以下命令：

      <verb>
        mount -t msdos /dev/da2s4 /zip
      </verb>

      <p>使用 ZIP 的出廠預設值。

      <p>其他磁片，用 <tt/fdisk/ 或 <tt>/stand/sysinstall</tt> 察看
	 如何配置。

      <p>接下來這個範例是 ZIP 裝在 da2，在第三個 SCSI 磁碟。

      <p>除非是軟碟機，或一個你計畫跟其他人分享使用的可移除裝置，在
	 安裝 BSD 檔案系統可能是一個比較好的主意。你將擁有長檔名支援
	 ，至少兩倍以上的效率增進，還有更高的穩定度。首先，你需要重新
	製作 DOS 層的分割區/檔案系統。你可以使用 <htmlurl url=
	"http://www.FreeBSD.org/cgi/man.cgi?fdisk" name="fdisk"> 或
	 <tt>/stand/sysinstall</tt>，或對一個你不想支援多重作業系統的
	 小磁碟，只要把它劃分成整個 FAT 分割表(slices)並用以下 BSD 分
	 割法：

      <verb>
        dd if=/dev/zero of=/dev/rda2 count=2
        disklabel -Brw da2 auto
      </verb>

      <p>你可以使用 disklabel 或 <tt>/stand/sysinstall</tt> 去建立多重 
	 BSD 分割區。無疑的如果你正在硬碟機上增加置換空間(swap space)時
	 你就需要這麼做，但是在可移除裝置如 ZIP 上可能就是無意義的。

      <p>最後，建立一個新的檔案系統，也就是在 ZIP 裝置上是使用整個磁碟：

      <verb>
        newfs /dev/rda2c
      </verb>

      <p>並且把它 mount 起來：

      <verb>
        mount /dev/da2c /zip
      </verb>

      <p>在 <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?fstab" 
	 name="/etc/fstab"> 加入下面這一行可能是一個好主意，你以後就只
	 要打"mount /zip" :

      <verb>
        /dev/da2c /zip ffs rw,noauto 0 0
      </verb>

    <sect1>
      <heading>我該怎麼 mount 次要的 DOS 分割區﹖</heading>

      <p>次要 DOS 分割區是在所有主要分割區之後被找到，舉例，如果你有一個
	 "E" 分割區在第二個 SCSI 裝置的第二個 DOS 分割區，你需要在 /dev 下
	 建立 "slice 5" 的特殊檔案，然後 mount /dev/da1s5：

      <verb>
        # cd /dev
        # ./MAKEDEV sd1s5
        # mount -t msdos /dev/da1s5 /dos/e
      </verb>

    <sect1>
      <heading>我可以在 FreeBSD 下 mount 其他異質性檔案系統嗎﹖</heading>

      <p><bf/ Digital UNIX/ UFS 光碟機可以在 FreeBSD 上直接 mount。從
	Digital UNIX 和其他支援 UFS 格式的系統 mount 磁碟分割區可能更
	複雜，主要細節是依賴作業系統的磁碟分割法。

      <p><bf/ Linux/: 2.2 及以後的版本支援 <bf/ext2fs/ 分割區，請查閱
         <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?mount_ext2fs"
         name="mount_ext2fs"> 有更多資訊。

	<p><bf/ NT/: 已經有一個 FreeBSD 下可以使用的唯讀 NTFS 驅動程式
	存在，更多資訊你可以察看 Mark Ovens 在 <htmlurl
	url="http://www.users.globalnet.co.uk/~markov/ntfs_install.html"
	name="http://www.users.globalnet.co.uk/~markov/ntfs_install.html">
	的指導介紹。

      <p>如果您能提供任何這個主題的其他資訊，我們會很感激。

    <sect1>
      <heading>我該如何使用 NT loader 來啟動 FreeBSD﹖</heading>

      <p>最普遍的想法是把你原本 FreeBSD root 分割區的第一個磁區拷貝到
	 DOS/NT 分割區裡的一個檔案內。假設你命名它為：
	<tt>c:&bsol;bootsect.bsd</tt> (由 <tt>c:&bsol;bootsect.dos</tt>
	授意而來)，接著你可以編輯 <tt>c:&bsol;boot.ini</tt> 檔案內容如下：

      <verb>
        [boot loader]
        timeout=30

        default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
        [operating systems]
        multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows NT"
        C:\BOOTSECT.BSD="FreeBSD"
        C:\="DOS"
      </verb>

      <p>此程序假設 DOS，NT，FreeBSD，或其他作業系統已經被安裝在
	 <bf/同一個/ 磁碟的各自分割區。本例中我的 DOS &amp; NT 是在第一
	 個分割區而 FreeBSD 在第二個。我也把 FreeBSD 安裝成由 native 
	partition 啟動，<bf/而不是/ 從磁碟的 MBR。

      <p>Mount 一個 DOS 格式化的軟碟（假如你已經轉換到 NTFS）或 FAT 分
	割區到 <tt>/mnt</tt>：

      <verb>
        dd if=/dev/rda0a of=/mnt/bootsect.bsd bs=512 count=1
      </verb>

      <p>重新開機進入 DOS 或 NT。NTFS 使用者把 <tt/bootsect.bsd/ 以及/或
	 <tt/bootsect.lnx/ 從軟碟拷貝到 <tt/C:&bsol;/。修改 <tt/boot.ini/
	 的屬性(存取許可)：

      <verb>
        attrib -s -r c:\boot.ini
      </verb>

      <p>編輯並從上述 <tt/boot.ini/ 的範例加入相關適當的項目，再把屬性回復
	 ：

      <verb>
        attrib +r +s c:\boot.ini
      </verb>

      <p>如果 FreeBSD 是由 MBR 啟動，在你重新設定從哪個 native 分割區啟動後
	，用 DOS 的 ``<tt/fdisk/'' 命令回復它。

    <sect1>
      <heading>
	我該如何用 LILO 啟動 FreeBSD 和 Linux﹖        
      </heading>

      <p>如果你在同一個磁碟機裡有 FreeBSD 和 Linux，只要跟隨 LILO 的安
	 裝指令，從一個非 Linux 作業系統啟動。簡略說明如下：

      <p>啟動 Linux，並在 <tt>/etc/lilo.conf</tt> 中加入以下幾行：
      <verb>
      other=/dev/hda2
	      table=/dev/hda
	      label=FreeBSD
      </verb>
      （上面是假設你的 FreeBSD slice 在 Linux 是 <tt>/dev/hda2</tt>；請
	配合自己的設定）。然後，用 root 執行 <tt>lilo</tt>  應該就完成了。

      <p>假如 FreeBSD 在另外一個磁碟，你必須在 LILO 選項中加入
       ``<tt>loader=/boot/chain.b</tt>''，舉例：
      <verb>
      other=/dev/dab4
	      table=/dev/dab
	      loader=/boot/chain.b
	      label=FreeBSD
      </verb>

      <p>某些情形你必須指定 BIOS 磁碟代號給 FreeBSD boot loader 以期從第
	 二磁碟成功的啟動。舉例，假如 FreeBSD SCSI 磁碟在 BIOS 中偵測
	 是 BIOS disk 1，那在 FreeBSD boot loader 的提示號出現時你必須指
	 定：
      <verb>
      Boot: 1:da(0,a)/kernel
      </verb>

      <p>在 FreeBSD 2.2.5 和之後的版本，你可以設定 <htmlurl
      url="http://www.FreeBSD.org/cgi/man.cgi?boot(8)" name="boot(8)">
       這樣每次啟動時就會自動執行。      

      <p><htmlurl url="http://sunsite.unc.edu/LDP/HOWTO/mini/Linux+FreeBSD.html"
      name="Linux+FreeBSD mini-HOWTO"> 是 FreeBSD 和 Linux 共用操作的良好
	 參考文件。

    <sect1>
      <heading>
	我怎麼使用 BootEasy 來啟動 FreeBSD 和 Linux﹖	
      </heading>

      <p>在 Linux 啟動分割區安裝 LILO 取代主要啟動資料(Master Boot
	 Record)。接著你可以從 BootEasy 啟動 LILO。

      <p>假如你正在用 Windows-95 和 Linux，這有一個建議方法：要更簡單
	的從 Linux 再次啟動在於你是否應該重新安裝 Windows95（這是一個
	善妒的作業系統，它壓迫不讓其他作業系統存在於 Master Boot Record
	內）。

    <sect1>
      <heading>
	一個所謂``危險奉獻(dangerously dedicated)''的磁碟有害嗎﹖
      </heading>

      <p><label id="dedicate">安裝程序允許你選擇兩種不同的方法來分割你的
	 磁碟機。內定方法為了在同一台機器上和其他作業系統可以相容，於是
	 使用 fdisk table entries(FreeBSD 裡稱之為``slices'')，FreeBSD
	 的 slice 就是使用整個自己的分割區。可供選擇的是，你可以選擇安裝
	啟動選擇器(boot-selector) 在磁碟機數個可能的作業系統上來回切換。

	另外一個可選擇的用法是把整個磁碟撥給 FreeBSD 使用，並且不做其他
	作業系統的相容性考量。

      <p>因此為何叫它``危險的''﹖一個處於這種模式的磁碟機不包含能被正
	 常 PC 公用程式視為有效的 fdisk table。依循它們被設計的模式，只
	要它們在這樣一個磁碟機中一旦被觸及可能就會產生錯誤的提示，或更
	糟糕的，可能未經提示或通知你就把 FreeBSD bootstrap 弄壞。另外
	，``危險奉獻''的磁碟 layout 會誤導許多廠牌的 BIOSsen(BIOS 偵測)
	像是AWARD(比如說在 HP Netserver 和 Micronics 等以及其他許多系
	統)，和 Symbios/NCR(如在 SCSI controllers 中很流行的 53C8xx
	系列)。這並非一個完整的列表，還有更多未列出。這種誤導的徵兆包
	括由 FreeBSD bootstrap 啟動，當硬碟無法被找到時而印出 "read 
	error" 的訊息，以致於整個系統在啟動中整個停滯。

	<p>那為何又要有這種模式呢？它只節省磁碟空間中數 kbyte 的大小，
	而對一個新的安裝過程中卻可能產生實際的困難。`危險奉獻'模式原本
	的想法是基於避免一個全新 FreeBSD installer 中最常見的問題 - 為
	了要在磁碟機上配合 BIOS 的 ``geometry'' 數目。

	<p>``Geometry''是一個有點落伍的概念，但是卻仍在 PC 的 BIOS 中
	使用並且與磁碟機交互運作著，當 FreeBSD installer 建立 slice 時
	，它必須記錄這些 slices 在磁碟機上的位置，這方法必須和 BIOS 希
	望能找到它們的位置一致。假如錯了，你將不可能啟動系統。

	<p>``Dangerously dedicated''模式(後面會簡稱為 DD mode)試著要讓
	這個問題簡單一點，某些情形下它做對了。但這只能當成最後的下下之
	策 - 還有更好的方法可以解決這問題的絕大部份。(譯者：這部份用了
	許多的口語用詞，原文照錄以供對照。)

      <p>``Dangerously dedicated'' mode tries to work around this
      by making the problem simpler.  In some cases, it gets it right.
      But it's meant to be used as a last-ditch alternative - there
      are better ways to solve the problem 99 times out of 100.

	<p>因此，當你在安裝時怎麼避免要使用``DD''模式？在開始時記下 
	BIOS 要求使用磁碟機的 geometry，你可以在啟動的 ``boot:''提示
	號出現時，以``-v''指定核心印出這個訊息，或是在 loader 裡面
	使用``boot -v''。在 installer 開始動作前，核心會印出一串 BIOS
	geometries。別緊張 - 等 installer 開始啟動後使用 scrollback
	方式去讀這些數字，按照慣例地 BIOS 磁碟機的單元會跟 FreeBSD 列
	舉出來的一樣，IDE 先，然後才是 SCSI。

	<p>當你在分割你的磁碟時，檢查在 FDISK 螢幕上出現的磁碟 geometry
	是正確的(也就是說要跟 BIOS 的數字相符合)；如果錯了，用``g''按鍵
	修改。當你在螢幕上看不到任何磁碟機，或假使磁碟機已經由另一個系
	統中移除時，特別應該這麼做。值得注意的是這只是指定你要由哪個磁碟
	上啟動；FreeBSD 將會自行找出在你系統上的其他磁碟機。

	<p>一旦你取得 BIOS 跟 FreeBSD 兩者對磁碟機 geometry 的共識，你
	的困難幾乎已經迎刃而解，而且再也不需要使用``DD''mode。然而，假
	如你仍擔心當你嘗試啟動時會看到``read error''訊息，這時候你能做
	的就是禱告然後試看看 - 反正也沒什麼好失去的。

      <p>要把``危險奉獻''的磁碟回復到正常 PC 使用，基本上有兩個選擇。
	 第一，是你把足夠的 NULL 位元組寫入 MBR 確保任何隨後的安裝程
	式相信這只是一個空白的磁碟。舉例來說你可以這樣做：

      <verb>
        dd if=/dev/zero of=/dev/rda0 count=15
      </verb>

      <p>或是採用另外一個，非正式的 DOS ``特色''：

      <verb>
        fdisk /mbr
      </verb>

      <p>這將會安裝一個全新的主要啟動記錄，因此會破壞 BSD bootstrap。

    <sect1>
      <heading>我如何能加入更多的置換空間(swap space)﹖</heading>

      <p>最好的方法是增加你 swap 分割區的大小，或利用這個方便理由的好處去
	 增加另一個硬碟。慣例算法是用主記憶體的兩倍當置換空間(swap space)
	，然而如果你只有很少量的主記憶體，你可能想另外設定 swap。設定足夠
	的置換空間，並為以後記憶體擴充預作準備可能是個好主意，這樣以後就
	不需要再做一次置換空間的設定。

      <p>在分散的磁碟上增加置換空間會比單純地在同一個磁碟加入置換空間
	 讓效率來的快一點。舉一個例子來說，如果你正在一個磁碟裡編譯來
	 源程式，而置換空間在另一個磁碟，這會比置換空間跟編譯程式都在
	 同一個磁碟時來得快。這對 SCSI 磁碟機特別正確。

	<p>當你有好幾個磁碟機時，在每個磁碟上設定一個 swap 分割區是有
	利的，甚至最後使用一整個磁碟機當置換空間。一般來說，每個系統
	上的快速磁碟都應設定某些 swap，FreeBSD 內定支援最多四個交錯式
	swap 裝置。通常設定多重 swap 分割區時你會想讓它們都使用同樣大
	小，但有時我們會想讓主要 swap 分割區(primary swap partition)
	更大一點以容納核心程式的 core dump。你的 primary swap 
	partition 至少必須和主記憶體一樣大，以能容納一個 kernel core。

      <p>IDE 磁碟並不允許同時在同一通道裡存取兩個裝置（FreeBSD 不支援
	 mode 4，因此所有的 IDE 磁碟 I/O 是``可程式化的''）。然而我仍
	 會建議你把置換空間放在分別的磁碟。磁碟機這麼便宜，實在沒什麼
	 好擔心的。

	<p>在 NFS 上做置換僅在以下情形被建議使用：你沒有自己的磁碟可
	以使用。FreeBSD 4.0 以前 release 的版本在 NFS 上做置換是相當
	緩慢而無效率的，但在等於 4.0 或之後的 release 版本就有合理的
	速度了。即使如此，還是受到網路有效頻寬和在 NFS server 上額外
	裝載的限制。

      <p>這裡有個範例是用 64MB vn-swap (<tt>/usr/swap0</tt>，當然你能用
	 任何你想用的名字）。

      <p>確定你的核心程式建立時有包含以下這行：

      <verb>
        pseudo-device   vn 1   #Vnode driver (turns a file into a device)
      </verb>

      <p>在你的設定檔中。GENERIC 這個核心已經包含這項了。

      <enum>
        <item>建立一個 vn-device

        <verb>
          cd /dev
          sh ./MAKEDEV vn0
        </verb>

        <item>建立一個置換檔 (<tt>/usr/swap0</tt>)

        <verb>
          dd if=/dev/zero of=/usr/swap0 bs=1024k count=64
        </verb>

        <item>設定適當的存取權於(<tt>/usr/swap0</tt>)

        <verb>
          chmod 0600 /usr/swap0
        </verb>

        <item>在 <tt>/etc/rc.conf</tt> 中啟動置換檔

        <verb>
          swapfile="/usr/swap0"   # Set to name of swapfile if aux swapfile desired.
        </verb>

        <item>重新開機。
      </enum>

      <p>要馬上啟動置換檔，鍵入：

      <verb>
        vnconfig -ce /dev/vn0c /usr/swap0 swap
      </verb>

    <sect1>
      <heading>我不會設定我的印表機。</heading>

      <p>請參閱 Handbook 裡有關列印的部份。這應該能解決你大部分的問題，請看
      <url url="../../handbook/printing.html" name="Handbook entry on printing.">

    <sect1>
      <heading>我系統上的鍵盤配置錯了。</heading>

      <p>kbdcontrol 程式有一個選項可以讀取鍵盤配置檔案。在
	 <tt>/usr/share/syscons/keymaps</tt> 有一些配置檔。選擇一個跟你的
	 相關的並讀取它。

      <verb>
        kbdcontrol -l uk.iso
      </verb>

      <p> <tt>/usr/share/syscons/keymaps</tt> 和 <tt/.kbd/ 延展集兩個都由
      <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?kbdcontrol"
      name="kbdcontrol"> 所斷定。

      <p>可以從 <tt>/etc/sysconfig</tt> (或 <htmlurl
      url="http://www.FreeBSD.org/cgi/man.cgi?rc.conf(5)" name="rc.conf">)
      來設定，請看此檔裡相關的註解。

      <p>在 2.0.5R 及其之後的版本，所有跟文字字型，鍵盤對應相關的設定都在
         <tt>/usr/share/examples/syscons</tt>。

      <p>以下是目前支援的對應設定：

      <itemize>
        <!-- generate by `kbdmap -p' -->
        <item>Belgian ISO-8859-1 
        <item>Brazilian 275 keyboard Codepage 850 
        <item>Brazilian 275 keyboard ISO-8859-1 
        <item>Danish Codepage 865 
        <item>Danish ISO-8859-1 
        <item>French ISO-8859-1 
        <item>German Codepage 850 
        <item>German ISO-8859-1 
        <item>Italian ISO-8859-1 
        <item>Japanese 106 
        <item>Japanese 106x 
        <item>Latin American 
        <item>Norwegian ISO-8859-1 
        <item>Polish ISO-8859-2 (programmer's) 
        <item>Russian Codepage 866 (alternative) 
        <item>Russian koi8-r (shift) 
        <item>Russian koi8-r 
        <item>Spanish ISO-8859-1 
        <item>Swedish Codepage 850 
        <item>Swedish ISO-8859-1 
        <item>Swiss-German ISO-8859-1 
        <item>United Kingdom Codepage 850 
        <item>United Kingdom ISO-8859-1 
        <item>United States of America ISO-8859-1 
        <item>United States of America dvorak 
        <item>United States of America dvorakx 
      </itemize>

    <sect1>
      <heading>我無法讓 user quotas 正常工作。</heading>

      <p>
      <enum>
        <item>不要在 '/' 打開 quotas，

        <item>把 quotas 檔放在它必須強迫置入的檔案系統內，舉例：

        <verb>
          FS      QUOTA FILE
          /usr    /usr/admin/quotas
          /home   /home/admin/quotas
          ...
        </verb>
      </enum>

    <sect1>
      <heading>我的 ccd 有何不妥﹖</heading>

      <p>這種情形的徵兆是：

      <verb>
        # ccdconfig -C
        ccdconfig: ioctl (CCDIOCSET): /dev/ccd0c: Inappropriate file type or format
        #
      </verb>

      <p>通常這會發生在你嘗試要連結 `c' 分割區，這內定的型別是`無法使用的'
	 。ccd 驅動程式需要的基礎分割區型別為 FS_BSDFFS，編輯你要試著連結的磁碟
         標記並更改分割區的型別為`4.2BSD'。

    <sect1>
      <heading>為何我不能編輯我 ccd 的磁碟標記﹖</heading>

      <p>這種情形的徵兆是：

      <verb>
        # disklabel ccd0
        (這裡印出某些明顯的資料，所以試著編輯它）
        # disklabel -e ccd0
        (編輯，儲存，然後離開)
        disklabel: ioctl DIOCWDINFO: No disk label on disk;
        use "disklabel -r" to install initial label
        #
      </verb>

      <p>這是因為由 ccd 傳回的磁碟標記事實上是一個`假的'而沒有真正在磁碟
 	 上。你可以把它完全寫入來解決這個問題，像這樣：

      <verb>
        # disklabel ccd0 > /tmp/disklabel.tmp
        # disklabel -Rr ccd0 /tmp/disklabel.tmp
        # disklabel -e ccd0
        (this will work now)
      </verb>

    <sect1>
      <heading>FreeBSD 支援 System V IPC 格式指令集？</heading>

      <p>是的，FreeBSD 支援 System V-style IPC。這包括共享記憶體，訊息跟
	 信號。你需要在你的核心設定檔內加入下列幾行以啟動它們。

      <verb>
        options    SYSVSHM
        options    "SHMMAXPGS=64"   # 256Kb of sharable memory
        options    SYSVSEM          # enable for semaphores
        options    SYSVMSG          # enable for messaging
      </verb>

      <p>重新編譯並安裝。

      <p><bf/注意：/ 如果你要執行 GIMP 你可能需要增加 SHMMAXPKGS 到某些荒
	 謬的數目像是 4096(16M!)，256Kb 對 X11R6 共享記憶體來說已經充分足
	 夠了。

    <sect1>
      <heading>
        我該如何使用 sendmail 透過 UUCP 來遞送郵件？<label id="uucpmail">
      </heading>

      <p>跟隨 FreeBSD 套裝而來的 sendmail 設定是適合那些直接連上網際網路
	 的站台。想透過 UUCP 交換郵件的站台必須另外安裝 sendmil 的設定檔
	案。


      <p>手動修改 <tt>/etc/sendmail.cf</tt> 是絕對必要的。第 8 版的 
	sendmail 提供一個全新的入口以透過一些像 <htmlurl
	url="http://www.FreeBSD.org/cgi/man.cgi?m4" name="m4"> 的處理就能
	產生設定檔，這事實上是一個高層概念等級的技巧性設定。你應該可以在以
	下檔案裡使用它：

      <verb>
        /usr/src/usr.sbin/sendmail/cf
      </verb>

      <p>假如你不是用 full sources 方式安裝系統，那麼 sendmail 設定項目可
	能已經分散成好幾個來源分布檔在等著你，假設你已經 mount 光碟機，做
	以下動作：

      <verb>
        cd /usr/src
        tar -xvzf /cdrom/dists/src/ssmailcf.aa
      </verb>

      <p>別驚慌，這只有數十萬個位元組的大小。在 <tt>cf</tt> 目錄裡的
	<tt>README</tt> 可以提供一個 m4 設定法的基本介紹。

      <p>以 UUCP 遞送來說，建議你最好使用 <em>mailertable</em> 特點。
	建構一個資料庫讓 sendmail 可以使用它自己的路徑決策。

      <p>首先，你必須建立自己的 <tt>.mc</tt> 檔。
	<tt>/usr/src/usr.sbin/sendmail/cf/cf</tt> 目錄是這些檔案的家。
	查看一下，已經有好幾個範例檔，假設你已經命名自己的檔叫 
	<tt>foo.mc</tt>，你要做的只是把它轉換成一個有效的
	<tt>sendmail.cf</tt> ：

      <verb>
        cd /usr/src/usr.sbin/sendmail/cf/cf
        make foo.cf
        cp foo.cf /etc/sendmail.cf
      </verb>

      <p>一個典型的 <tt>.mc</tt> 檔看起來可能像這樣：

      <verb>
        include(`../m4/cf.m4')
        VERSIONID(`Your version number')
        OSTYPE(bsd4.4)

        FEATURE(nodns)
        FEATURE(nocanonify)
        FEATURE(mailertable)

        define(`UUCP_RELAY', your.uucp.relay)
        define(`UUCP_MAX_SIZE', 200000)

        MAILER(local)
        MAILER(smtp)
        MAILER(uucp)

        Cw    your.alias.host.name
        Cw    youruucpnodename.UUCP
      </verb>

      <p> <em>nodns</em> 和 <em>nocanonify</em> 特性將避免任何在遞送郵件
	時會用到 DNS 的機會。<em>UUCP_RELAY</em> 項目的出現理由很奇怪，
	就不要問為何了。簡單的放入一個網際網路上可以處理 .UUCP 虛擬網域
	位址的主機名稱；通常，你只需要在這裡填入你 ISP 的信件回覆處
        (mail replay)。

      <p>你已經做到這裡了，你還需要這個叫 <tt>/etc/mailertable</tt> 的
	檔案。一個典型的範例如下：

      <verb>
        #
        # makemap hash /etc/mailertable.db < /etc/mailertable
        #
        horus.interface-business.de   uucp-dom:horus
        .interface-business.de        uucp-dom:if-bus
        interface-business.de         uucp-dom:if-bus
        .heep.sax.de                  smtp8:%1
        horus.UUCP                    uucp-dom:horus
        if-bus.UUCP                   uucp-dom:if-bus
        .                             uucp-dom:sax
      </verb>

      <p>如你所見，這是某個真實檔案裡的一部份。首三行處理網域定址信件
	不應該被送出到內定路徑，而由某些 UUCP 鄰居(UUCP neighbor)取代
	的特殊情形，這是為了``縮短''遞送的路徑。下一行處理到本地乙太
	網路網域的信件讓它可以使用 SMTP 來遞送。最後，UUCP 鄰居提到 
	.UUCP 虛擬網域的記載，允許一個``uucp-neighbor!recipient''推翻內定規則。最後一行則以一
        個單獨的句點做結束，以 UUCP 遞送到提供當你全世界性郵件閘門的
        UUCP 鄰居。所有在 <tt>uucp-dom:</tt> 關鍵字裡的節點名稱必須都是
        有效的 UUCP 鄰居，你可以用 <tt>uuname</tt> 命令去確認。

      <p>提醒你這個檔案在使用前必須被轉換成 DBM 資料庫檔案，最好在
	mailertable 最上面用註解寫出命令列來完成這個工作。當你每次更換你
        的 mailertable 後你總是需要執行這個命令。

      <p>最後提示：如果你不確定某些特定的信件路徑可用，記得把 <tt>-bt</tt>
        選項加到 sendmail。這會將 sendmail 啟動在 <em>address test mode</em>
        ；只要按下 ``0''，接著輸入你希望測試的信件路徑位址。最後一行告訴你使
        用內部的信件代理程式，代理程式的會通知目的主機，以及(可能轉換的)位址
        。要離開此模式請按 Control-D。

      <verb>
        j@uriah 191% sendmail -bt
        ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
        Enter <ruleset> <address>
        > 0 foo@interface-business.de
        rewrite: ruleset  0   input: foo @ interface-business . de
        ...
        rewrite: ruleset  0 returns: $# uucp-dom $@ if-bus $: foo \
        < @ interface-business . de >
        > ^D
        j@uriah 192%
      </verb>

    <sect1>
      <heading>
	當我用撥接連上網路時該怎麼設定信件遞送？<label id="ispmail">
      </heading>

      <p>如果你已經有一個固定的 IP 數字，你不需要調整任何內定值。設好
	你要指定的網路名稱，其他的 sendmail 都會幫你做完。

      <p>如果你拿到的是動態配置的 IP 數字而使用撥接 <bf/ppp/ 連接到網
        際網路，你可能已經在你的 ISP 信件主機上有一個信箱。假設你的
        ISP 網域是 <tt/myISP.com/，你的使用者名稱是 <tt/user/。亦假
        設你稱自己的主機名稱是 <tt/bsd.home/ 而你的 ISP 告訴你可以使用
	<tt/relay.myISP.com/  當作信件回覆處。

      <p>為了從你的信箱接收信件，你將需要安裝取信程式以便從信箱取回信件。
	<bf/Fetchmail/ 是一個不錯的選擇因為它支援許多不同的通訊協定，通常
	你的 ISP 會提供 POP3。如果你選擇使用 user-ppp，你可以在連線到網路
	成功後自動抓取你的信件，只要在 <tt>/etc/ppp/ppp.linkup</tt> 裡面
	設定以下這項：

      <verb>
        MYADDR:
          !bg su user -c fetchmail
      </verb>

	<p>假使你正使用 <tt>sendmail</tt>(如下所示)傳送信件到非本地帳號
	，置入以下命令：

      <verb>
         !bg su user -c "sendmail -q"
      </verb>

	在上面那項命令之後。這會強迫 sendmail 在連接上網路後馬上開始處
	理 mailqueue。

      <p>我假設你在 <tt/bsd.home/ 機器上有一個  <tt/user/ 的帳號。在
	 <tt/bsd.home/ 機器上 <tt/user/ 的家目錄裡建立一個 <tt/.fetchmailrc/ 
	的檔案：

      <verb>
        poll myISP.com protocol pop3 fetchall pass MySecret;
      </verb>

      <p>無須贅言，這個檔除了 <tt/user/ 外不應該被任何人讀取，因為它包含
	了 <tt/MySecret/ 這個密碼。

      <p>為了在寄信時有正確的抬頭 <bf/from:/ ，你必須告訴 sendmail 使用
	<tt/user@myISP.com/ 而非 <tt/user@bsd.home/。你可能會希望告訴
	sendmail 從 <tt/relay.myISP.com/ 送出所有信件，加快信件傳送。

      <p>以下的 <tt/.mc/ 檔應能滿足你的要求：

      <verb>
        VERSIONID(`bsd.home.mc version 1.0')
        OSTYPE(bsd4.4)dnl
        FEATURE(nouucp)dnl
        MAILER(local)dnl
        MAILER(smtp)dnl
        Cwlocalhost
        Cwbsd.home
        MASQUERADE_AS(`myISP.com')dnl
        FEATURE(allmasquerade)dnl
        FEATURE(masquerade_envelope)dnl
        FEATURE(nocanonify)dnl
        FEATURE(nodns)dnl
        define(SMART_HOST, `relay.myISP.com')
        Dmbsd.home
        define(`confDOMAIN_NAME',`bsd.home')dnl
        define(`confDELIVERY_MODE',`deferred')dnl
      </verb>

      <p>如何轉換這個 <tt/.mc/ 檔案到 <tt/sendmail.cf/ 檔的詳細細節請
        參考上一節。另外，在更新 sendmail.cf 以後不要忘記重新啟動
        sendmail。

   <sect1>
    <heading>咦！我忘記 root 的密碼了！</heading>

    <p>不要驚慌！只要重新啟動系統，在 boot: 提示號打 -s 進入單使用者模式。
	在問要使用哪個 shell 時，按下 ENTER。你會看到一個 # 的提示號，輸入
	<tt>mount -u /</tt> 以重新架設你的根檔案系統可供讀/寫。執行
	<tt/passwd root/ 以更換 root 密碼，然後執行 <tt/exit/ 繼續啟動。

  <sect1>
   <heading>我該怎麼保留讓 Control-Alt-Delete 不能重新啟動系統？
   </heading>

    <p>修改你正在使用的主控台鍵盤對應，並且把所有 <tt/boot/ 的關鍵字用
	<tt/nop/ 取代。內定的鍵盤對應是在
	<tt>/usr/share/syscons/keymaps/us.iso.kbd</tt>。你可能需要明白的
	吩咐 <tt>/etc/rc.conf</tt> 去讀取這個鍵盤對應以確保更動生效。當
	然如果你正在用適合你國籍的鍵盤對應，你應該編輯那一個。

  <sect1>
    <heading>我該怎麼把 DOS 文字檔案重新格式化成 UNIX 的？</heading>

     <p>簡單地使用這個 perl 命令：

<verb>
perl -i.bak -npe 's/\r\n/\n/g' file ...
</verb>

     <p>file 就是要處理的檔案。這個修改是在內部完成，原始的檔案會儲存成
	副檔名為 .bak 的檔案。

     <p>或者你可以使用 <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?tr"
     name="tr"> 這個命令：

<verb>
tr -d '\r' &lt; dos-text-file &gt; unix-file
</verb>

     <p>dos-text-file 是包含 DOS 文字的檔案，而 unix-text-file 則是包含
	轉換的輸出結果。這比使用 perl 還要快上一點點。

   <sect1>
     <heading>我該怎麼用名稱砍掉 process？</heading>

     <p>使用 <htmlurl url="http://www.FreeBSD.org/cgi/man.cgi?killall"
     name="killall">。

   <sect1>
     <heading>為何在 root 的 ACL 時 su 好像有問題？
     </heading>

     <p>這個錯誤是因為 Kerberos 分散認證系統。這個問題並不是很嚴重但是令人
	厭煩。你可以用 -K 選項去執行 su，或是像下個問題所描述的移除 
	Kerberos。
   
   <sect1>
     <heading>我該怎麼移除 Kerberos？</heading>

     <p>要從系統裡移除 Kerberos，重裝你正在執行的 release 版本的 bin 
	distribution。如果你有 CDROM，你可以 mount cd(假設在 /cdrom)並執
	行：
    
<verb>
cd /cdrom/bin
./install.sh
</verb>

   <sect1>
     <heading>我該怎麼增加系統的虛擬終端機？</heading>

     <p>如果你有許多 telnet，ssh，X 或是 screen 使用者，你或許會用完虛擬
        終端機，這能教你怎麼加更多：

     <enum>
     <item>建立並安裝一個新的核心程式並且加入這行到設定檔：

     <verb>
       pseudo-device pty 256
     </verb>
	
     <item>執行這個命令：

     <verb>
     # cd /dev
     # ./MAKEDEV pty{1,2,3,4,5,6,7}
     </verb>

     <p>會造出 256 個虛擬終端機的裝置節點。

     <item>編輯 <tt>/etc/ttys</tt> 並加入符合 256 個終端機的行數。它們應
        該符合已經存在單項的格式，舉例來說，它們看起來像：

     <verb>
       ttyqc none network
     </verb>

    <p>字母設計的順序是 <tt>tty[pqrsPQRS][0-9a-v]</tt>，使用正規表示式。

    <item>用新的核心程式重新啟動電腦就可以了。
    </enum>

   <sect1>
     <heading>/dev/snd0 這個裝置做不出來！</heading>

     <p>可以用這個命令產生音效卡所需要的 snd0 裝置：
<verb>
     # cd /dev
     # sh MAKEDEV snd0
</verb>

     <p>這個命令並不會做出 <tt>/dev/snd0</tt>，而是產生 <tt>mixer0</tt>、
     <tt>audio0</tt>、<tt>dsp0</tt> 及類似的裝置。雖然如此，如果您想使用
     音效，仍然要執行這個命令。

   <sect1>
     <heading>可以不用開機，重新讀取 /etc/rc.conf、再次啟動 /etc/rc 嗎？
     </heading>

     <p>先進入單人使用者模式，然後再回到多使用者模式。

     在主控台執行：
<verb>
     # shutdown now
     (Note: without -r or -h)

     # return
     # exit
</verb>

   <sect1>
     <heading>什麼是 sandbox？</heading>

     <p>&quot;Sandbox&quot; 是系統安全用的術語，有兩個意義：

     <itemize>
      <item>
        <p>放在某些虛擬防護牆裡的執行程序，這些防護牆是用來阻止某些人侵入
        這道程序，進而出入於更大的系統中。

        <p>這道程序可以完全在防護牆裡動作。也就是說，它所執行的任何程式不
        可能會滲透到牆的外面。所以如果您對它有安全上的顧慮，並不需要特別去
        監聽它的一舉一動，反正它只能在牆內活動。

        <p>舉例來說，可以用 userid 來做這道防護牆，這正是 security(7) 和
        named(8) 說明文件中的定義。

        <p>現在就用 'ntalk' 這個服務作說明（見 /etc/inetd.conf）。這個服務
        以前的 userid 是 root，現在執行時則是用 tty。tty 這個 userid 就是一
        個 sandbox，如果有人能夠順利用 ntalk 侵入系統，現在他就算進得來也只
        能用 tty 這個 userid。
      </item>
 
      <item>
        <p>放在某個模擬機器裡的程式，這比上述來得更嚴密。基本上這表示能侵入
        該程式的人相信他能再進入所屬的機器，但事實上只會進入模擬出來的機器，
        無法進一步修改任何資料。

        <p>達到這個目的最常用的方法，就是在某個子目錄下做出模擬的環境，然後
        用 chroot 執行該程式，這樣該程式的根目錄便是這個子目錄，而非系統真
        正的根目錄。

        <p>另一個常見作法是將某個檔案系統 mount 成唯讀，但在它上面另外製造
        出程式以為可以寫入的檔案系統。這個程式會相信它可以對其他檔案讀寫，
        但只有它看不到這個唯讀效應 &dash; 系統執行的一般程式都看得到。

        <p>我們試圖將這類 sandbox 盡量透明化，讓使用者或侵入者無法看到他是
        否在某個 sandbox 裡面。
      </item>
     </itemize>

     <p>UNIX 實作兩種 sandbox，一個在程式層面，另一個則是由 userid 來達成。

     <p>每個 UNIX 執行程序會用防火牆將它和所有其他程序隔開，某個程序不可以
     隨意修改其他程序位址的資料。這和 Windows 中，程式可以輕易修改其他位址
     資料的情況，大不相同。

     <p>每個 UNIX 程序都屬於某個特定的 userid。如果該 userid 不是 root，就
     會將它和其他使用者的程序隔開。Userid 同時也用於硬碟資料的存取權上。

  </sect> 


