[转载]FreeBSD文档

[转载]FreeBSD文档,这份文档虽然不是针对最新按本的FreeBSD,但是很有参考价值。主要内容有:FreeBSD下相关工具安装、网络配置 、系统管理和维护 、系统备份恢复及迁移、FreeBSD常见问题集合......

FreeBSD文档

作者: Jerry 最后更新时间: 2004年5月18日

本文可以随意转载, 无需通知作者, 但请注明:"本文最新文档可以从http://zhdotemacs.sourceforge.net上获得, E-mail: unidevel@hotpop.com".

[ Split HTML / Single HTML ]

Table of Contents 1 最近更新
1.1 2004年05月18日 1.2 2004年04月29日 1.3 2004年03月12日
2 FreeBSD下相关工具安装
2.1 FDP相关工具安装
2.1.1 FreeBSD下FDP工具的安装 2.1.2 Windows下FDP工具的安装
2.2 mtools 2.3 FreeBSD下QQ的安装方法 2.4 shlight -- 访问windows共享文件夹
3 FreeBSD下网络配置
3.1 安装配置DHCP
3.1.1 DHCP的安装 3.1.2 DHCP的配置
3.2 VPN的安装配置
3.2.1 mpd的安装 3.2.2 mpd的配置
3.3 NAT的安装配置
3.3.1 NAT的安装 3.3.2 NAT的配置
3.4 使用SOCKS代理上网
3.4.1 SOCKS的安装 3.4.2 SOCKS5的配置
4 FreeBSD系统管理和维护
4.1 FreeBSD系统备份恢复及迁移
4.1.1 系统迁移
4.2 FreeBSD下的系统监控工具
4.2.1 使用SNP Watch监控用户 4.2.2 使用smartmontools监视硬盘状态
5 IBM Thinkpad R40e 上安装配置FreeBSD 4-stable
5.1 基本安装 5.2 X-Window的配置
6 FreeBSD常见问题集合
6.1 FreeBSD常用命令及脚本 6.2 FreeBSD安装配置常见问题

Chapter 1 最近更新

Jerry

1.1 2004年05月18日

  1. 新增 Section 4.1.1FreeBSD系统迁移.

  2. 新增 Section 4.2.1使用SNP Watch监控用户.

  3. 新增 Section 4.2.2使用smartmontools监视硬盘状态.


1.2 2004年04月29日

  1. 新增 Chapter 5IBM Thinkpad R40e 上安装配置FreeBSD 4-stable.


1.3 2004年03月12日

  1. 新增 Section 3.4使用SOCKS代理上网.


Chapter 2 FreeBSD下相关工具安装

Jerry

本章简介FreeBSD下常见工具的安装


2.1 FDP相关工具安装

FreeBSD Document Project简称FDP, 是FreeBSD的文档标准, 同 LDP(Linux Document Project)一样, 都是使用sgml格式, 由相关工具生成 各种格式的文档


2.1.1 FreeBSD下FDP工具的安装

FreeBSD的ports为我们简化了整个安装的过程, 不过还是简单的说一 下吧, 首先安装textproc/ghostscript-gnu, 然后安装graphic/peps, 最 后到textproc/docproj下make -DJADETEX=no install进行安装, 基本上 应该可以一次搞定. 还是ports好


2.1.2 Windows下FDP工具的安装

也许用惯FreeBSD的会问为什么要用Windows, 它可以吗? 我一次出差 本来以为拿了硬盘, 找台机器用就可以了(没本本就是不爽), 结果别人给 了个本本, 因为不是自己的, 所以不能够装上我钟爱的FreeBSD, 只能用 瘟到死, 感觉实在不爽, 被迫想了些办法, 使得我使用FDP制作的文档在 Windows下可以使用了

我看了docproj安装的软件, 有一大把, 偷了下懒, 从FreeBSD系统下将 /usr/local/share/sgml和/usr/local/share/xml下的东西打包先拷贝出 来, 首先要安装的当然是cygwin, 除了FreeBSD我就喜欢它了, 把windows 变得和unix环境差不多, 安装时要装links, tidy和ghostscript, 然后把 从FreeBSD下抓来的那两个目录拷贝到cygwin对应的目录下, 比较难找的 是cygwin下的openjade和pmake, 这个可以从下载区内下到, 已经编译成 Windows的可执行程序, 忘记了还要从FreeBSD下把/usr/share/mk打包拷 贝出来, 这个东东也比较重要, 这就差不多了, 把文档源代码从FreeBSD 下拷贝出来, 使用pmake就可以编译了, 不知道能不能把ports搞过来, ports实在是太完美了.

windows的FDP可以通过 ftp://hhd.kingisme.com/incoming/FDP4cygwin 下载, 具体安装见README


2.2 mtools

mtools用于操作dos分区, 配置文件是${INSTDIR}/etc/mtools.conf, 在这个文件中设置各个盘符的信息, 例如设置a:和c:如下

 drive a: file="/backup/pal/a.img" drive c: file="/backup/pal/pal.img" partition=1     

新建分区, 例如分112M的分区, 注意这里要配置c:为112.disk的全路径

 # truncate -S 112M 112.disk # mpartition -I -s 900 -t 17 -h 15 c: # mpartition -cpv -s 900 -t 17 -h 15 c: # mformat c:     

2.3 FreeBSD下QQ的安装方法

  1. 首先, 下载gaim-0.58-1.i386.rpm

  2. 然后, 下载libqq-0.0.3-ft-0.58-gcc296.so.gz或者libqq-0.0.3-ft-0.58-gcc31.so.gz

  3. 下载gdk-pixbuf-0.14.0-0.7.2.i386.rpm

  4. kldstat检查一下是否调入了linux.ko, 我的环境是linux_base-8-8.0_1, linux-gtk-1.2_2, linux-gnomelibs-1.2.8_2, linux-esound-0.2.22_1.

  5.  $ rpm2cpio gaim-0.58-1.i386.rpm > gaim.cpio $ rpm2cpio gdk-pixbuf-0.14.0-0.7.2.i386.rpm > gdk-pixbuf.cpio $ cpio -i -d < gaim.cpio $ cpio -i -d < gdk-pixbuf.cpio $ gunzip libqq*.gz # cp -r ./usr /usr/compat/linux/ # cp libqq*.so /usr/compat/linux/lib/gaim 
  6. 最后, 启动/usr/compat/linux/usr/bin/gaim, 然后调入libqq.so就可以了


2.4 shlight -- 访问windows共享文件夹

shlight对中文支持也很好, 我在FreeBSD 5.2上测试过

 # cd /usr/ports/net/sharity-light/ # make all install clean # mkdir /music # echo "10.0.0.1 winhost" >> /etc/hosts # shlight //winhost/music /music -U user -P password # unshlight /music     

Chapter 3 FreeBSD下网络配置

Jerry

本章介绍我的FreeBSD网络配置


3.1 安装配置DHCP

3.1.1 DHCP的安装

在FreeBSD上安装DHCP, 首先需要确定内核配置中有 `pseudo-device bpf'选项, 然后可以从ports下的 net/isc-dhcp3安装dhcp, 安装没什么好讲的, 直接安装就是了


3.1.2 DHCP的配置

我配置了一个简单的, 主要有下面的几个文件

/usr/local/etc/dhcpd.conf

 option domain-name "unidevel.com"; option domain-name-servers 88.1.16.4;  default-lease-time 600; max-lease-time 7200;  authoritative;  ddns-update-style none;  subnet 88.1.16.0 netmask 255.255.255.0 {   range 88.1.16.150 88.1.16.200;   option routers 88.1.16.4; }     

然后, 拷贝一个启动脚本

 # cp /usr/local/etc/rc.d/isc-dhcpd.sh.sample /usr/local/etc/rc.d/isc-dhcpd.sh # chmod a+x /usr/local/etc/rc.d/isc-dhcpd.sh # /usr/local/etc/rc.d/isc-dhcpd.sh start     

上面对88.1.16网段使用DHCP, 配置为主DHCP服务器, DHCP的网段为88.1.16.150 - 88.1.16.200, 缺省的路由器是88.1.16.4, 缺省的DNS为88.1.16.4


3.2 VPN的安装配置

目标: 达到使用Windows 2000/XP进行VPN拨号连接, 软件选用mpd


3.2.1 mpd的安装

通过ports安装mpd

 # cd /usr/ports/net/mpd # make all install clean     

3.2.2 mpd的配置

VPN配置文件有mpd.conf, mpd.links, mpd.secret

/usr/local/etc/mpd/mpd.conf配置如下:

 default:     load vpn vpn:     new -i ng1 vpn vpn     set iface disable on-demand     set iface addrs 192.168.0.1     set iface idle 0     set iface route 192.168.0.0/24     set bundle disable multilink     set bundle authname "VpnLogin"     set bundle password "VpnPassword"     set link yes acfcomp protocomp     set link no pap     set link yes chap     set link mtu 1460 # If remote machine is NT you need this.. #   set link enable no-orig-auth     set link keep-alive 10 75     set ipcp yes vjcomp     set ipcp ranges 192.168.0.1/32 192.168.0.254/32 # # The five lines below enable Microsoft Point-to-Point encryption # (MPPE) using the ng_mppc(8) netgraph node type. #     set bundle enable compression     set ccp yes mppc     set ccp yes mpp-e40     set ccp yes mpp-e128     set bundle enable crypt-reqd     set ccp yes mpp-stateless     open     

/usr/local/etc/mpd/mpd.links配置如下:

 vpn:         set link type pptp         set pptp self 192.168.0.1 #        set pptp peer 2.3.4.5         set pptp enable originate incoming outcall     

/usr/local/etc/mpd/mpd.secret是用户的帐号和密码:

 jerry      "11111111" emma            "88888888" test        "test"      192.168.0.254           

/usr/local/etc/rc.d/mpd.sh

 #! /bin/sh case $1 in start)     [ -x /usr/local/sbin/mpd ] &&          [ -f "/usr/local/etc/mpd/mpd.conf" ] &&          /usr/local/sbin/mpd -b &&          echo -n ' mpd'     ;; stop)     killall mpd && echo -n ' mpd'     ;; *)     echo "Usage: `basename $0` {start|stop}" <&2     exit 64     ;; esac exit 0     

使用`mpd.sh start'启动, 在另一台WinXP上添加网络连接, 使用VPN, 输入用户和密码及主机地址就可以连上了


3.3 NAT的安装配置

3.3.1 NAT的安装

在 FreeBSD 5.X 上安装NAT, 首先需要确定内核配置中有下面的选项

 options        IPDIVERT options     IPFIREWALL options     IPFIREWALL_VERBOSE options     IPFIREWALL_VERBOSE_LIMIT=10 options     IPFIREWALL_DEFAULT_TO_ACCEPT     

3.3.2 NAT的配置

根据Handbook上说的, 需要配置rc.conf

 gateway_enable="YES"       # Set to YES if this host will be a gateway. firewall_enable="YES"       # Set to YES to enable firewall functionality firewall_script="/etc/rc.firewall" # Which script to run to set up the firewall firewall_type="/etc/ipfw.conf"      # Firewall type (see /etc/rc.firewall) natd_program="/sbin/natd"   # path to natd, if you want a different one. natd_enable="YES"       # Enable natd (if firewall_enable == YES). natd_interface="ed1"        # Public interface or IPaddress to use. natd_flags="-config /etc/natd.conf"         # Additional flags for natd.     

`/etc/ipfw.conf'中加入

 add 50 divert natd all from any to any via any           

开始测试, 下图是测试用图

                     -+--------------------------------+-          88.1.16.4   |                                | telnet 88.1.16.4 6666              +---------------+                 +-------------+                        | NATD MACHINE  |                 |  88.1.16.1  |              +---------------+                 +-------------+         192.168.0.1  |          +-----------+------------+         ...         ...          ...         192.168.0.XXX 子网          

`/etc/natd.conf'内容如下:

 log yes redirect_port tcp 192.168.0.1:22 88.1.16.4:6666 redirect_port tcp 192.168.0.1:23 88.1.16.4:6667     

在88.1.16.1上使用telnet 88.1.16.4 6666测试成功

下面解决防火墙后的内网访问NATD配置的端口映射的问题

这个问题用ipfw将从192.168.0网段来的发送到目标地址88.1.16.4, 端口6666的包forward到192.168.0.1上的22端口上就可以了. `/etc/natd.conf'加入:

 add 30000 forward 192.168.0.1,22 all from 192.168.0.0/24 to 88.1.16.4 via ed1     

3.4 使用SOCKS代理上网

3.4.1 SOCKS的安装

socks5的ports需要手工下载socks5-v1.0r11.tar.gz, 将其放到/usr/ports/distfiles, 但从其官方站点很难下载到, 推荐一种方法, 使用google搜索"index of socks5-v1.0r11.tar.gz", 下载后需要校验一下MD5, 保证与distinfo中的相同就可以了.


3.4.2 SOCKS5的配置

简单的使用SOCKS5的客户端不需要配置文件, 只需要根据代理的类型设置环境变量SOCKS5_SERVER(当你的代理服务器类型是SOCKS5) 或者SOCKS4_SERVER(当你的代理服务器类型是SOCKS4) 或者SOCKS_SERVER(当你的代理服务器类型是SOCKS, 不知道是4还是5), 还有就是和SOCKS5认证相关的两个环境变量SOCKS5_USER和SOCKS5_PASSWD

当这些环境变量设置好后, 就可以使用runsocks 来运行那些需要通过代理来上网的软件了, 例如

 #runsocks cvsup -Pm -gL 2 ports-supfile @M3novm #runsocks mozilla #runsocks wget ftp://60.138.164.3/movie.avi     

一些软件如cvsup对runsocks需要加入一些特别的参数选项来运行, 这里的cvsup就加入了'-Pm'和行末的'@M3novm', 详见cvsup的手册

至此我们就可以使用runsocks运行大部分需要网络支持的软件了


Chapter 4 FreeBSD系统管理和维护

Jerry

本章介绍FreeBSD系统的一些管理和维护经验


4.1 FreeBSD系统备份恢复及迁移


4.1.1 系统迁移

下面的例子中, 我将FreeBSD从一块20G的硬盘迁移到另一个80G 的硬盘的最后一个主分区, 该分区大小基本上仍然在20G左右

原分区情况

 Filesystem  1M-blocks Used Avail Capacity  Mounted on /dev/ad0s1a       313   67   221    23%    / devfs               0    0     0   100%    /dev /dev/ad0s1e       495  342   114    75%    /tmp /dev/ad0s1f      7096 5957   570    91%    /usr /dev/ad0s1d       495  339   117    74%    /var linprocfs           0    0     0   100%    /usr/compat/linux/proc procfs              0    0     0   100%    /proc     

新硬盘计划挂载在/dev/ad0上

  1. 对新的磁盘进行分区

    由于两块硬盘分区的大小不一致, 所以使用了一张FreeBSD的安装光盘进行Minimal的安装, 这时去掉原硬盘, 在ad0上挂载新硬盘, 安装时分区情况如下: /dev/ad0s4a分给`/', /dev/ad0s4b分给swap, /dev/ad0s4d分给`/var', /dev/ad0s4e分给`/tmp', /dev/ad0s4f分给`/usr', /dev/ad0s4g分给`/home'

  2. 迁移`/'数据

    重启进入单用户模式, 将新硬盘设置为从盘, 在ad0挂载原硬盘, ad1挂载新硬盘, 由于分区的情况不一致, 不能使用dump/restore进行恢复`/', 因为FreeBSD的分区表信息 位于/dev/ad0s4a, 也就是现在的/dev/ad1s4a上的前512字节中, 直接的dump/restore会 导致分区信息被覆盖, 因此对`/'采用pax进行备份和恢复, 最后修改fstab中各个挂载点的设备, 记得修改为ad0s4x, 因为最后新硬盘要挂载在ad0上, 命令如下:

     # /sbin/fsck -p  # /sbin/mount -a # /sbin/swapon -a # /sbin/adjkerntz -i # export HOME=/root # export TERM=vt200 # csh -l # mkdir -p /mnt/new/root # mkdir -p /mnt/new/var # mkdir -p /mnt/new/tmp # mkdir -p /mnt/new/usr # newfs /dev/ad1s4a # mount /dev/ad1s4a /mnt/fs/root # cd /mnt/fs/root; pax -rw -pe -X / . # cd /mnt/fs/root/etc # vi fstab     
  3. 恢复FreeBSD其他分区的数据

    这里由于不涉及对分区信息的操作, 可以使用dump/restore进行数据迁移, 同样也可以使用pax进行迁移, 这里使用dump/restore进行迁移

     # newfs /dev/ad1s4d # newfs /dev/ad1s4e # newfs /dev/ad1s4f # newfs /dev/ad1s4g # newfs /dev/ad1s4h # mount /dev/ad1s4d /mnt/new/var # mount /dev/ad1s4e /mnt/new/tmp # mount /dev/ad1s4f /mnt/new/usr # (dump -0b 512 -f - /usr) | (cd /mnt/new/usr; restore -rb 512 -f - ) # (dump -0f - /var) | (cd /mnt/new/var; restore -rf - ) # umount /mnt/new/var # umount /mnt/new/tmp # umount /mnt/new/usr # tunefs -n enable /dev/ad1s4d  # tunefs -n enable /dev/ad1s4e # tunefs -n enable /dev/ad1s4f # tunefs -n enable /dev/ad1s4g # tunefs -n enable /dev/ad1s4h     
  4. 迁移其他数据

    其他数据可以通过cp, tar, cpio, pax等迁移

  5. 迁移完毕, 关机, 重新挂载新硬盘到ad0, 重启, :)


4.2 FreeBSD下的系统监控工具

本章介绍FreeBSD下的系统监控工具


4.2.1 使用SNP Watch监控用户

参考How to Monitor Users with SNP Watch.

watch命令使用snp设备来监视某个tty的数据的输入输出, 因此首先要保证内核调入snp模块, 所以, 在内核配置中加入

 pseudo-device       snp 4     

watch常用使用方式如下

  1. 监视用户的tty, 不需要使用任何参数, 只需要指定tty

     # who jerry            ttyv4     5 18 13:40   # watch ttyv4     
  2. 监视并控制用户的tty, 需要加上参数`-W', 并指定tty

     # who jerry            ttyv4     5 18 13:40   # watch -W ttyv4     

watch的快捷键如下

 CTRL+G = 退出 CTRL+W = 清屏 CTRL+X = 选择需要监视tty     

4.2.2 使用smartmontools监视硬盘状态

SMART(SFF-8035i)是硬盘生产商们建立的一个工业标准, SFF-8035i工业标准经过ATA-3, ATA-4, 到了ATA-5, 加入了一个错误信息日志(error log)和一系列硬盘自测SMART命令. 这个标准就是在硬盘上保存一些跟执行情况, 可靠程度, 读找错误率等属性的数据, 所有属性都有一个1字节(大小范围 1-253)的标准化值, 还包含另一个1字节的关键阶段值, 如果属性中某个数据接近小于或达到关键阶段值,那么硬盘就很可能会在不久出现严重的读写问题, 至少也是超过它的设计使用极限了, 这时应该做系统完全备份了.

SMART适用于IDE和SCSI硬盘, 如果硬盘支持SMART标准, 就可以使用smartmontools来 监视硬盘的状态, smartmontools的安装如下, 这里我使用的是IDE的硬盘, 设备是ad0

 # cd /usr/ports/sysutils/smartmontools # make all install clean # echo 'smartd_enable="YES"' >> /etc/rc.conf # echo '/dev/ad0 -H -m mymailbox@mymachine' > /usr/local/etc/smartd.conf # /usr/local/etc/rc.d/smartd.sh start     

上面我设置smartd在发现错误后发送邮件通知我, 此外还可以根据需要定期测试硬盘, 查看其是否有错误, 具体设置可以参见/usr/local/etc/smartd.conf.sample

还可以通过smartctl来查看和测试硬盘, 常用命令如下:

  1. 查看硬盘是否支持SMART标准

     # smartctl -i /dev/ad0     
  2. 查看硬盘的健康状况

     # smartctl -H /dev/ad0     
  3. 查看硬盘错误日志

     # smartctl -l error /dev/ad0     
  4. 进行硬盘自检

     # smartctl -l selftest /dev/ad0     
  5. 终止硬盘自检

     # smartctl -X /dev/ad0      

Chapter 5 IBM Thinkpad R40e 上安装配置FreeBSD 4-stable

Jerry

5.1 基本安装

需要准备FreeBSD 4.9的安装光盘, 并下载最新的src/sys源码包 (好象FreeBSD 4.9不支持R40e上的那块网卡). 如果你需要用到WinXP的话, 首先找个分区工具, 分好分区, 第一个分区给WinXP, 后面的分区也分好, 不然用IBM的系统恢复工具就会自动把后面未分区的与第一个分区合并, 先把WinXP恢复了(不过不恢复WinXP就没法继续后面的安装了), 并且, 进入WinXP 把最新的src/sys的tar包拷贝到C:下

然后, 使用FreeBSD 4.9的安装光盘安装FreeBSD, 选个最小安装就可以了, 完成后启动进入FreeBSD, mount上WinXP的那个C:盘, 拷贝那个sys的源码包到/usr/src/下,解包, 重新编译内核, 安装重启, 就可以看到那个bge的网卡了

Kernel的加入的相关配置如下

 options    CPU_ENABLE_SSE options USER_LDT options CPU_ENABLE_TCC device  pcm options VESA     

5.2 X-Window的配置

使用FreeBSD 4.9自带的XFree86 4.3无法正常配置出R40e继承的ATI Radeon显卡, 因此, 进入ports安装x11-server/XFree86-4-Server-snap, 安装后就可以正常配置显卡了, 配置文件如下:

 Section "Module"     Load        "dbe"   # Double buffer extension     SubSection  "extmod"       Option    "omit xfree86-dga"   # don't initialise the DGA extension     EndSubSection     Load        "type1"     Load        "speedo" #    Load        "freetype"     Load        "xtt"     Load       "glx"     Load       "dri" EndSection  Section "Files"     RgbPath "/usr/X11R6/lib/X11/rgb"     FontPath   "/dtroot/local/share/fonts/TTF/"     FontPath   "/usr/X11R6/lib/X11/fonts/local/"     FontPath   "/usr/X11R6/lib/X11/fonts/misc/"     FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/:unscaled"     FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/:unscaled"     FontPath   "/usr/X11R6/lib/X11/fonts/Speedo/"     FontPath   "/usr/X11R6/lib/X11/fonts/Type1/" #    FontPath   "/usr/X11R6/lib/X11/fonts/TrueType/" #    FontPath   "/usr/X11R6/lib/X11/fonts/freefont/"     FontPath   "/usr/X11R6/lib/X11/fonts/75dpi/"     FontPath   "/usr/X11R6/lib/X11/fonts/100dpi/" #    ModulePath "/usr/X11R6/lib/modules" EndSection  Section "ServerFlags"  EndSection  Section "InputDevice"     Identifier  "Thinkpad Keyboard"     Driver  "Keyboard"     Option      "CoreKeyboard"     Option "AutoRepeat" "500 30"     Option "XkbRules"   "xfree86"     Option "XkbModel"   "pc101"     Option "XkbLayout"  "us"  EndSection   # ********************************************************************** # Core Pointer's InputDevice section # **********************************************************************  Section "InputDevice"     Identifier  "USBMouse"     Driver  "mouse"     Option "Protocol"    "Auto"     Option "Device"      "/dev/ums0"     Option "Emulate3Buttons" "true"     Option "ZAxisMapping" "4 5" EndSection  Section "InputDevice"      Identifier  "Touchpad"     Driver      "mouse"     Option      "Protocol"      "Auto"     Option      "Device"        "/dev/mouse"     Option      "Emulate3Buttons" "true"     Option      "ZAxisMapping" "4 5" EndSection  Section "Monitor"     Identifier  "My Monitor"     Option      "DPMS" #    HorizSync   31.5 #    HorizSync  30-64         # multisync #    HorizSync  31.5, 35.2    # multiple fixed sync frequencies #    HorizSync  15-25, 30-50  # multiple ranges of sync frequencies #    VertRefresh 50-70 EndSection   Section "Device"     Identifier  "ATI Radeon"     Driver      "radeon"     VideoRam    16384     Option      "EnablePageFlip" "true" EndSection  Section "Screen"     Identifier  "Thinkpad LCD"     Device      "ATI Radeon"     Monitor     "My Monitor"     DefaultDepth 24      Subsection "Display"         Depth       8         Modes       "1280x1024" "1024x768" "800x600" "640x480"         ViewPort    0 0     EndSubsection     Subsection "Display"         Depth       16         Modes       "1280x1024" "1024x768" "800x600" "640x480"         ViewPort    0 0     EndSubsection     Subsection "Display"         Depth       24         Modes       "1024x768" "800x600"         ViewPort    0 0     EndSubsection EndSection   Section "ServerLayout"     Identifier  "Thinkpad X"     Screen "Thinkpad LCD"     InputDevice "Touchpad" "CorePointer"     InputDevice "Thinkpad Keyboard" "CoreKeyboard" EndSection  Section "DRI"     Mode 0666 EndSection     

Chapter 6 FreeBSD常见问题集合

Jerry

6.1 FreeBSD常用命令及脚本

6.1.1. 如何使用脚本获得PID 6.1.2. 将文件名从大写转换为小写 6.1.3. 子目录按大小排序 6.1.4. ls显示颜色 6.1.5. 快速安装package 6.1.6. 使用ISO镜像 6.1.7. tcsh, csh技巧

6.1.1. 如何使用脚本获得PID

参见脚本pid.sh, 如下:

 $ cat pid.sh #!/bin/sh pid=`ps -aux | grep $1 | grep -v grep | awk '{print $2}'` echo $pid < $1.pid $./pid.sh sshd     

6.1.2. 将文件名从大写转换为小写

参见脚本mklower.sh, 如下:

 #!/bin/sh for file in $1;  do newfile=`echo "$file" | tr "[:upper:]" "[:lower:]"` mv "$file" "$newfile" done $ mklower.sh *.JPG     

6.1.3. 子目录按大小排序

$du -s * | sort -n

6.1.4. ls显示颜色

$ls -G #显示属性颜色 $ls -F #显示属性字符 $ls -FG

6.1.5. 快速安装package

你可以先设定 PACKAGEROOT,指定用该站点的package,安装时自动寻找对应pakage,而且你不需要知道版本,只要知道package名称即可,会自动安装package的最新版,中文的部分只要加上 zh-,像是 zh-xcin。

 # setenv PACKAGEROOT ftp://ftp.tw.freebsd.org # pkg_add -r package_name       

也可以直接指定 PACKAGESITE 指向特定的位置. 像是你希望安装的package是 最新的, 而不是 release 的版本.

 # setenv PACKAGESITE ftp://ftp.tw.freebsd.org/pub/FreeBSD/ports/i386/packages-stable/Latest/       

6.1.6. 使用ISO镜像

FreeBSD 4.X

 #vnconfig /dev/vn0c ./IMAGE.ISO #mount -t cd9660 /dev/vn0c MOUNT_DIR  #umount MOUNT_DIR #vnconfig -u /dev/vn0c       

FreeBSD 5.X

 #mdconfig -a -t vnode -f abc.iso -u 1  #mount -t cd9660 /dev/md1 MOUNT_DIR  #umount MOUNT_DIR       

6.1.7. tcsh, csh技巧

  • 在tcsh中可以使用set autolist设置文件名和路径自动补齐

  • 在csh中可以设置limit coredumpsize 0来设置coredump的大小

  • 设置命令行提示符

     set prompt = '%n@%m%#'           

6.2 FreeBSD安装配置常见问题

6.2.1. 系统启动反复出现timeout-resetting 6.2.2. 发现FreeBSD的交换空间被耗尽 6.2.3. 如何将系统迁移到新的大硬盘 6.2.4. 如何使用主板内置声卡, 如何使多个程序同时播放声音 6.2.5. 如何使用make world升级系统 6.2.6. Java运行awt程序经常core dumped 6.2.7. JDK1.4.2 使用JDBC无法连接远程数据库

6.2.1. 系统启动反复出现timeout-resetting

 acd0:MODE_SENSE_BIG command timeout-resetting ata1:resetting devices...done acd0:MODE_SENSE_BIG command timeout-resetting ata1:resetting devices...done acd0:MODE_SENSE_BIG command timeout-resetting ata1:resetting devices...done  .......... Probing divice,please wait(this can take a few minutes       

将光驱的master修改成slave来用

6.2.2. 发现FreeBSD的交换空间被耗尽

不追加分区, 可以通过增加交换文件的方式实现

 Example 6-1. Creating a Swapfile on FreeBSD 4.X 1.   Be certain that your kernel configuration includes the vnode driver. It is not in recent versions of GENERIC. pseudo-device   vn 1   #Vnode driver (turns a file into a device) 2.   create a vn-device: # cd /dev # sh MAKEDEV vn0 3.   create a swapfile (/usr/swap0): # dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 4.   set proper permissions on (/usr/swap0): # chmod 0600 /usr/swap0 5.   enable the swap file in /etc/rc.conf: swapfile="/usr/swap0"   # Set to name of swapfile if aux swapfile desired. 6.   Reboot the machine or to enable the swap file immediately, type: # vnconfig -e /dev/vn0b /usr/swap0 swap  Example 6-2. Creating a Swapfile on FreeBSD 5.X 1.   Be certain that your kernel configuration includes the memory disk driver ( md(4)). It is default in GENERIC kernel. device   md   # Memory "disks" 2.   create a swapfile (/usr/swap0): # dd if=/dev/zero of=/usr/swap0 bs=1024k count=64 3.   set proper permissions on (/usr/swap0): # chmod 0600 /usr/swap0 4.   enable the swap file in /etc/rc.conf: swapfile="/usr/swap0"   # Set to name of swapfile if aux swapfile desired. 5.   Reboot the machine or to enable the swap file immediately, type: # mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0        

6.2.3. 如何将系统迁移到新的大硬盘

建议重装系统,然后将数据迁移到新硬盘, 如果真的要直接将系统迁移到新硬盘一定要使用dump和restore,不要使用tar,cpio等, 它们对根目录的操作可能会出现问题, 步骤如下:

  1. 使用newfs新建一个分区.

  2. mount上该分区.

  3. cd到装载点.

  4. 使用dump备份旧的分区, 通过管道输出到新分区

例如, 假设要将根文件系统移动到/dev/ad1s1a, 使用/mnt作为临时装载点, 命令如下

 # newfs /dev/ad1s1a # mount /dev/ad1s1a /mnt # cd /mnt # dump 0af - / | restore xf -       

要在新硬盘上重新安排分区稍微有点麻烦, 例如要把/var文件系统放在新硬盘分区的 根文件系统下, 首先按照上面的步骤移动根文件系统, 然后在移动/var文件系统, 命令如下:

 # newfs /dev/ad1s1a # mount /dev/ad1s1a /mnt # cd /mnt # dump 0af - / | restore xf - # cd var # dump 0af - /var | restore xf -       

6.2.4. 如何使用主板内置声卡, 如何使多个程序同时播放声音

使用内置声卡需要添加如下内核配置

        options PNPBIOS       

多声道配置使用sysctl进行设置, 如下:

 # sysctl hw.snd.pcm0.vchans=4 # sysctl hw.snd.maxautovchans=4       

6.2.5. 如何使用make world升级系统

参考FreeBSD升级指南

注意事项

  • 备份系统, 备份一下总不至于吃亏

  • 订阅对应邮件列表, 希望你的英文不至于太差, 在对应邮件列表上贴上你问题的描述, 描述清楚出现的问题及受影响的系统

        STABLE: freebsd-stable@FreeBSD.org         CURRENT: freebsd-current@FreeBSD.org       

升级步骤

  1. 使用cvsup将src同步到所要升级到的版本

  2. 读一下/usr/src/UPDATING, 上面由一些你可能需要注意的事项, 一定要读一下, 但并不代表这一定比从邮件列表上得到的信息有用, 所以推荐订阅邮件列表

  3. 检查/etc/make.conf, 查看/etc/make.conf和 /etc/default/make.conf的不同之处, /etc/default/make.conf中包含一些缺省定义, 不过大部分都被注释掉了, 可以考虑把它们加入到/etc/make.conf中, 不过要记得/etc/make.conf所有的make命令都起作用

  4. 更新/etc下的文件, /etc下存放配置和启动脚本, 有些文件在不同的版本中是不同的, 所以需要进行更新, 从FreeBSD 开始可以在编译前使用命令 mergemaster 加上 -p 选项. 它将检查为了正常运行buildworld和installworld而需要更新的文件, 示例如下:

     # cd /usr/src/usr.sbin/mergemaster # ./mergemaster.sh -p           
  5. 进入单用户模式, 避免多用户系统带来的文件升级不成功问题, 还有一种方法就是在多用户模式下编译, 单用户下升级安装, 命令如下

     # shutdown now           

    重启后使用boot -s 进入单用户模式

     # fsck -p # mount -u / # mount -a -t ufs # swapon -a           

    加入升级前系统如果使用本地时间而没有使用GMT, 必须打入命令

     # adjkerntz -i           

    来调整时区等设置, 保证系统的正常安装

  6. 移除/usr/obj

     # cd /usr/obj # chflags -R noschg * # rm -rf *           
  7. 编译系统

    1. 保存编译输出, 注意不要存在/tmp目录下, /tmp下的文件可能在重启后被清除

       # script /var/tmp/mw.out Script started, output file is /var/tmp/mw.out    # make TARGET ... compile, compile, compile ...      # exit Script done, ...           
    2. 编译系统

       # cd /usr/src # make -j4 -DNOPROFILE buildworld #或者在/etc/make.conf加上NOPROFILE=true           

      FreeBSD 2.2.5后make world分成 make buildworld和make installworld, 注意这里只作make buildworld

      耗时: PIII500/128M RAM大约需要2个钟头左右

  8. 编译安装新内核, 注意这里不是make world

     # cd /usr/src # make buildkernel # make installkernel           

    编译使用GENERIC配置的内核, 推荐编译一个, 以免以后编译内核后无法使用新内核启动 没有make installworld前定制编译新内核使用下面的命令

     # /usr/obj/usr/src/usr.sbin/config/config KERNELNAME           
  9. 以新内核重启到单用户模式

  10. 升级系统, 注意要使用和make buildworld使用的-D选项, 并且绝对不能使用-j选项

     # cd /usr/src # make installworld           

    假如编译时:

     # make -DNOPROFILE=true buildworld           

    安装时就应该:

     # make -DNOPROFILE=true installworld           
  11. 升级那些没有被make world升级的文件, 如/etc下的文件, 可以使用mergemaster或者手工升级, 这一点请参见mergemaster的手册, 在升级前建议备份/etc目录.

  12. 更新/dev

    通常使用mergemaster, 就会重建/dev, 或使用命令 sh MAKEDEV 建立

  13. 更新/stand

     # cd /usr/src/release/sysinstall # make all install           
  14. 再次重启

     # fastboot           
  15. 结束升级, 加入有些程序无法运行的话可以重新编译安装, 例如

     # cd /usr/src/usr.bin/file # make all install           

6.2.6. Java运行awt程序经常core dumped

java与xim有些冲突, 可以设置java的环境变量到C, 避免调用输入法

或者这样就可以了, XIM与Motif有些冲突

 # ln -sf aj /etc/malloc.conf       

6.2.7. JDK1.4.2 使用JDBC无法连接远程数据库

对net.inet6.ip6.v6only进行设置, 或者取消安装INET6

 # sysctl net.inet6.ip6.v6only=0        

可以将这句加到/etc/rc.local里, 启动后自动设置


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值