标签: FreeBSD

  • FreeBSD下Mount总结

    一、mount FAT/FAT32分区(C盘为例)

    mount -t msdos /dev/ad0s1 /mnt
    

    mount_msdos /dev/ad0s1 /mnt     #for 4.x
    mount_msdosfs /dev/ad0s1 /mnt   #for 5.x
    

    二、mout Windows的扩展分区(FAT/FAT32)

    命令和“一”一样,只是要记住:扩展分区从s5开始,例如mount D盘,可用:

    mount -t msdos /dev/ad0s5 /mnt
    mount_msdos /dev/ad0s5 /mnt     #for 4.x
    mount_msdosfs /dev/ad0s5 /mnt   #for 5.x
    

    三、mount NTFS分区(C盘为例)

    mount -t ntfs /dev/ad0s1 /mnt
    

    mount_ntfs /dev/ad0s1 /mnt
    

    [注意]

    1.chinese/gbfs 的 ntfs 似乎有问题,不建议玩家级用户使用

    2.要让mount上的windows 分区(或CD-ROM)显示中文,需要升级你的ports,再安装gbfs:

    #cd /usr/ports/chinese/gbfs
    #make install clean
    

    然后编译内核,注释掉”options CD9660″,”options MSDOS”。

    3.在5.1-current上不用安装gbfs,用:

    mount_msdosfs -L zh_CN.GB18030 /dev/ad0sX /mnt
    

    命令就可以支持FAT32分区上的中文文件名,当然,locale可以不用18030,zh_CN.eucCN, zh_CN.GBK都可以!

    四、mount Linux Ext2fs/Ext3fs

    在内核里面加入“options EXT2FS”,编译内核。mount 的时候用“mount_ext2fs”命令即可,ext3fs的mount也用“mount_ext2fs”。

    五、mount 普通数据光盘

    mount_cd9660 /dev/acd0 /cdrom
    

    六、mount ISO 文件

    在5.x中如下

    mdconfig -a -t vnode -f abc.iso -u 1
    mount_cd9660 /dev/md1 /cdrom
    

    4.8的版本

    vnconfig /dev/vn0 /home/xiaoche/a.iso
    mount -t cd9660 /dev/vn0 /mnt
    
    umount /mnt
    vnconfig -u /dev/vn0
    

    七、mount CD、VCD、DVD

    播放CD、VCD、DVD不用先mount上。如果你一定要mount上,可以这样:

    #mount_cd9660 -s 0 /dev/acd0 /cdrom
    

    八、mount 软盘

    1.Format:

    # /usr/sbin/fdformat -f 1440 /dev/fd0
    

    2.Run disklabel:

    # /sbin/disklabel -B -r -w /dev/fd0 fd1440
    

    3.Create New FS:

    # /sbin/newfs_msdos /dev/fd0
    

    4.Mount & Use

    #mount_msdosfs /dev/fd0 /mnt
    

    九、mount usb

    确保内核中有如下项:

    device scbus
    device da
    device cd
    

    在GENERIC中默认都有,如果没有,请编译内核。大多数U盘用的是FAT文件系统,所以用以下命令挂载:

    mount -t msdos /dev/da0 /mnt
    

    十、mount ZIP软盘

    #mount_msdosfs /dev/afd0s4 /mnt/zip
  • FreeBSD 中 vmstat 命令详解

    命令輸出的例子:

    % vmstat
     procs      memory      page                   disk   faults         cpu
     r b w     avm    fre   flt  re  pi  po    fr  sr ad0   in   sy   cs us sy id
     1 0 0    185M   212M    49   0   0   0    46   0   0 1132  830  363  0  0 99
    
    

    参数说明
    procs

    r: 在运行的进程数
    b: 在等待io的进程数(等待i/o,paging等等)
    w: 可以进入运行队列但被替换的进程
    memory

    以”K”为单位,包括虚拟内存和真实内存,正在运行或最近20秒在运行的进程所用的虚拟内存将被视为”active”。

    avm: 活动的虚拟内存
    free: 空闲的内存
    page

    统计错误页和活动页,每5秒平均一下,以秒为单位给出数值。

    flt: 错误页总数
    re: 回收的页面
    pi: 进入页面数
    po: 出页面数
    fr: 空余的页面数
    sr: 每秒通过时钟算法扫描的页面
    disk

    显示每秒的磁盘操作。磁盘名字的前两个字母加数字,默认只显示两个磁盘,如果有多的,可以加”-n”来增加数字或在命令行下把磁盘名都填上。

    faults

    显示每秒的中断数。

    in: 设备中断
    sy: 系统中断
    cy: CPU交换
    cpu

    表示CPU的使用状态。

    cs: 用户进程使用的时间
    sy: 系统进程使用的时间
    id: CPU空闲的时间
    数值说明
    如果”r”经常大于4,且”id”经常少于40,表示cpu的负荷很重。
    如果”pi”,”po”长期不等于”0″,表示内存不足。
    如果”disk”经常不等于”0″,且在”b”中的队列大于3,表示”io”性能不好。

  • FreeBSD vmstat详解

    top是给Linux设计的。在FreeBSD VM里面的Free概念和其他OS完全不同,使用top查看Free内存对于FreeBSD来说可以说没什么意义。正确的方法是看vmstat。

     # vmstat
      procs   memory          page                       disk   faults     cpu
      r b w   avm    fre      flt  re  pi   po   fr   sr ad0    in    sy   cs    us  sy id
      0 2 1   270512   20316  30   0   0    0    26   5  1223   1589  98   593   1   1  99

    最好使用vmstat t [n]命令,例如 vmstat 5 10,表示在t(5)秒时间内进行n(10)次采样。如果只使用vmstat,无法反映真正的系统情况。

    procs:
    r–>在运行的进程数
    b–>在等待io的进程数(等待i/o,paging等等)
    w–>可以进入运行队列但被替换的进程
    memoy(以kb为单位,包括虚拟内核和真实内存,正在运行或最近20秒在运行的进程所用的虚拟内存将被视为active)
    avm–>活动的虚拟内存
    free–>空闲的内存
    pages(统计错误页和活动页,每5秒平均一下,以秒为单位给出数值)
    flt–>错误页总数
    re–>回收的页面
    pi–>进入页面数
    po–>出页面数
    fr–>空余的页面数
    sr–>每秒通过时钟算法扫描的页面
    disk 显示每秒的磁盘操作(磁盘名字的前两个字母加数字,默认只显示两个磁盘,如果有多的,可以加-n来增加数字或在命令行下把磁盘名都填上。)

    fault 显示每秒的中断数
    in–>设备中断
    sy–>系统中断
    cs–>cpu交换(上下文切换)
    cpu 表示cpu的使用状态
    cs–>用户进程使用的时间
    sy–>系统进程使用的时间
    id–>cpu空闲的时间

    如果 r经常大于 4 ,且id经常少于40,表示cpu的负荷很重。
    如果pi,po 长期不等于0,表示内存不足。
    如果disk 经常不等于0, 且在 b中的队列 大于3, 表示 io性能不好。

    以下是一个繁忙批量插入MySQL数据(大概每隔20秒可以插入50万多条数据)的vmstat例子:

     procs      memory      page                    disks     faults         cpu
     r b w     avm    fre   flt  re  pi  po    fr  sr da0 da1   in   sy   cs us sy id
     1 0 63  23302M   803M   845   0   0   0     0   0   0   0   17  124  499  6  0 94
     1 0 63  23302M   796M   837   0   0   0     2   0   1   0   18  158  505  6  0 94
     1 0 63  23302M   790M   833   0   0   0     6   0  76   0  159  143  910  6  0 94
     1 0 63  23302M   784M   868   0   0   0    16   0   8   0   34  156  550  6  0 94
     2 0 63  23456M   709M  8317   2   0   0  2383   0  95   0  295 5504 1930  8  1 91
     1 0 63  21975M  1281M 18909   3   0   0 94840   0 620   0 1893 64333 7822 10  4 87
     1 0 63  21975M  1281M   415   0   0   0   342   0   1   0   29  611  566  6  0 94
     1 0 63  22093M   978M 43503   0   0   0  5140   0 2187   0 4225  582 16279  6  2 92

    循环插入到了后面,随着表越来越大,系统调用和上下文切换越来越频繁:

     procs      memory      page                    disks     faults         cpu
     r b w     avm    fre   flt  re  pi  po    fr  sr da0 da1   in   sy   cs us sy id
     1 0 63  23233M   536M 28219   0   0   0   352 51252 869   0 1864 14542 11015  2  3 95
     1 0 63  23349M   834M 12457   0   0   0     4 51247 2078   0 3945  179 14926  6  2 92
     2 0 63  27343M  3130M  9295   0   0   0  2708   0   2      0   73 6988 1377   7  1 92
     ....中间比较正常,因为插入时间比较久
     1 0 63  28788M  2934M 25760   0   0   0  5860   0   620   8 5529 42712 12924 11  2 86
     0 0 63  25963M  3081M  4379   0   0   0 24049   0   3445  15 11274 97350 31798  2  7 91
     0 0 63  33689M  1801M   388   0   0   0  4492   0 4403  15 8780 135421 35502  2  5 93

    不熟悉mysql内部机制,但是很明显,随着表越来越大,表插入速度越来越慢,因为系统调用和上下文切换越来越频繁了,浪费了很多CPU时间。
    到了mysql表里有六千万多条数据时,每插入五十万条记录,已经要耗时100s,整个mysql数据库变得很繁忙,一些几万数据的插入也慢慢不能及时处理。

    以下是一个拷贝4G文件到远程NFS的vmstat例子:

     procs      memory      page                    disks     faults         cpu
     r b w     avm    fre   flt  re  pi  po    fr  sr da0 da1   in   sy   cs us sy id
     2 0 63  19731M  2400M 24415   0   0   0 70077   0  14   0  591 3915 1770 12  1 87
     0 0 63  16352M  3594M   443   0   0   0 154948   0 2471   0 5067 17602 19448  1  2 96
     0 0 63  16352M  3594M     0   0   0   0     0   0 772   0 1590  134 6577  0  0 100
     0 0 63  16352M  3594M     0   0   0   0     0   0 856   0 1750  164 7135  0  0 100
     0 0 63  16361M  3594M  1112   0   0   0  1030   0 400   0  815 1248 3620  0  0 100
     0 0 63  16361M  3594M     0   0   0   0     0   0   0   0   15  116  488  0  0 100
     0 0 63  16352M  3594M   329   0   0   0   352   0 2186   0 4275  595 15809  0  2 98
     0 0 63  16352M  3594M     0   0   0   0     0   0 270   0  532  134 3186  0  0 100
     0 0 63  16352M  3594M     0   0   0   0     0   0 185   0  368  164 2062  0  0 100

     

    最后稳定下来,状态良好的vmstat例子:

     procs      memory      page                    disks     faults         cpu
     r b w     avm    fre   flt  re  pi  po    fr  sr da0 da1   in   sy   cs us sy id
     0 0 63  16292M  3564M     0   0   0   0     0   0   0   0   12  142  472  0  0 100

     

  • freebsd同步时间

    # ntpdate cn.pool.ntp.org

     

    这样时间就准了。

    cn.poolntp.org 是中国的时间服务器。

     

    如想每天晚上23点同步一次时间

    # ee /etc/crontab

    在最后加入

     

    #Synchronise My Server clock

    #minute hour mday month wday who command

    0 23 * * * root /usr/sbin/ntpdate cn.pool.ntp.org > /dev/null

     

    保存退出,就可以了。

  • freebsd 下vsftpd安装错误

    ===> Deinstalling for ftp/vsftpd

    ===> vsftpd-ssl not installed, skipping

    ===> Installing for vsftpd-ssl-3.0.2

    /usr/bin/env PKG_PREFIX=/usr/local /bin/sh /usr/ports/ftp/vsftpd/pkg-install vsftpd-ssl-3.0.2 PRE-INSTALL

    pw: no such user `ftp’

    pw: user ‘ftp’ already exists

    Failed to add user ftp as gid 14

    *** Error code 1

    Stop in /usr/ports/ftp/vsftpd.

    *** Error code 1

    Stop in /usr/ports/ftp/vsftpd.

     

    遇到这个问题后,搞了一天,才得到解决,也不知道是不是对所有人都实用。解决方法如下:

    直接删除ee /etc/password 和 /etc/master.passwd手动删除ftp用户,然后

    pwd_mkdb /etc/master.passwd更新一下ok

    再cd /usr/ports/ftp/vsftpd && make install clean

  • Freebsd8.2 32位ports安装php5.2+fpm+mysql5.1+nginx+Zend

    一、安装软件前的准备:

    系统的安装:让机房最小化安装32位freebsd8.2系统。

    ports的安装:机房装好系统后,远程登录,自己在线安装ports

    命令:

    sysinstall->Configure->Distributions->ports->FTP->China->OK

    修改系统密码:passwd回车

    二、手动安装nginx+php

    (1) 进入系统后,准备cvs更新:

    1. cd /usr/ports/net/cvsup-without-gui

    # make install clean

    2. cp /usr/share/examples/cvsup/ports-supfile /etc/ports-supfile

    3. # ee /etc/ports-supfile

    将其中的#*default host=CHANGE_THIS.FreeBSD.org一行改为:

    *default host=cvsup4.FreeBSDchina.org

    {也可以指定更新版本日期,例如加上:*default date=2009.10.05.00.00.00

    (这个可以省略)

    }

    4. 更新ports

    /usr/local/bin/cvsup -g -L 2 /etc/ports-supfile

    2) 安装mysql

    #cd /usr/ports/databases/mysql51-server

    #make WITH_CHARSET=gbk WITH_XCHARSET=all WITH_PROC_SCOPE_PTH=yes BUILD_OPTIMIZED=yes BUILD_STATIC=yes SKIP_DNS_CHECK=yes WITHOUT_INNODB=yes install clean

    #cp /usr/local/share/mysql/my-large.cnf /usr/local/etc/my.cnf ##mysql的优化参数,也可以手动修改

    #rehash

    # mysql_install_db –user=mysql ##初始化mysql

    #/usr/local/bin/mysqld_safe & ##启动mysql

    #/usr/local/bin/mysqladmin -u root password ‘newpass’

    ##设置root密码,newpass是你需要设置的密码

    关闭mysql可以使用mysqladmin -uroot -p shutdown

    mysqladmin -uroot -p password ‘新密码’ 回车后输入旧密码

    mysql -uroot -p #登陆mysql monitor.

    3) 安装php

    # cd /usr/ports/lang/php52装的是5.2版本,后装php5-extensions的时候对应的要cd /usr/ports/lang/php52-extensions

    #make config ##配置编译参数

    [X] CLI Build CLI version

    [X] CGI Build CGI version

    [ ] APACHE Build Apache module

    [ ] DEBUG Enable debug

    [X] SUHOSIN Enable Suhosin protection system

    [X] MULTIBYTE Enable zend multibyte support

    [ ] IPV6 Enable ipv6 support

    [ ] REDIRECT Enable force-cgi-redirect support (CGI only)

    [ ] DISCARD Enable discard-path support (CGI only)

    [X] FASTCGI Enable fastcgi support (CGI only)

    [X] FPM Build FPM version //php5.2 FPM依赖FASTCGI

    [X] PATHINFO Enable path-info-check support (CGI only)

    #make install clean

    # cp /usr/local/etc/php.ini-dist /usr/local/etc/php.ini

    4)升级libtool

    #cd /usr/ports/devel/libtool/ && make reinstall clean

     

    5) 安装php52-extensions

    #cd /usr/ports/lang/php52-extensions //5.2版本的php必须对应装5.2版本的扩展

    #make config

    Options for php5-extensions 1.1

    ————————————————-

    [X] CURL CURL support

    [ ] FTP FTP support//咱们不要

    [X] GD e in

    [X] GETTEXT

    [X] MBSTRING multibyte string support

    [X] MCRYPT Encryption support

    [X] MYSQL

    [X] MYSQLi

    [ ] PCRE Perl Compatible Regular Expression support

    [ ] POSIX //去掉.

    [ ] SQLITE //去掉.

    [X] ZIP ZIP support

    [X] ZLIB

    # make install clean

    不同以前版本,安装完php52-extensions发现很多扩展并没有安装,手动挨个去安装吧,包括:mysql、mysqli、gd、mbsting、curl,其中,安装gd扩展耗时较长,下载依赖类库较多,多次弹出选择框。

    # cd /usr/ports/databases/php52-mysql

    # make install clean

    # cd /usr/ports/databases/php52-mysqli

    # make install clean

    # cd /usr/ports/graphics/php52-gd

    # make install clean

    # cd /usr/ports/converters/php52-mbstring

    # make install clean

    # cd /usr/ports/ftp/php52-curl

    # make install clean

     

    6) 安装Zend Optimizer

     

    #cd /usr/ports/devel/ZendOptimizer/

     

    #make #不要安装,只需要下载解包

     

    #cd /usr/ports/devel/ZendOptimizer/work/ZendOptimizer-*

     

    #./install-tty ##会出现一个文字的安装界面,只是最后一步,不要选择apache就可以了

    6)        安装nginx

    #cd /usr/ports/www/nginx/

    #make install

     

    配置nginx

    在index.html前面添加一个index.php

     

    location / {

    root   /usr/local/www/nginx; #虚拟目录名

    index   index.html index.htm;

    }

    #location ~ \.php$ {

    #    fastcgi_pass    127.0.0.1:9000;

    #    fastcgi_index   index.php;

    #   fastcgi_param     SCRIPT_FILENAME     /scripts$fastcgi_script.name;

    #    include     fastcgi_params;

    #}

    将前面的#去掉,修改为

    location ~ \.php$ {

    fastcgi_pass    127.0.0.1:9000;

    fastcgi_index   index.php;

    fastcgi_param CRIPT_FILENAME     /usr/local/www/nginx$fastcgi_script_name;

    include     fastcgi_params;

    }

    /usr/local/sbin/php-fpm  //手动启动php-fpm

    /usr/local/sbin/nginx  // 手动启动nginx

    7)添加开机自启动:

    在/etc/rc.conf中加入下面三行内容:

    mysql_enable=”YES”

    nginx_enable=”YES”

    php_fpm_enable=”YES”

  • 关于FORCE_PKG_REGISTER

    当你先已用ports安装过某一软件,再次安装同一项时,会出现类似:You may wish to “make deinstall” and install this port again

    by “make reinstall” to upgrade it properly.

    If you really wish to overwrite the old port of PORTS資料夾位置

    without deleting it first, set the variable “FORCE_PKG_REGISTER”

    in your environment or the “make install” command line.

    的错误。

     

    解决办法:只要在make install 时加上 FORCE_PKG_REGISTER=”yes” 就可以强制安裝

  • FreeBSD防火墙Firewall(ipfw)

    先將kernel複製出來

    mkdir /usr/local/etc/FreeBSD

    cd /usr/src/sys/i386/conf

    cp GENERIC /usr/local/etc/FreeBSD/MYKERNEL

    ln -s /usr/local/etc/FreeBSD/MYKERNEL

    vi /usr/local/etc/FreeBSD/MYKERNEL

    加入

    options IPFIREWALL #firewall

    options IPFIREWALL_VERBOSE #enable logging to syslogd(8)

    options IPFIREWALL_FORWARD #packet destination changes

    options IPFIREWALL_DEFAULT_TO_ACCEPT #allow everything by default

    cd /usr/src;make kernel

    完成後開始設定

    vi /etc/rc.conf

    加入

    #firewall

    firewall_enable=”YES”

    firewall_logging=”YES”

    firewall_script=”/etc/rc.firewall”

    vi /etc/rc.firewall

    將內容全部刪除改為

    #!/bin/sh

    fwcmd=”/sbin/ipfw”

    Trust_IP1=”127.0.0.1″ #這裡要換成server本身的IP

    Trust_IP2=”120.119.1.0/24″ #可通過的網段

    UnTrust_IP1=”192.83.191.0/24″

    Allowed_TCP_In_1=”22,25,53,80,443″

    #you want to open port

    Traceroute=”33433-33499″

    Allowed_UDP_Out=”20,21,53,113″

    Allowed_UDP_In=”20,21,53,113″

    Allowed_UDP_ftp_Out=”65000-65500″

    Allowed_UDP_ftp_In=”65000-65500″

    Allowed_TCP_ftp_Out=”65000-65500″

    Allowed_TCP_ftp_In=”65000-65500″

    #ipfw [add/del/fwd] [serial] [allow/deny] [protocol] [from] [ports] to [destation] [ports]

    $fwcmd -f flush

    #flush ipfw tables

    $fwcmd add 1 allow ipv6 from any to any

    $fwcmd add 00010 allow tcp from me to any setup keep-state

    $fwcmd add 00021 check-state

    $fwcmd add 00030 allow ip from ${Trust_IP1} to any

    $fwcmd add 00031 allow ip from ${Trust_IP2} to any

    $fwcmd add 00060 allow icmp from any to any

    $fwcmd add 00061 allow udp from any to any $Traceroute

    $fwcmd add 00120 deny ip from ${UnTrust_IP1} to me

    $fwcmd add 00121 deny tcp from ${UnTrust_IP1} to me 25

    $fwcmd add 56000 allow tcp from any to any ${Allowed_TCP_In_1}

    $fwcmd add 56003 allow udp from any ${Allowed_UDP_In} to any

    $fwcmd add 56004 allow udp from any to any ${Allowed_UDP_ftp_Out}

    $fwcmd add 56005 allow tcp from any to any ${Allowed_TCP_ftp_Out}

    $fwcmd add 65534 deny log ip from any to any

    #deny all ip

    $fwcmd zero

    #clean counter

    sh /etc/rc.firewall &

    reboot

  • FreeBSD安裝sshguard-ipfw

    請先完成ipfw設置

    cd /usr/ports/security/sshguard-ipfw;make install clean

    在/etc/syslog.conf 中

    #auth.info;authpriv.info |exec /usr/local/sbin/sshguard

    註解去掉

    也可以自由設定鎖定時間

    例如:

    auth.info;authpriv.info |exec /usr/local/sbin/sshguard -a 5 -p 7200 -s 3600

    (a:失敗多少次 p:被擋多久(秒) s:多少秒忘記攻擊)

    最後/etc/rc.d/syslogd restart

    接著你可以tail -f /var/log/auth.log,然後用putty連線,密碼請故意打錯四次,就會出現:

    Jan 26 13:31:05 earth sshguard[40059]: Blocking 210.71.11.116:4 for >420secs: 4 failures over 2 seconds.

    解除鎖定:

    使用另一個IP登入

    ipfw show

    ipfw delete xxxxx

  • FreeBSD安装pure-ftpd

    cd /usr/ports/ftp/pure-ftpd

    make install clean(選UTF-8)

    cd /usr/local/etc

    cp pure-ftpd.conf.sample pure-ftpd.conf

    vi /etc/rc.conf

    加入

    pureftpd_enable=”YES”

    ftp傳輸檔案時是有特定的port,

    如果防火牆有擋port,可以自行設定ftp檔案傳輸的port

    vi /usr/local/etc/pure-ftpd.conf

    將PassivePortRange這行改成

    PassivePortRange 65000 65500

    啟用ftp

    /usr/local/etc/rc.d/pure-ftpd start