2010年8月27日 星期五

在FreeBSD 上使用 Zend framework

Zend framework 真的很棒, 使用過後的感想只有棒一個字

寫一下我在FreeBSD 上架設的過程

提供給有需要的人參考

我的環境 

FreeBSD dns.usnei.net 8.0-RELEASE-p4 FreeBSD 8.0-RELEASE-p4

apache-2.2.13       Version 2.2.x of Apache web server with prefork MPM. (聽說worker 會跟php5衝突)


php5-5.3.3_1        PHP Scripting Language

其它應該沒差吧 

apache 修改的部分有  

DirectoryIndex index.php 要記得加入

DocumentRoot "/htdocs"  且針對 /htdocs 的Options FollowSymLinks 要開啟


否則你會在log 觀察到
Options FollowSymLinks or SymLinksIfOwnerMatch is off which implies that RewriteRule directive is forbidden: /htdocs/index

針對 apache config httpd.conf 這個檔案僅變動如上所提到 

php5 的部分順便貼一下 

AddType application/x-httpd-php-source .phps
AddType application/x-httpd-php .php .php3 .php4 .php5

====================================================================

再來是zend framework  目錄結構  

以我來說, 我已經設定了DocumentRoot 在 /htdocs  

我的目錄結構是這個樣子

/application 
   /models
   /controllers
      ErrorController.php  
      IndexController.php
   /views
     filters/ 
     helpers/ 
     scripts/
        index/ 
             happy.phtml  
             index.phtml
/library 
   Zend                   ->  此為從Zend  下載下來的library 

/htdocs 
      index.php
      .htaccess   

以上提到的目錄及檔案 , 都是手動新增的  以unix like 的 file system 來看應該很清楚

在 ms  上的話, 就以此類推


==============================================================
cat /htdocs/.htaccess 

RewriteEngine on
RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php
---------------------------------------------------------------------------------------

cat /htdocs/index.php

  error_reporting(E_ALL | E_STRICT);  //設定Error Report的等級
  date_default_timezone_set('Asia/Taipei');  //設定時區為台北
  //Include path
  define ('P_S', PATH_SEPARATOR);
  set_include_path('.' .P_S .'../library' .P_S .'../application/models/' .P_S .get_include_path());
  require_once 'Zend/Loader.php';
  Zend_Loader::registerAutoload();
  //Controller
  $frontController = Zend_Controller_Front::getInstance();
  $frontController->setControllerDirectory('../application/controllers');
  $frontController->dispatch();
?>
----------------------------------------------------------------------------------------------------------------------
cat  /application/controllers/IndexController.php

  require_once 'Zend/Controller/Action.php';
  class IndexController extends Zend_Controller_Action{
    public function indexAction(){
         $this->view->message = "index 專案裡面的 index 動作"    # 回傳message 供之後利用 
    }
    public function happyAction(){ 
          $this->view->message = "index 專案裡面的 Index Controller 針對 Happy Action 回傳的字串";   #回傳message 同上 
}
  }
?>
---------------------------------------------------------------------------------------
cat /application/controllers/ErrorController.php  

require_once 'Zend/Controller/Action.php';

class ErrorController extends Zend_Controller_Action
{
  public function errorAction()
  {
    die("An error occurred; please try again later.");
  }
}

#假設找不到符合的controller 則秀出 An  error occurred; please try again later  

---------------------------------------------------------------------------------------
cat /application/view/scripts/index/index.phtml 

echo $this->message;
?>

則 http://yourip/index/index 

會秀出  

 index 專案裡面的 index 動作

cat /application/view/scripts/index/happy.phtml 

PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  
  
    這是index專案裡面命名為happy 的view  展現出來的字串
message; ?>

則 http://yourip/index/hapy 

秀出

這是index專案裡面命名為happy 的view  展現出來的字串
index 專案裡面的 Index Controller 針對 Happy Action 回傳的字串

所以要怎麼表現 由 view/script/index/happy.phtml 決定 

而在controller 同樣可以進行某些動作供view 目錄內的 專案目錄/行為.phtml 使用 

先寫到這邊  也許還有些錯誤觀念的地方 

等之後了解更多再慢慢修改 , 若有高手看到錯誤的地方也請指正!

我參考的連結有 


ngoprekweb

網站製作學習誌

感謝以上BLOG 的主人 , 酷學園也是我以前滿愛逛的一個論壇 ~

2010年8月24日 星期二

婚前與婚後

自從小明結婚後, 老婆規定每個月薪水都要繳回家用再領零用錢

小明某天忽然感嘆的跟小華在MSN 上聊到

小明 : e04 , 我今天早上忽然覺得我自己好有錢, 錢包有1千多塊

小華 : ................

小明 : e04 婚前我根本覺得1千多塊不算甚麼錢啊

小華: 你被馴服了 ...

我絕對不會承認我跟小明有任何關連...

2010年5月26日 星期三

BruteForceBlocker

今天無聊裝的
其實最主要想以daemon的方式來把一些惡意的ssh attempt attack block 掉
同時這套搭配packet filter 使用

基本上僅是一隻perl 程式 

要準備好的條件有

1 加入以下到你現在在運行的pf rule

 table persist file "/var/db/ssh-bruteforce"
 block in log quick proto tcp from to any port ssh

2 加入以下在 /etc/syslog.conf 

auth.info;authpriv.info        | exec /usr/local/sbin/bruteforceblocker

3 安裝缺少的perl 模組

perl -MCPAN -e shell 

內容共使用四個module 

use Sys::Syslog;
use Sys::Hostname;
use LWP::UserAgent;
use Net::DNS::Resolver;



2010年5月12日 星期三

今天make world 發現 -j4 參數餵了以後
會出現錯誤

重新make 一次不加任何參數就ok 了

gcc 版本是

Using built-in specs.

Target: i386-undermydesk-freebsd

Configured with: FreeBSD/i386 system compiler

Thread model: posix

gcc version 4.2.1 20070719 [FreeBSD]

2009年4月1日 星期三

....這陣子

這陣子 沒寫blog
心血來潮打算寫一下
才發現blog 不能開
當下以為是辜狗的問題
後來才發現....我自己的灰塵機上次上pre-release 7.2
因為套件有些問題
自己耍笨下了pkg_delete -af 清掉所有套件
只把php nginx php-cgi 編回去就丟著了XD

完全忘了dns 掛在那台

2009年2月20日 星期五

使用google 服務 讓你也有一台mail server 還不用管理

出神入化的google 又一讓我大驚的創舉

若我們擁有以下條件即可達成輕鬆, 不需任何成本

只要一杯咖啡的時間, 完成這個工作

1. gmail account (這個應該大家都有吧)

2. 自己的domain (這個不貴吧)

以下以funnyd.idv.tw 為例, 因我本身已提供funnyd.idv.tw 的mail services

故以下使用mail.funnyd.idv.tw 環境是BSD6.1

3 設定DNS . 新增MX 記錄 開啟funnyd.idv.tw 的zone file

mail IN MX 1 ASPMX.L.GOOGLE.COM.
mail IN MX 5 ALT1.ASPMX.L.GOOGLE.COM.
mail IN MX 5 ALT2.ASPMX.L.GOOGLE.COM.
mail IN MX 10 ASPMX2.GOOGLEMAIL.COM.
mail IN MX 10 ASPMX3.GOOGLEMAIL.COM.
mail IN MX 10 ASPMX4.GOOGLEMAIL.COM.
mail IN MX 10 ASPMX5.GOOGLEMAIL.COM.
www.mail IN CNAME ghs.google.com.

kill -1 `cat /var/run/named/pid`

4.
至https://www.google.com/a/ 申請mail.funnyd.idv.tw

然後依網頁說明step by step 建立

建立完畫面-> webmail : http://mail.google.com/a/mail.funnyd.idv.tw/

(  ̄ c ̄)y▂ξ 還送網頁空間

http://www.mail.funnyd.idv.tw-a.googlepages.com/home

還可以用 pop3 收下來Very Happy
教學如下網址
http://mail.google.com/support/bin/answer.py?ctx=%67mail&hl=zh_TW&answer=12103


另外, 你說用gmail 有什麼好處, 什麼都不用說, 光說共用行事曆這個功能就嚇嚇叫了

還要提一點...有人一次申請3000個帳號, 也過...3000 * 2GB ...趨近6TB

辜狗果然是神...

ldap

LDAP 在原本的設計是整合多個伺服器的帳號, 不過其實LDAP 可以使用在通訊錄的整合
這些通訊錄或帳號也許可以不用是本機的實體帳號
但藉由OE or thundbird 此MUA 軟體, 也可以輕鬆達到自通訊錄尋找符合特定條件的人員相關資料

STEP 1
查詢是否有安裝LDAP 相關套件
rpm -qa | grep openldap

openldap-devel-2.3.19-4
openldap-servers-2.3.19-4
openldap-2.3.19-4
openldap-clients-2.3.19-4

STEP 2
修改openldap server端的設定檔
vi /etc/openldap/sldap.conf

找到以下

database bdb
suffix "dc=EXAMPLE,dc=com"
rootdn "cn=Manager,dc=EXAMPLE,dc=com"

修改如下

database bdb
suffix "dc=orz,dc=com" ; 這邊依你的需求
rootdn "cn=Manager,dc=orz,dc=com" 這邊dc的部份要與suffix 相同

以及認證的部份

rootpw {SSHA}ph2MuDim6HvZURdNqjqTkZiqE4WMMgDl

以上加密過的密碼是如何產生的呢?

先讓我們暫時將目前的vi 工作退至背景

esc 到命令模式 ctrl +z

[1]+ Stopped vim /etc/openldap/slapd.conf

使用slappasswd -s 欲產生的密碼

ex
slappasswd -s seednet

再將{SSHA}ph2MuDim6HvZURdNqjqTkZiqE4WMMgDl (加密過的seednet)

複製到/etc/openldap/slapd.conf

ok 在bash下打fg回到vi 工作

找到rootpw 將編碼過後的密碼加到rootpw 後

server端的設定就完成了,超簡單的..

啟動ldap 吧

/etc/init.d/ldap start

再來,建立屬於你的第一個ldif 檔案

內容如下

dn: dc=orz,dc=com
dc: orz
o: orz
ObjectClass: organization
ObjectClass: dcObject


dn: ou=people,dc=orz,dc=com
ObjectClass: top
ObjectClass: organizationalUnit
ou: people


dn: uid=geeko,ou=people,dc=orz,dc=com
ObjectClass: top
ObjectClass: PosixAccount
ObjectClass: ShadowAccount
ObjectClass: inetOrgPerson
uid: geeko
uidNumber: 1010
gidNumber: 100
cn: Geeko Chameleon
givenName: Geeko
sn: Chameleon
homeDirectory: /home/geeko
loginShell: /bin/bash
shadowMax: 99999
shadowWarning: 7
shadowInactive: -1
shadowMin: 0
shadowLastChange: 12609

這邊稍微提一下,在ObjectClass 的定義,有些欄位是MUST BE 所以當你定義了

ObjectClass: PosixAccount

那麼如 uidNumber 是必須,一定要填寫的

所以同理可證 你也可以自己定義屬於你自己需求的schema

位置在/etc/openldap/schema

所以目前我們就可以加入第一筆嘍

ldapadd -v -x -D "cn=Man" -W -f test.ldif

出現

Enter LDAP Password:

這邊當然是輸入剛剛由slappasswd -s 產生的那組seednet 嘍

add dc:
orz
add o:
orz
add ObjectClass:
organization
dcObject
adding new entry "dc=orz,dc=com"
modify complete

add ObjectClass:
top
organizationalUnit
add ou:
people
adding new entry "ou=people,dc=orz,dc=com"
modify complete

add ObjectClass:
top
PosixAccount
ShadowAccount
inetOrgPerson
add uid:
geeko
add uidNumber:
1010
add gidNumber:
100
add cn:
Geeko Chameleon
add givenName:
Geeko
add sn:
Chameleon
add homeDirectory:
/home/geeko
add loginShell:
/bin/bash
add shadowMax:
99999
add shadowWarning:
7
add shadowInactive:
-1
add shadowMin:
0
add shadowLastChange:
12609
adding new entry "uid=geeko,ou=people,dc=orz,dc=com"
modify complete

霹靂啪啦就加完了

也就是說,目前你已經可以透過MUA 透過LDAP SERVER 查詢資料嘍

打開oe 點選通訊錄->工具->帳戶->新增->輸入ldap server 所在的ip->是否檢查
個人地址,這邊視個人需求->完成

再回到剛新增的通訊錄目錄服務內,選擇剛新增的ldap server 點選內容->進階

搜查依據選擇dc=orz,dc=com

再來就可以使用嘍