FreeBSD中VirtualBox安装手册

本文摘自FreeBSD手册

在过去的几年中 FreeBSD 并没有任何可用的并被官方支持的虚拟化解决方案。 一些用户曾时使用过利用 Linux 二进制兼容层运行的 VMware 陈旧并多半已过时的版本 (比如 emulators/vmware3)。 在 FreeBSD 7.2 发布不久, Sun 开源版本 (Open Source Edition OSE) 的 VirtualBox 作为一个 FreeBSD 原生的程序出现在了 Ports Collection 中。

VirtualBox 是一个开发非常活跃, 完全虚拟化的软件, 并且可在大部份的操作系统上使用, 包括 Windows, Mac OS, Linux 和 FreeBSD。同样也能把 Windows 或 UNIX 作为客户系统运行。 它有一个开源和一个私有两种版本。 从用户的角度来看, OSE 版本最主要的限制也许是缺乏 USB 的支持。 其他更多的差异可以通过链接 http://www.virtualbox.org/wiki/Editions 查看 “Editions” 页面。 目前, FreeBSD 上只有 OSE 版本可用。

安装 VirtualBox

VirtualBox 已作为一个 FreeBSD port 提供, 位于 emulators/virtualbox-ose, 可使用如下的命令安装:

# cd /usr/ports/emulators/virtualbox-ose
# make install clean

在配置对话框中的一个有用的选项是 GusetAdditions 程序套件。 这些在客户操作系统中提供了一些有用的特性, 比如集成鼠标指针 (允许在宿主和客户系统间使用鼠标, 而不用事先按下某个特定的快捷键来切换) 和更快的视频渲染, 特别是在 Windows 客户系统中。 在安装了客户操作系统之后, 客户附加软件可在 Devices 菜单中找到。

在第一次运行 VirtualBox 之前还需要做一些配置上的修改。port 会安装一个内核模块至 /boot/modules 目录, 此模块需要事先加载:

# kldload vboxdrv

可以在 /boot/loader.conf 中加入以下的配置使此模块在机器重启之后能自动加载:

vboxdrv_load="YES"

在 3.1.2 之前版本的 VirtualBox 需要挂接 proc 文件系统。 在新版本中不再有此要求, 因为它们使用了由 sysctl(3) 库提供的功能。

当使用旧版本的 port 时, 需要使用下面的步骤来挂载 proc:

# mount -t procfs proc /proc

为了使配置能在重启后始终生效, 需要在 /etc/fstab 中加入以下这行:

proc   /proc   procfs  rw  0   0

注意: 如果在运行 VirtualBox 的终端中发现了类似如下的错误消息:

VirtualBox: supR3HardenedExecDir: couldn’t read "", errno=2 cchLink=-1
此故障可能是由 proc 文件系统导致的。 请使用 mount 命令检查文件系统是否正确挂载。

在安装 VirtualBox 时会自动创建 vboxusers 组。 所有需要使用 VirtualBox 的用户必须被添加为此组中的成员。 可以使用 pw 命令添加新的成员:

# pw groupmod vboxusers -m yourusername

运行 VirtualBox, 可以通过选择你当前图形环境中的 Sun VirtualBox, 也可以在虚拟终端中键入以下的命令:

% VirtualBox

获得更多有关配置和使用 VirtualBox 的信息, 请访问官方网站 http://www.virtualbox.org。 鉴于 FreeBSD port 非常新, 并仍处于开发状态。请查看 FreeBSD wiki 上的相关页面 http://wiki.FreeBSD.org/VirtualBox 以获取最新的信息和故障排查细则。

FreeBSD 8.0开始官方支持VirtualBox虚拟机了

FreeBSD 从8.0开始终于有官方支持的宿主虚拟服务了VirtualBox。 VirtualBox有一个开源版本和一个私有版本。

FreeBSD运行的是开源版本(OSE 版本),这个版本不支持的功能主要是:

    USB
    OpenGL support

基本安装见 FreeBSD操作手册[URL:http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/virtualization-host.html]。

CD/DVD使用:

在/etc/devfs.conf中设置:

  perm cd0 0666
  perm xpt0 0666
  perm pass0 0666

网络配置:
默认为NAT模式;在/boot/loader.conf配置如下;

    vboxdrv_load="YES"
    atapicam_load="YES" 

如果使用网桥模式,在/boot/loader.conf配置如下:

    vboxdrv_load="YES"
    vboxnetflt_load="YES"
    atapicam_load="YES"

atapicam模块作用是启动CD/DVD支持,apapicam模块需要在vboxdrv模块之后运行。

原文链接:http://wiki.freebsdchina.org/software/v/virtualbox

在VirtualBox中增强FreeBSD虚拟机

在 VirtualBox 中增强 FreeBSD 虚拟机

注:以 VirtualBox 3.2.12、FreeBSD 8.1 为例。
在VirtualBox中安装完FreeBSD后,会遇到无法调整桌面分辨率(最大800×600)、鼠标无法移动、无法启用Seamless窗口的问题。这皆因没有安装“VirtualBox增强功能包 for FreeBSD”的原因。VirtualBox程序本身并不提供该安装软件,只提供了Windows、Linux、Solaris版的增强包。但我们可以安装VirtualBox OSE的增强包(virtualbox-ose-additions)来代替。
VirtualBox OSE是VirtualBox的GPL开源版本,与闭源版在功能上有少许不同。我们平时在FreeBSD中安装的VirtualBox就是OSE版。

安装步骤如下:

一、首先要先让鼠标动起来

我们在sysintall中配置鼠标时点击enable启用鼠标服务后,点击鼠标左键这时屏幕会出现指针图标但指针就是不会动。在X-Window中也是如此。这是因为VirtualBox自作主张的启用了鼠标集成功能,当指针从主机移到虚拟机窗口中时,VirtualBox会自动让虚拟机捕获到鼠标,这功能在Linux和Windows作虚拟机时工作的挺好但在FreeBSD中就造成鼠标不会动的问题。
我们要先关闭VirtualBox的鼠标集成功能。将鼠标移入虚拟机中,再按右Ctrl+I键(右Ctrl是默认的热键)禁止自动独占鼠标,这样FreeBSD中的鼠标就会动了。如果要将鼠标移出虚拟机,按右Ctrl键切换到主机。
二、安装VirtualBox OSE增强功能包

1、用root执行
# pkg_add -r virtualbox-ose-additions

# cd /usr/ports/emulators/virtualbox-ose-additions && make install clean

2、在/etc/rc.conf中增加
vboxguest_enable=“YES”

3、在xorg.conf中修改
显卡部分:
  Section "Device"
      ### Available Driver options are:-
      ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
      ### <string>: "String", <freq>: "<f> Hz/kHz/MHz"
      ### [arg]: arg optional
      Identifier  "Card0"
      Driver      "vboxvideo"  (修改)
      VendorName  "InnoTek Systemberatung GmbH"
      BoardName   "VirtualBox Graphics Adapter"
      BusID       "PCI:0:2:0"
  EndSection
鼠标部分:
  Section "InputDevice"
      Identifier  "Mouse0"
      Driver     "vboxmouse"  (修改)
  EndSection

4、拷贝HAL fdi文件;
# cp /usr/local/share/hal/fdi/policy/10osvendor/90-vboxguest.fdi /usr/local/etc/hal/fdi/policy/
上面做完后,鼠标可以自由在主机与虚拟机中移动(仅限X-Window环境中,文字模式下参看第一节),可以选择更高的分辨率。但FreeBSD分辨率还是固定的,不能随虚拟机窗口调整,不能共享剪切板,不能启用Seamless窗口。

5、用root执行
# VBoxClient –clipboard 共享剪切板
# VBoxClient –display 自动调整分辨率
# VBoxClient –seamless 启动seamless窗口模式
可惜的是没有共享文件夹(分配数据空间)功能。

参考:VirtualBox in FreeBSD wiki (http://wiki.freebsd.org/VirtualBox)

原文链接:http://wiki.freebsdchina.org/software/v/virtualbox-additions

ZFS v13 在FreeBSD 8.0 rc2中的实践

ZFS v13 在FreeBSD 8.0 rc2中的实践

属主:ZoomQuiet

参考:存储的规划[URL:http://www.bsdart.org/archives/20101226/518.html]

概述

本文包含 FreeBSD 8.0rc2 环境中一个 raidz-2+hot spares 配置和测试实例,为其它有意使用 ZFS 代替raid* 来保卫数据安全的SA, 在进行硬盘和 zpool 规划时,提供了一个足够友好的参考。

条件

* OS: FreeBSD svnmain.s.kingsoft.net 8.0-RC1 FreeBSD 8.0-RC1 #0: Thu Sep 17 18:50:57 UTC 2009 root@mason.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC amd64

目标

在足够的硬盘数量支持下:

1,尽可能的使用多的空间
2,运用双奇偶检验来确保数据写安全
3,附加一个热备硬盘来冗灾数据盘的坏损
4,系统分区坏损时也可以立即恢复

硬件

Dell? PowerEdge? 2900 III
6x500G SAS 硬盘
6G 内存

规划

ZFS v13 在FreeBSD 8.0 rc2中的实践

意图

6x300G SAS 空间划分相同=>4G+496G 两部分

    6x4G 空间
    >>3组作系统空间,进行相同的分区,并定期进行 dd 备份
    >>3组作swap 给系统提供 16G 缓存,刚好是内存的两倍
    6x496G 空间
    >>1.5T 可用(3+2) RAID-Z2+1 hot spare

部署

简要说明在部署过程中的关键操作和思路

BIOS

    因为,下单时考虑不周,主机带了个绕不过去的 RAID 卡
    所以,必须先在 BIOS 中使用 raid0 策略对所有硬盘进行配置,否则 FreeBSD 安装程序无法加载硬盘

FreeBSD

* 使用 sysinstall 标准的进行 BSD 安装 * 注意对预备进行系统冗灾备份的分区要进行大小一致的划分(bsdlabel) * 每个分区的大小是精心测算过的:

1,/ → ??Mb 因为
2,/tmp → ??Mb 因为
3,/var → ??Mb 因为
4,/usr → ??Mb 因为

* 这样确保系统在4G 空间中就可以完全运行起来!

geom label

因为将来各个硬盘都有可能先杯具,所以,不能依赖盘序会孬 BIOS 自动调整的 bsd卷标
使用 geom label 进行固化!

##重启系统,在 loader 提示符下键入 4 启动到单用户模式
# glabel label rootfs /dev/mfid0s1a
GEOM_LABEL: Label for provider /dev/mfid0s1a is label/rootfs
# glabel label var /dev/mfid0s1d
GEOM_LABEL: Label for provider /dev/mfid0s1d is label/var
# glabel label usr /dev/mfid0s1f
GEOM_LABEL: Label for provider /dev/mfid0s1f is label/usr
# glabel label tmp /dev/mfid0s1e
GEOM_LABEL: Label for provider /dev/mfid0s1e is label/tmp
# glabel label swap /dev/mfid0s1b
GEOM_LABEL: Label for provider /dev/mfid0s1b is label/swap
# glabel label disk0 /dev/mfid0s2
GEOM_LABEL: Label for provider /dev/mfid0s2 is label/disk0

## 根据规划对所有硬盘的所有分区进行固定卷标
# cat /etc/fstab
… 类似
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/label/swap         none            swap    sw              0       0
/dev/label/rootfs       /               ufs     rw              1       1
/dev/label/tmp          /tmp            ufs     rw              2       2
/dev/label/usr          /usr            ufs     rw              2       2
/dev/label/var          /var            ufs     rw              2       2
##正常重启后观察:
$ sudo mount
/dev/label/rootfs on / (ufs, local)
/dev/label/tmp on /tmp (ufs, local, soft-updates)
/dev/label/usr on /usr (ufs, local, soft-updates)
/dev/label/var on /var (ufs, local, soft-updates)

系统的 dd 备份

为确保备用系统分区随时可用,需要进行精密的复制:

#格式
sudo dd if= “系统分区全路径” of=“备份分区全路径”
#本例
sudo dd if=rootfs of=rootfs1
sudo dd if=rootfs of=rootfs2

要将所有系统分区都进行复制

ZFS

建立 3+2 RAID-Z2+1 host spare

$sudo zfs create svnpool raidz2 disk[0-4] spare disk5
$ zpool status
  pool: svnpool
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Thu Nov 12 17:35:09 2009
config:

    NAME             STATE     READ WRITE CKSUM
    svnpool          ONLINE       0     0     0
      raidz2         ONLINE       0     0     0
        label/disk0  ONLINE       0     0     0  27.5K resilvered
        label/disk1  ONLINE       0     0     0  29K resilvered
        label/disk5  ONLINE       0     0     0  44K resilvered
        label/disk3  ONLINE       0     0     0  28.5K resilvered
        label/disk4  ONLINE       0     0     0  28K resilvered
    spares
      label/disk2    AVAIL 

$ zpool upgrade -v
This system is currently running ZFS pool version 13.

演习

通过实地热插拔硬盘来模拟实际常见灾难来明确在 ZFS 保卫中的系统和数据恢复

系统盘崩溃

模拟

1,先关机,拔除系统硬盘
2,开机后,无法引导

模拟成功…

处置

1,重启,进入 BIOS
2,调整硬盘启动顺序,指定 disk4/5 任意一块(有系统分区在的)
3,用光盘重启,使用 sysinstall—label功能手动挂载分区表 并写入启动硬盘 M键挂载分区,W写入更改
    第1分区 → /
    第2分区 → /tmp
    第3分区 → /var
    第4分区 → /usr
4,重启,将正常引导,而且使用 zpool status 测试,明确存储池也正常

处置成功,总用时 < 25分钟

数据盘崩溃

模拟

1,拔除任何一颗数据硬盘 (disk1~5)
2,系统丢出错误,重启
3,zfs 将观察到 DEGRADED 状态

模拟成功…

处置

1,先撤出故障盘

$ sudo zpool detach svnpool /dev/label/disk2
zpool status
  pool: svnpool
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Thu Nov 12 17:35:09 2009
config:

        NAME             STATE     READ WRITE CKSUM
        svnpool          ONLINE       0     0     0
          raidz2         ONLINE       0     0     0
            label/disk0  ONLINE       0     0     0  27.5K resilvered
            label/disk1  ONLINE       0     0     0  29K resilvered
            label/disk5  ONLINE       0     0     0  44K resilvered
            label/disk3  ONLINE       0     0     0  28.5K resilvered
            label/disk4  ONLINE       0     0     0  28K resilvered
        spares
          label/disk5      INUSE     currently in use

2,FreeBSD 中的ZFS 当前无法自动激活热备件启用,手动替换之
格式: zpool replace svnpool ‘故障盘’ ‘热备件’

$ sudo zpool replace svnpool /dev/label/disk2 /dev/label/disk5
$ zpool status
  pool: svnpool
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Thu Nov 12 17:35:09 2009
config:

        NAME             STATE     READ WRITE CKSUM
        svnpool          ONLINE       0     0     0
          raidz2         ONLINE       0     0     0
            label/disk0  ONLINE       0     0     0  27.5K resilvered
            label/disk1  ONLINE       0     0     0  29K resilvered
            label/disk5  ONLINE       0     0     0  44K resilvered
            label/disk3  ONLINE       0     0     0  28.5K resilvered
            label/disk4  ONLINE       0     0     0  28K resilvered

3,待修复故障硬盘或在同一物理位置替换(同大小)物理硬盘之后,手工追加热备件

$ sudo zpool add svnpool spare /dev/label/disk2
$ zpool status
  pool: svnpool
state: ONLINE
scrub: resilver completed after 0h0m with 0 errors on Thu Nov 12 17:35:09 2009
config:

        NAME             STATE     READ WRITE CKSUM
        svnpool          ONLINE       0     0     0
          raidz2         ONLINE       0     0     0
            label/disk0  ONLINE       0     0     0  27.5K resilvered
            label/disk1  ONLINE       0     0     0  29K resilvered
            label/disk5  ONLINE       0     0     0  44K resilvered
            label/disk3  ONLINE       0     0     0  28.5K resilvered
            label/disk4  ONLINE       0     0     0  28K resilvered
        spares
          label/disk2    AVAIL

4,安全起见 zpool clear ,并zpool status -x检查

处置完毕, 用时 10~15分钟

TODO

1,如何对 zpool 的变化进行自动报警?
2,如何自动使用 hot spare 替代离线的硬盘?
3,4G 的系统空间不足时,如何将耗空间的 目录链接到 zpool 中,而又保障依然可以正常用后备系统盘快速恢复?

讨论

这样是否最合理?
如果该主机只用以提供 SVN 服务,还有什么可以优化的?
如果该主机只用以提供 Samba 服务,还有什么可以优化的?
如果该主机只用以提供 ftp 服务,还有什么可以优化的?
如果该主机只用以提供 PostgreSQL 服务,还有什么可以优化的?
如果该主机用以提供 综合 服务,还有什么需要注意的?

原文链接:http://wiki.freebsdchina.org/doc/z/zfsusageforbsd8.0

FreeBSD ZFS存储服务器的规划

FreeBSD ZFS存储服务器的规划

注意:本文内容已经过时。TODO:需要进行一部分改写,包括:zpool根fs不应挂载、关于如何配置纯ZFS系统的介绍、4K扇区等话题。

FreeBSD 7.0具备以 ZFS 作为根文件系统的能力。本文将以一台有6块硬盘的服务器介绍从FreeBSD/amd64 7.0 LiveFS光盘(随发行版发行的LiveCD系统)全新安装一份FreeBSD,并使用ZFS作为根目录的具体方法。

存储的规划

我们假定有6块750GB的SATA硬盘,ad0-ad5;系统有8GB RAM,希望作为存储服务器。在尽量保证数据完整性和性能的前提下,我们会希望有:

    使用五块硬盘作为RAIDZ1或RAIDZ2卷;一块硬盘作为备盘;
    系统的引导和配置信息保存2份,以便当系统无法引导时进行灾难恢复;
    适当大小的 swap 空间,在本例中,我们选择的容量是 8GB。

分区如下所示:

FreeBSD ZFS存储服务器的规划

说明:对于新系统,可以使用 GPT 分区、纯ZFS。此时,分配格局大致如下:

FreeBSD ZFS存储服务器的规划

初始化命令为:

gpart create -s gpt ad0
gpart add -s 94 -t freebsd-boot ad0
gpart bootcode -b /boot/pmbr -p /boot/gptzfsboot -i 1 ad0
gpart add -s 4194304 -t freebsd-swap -l swap0 ad0
gpart add -t freebsd-zfs -l disk0 ad0

准备

使用 LiveFS 光盘引导之后会自动进入sysinstall,选择 Fixit → CDROM。进入Fixit shell,会看到这样的提示符:

Fixit#

这时,我们可以开始分区了。首先,初始化覆盖所有磁盘的slice:

fdisk -IB /dev/ad0
fdisk -I /dev/ad1
fdisk -I /dev/ad2
fdisk -I /dev/ad3
fdisk -I /dev/ad4
fdisk -IB /dev/ad5

接下来在这些磁盘上初始化bsdlabel。由于 bsdlabel 需要调用 vi(透过 EDITOR 环境变量),而 sysinstall会将这个环境变量设置为 /mnt2/stand/vi,因此需要改一下:

unsetenv EDITOR
bsdlabel -wB /dev/ad0s1
bsdlabel -w /dev/ad1s1
bsdlabel -w /dev/ad2s1
bsdlabel -w /dev/ad3s1
bsdlabel -w /dev/ad4s1
bsdlabel -wB /dev/ad5s1

分别编辑这些labels。对于ad0和ad5,类似这样:

8 partitions:
#           size        offset        fstype
a:  4194304              16      unused
c:              *                0       unused
d:             *                 *       unused

对于ad1-ad4,类似这样:

8 partitions:
#           size        offset        fstype
b:  4194304              16      unused
c:              *                0       unused
d:             *                 *       unused

我们希望不因为盘序问题导致混乱,因此会用到 geom label。在本次启动时,我们并不立即创建 ZFS,而只是初始化一个用于启动的 UFS 分区:

newfs -L boot /dev/ad0s1a
mount -o async /dev/ufs/boot /mnt

下面,从光盘上复制一系列文件到这个分区上:

cd /mnt
cp -pR /mnt2/*bin /mnt2/boot /mnt2/etc /mnt2/lib* /mnt2/usr /mnt2/var .
mkdir dev

接下来进行初步的配置:

cd /mnt/boot
rm loader.conf mfsroot.gz
echo "/dev/ufs/boot / ufs rw 0 0" > /mnt/etc/fstab
echo "/dev/ad1s1b none swap sw 0 0" >> /mnt/etc/fstab
echo "/dev/ad2s1b none swap sw 0 0" >> /mnt/etc/fstab
echo "/dev/ad3s1b none swap sw 0 0" >> /mnt/etc/fstab
echo "/dev/ad4s1b none swap sw 0 0" >> /mnt/etc/fstab
touch /etc/rc.conf
cd /
umount /mnt
tunefs -n enable /dev/ufs/boot

现在就可以从硬盘引导系统了。

创建 ZFS

从硬盘引导之后,以 root 身份登录。首先,我们为将要加入 zpool 的磁盘指定 GEOM label:

glabel label disk0 /dev/ad0s1d
glabel label disk1 /dev/ad1s1d
glabel label disk2 /dev/ad2s1d
glabel label disk3 /dev/ad3s1d
glabel label disk4 /dev/ad4s1d
glabel label disk5 /dev/ad5s1d

然后,在其上建立 zpool,我们将这个zpool命名为tank,将disk0-4作为其raidz1成员,并使用disk5作为热备盘:

zpool create tank raidz /dev/label/disk[0-4] spare /dev/label/disk5

此时,这个zpool会被自动挂接到 /tank。如果CPU比较快,通常启用压缩会改善性能:

zfs set compression=on tank

复制文件

首先需要为现在我们用来引导的这个 UFS 卷指定一个归宿:

mkdir /tank/bootdir

系统引导之后,需要访问某些 /boot 的内容:

cd /tank
ln -s bootdir/boot boot

复制 / 到 /tank:

cd /
cp -pR /*bin /etc /lib* /usr /var /tank
mtree -deUf /etc/mtree/BSD.root.dist -p /tank
mtree -deUf /etc/mtree/BSD.var.dist -p /tank/var
chmod u+s,g+s /tank/usr/bin/su

配置以ZFS作为 / 启动,修改 /boot/loader.conf 使其包含:

zfs_load="YES"
vfs.root.mountfrom="zfs:tank"

将 zpool 上的 ZFS 挂接方式改为 legacy:

zfs set mountpoint=legacy tank

在重启之前,需要修改 /etc/fstab:

/dev/ufs/boot /bootdir ufs rw 0 0

重新启动系统。此时根目录应该就是 zfs 了,接下来,可以在 /etc 中进行配置。

此后,建议使用通常的方式联编系统,以确保文件/目录权限的正确性。

配置的备份和同步

我们前面将 /dev/ad5s1a 留作配置备份卷。这个卷在未来出问题的时候应该是可以帮助你启动的,现在我们来对它进行初始化:

newfs -U -L altboot /dev/ad5s1a
mkdir -p /altbootdir

接下来我们需要将 /bootdir 的内容复制过去:

mount /dev/ufs/altboot /altbootdir
cd /bootdir
tar cf – * | tar xf – -C /altbootdir

平时将 /altbootdir 卷卸下即可。当对系统的配置进行较大的变动,特别是对 zpool 内容进行变动或升级内核之后,应再次重复前面的复制步骤。

原文链接:http://wiki.freebsdchina.org/doc/z/zfs_root

FreeBSD控制nspluginwrapper多余进程的方法

FreeBSD控制nspluginwrapper多余进程的方法

问题

使用nspluginwrapper(/usr/ports/www/nspluginwrapper)在Firefox中播放Flash的同学可能会发现:关闭Flash页面后,有个名为“npviewer.bin”的进程仍然驻留,随着打开/关闭/切换Flash页面次数的增多,最后进程表里会有N个“npviewer.bin”进程,并且占据了大量内存,只能手动执行“killall npviewer.bin”。

解决方案

step1:

在你的用户目录下建立一个sh脚本,比如/home/yhs/bin/flashkiller。
脚本内容如下:

#!/bin/sh
flashcount=$(/bin/pgrep npviewer.bin | /usr/bin/wc -l)
if [ $flashcount = 1 ]
then
/usr/bin/killall npviewer.bin
fi

step2:

命令行下执行:

crontab -e

输入下列内容后,保存退出:

*/5 * * * * /home/yhs/bin/flashkiller > /dev/null #注意空格!

查看计划任务:

crontab -l

之后,cron守护进程将会自动执行step1中的脚本,为你清理多余的“npviewer.bin”进程。

参考

Flash leaving behind npviewer.bin ‘stuff'[URL:http://forums.freebsd.org/showthread.php?p=67155#post67155]
配置cron[URL:http://www.freebsd.org/doc/zh_CN/books/handbook/configtuning-cron.html]

原文链接:http://wiki.freebsdchina.org/howto/f/flash_process_ctrl

FreeBSD下添加新硬盘

FreeBSD下添加新硬盘

第一种方法:使用 sysinstall

在使用 sysinstall 来设定新的硬盘之前,请先确定您是以 root 身份执行。接下来,您就可以依照下列步骤来新增硬盘:

进入 sysinstall

进入 sysinstall 的主选单后,首先请选择 [Configure],进入后,再选择 [Fdisk] 项目以进入 Fdisk 选单。第一次进入 Fdisk 时,sysinstall 会要求您选择所要设定的硬盘,请选择 ad1。

使用 Fdisk

相信您对于 Fdisk 的画面应该很熟悉,我们在安装 FreeBSD 时就使用过它。如果您要让 FreeBSD 使用整个硬盘,请按 [A],接下来请按 [W] 以将设定写入硬盘。在按了 [W] 后,会出现一个确认的窗口,选 [Yes] 即可。最后会出现要您选择所要使用的 Boot Manager,因为这一个硬盘不是要用来开机用的,所以我们选 [None]。写入后,请按 [Q] 离开 Fdisk 的画面,并回到 Configure 画面。接着请离开 sysinstall,再重新执行 sysinstall 以让 sysinstall 重新侦测硬盘设定。

使用 Disk Label Editor

重新执行 sysinstall 后,请选择 [Configure] -> [Label] 以进入 Disk Label Editor。Disk Label Editor 会帮我们在 Slice 下切割 Partition 并格式化硬盘。在 Disk Label Editor 中,我最多可以建八个分割区 (Partition),编号从 a 到 h。不过有的代号有特殊用途。例如,分割区 a 通常会保留给根目录使用,所以我们开机时所使用的分割区代号会是 a。而代号 b 表示是 swap partition,我们可以在多个硬盘中都有 swap partition。代号 c 是用来表示整个硬盘或是整个 Slice。所以最后 d-h 才是一般我们会使用到的分割区代号。

我们要让 FreeBSD 使用整个硬盘,所以必须将整个 Slice 切成一个 Partition。所以一进入 Disk Label Editor 后,请按 [C],在画面上会显示整个 Slice 的大小,直接按 Enter 即可建立一个分割区。接下来,我们必须选择所要挂入本分割区的目录,请选择 FS 后,再输入您所要挂入的目录,例如 /volume1。如果是在安装 FreeBSD 时,我们所设定的挂入点会被写到 /etc/fstab 中,开机后就会自动将磁盘挂入该目录。但是我们这里所指定的挂入点并不会被写入 /etc/fstab 中,最后我们还是必须再设定 /etc/fstab。

最后请按 [W]以进行分割及格式化。完成后,系统会将该才所建立的磁盘挂入您所指定的目录下。接着请离开 sysinstall 回到命令列。

设定 /etc/fstab

为了让系统在开机时可以自动将此分割区挂入,我们必须再设定 /etc/fstab。请在 /etc/fstab 中增加下列数据:

# Device Mountpoint FStype Options Dump Pass#
/dev/ad1s1d /volume1 ufs rw 2 2

第二种方法: 使用命令列

您不一定要使用 sysinstall 来分割及格式化硬盘,sysinstall 只是提供一个比较容易使用的界面,最后还是会呼叫命令列的指令以完成硬盘的设定。使用命令列的方式比较复杂,而且较容易出错,但却可以让您有更灵活的应用。看了如何从命令列新增一个硬盘可以让您对 sysinstall 所做的事更了解。

我们一样假设要新增的硬盘为 ad1,并且将整个硬盘切成一个扇区给 FreeBSD 使用。第一步要做的就是先使用 dd 这个指令来清除硬盘上旧的设定:

# dd if=/dev/zero of=/dev/ad1 bs=1k count=1

上述指令的意思是从 /dev/zero 这个装置读出数据写到 /dev/ad1 中,每次写入的 block size (bs) 为 1KB,做一次写入的动作即可 (count)。我们知道 FreeBSD 各动硬件装置当做档案来看待,/dev/zero 这个档案其实是一个虚拟的档案,我们从这个档案读出来的数据都是 0。上述指令的动作的目的就是要将硬盘 ad1 的开头 1024KB 清成 0,而硬盘开头的部份存放的就是一些分割区设定的数据 (Partition Table)。

接下来呢我们就必须使用 fdisk 这个指令来切割 slice 了:

# fdisk -BI ad1
******* Working on device /dev/ad1 *******
fdisk: invalid fdisk partition table found

上述 fdisk 指令表示我们要将 ad1 切割成一个 slice (参数 -I),并清除放开机信息的第 0 个 sector。您可以忽略「invalid fdisk partition table found」的警告,因为我们一开始并没有任何分割区。接下来我们就可以使用下列 bsdlabel 指令来建立预设的 partition label,再使用 bsdlabel 加参数 e 以修改建立的 lable:

# bsdlabel -B -w ad1s1 auto
# bsdlabel -e ad1s1

接着会使用您预设的文书编辑软件跳出一个窗口,请将 a: 改成 d: 后存档离开,因为我们新增加的分割区不是要给根目录使用,所以不用代号 a,而是使用第一个不具特别意义的代号 d。

# /dev/ad1s1:
8 partitions:
# size offset fstype [fsize bsize bps/cpg]
d: 78156146 16 unused 0 0
c: 78156162 0 unused 0 0 # "raw" part, don’t edit

将 a: 改成 d: 后,存档离开即可。接下来我们就可以格式化这一个分割区了。FreeBSD 中用来格式化 UFS 档案系统的指令为 newfs:

# newfs /dev/ad1s1d

以上即为新增一颗硬盘所要做的事。请注意,bsdlabel 这个指令是 FreeBSD 5.1 以后才有的,在 5.1 以前,请使用 disklabel。

接下来您就可以将新的硬盘挂入了,假设您要挂入的目录是 /volume1,则请使用下列指令:

# mkdir /volume1
# mount /dev/ad1s1d /volume1

最后,如果您希望一开机就将此分割区挂入,请修改 /etc/fstab,并加入此分割区的设定。

原文链接:http://juven.blog.51cto.com/749867/181724

FreeBSD 7.3下Nginx+PHP(php-fpm)配置笔记

FreeBSD 7.3下Nginx+PHP(php-fpm)配置笔记

都说Nginx的性能比Apache NB,找了很多相关的安装资料,终于实现完成了FreeBSD+Nginx+PHP的配置。网上多数Nginx+PHP的配置都是使用的spawn-fcgi,需要额外安装lighttpd或者单独安装spawn-fcgi,其实PHP自带的php-fpm也挺好用的。

一、安装Nginx

# cd /usr/ports/www/nginx
# make install clean

选上自己需要的模块

FreeBSD Nginx安装

二、安装PHP

# cd /usr/ports/lang/php52
# make install clean

记得选择FASTCGI和FPM模块

FreeBSD PHP5安装

然后安装php52-extensions

# cd /usr/ports/lang/php52-extensions
# make install clean

根据需要选择相关的模块

三、配置php-fpm

# vi /usr/local/etc/php-fpm.conf
根据实际环境修改如下参数:

<value name=”listen_address”>127.0.0.1:9000</value>
<value name=”owner”>www</value>
<value name=”group”>www</value>
<value name=”mode”>0666</value>
<value name=”max_children”>5</value>
<value name=”request_slowlog_timeout”>0s</value>
<value name=”max_requests”>500</value>

四、启动php-fpm

# vi /etc/rc.conf

php_fpm_enable=”YES”

# /usr/local/etc/rc.d/php_fpm start

五、配置Nginx

user  www www;
worker_processes  8;

events {
use kqueue;
worker_connections  51200;
}

http {
include       mime.types;
default_type  application/octet-stream;

server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 8m;

sendfile        on;
tcp_nopush     on;
keepalive_timeout  65;

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;

gzip  on;
gzip_min_length  1k;
gzip_buffers     4 16k;
gzip_http_version 1.0;
gzip_comp_level 2;
gzip_types       text/plain application/x-javascript text/css application/xml;
gzip_vary on;

tcp_nodelay on;

server {
listen      80;
server_name  www.bsdart.org;
root  /data/web/htdocs;
index index.htm index.html index.php;

location ~ .*\.(php|php5)?$ {
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
include        fastcgi.conf;
}

error_page   500 502 503 504  /50x.html;
location = /50x.html {
root   html;
}
}
}

五、启动Nginx

# vi /etc/rc.conf

nginx_enable=”YES”

# /usr/local/etc/rc.d/nginx start

在FreeBSD上运行MySQL数据库

在 FreeBSD 上运行MySQL数据库

概要

FreeBSD 7.0包含了大量针对多处理器系统的可伸缩性改进。本文的目的在于整理一系列适用于 FreeBSD 7.0 的运行 MySQL的技巧。

硬件准备

一般而言,增加可用的 CPU 数量,会显著地改善数据库的查询性能。除此之外,在规划硬件配置时,还应考虑一些其他问题:

    将不同性质的读写操作分散到不同的物理磁盘上

成本方面的考虑,通常说来,对于顺序读写操作,使用ATA/SATA硬盘完全能够胜任。这包括服务器日志、数据库事务日志等等。而对于随机读写操作,如数据库数据文件,则推荐使用SCSI或SAS硬盘。此外,将不同性质的读写操作分散到不同的物理盘上,有助于降低发生故障时将数据完全丢失的风险,并可以有效地避免将单块磁盘的I/O性能耗竭,而导致系统响应时间变差。

    使用合适的数据块尺寸来初始化文件系统

在初始化文件系统时,数据块尺寸会决定文件系统一次性向磁盘发出读写请求时的数据量。请参考你的数据库的用户手册来了解合适的尺寸大小。对于 UFS 而言,较大的数据块还可以带来的一个“副作用”是,由于大数据块会使文件系统中的重要数据单元——柱面组的数量下降,对性能会有一定改善,并且会显著减少fsck所需的时间。

    使用更多的内存

编译系统

默认配置的 FreeBSD 7.0 采用传统的 4BSD 调度器,因此需要将其替换为 ULE 调度器:

cd /usr/src/sys/`uname -p`/conf
sed -e s,4BSD,ULE,g GENERIC > DB-GENERIC
cd /usr/src
echo KERNCONF=DB-GENERIC >> /etc/make.conf
make buildworld buildkernel && sudo make installkernel installworld

MySQL 的编译

我们推荐使用的 MySQL 版本是 5.0。推荐的 ports.conf 项目为:

databases/mysql*-server: BUILD_OPTIMIZED=yes|WITH_XCHARSET=yes

安装方法:

portinstall databases/mysql50-server

ports安装具体方法:

#cd /usr/ports/databases/mysql51-server     #这里以安装mysql5.1为例
#make install clean
#rehash
#cp /usr/local/share/mysql/my-large.cnf /etc/my.cnf            #服务器内存1G,但是与apache在一起

/usr/local/share/mysql下面有5个my-xxxx.cnf文件

my-small.cnf 最小配置安装,内存?64M,数据数量最少

my-large.cnf 内存=512M

my-medium.cnf 32M<内存<64M,或者内存有128M,但是数据库与web服务器公用内存

my-huge.cnf 1G<内存<2G,服务器主要运行mysql

my-innodb-heavy-4G.cnf 最大配置安装,内存至少4G

在 rc.conf.local 里面做如下设置

mysql_dbdir="/path/to/MySQL_data"
mysql_enable="YES"

其中 /path/to/mysql_data 是 MySQL 数据库所在的位置。在第一次通过 MySQL 的 rc 脚本启动 MySQL 的时候,rc 脚本会负责正确的初始化 MySQL 的数据库。

原文链接:http://wiki.freebsdchina.org/doc/d/database_running

FreeBSD下安装Wine

FreeBSD下安装Wine

Wine是一个在x86、x86-64上容许类Unix操作系统在X Window System下运行Microsoft Windows程序的软件。另一方面,电脑程序员能经由Wine的程序库将视窗的程序转移至类Unix操作系统中运行。Wine不是一个完整的Windows模拟器,而是模拟出操作系统的兼容模式来调用DLL以运行Windows程序。Wine是自由软件,在GNU宽通用公共许可证(LGPL) 下发布。

使用pkg安装

FreeBSD amd64下安装wine

我们可以直接下载编译好的二进制版本,地址http://people.freebsd.org/~ivoras/wine/,以wine 1.3.6 for FreeBSD 8 amd64为例,pkg_add wine-fbsd64.8-1.3.6,1.tbz。

使用ports安装

FreeBSD x86下安装wine

ports中的wine默认支持FreeBSD x86,执行cd /usr/ports/emulators/wine && make install clean即可。

FreeBSD amd64下安装wine

FreeBSD当前缺乏支持64位系统上的32位wine。 安装步骤如下:

1.
# cd /usr/src && make buildworld installworld distribution TARGET=i386 DESTDIR=/compat/i386
# chroot /compat/i386
# /etc/rc.d/ldconfig start
# mount -t devfs devfs /dev
# mkdir -p /usr/ports; mount nfs:/usr/ports /usr/ports (or mount it via nullfs from outside the chroot, or just copy everything over)

2.
设置环境变量
# setenv MACHINE i386
# setenv UNAME_p i386
# setenv UNAME_m i386

3.
# cd /usr/ports/emulators/wine && make install clean
# exit

4.
使用winecfg别名配置wine
alias winecfg=“LD_32_LIBRARY_PATH=/compat/i386/usr/local/lib PATH=/compat/i386/usr/local/bin:$PATH /compat/i386/usr/local/bin/winecfg”

使用wine32别名执行wine
alias wine32=“LD_32_LIBRARY_PATH=/compat/i386/usr/local/lib PATH=/compat/i386/usr/local/bin:$PATH /compat/i386/usr/local/bin/wine”

注:要让《暗黑破坏神2》正常放出声音,执行winecfg配置,设置声音加速为”Emulation”,再执行“wine32 Game.exe”即可。

原文链接:http://wiki.freebsdchina.org/software/w/wine