Monday, November 7, 2011

freebsd 路由问题

使用virtualbox安装的freebsd配置的nginx+php-fpm+mysql安装的wordpress无法使用no-ip的动态域名访问, 可是同样配置的arch上的wordpress却可以从外网无障碍访问?


使用路由的端口映射,把外网的80端口转给内网的虚拟机上,就是使用的NAT(network address translation)(网络地址转换)


仔细研究了研究,2机的不同点只有ip,freebsd的ip为192.168.1.110,arch的ip为192.168.111

然后就想到是不是路由设置的问题?

2台guest机为了和主机通信,都是使用的2个网卡,一个使用的NAT自动获取地址;1个使用的bridged 桥接网络来实现和 host机的链接.

使用netstat -s 来察看

发现freebsd的设定为192.168.1.110的2号网卡em0没有设置网关....难道就是这个问题?

最后,每个路由的不同属性可以在 Flags 列中看到。下边是个关于这些标志和它们的含义的一个简表:
U Up: 路由处于活动状态。
H Host: 路由目标是单个主机。
G Gateway: 所有发到目的地的网络传到这一远程系统上, 并由它决定最后发到哪里。
S Static: 这个路由是手工配置的,不是由系统自动生成的。
C Clone: 生成一个新的路由, 通过这个路由我们可以连接上这些机子。 这种类型的路由通常用于本地网络。
W WasCloned: 指明一个路由——它是基于本地区域网络 (克隆) 路由自动配置的。
L Link: 路由涉及到了以太网硬件。

通过修改/etc/rc.conf 文件,给em0网卡添加路由

在/etc/rc.conf中,添加
defaultrouter="192.168.1.1"

然后重启网络服务
# /etc/rc.d/netif restart
注意: 如果在 /etc/rc.conf 中配置了默认网关, 还需要运行下面的命令:
# /etc/rc.d/routing restart


然后,使用noip注册的域名来访问,OK啦!


参考  :  设置网卡
             网关和路由

用pkg_cutleaves来管理软件包

作者:于江生(北京大学计算机系)
声明:允许未经作者的同意进行非商业目的的转载,但必须保持原文的完整性。

FreeBSD对包的管理极为严格,
# make deinstall clean
可以轻而易举地将一个软件包卸载干净。如果由于某些特殊原因系统不能干净地删除某个目录,它会明白地提示用户哪个目录或哪个文件未清除,待用户进一步查明。与GNU/Linux相比,FreeBSD对port tree的维护和管理要更学院派一些。我喜欢用
# make install clean
来编译源码安装,有时也随意地pkg_add。按照运行依存(run dependency),工具软件之间的关系复杂,呈现网状结构,动一处则牵动甚多。FreeBSD下安装软件简单至极,系统能自动按照依存关系递归地安 装所需要的ports。卸载软件也不难,但如果用户有“洁癖”,不想多保留任何“无用的东西”,则就需要pkg_cutleaves来帮忙管理这些软件包 了。
内容摘要

问题的由来

我们在使用FreeBSD的时候,经常安装软件包。在安装的过程中,有一些build时依存的包会先被安装,而往往它 们不是我们所需要的。例如在安装xvidcap时先安装gawk,安装后也不卸载gawk。如果我们不需要gawk,就不得已在安装成功xvidcap后 把gawk手动卸载。
问题是,包之间的复杂的依存关系让我们手动卸载时经常出错。这时,我们需要工具来梳理已经安装的软件包之间的关系,按照它们之间的依存关系整理出一 个有向非循环图(DAG),我们不妨称之为依存图,以此约束我们每一次的卸载都是从叶子结点开始。幸运的是,我们有pkg_cutleaves这样好用的 管理工具,可以帮助我们递归地卸载某些我们不需要的叶子结点。下面给出一个简短的介绍,假设命令都是root下达的。

显示所有叶子结点信息

首先,我们通过
# pkg_cutleaves -lc > ~/installed
来生成所有的叶子结点,大致样子如下:
ImageMagick-6.4.3.6 - Image processing tools
R-2.7.1 - A language for statistical computing and graphics
WordNet-3.0 - Dictionaries and thesauri with devel. libraries (C, TCL) and browsers
ardour-2.4.1 - Ardour - a digital audio workstation
auctex-emacs22-11.85 - Integrated environment for writing LaTeX using GNU Emacs
bibtool-2.48_1 - Command line manipulation of BibTeX files

卸载我们不需要的叶子结点

我们通过
# pkg_cutleaves -lxg
来生成一个文件:/usr/local/etc/pkg_leaves.exclude,这个文件记录了所有叶子结点的文件名,不包含版本信息。我们可以 编辑修改这个文件,去掉我们不需要的叶子结点。接着,我们可以放心地清除我们不需要的build依存包,一个简单的命令就搞定:
# pkg_cutleaves -Rxg
系统会交互地询问我们是否删除某某某,保证文件/usr/local/etc/pkg_leaves.exclude所记录的就是软件依存图的所有叶子结点。概括而言,pkg_cutleaves清除软件包安装过程中产生的冗余的包,为我们的系统瘦身。

Sunday, November 6, 2011

FNMP freebsd8.2 安装配置 nginx+mysql 51+php-fpm 53

FNMP (Fcgi, Nginx, Mysql and Php)

freebsd8.2 下ports 安装配置 nginx+mysql+php-fpm

 因为php需要mysql支持,所以,我一般按照mysql+php+nginx的步奏来安装.

1 安装 mysql 5.1版本 
(mysql55版本老编译不过去,还是采用稳妥的51来安装)

cd /usr/ports/databases/mysql51-server
make WITH_CHARSET=utf8 WITH_XCHARSET=all WITH_COLLATION=utf8_general_ci install clean


启动 
添加以下内容到/etc/rc.conf中

mysql_enable="YES"
 
配置

/usr/local/etc/rc.d/mysql-server start
给root帐号添加密码
mysqladmin -u root password 'MyPassword'

service mysql-server restart   *mysql重新启动
mysql -u root -p
 show variables like 'char%';    *设定编码察看
配置文件
挑选下面的配置拷贝到/etc目录
比如# cp /usr/local/share/mysql/my-medium.cnf /etc/my.cnf
 
/usr/local/share/mysql/my-huge.cnf
/usr/local/share/mysql/my-innodb-heavy-4g.cnf
/usr/local/share/mysql/my-large.cnf
/usr/local/share/mysql/my-medium.cnf
/usr/local/share/mysql/my-small.cnf

2 安装php53+php-fpm


安装 
 cd /usr/ports/lang/php5
 make install clean

 
 cd /usr/ports/lang/php5-extension
 make install clean

我这里主要选择了以下几个
[X] BCMATH bc style precision math functions
[X] BZ2 bzip2 library support
[X] CURL CURL support[X] FTP FTP support                          
[X] GD GD library support
[X] ICONV iconv support[X] MCRYPT Encryption support
[X] MHASH Crypto-hashing support
[X] MYSQL MySQL database support           *重要mysql支持
[X] MYSQLI MySQLi database support         *重要mysql支持
[X] OPENSSL OpenSSL support[X] PCRE Perl Compatible Regular Expression support
[X] XML XML support[X] XMLREADER XMLReader support
[X] XMLWRITER XMLWriter support
[X] ZLIB ZLIB support

配置
1 php
在freebsd默认安装的是没有配置文件的,需要你自己拷贝一个

cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini

php.ini-development 开发测试版本  php.ini-production 生产适用版本


2  php_fpm
 配置文件 /usr/local/etc/php-fpm.conf

启动
在 /etc/rc.conf 中添加
php_fpm_enable="YES"
启动php-fpm
# /usr/local/etc/rc.d/php-fpm start


3 安装nginx


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

这里除了默认主要添加了ssl支持这个选项,其他就选择默认就可以了
[X] HTTP_SSL_MODULE Enable http_ssl module
[X] HTTP_STATUS_MODULE Enable http_stub_status module
[X] WWW Enable html sample files

编译完成后,启动 nginx
  1. # echo nginx_enable="YES" >> /etc/rc.conf
这里先不急着 start nginx,因为现在还没有对 PHP 的支持。
  1. # vi /usr/local/etc/nginx/nginx.conf
将如下段落前的 “#” 删除,并且将 html 更改为 /usr/local/www/nginx
location ~ \.php$ {
root /usr/local/www/nginx;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
结束后,编辑 /usr/local/etc/nginx/fastcgi_params,加入
  1. fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
启动 nginx,看看是否已经对 PHP 了
  1. # /usr/local/etc/rc.d/nginx start
  2. # echo "" > /usr/local/www/nginx/info.php

vi /usr/local/www/nginx/info.php
在文件中输入以下内容
phpinfo();
?>

访问 http://yourdomain/info.php,看到 phpinfo 的页面则证明无误。


参考  : Nginx + PHP-FPM + MySQL On FreeBSD 8.2
           nginx + PHP-FPM + MySQL + eAccelerator FreeBSD 8.0 安装笔记
            FreeBSD上搭建nginx 0.8.x + PHP 5.3.x(FastCGI) + MySQL 5.1.x

Saturday, November 5, 2011

freebsd8.2 安装mysql55后修改默认编码utf8

根据160630的patch状态回帖.可以编辑my.conf来更改默认的新建数据库编码

State Changed
From-To: open->closed
By: ale
When: Tue Sep 13 14:56:05 UTC 2011
Why: You should use my.cnf for this config params.

具体参考 : freebsd mysql5.1 与mysql5.5的参数变更

使用如下patch给/usr/ports/datebase/mysql55-server/Makeconfig就可以了


diff -urN mysql55-server-old/Makefile mysql55-server/Makefile
--- mysql55-server-old/Makefile    2011-09-10 14:38:44.000000000 +0000
+++ mysql55-server/Makefile 2011-09-10 15:16:00.000000000 +0000
@@ -53,6 +53,12 @@
 .if defined(WITH_FASTMTX)
 CMAKE_ARGS+= -DWITH_FAST_MUTEXES=1
 .endif
+.if defined(WITH_CHARSET) && ${WITH_CHARSET} != ""
+CMAKE_ARGS+=       -DDEFAULT_CHARSET=${WITH_CHARSET}
+.endif
+.if defined(WITH_COLLATION) && ${WITH_COLLATION} != ""
+CMAKE_ARGS+=       -DDEFAULT_COLLATION=${WITH_COLLATION}
+.endif
 
 # MySQL-Server part
 .if !defined(CLIENT_ONLY)

然后编译的时候,使用
make WITH_CHARSET="utf8" WITH_COLLATION="utf8_unicode_ci" install clean

参考 :  ports/160630: [PATCH] databases/mysql55-server Add WITH_COLLATION and WITH_CHARSET

以往在freebsd中安装databases/mysql55-{server,client}时,需要如下的参数 :


make WITH_CHARSET=utf8 WITH_COLLATION=utf8_general_ci WITH_XCHARSET=complex install


不过因为在 MySQL 5.5.8 以后的 build system 改成了 CMake,导致 ports maintainer 必须重新设计 Makefile。
而目前的 Makefile 尚未设计完善,所以想把这些 options 传递給 CMake 的话,只能直接改 Makefile 解決:


--- mysql55-server/Makefile.orig       2011-03-19 21:13:47.000000000 +0800
+++ mysql55-server/Makefile    2011-04-08 14:31:05.815962791 +0800
@@ -39,7 +39,10 @@
                -DINSTALL_SQLBENCHDIR="share/mysql" \
                -DINSTALL_SUPPORTFILESDIR="share/mysql" \
                -DWITH_LIBEDIT=0 \
-               -DWITH_LIBWRAP=1
+               -DWITH_LIBWRAP=1 \
+               -DDEFAULT_CHARSET="utf8" \
+               -DDEFAULT_COLLATION="utf8_general_ci" \
+               -DWITH_EXTRA_CHARSETS="complex"
 
 .ifdef USE_MYSQL
 .error You have `USE_MYSQL' variable defined either in environment or in make(1) arguments. Please undefine and try again.

如果在做这修改前不小心把沒设好的 MySQL 整套装起來的话,请记得把 mysql55-client 也砍掉一起重裝。
特別是对那些真正需要用到 WITH_EXTRA_CHARSET="complex" 的人,有一边沒弄好的話,网页上就准备出现一大堆「???????」了。
至於是否能像以前那样直接用 make 送參數,就只能慢慢等 maintainer,看他何時會重新把所有 options 對應上去了。


通过使用port来安装
1.该ports 做得不是太好,不支持 make config 修改选项,只能在命令行用
make WITH_CHARSET=gbk WITH_XCHARSET=all 追加参数,或者直接修改 Makefile文件。

2.WITH_CHARSET=gbk 是将mysql的服务及数据库的默认字符集由latin1改为gbk;WITH_XCHARSET=all 是将mysql软件包所带的字符集(包括gbk 和 gb2132)都释放出来。
mysql 不是真的不支持中文,只是采用了utf8字符集而已。 所以不建议你改变默认字符集,应由程序(如PHP)在连接数据库时选定合适的字符集。如,在config.inc.php之类连接参数文件中设定 mysql_query("set names gbk");改变默认字符集可能导致有些外国编的软件如VBulletin3.60运行错误。建议你在mysql5编译时只增加 WITH_XCHARSET=all 即可。

3.应用 make clean 清除配置(假设你以前编译过)
然后 make WITH_XCHARSET=all
最后 make install 安装编译好的软件包(如你以前以前安装过,最好用make reinstall)

4.如你用phpmyadmin导入以前的数据(gb2132 或gbk格式),在创建数据库时务必将默认参数“整理”改为gbk_chinese_ci
5.可以尝试修改my.cnf文件来改变服务器以及客服端的字符编码
[client]
...
character-set-server=utf8

collation-server=utf8_general_ci

default-character-set=utf8
[mysqld]
...
character-set-server=utf8

collation-server=utf8_general_ci

default-character-set=utf8
[mysql]
.......
default-character-set=utf8