廣告聯播

2013年8月1日 星期四

Oracle EBS ORG_ID (ORGANIZATION ID) 是向 SEQUENCE HR.HR_ORGANIZATION_UNITS_S 取值

From: Polin Wei

因若干因素, 需有兩台 Oracle EBS 主機, 但這兩台主機的 Org ID 要相同.當這兩台主機的Sequence 不一致時, 該怎麼辦?

我們先可以查看一下控制 Org ID 的 Sequence:  HR.HR_ORGANIZATION_UNITS_S

CREATE SEQUENCE HR.HR_ORGANIZATION_UNITS_S
  START WITH 1041
  MAXVALUE 999999999999999
  MINVALUE 1
  NOCYCLE
  CACHE 20
  NOORDER;

它一次是取20個序號到 Database 的 Cache 中, 所以若有一方較小, 則可以手動去耗掉一些號碼:

select HR.HR_ORGANIZATION_UNITS_S.NEXTVAL
FROM dual;

select hr.HR_ORGANIZATION_UNITS_S.currval
FROM dual;

參考: Oracle EBS Which Sequence Name used to ORG_ID (ORGANIZATION ID)

2013年7月3日 星期三

JavaScript 動態陣列方法

From: Polin Wei

 JavaScript 的動態陣列方法正確的作法如下:

var i = 0;
var aryRow = new Array();
$.each( row, function( key, value ) {
    aryRow[i] = new Array();
    aryRow[i]['key']=key;
    aryRow[i]['value']=value;
    i++;
});


錯誤的寫法:

var i = 0;
var aryRow = new Array();
$.each( row, function( key, value ) {
    var aryRow[i] = new Array();
    aryRow[i]['key']=key;
    aryRow[i]['value']=value;
    i++;
});

2013年6月11日 星期二

GnuPG (GPG) In Win32 免費檔案加解密軟體概念與常用指令

From: Polin Wei

GnuPG (GPG) 是一套完全免費的軟體( GnuPG is the GNU project's complete and free implementation of the OpenPGP standard as defined by RFC4880 . ),也有在實務的商務中使用,安全性很高值得一用。

GnuPG 概念:
GPG, like PGP (Pretty Good Privacy), uses a key pair. This means that when you generate a key, you will create a public copy as well as private copy. The private copy is your copy used to decrypt an incoming file as well sign an outgoing file (but for our purposes, we are only using it to decrypt). The public key is the key you give to the public, which is used to encrypt the files coming to you. First we will create your own key.

These keys are stored in key rings. For GPG, they are stored in the directory that the GPG files were copied into. They are both named with a .GPG extension, and are called pubring.GPG and secring.GPG (to denote the public key ring and the private key ring, respectively).

原文的意思主要是說:GPG 會產生一組 Key ,一個是私鑰 ( Private Key:secring.GPG ) 用來解碼檔案,以及傳出檔案時作簽章 ( sign );一個是公鑰( Public Key:pubring.GPG )是要給客戶的,當客戶要傳檔案給你時,用此公鑰作加密。兩個檔案都是以 .GPG 作為附檔名。

GPG 常用的指令有:
  • gpg --gen-key            /** 產生組 Key ,私鑰 ( Private Key:secring.GPG )&公鑰( Public Key:pubring.GPG ) **/
  • gpg --edit-key [USER-ID] /** 對 USER-ID 作業 **/
        Command> passwd      /** 修改secret key的 Passphrase **/
  • gpg --import             /** 匯入客戶的金鑰 **/
        Command> trust       /** 對此客戶作信認 **/
  • gpg --list-keys          /** 列出所有的公鑰資訊 **/
  • gpg --list-secret-keys   /** 列出私鑰的資訊 **/
  • gpg --encrypt --armor --recipient [public key] --output encryptedfilename unencryptedfilename        /** 加密檔案 **/
  • gpg --always-trust --passphrase-fd 0 --output C:\gnupg\Decrypt\unencryptedfilename  -u "[USER-ID]" --no-tty --decrypt C:\gnupg\Encrypt\encryptedfilename < [passphrase.file] /** 解密 **/
  • gpg --delete-key hex value /** 移除信認的 USER-ID **/

     繼續閱讀:

    GnuPG (GPG) In Win32 免費檔案加解密軟體概念與實作

    GnuPG (GPG) In Win32 免費檔案加解密軟體的運用

     


     

    2013年5月28日 星期二

    php session中存取物件(Object)解决方案

    From: Polin Wei



    在使用java開發時,通常會將物件 Object 存放在session裡面,以便後續的作業中可以取得。但在使用php開發時,在session中存入物件,確實能把物件放進去,也能把整個物件輸出,但就是取不出物件裡面的屬性。會發生下面類似的錯誤資訊:

    USER => __PHP_Incomplete_Class Object (21)
         ->__PHP_Incomplete_Class_Name = "objUser"
         ->user_uid = 0
     這搞了很久,才發現php手冊中有一篇講的是 “序列化物件 - 會話中的物件”,存取應用下列方法:
    • 存放物件在session:
    $_SESSION["USER"] = serialize($USER);

    • 從session取出物件:
    $USER = unserialize( $_SESSION["USER"] );
     可以用 print_r($USER); 傾印出來看應該就正常,這樣這個物件可以正常使用了。

    2013年3月11日 星期一

    Windows 8 MAK 啟動方式

    From: Polin Wei



    請在開始功能表的”執行”輸入”cmd”(或是以Win Key+ X),再輸入
    slmgr.vbs –ipk xxxxx- xxxxx- xxxxx- xxxxx- xxxxx
    透過Slmgr –ipk方式輸入MAK的金鑰至Windows系統
    再至控制台內啟動Windows
    以這種方式就能完成以MAK序號進行啟動.
     

    2013年3月3日 星期日

    QNAP Install DNS Server with BIND ipkg & Auto Run DNS Service

    From: Polin Wei

    買了一台 QNAP TS-119P II ,內鍵沒有 DNS Server 服務,但它提供自行安裝 IPKG 的服務,下面就 Step by Step 來作 DNS Server 安裝設定:

    Step 1:安裝  Optware IPKG 套件
    登入 QNAP WEB 管理介面,一般來說是 http://qnap ip address:8080,在 首頁 >> 應用服務 >> QPKG Center 的可安裝頁面,選擇 Optware IPKG 安裝

    Step 2: 安裝 bind 套件
    登入 Optware 的管理介面,一般來說是 http://qnap ip address/Optware

    Sync packages no yes
    Type: NONE
    Filter

    尋找 bind 套件,並按下 install 安裝

    Install bind

    Installing bind (9.6.1.3-4) to root...
    Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/bind_9.6.1.3-4_arm.ipk
    Installing openssl (0.9.8v-2) to root...
    Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/openssl_0.9.8v-2_arm.ipk
    Installing psmisc (22.17-1) to root...
    Downloading http://ipkg.nslu2-linux.org/feeds/optware/cs08q1armel/cross/unstable/psmisc_22.17-1_arm.ipk
    Configuring bind
    Running post-install
    You must now create your named.conf file
    When it is installed in /opt/etc/named/named.conf, execute
                  /opt/etc/init.d/S09named start
    to start service
    You will probably also want to create rndc.conf by running
    rndc-confgen.  Of course, you may want to set your name server
    in the GUI to 127.0.0.1 or your local ip-address
    Configuring openssl
    Configuring psmisc
    update-alternatives: Linking //opt/bin/killall to /opt/bin/psmisc-killall
    update-alternatives: Linking //opt/bin/pidof to /opt/bin/psmisc-killall
    Successfully terminated.
    
    Step 3:Enable SSH Connection 設定 SSH 連結
    將 首頁 >> 網路服務 >> Telnet / SSH 的功能啟動,SSH 的連線工具PuTTY可以從 http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html 網址下載

    Step 4:建立 rndc.key 檔案
    用PuTTY連入 QANP 主機,並進入目錄 /opt/etc/named ,若此目錄不存在,則建立此目錄

    mkdir /opt/etc/named
    並在此目錄建立 rndc.key
    [/opt/etc/named] # /opt/sbin/rndc-confgen -a
    wrote key file "/opt/etc/named/rndc.key"


     
    Step 5:CONFIGURING BIND 下列的步驟開始設定 Bind 的 Named 組態

    建立必要的系統檔:
    • named.conf
    每個 DNS Zone 的檔案:
    • db.localhost
    • db.localhost.rev
    • db.leedomain.com
    • db.192.168.2.rev
    named.conf
    # Goes in /opt/etc/named/named.conf

    acl "home" { 192.168.2.0/24; 127.0.0.1; };

    options {
            directory "/opt/etc/named";
            allow-query { "home"; };
            allow-recursion { 192.168.2.0/24; 127.0.0.1; };
            forwarders { 192.168.2.3;8.8.8.8; };
    };

    controls {
            inet 127.0.0.1 allow { localhost; } keys { rndc-key; };
    };

    // log to /var/log/named/example.log all events from info UP in severity (no debug)
    // defaults to use 3 files in rotation
    // BIND 8.x logging MUST COME FIRST in this file
    // BIND 9.x parses the whole file before using the log
    // failure messages up to this point are in (syslog) /var/log/messages
    //
    //logging {
    //  channel weidns_log {
    //   file "/var/log/weidns.log" versions 3 size 2m;
    //   severity info;
    //   print-severity yes;
    //   print-time yes;
    //   print-category yes;
    //};
    //category default {
    //  weidns_log;
    //};
    //};

    // Add local zone definitions here.
    zone "localhost" {
            type master;
            file "db.localhost";
            allow-update { none; };
            notify no;
    };


    zone "0.0.127.in-addr.arpa" {
            type master;
            file "db.localhost.rev";
            allow-update { none; };
            notify no;
    };

    zone "weidns.com" {
            type master;
            file "db.weidns.com";
            allow-update { key "rndc-key"; };
            notify yes;
    };

    zone "2.168.192.in-addr.arpa" {
            type master;
            file "db.192.168.2.rev";
            allow-update { key "rndc-key"; };
            notify yes;
    };

    zone "." {
            type hint;
            file "root.servers";
    };

    include "/opt/etc/named/rndc.key";

    db.localhost
    ;Goes in /opt/etc/named/db.localhost
    $TTL    86400 ; 24 hours could have been written as 24h
    $ORIGIN localhost.
    ; line below = localhost 1D IN SOA localhost root.localhost
    @  1D  IN        SOA @  root (
                                  2013030301 ; serial
                                  3H ; refresh
                                  15 ; retry
                                  1w ; expire
                                  3h ; minimum
                                 )
    @  1D  IN  NS @
       1D  IN  A  127.0.0.1


    db.localhost.rev
    ;Goes in /opt/etc/named/db.localhost.rev
    $TTL    86400 ;
    ; could use $ORIGIN 0.0.127.IN-ADDR.ARPA.
    @       IN      SOA     localhost. root.localhost.  (
                            2013030301 ; Serial
                            3h      ; Refresh
                            15      ; Retry
                            1w      ; Expire
                            3h )    ; Minimum
            IN      NS      localhost.
    1       IN      PTR     localhost.

    db.weidns.com
    ; weidns.com
    ;Goes in /opt/etc/named/db.weidns.com
    $TTL    604800
    @       IN      SOA     ns1.weidns.com.      root.weidns.com.     (
                    2013030301 ; Serial
                        604800 ; Refresh
                         86400 ; Retry
                       2419200 ; Expire
                       604800) ; Negative Cache TTL
    ;
    @       IN      NS      ns1
            IN      MX      10 mail
            IN      A       192.168.2.3
    ns1     IN      A       192.168.2.3
    mail    IN      A       192.168.2.3

    db.192.168.2.rev
    ;Goes in /opt/etc/named/db.192.168.2.rev
    $TTL    86400   ; 1 day
    $ORIGIN 2.168.192.in-addr.arpa.
    @       1D      IN      SOA  ns1.weidns.com. root.weidns.com.     (
                    2006080801 ; Serial
                        604800 ; Refresh
                         86400 ; Retry
                       2419200 ; Expire
                       604800) ; Negative Cache TTL
    ;
    ; Name servers
    3               IN NS   ns1.weidns.com.
    ;
    ; Fixed host mappings allegedly inserted by DDNS

    root.servers


    Step 6:啟動 DNS

    /opt/etc/init.d/S09named start
    /opt/etc/init.d/S09named restart
    /opt/etc/init.d/S09named status 
    Step 7: 驗證 DNS

    可以使用 dig 的指令來利用此 DNS 服務,來反查是否正常運作
    dig @ polinwei.blogspot.com
    可以使用  named -g 來偵錯

    讓 DNS 在開機時自動執行

    DNS 既然要提供服務,自然希望QNAP開機時可以自動執行。這裡您會發現QNAP系統跟其它主流Linux發行版本其中一個很不一樣的地方:它沒有完整支援upstart或者init.d來啟動服務。根據QNAPedia的這篇文章,節錄相關步驟:

    查看 /etc/config/qpkg.conf 這個檔案:

    
    
    # cat /etc/config/qpkg.conf
    宣告一個autorun套件來利用ipkg自動啟動機制:

    [autorun]
    Name = autorun
    Version = 0.1
    Author = PolinWei
    Date = 2013-06-08
    Shell = /share/MD0_DATA/.qpkg/autorun/autorun.sh
    Install_Path = /share/MD0_DATA/.qpkg/autorun
    Enable = TRUE

    其中, ‘Shell’就是要被自動執行的shell腳本。每次QNAP啟動時,那個腳本就會被執行,所以,我們可以將要自動被執行的程式碼寫在那個檔案內。請按照下列步驟建立autorun.sh檔案:

    # mkdir -p /share/MD0_DATA/.qpkg/autorun
    # touch /share/MD0_DATA/.qpkg/autorun/autorun.sh
    # chmod +x /share/MD0_DATA/.qpkg/autorun/autorun.sh

    編輯 autorun.sh ,它的內容會隨後續設定而修改,一個基本可以執行 DNS 的腳本

    # vi /share/MD0_DATA/.qpkg/autorun/autorun.sh

    內容如下:

    #!/bin/sh
    
    # starts the DNS server
    /opt/etc/init.d/S09named start


    參考:
    http://www.nslu2-linux.org/wiki/HowTo/BuildPrimaryDNSServer
    http://crippaandrea.it/blog/2012/05/13/installing-bind-on-qnap
    http://blog.eavatar.com/post/2013/11/setup-home-vpn-server-with-softether-qnap-nas/

    2013年2月21日 星期四

    AppServ + OpenSSL Setup in Win32

    From: Polin Wei

    因為要瞭解憑證,所以需要一個能產生 Private Key,Digital Certificates 及 Trusted Certificate Authorities 的工具,免錢的 OpenSSL 就是一個好的工具,順便結合Apache Httpd Server 作測試。而 AppServ 本身即有 Apache、MySQL、PHP、phpMyAdmin 與 OpenSSL 工具,是最方便的軟體了。

    一、準備檔案:
    下載 AppServ 2.5.10


    二、安裝 Apache Server 與設定:

    1. 先行安裝AppServ,預設路徑應該安裝在 C:/AppServ/Apache2.2/,並先停止Apache伺服器。
    2. 開啟C:\AppServ\Apache2.2\conf 內的 httpd.conf 作修改
    把 LoadModule ssl_module modules/mod_ssl.so 的#註解拿掉
    把 Include conf/extra/httpd-ssl.conf 的#註解拿掉
    三、在 C:\AppServ\Apache2.2\bin資料夾底下看見openssl.exe,滑鼠double click執行它,用它來作憑證

    1. 輸入 genrsa -out server.key 1024 產生rsa私鑰(Server Private Key:server.key)

    2. 利用私鑰(Server Private Key:server.key)來產生簽署申請:輸入 req -new -out server.csr -key server.key -config ../conf/openssl.cnf 產生簽署申請
    Country Name為國籍鍵入TW
    State or Province Name為省份鍵入Taiwan
    Locality Name為所在地
    Organization Name為組織名稱
    Organizational Unit Name為組織內單位
    Common Name為domain name
    Email Address為管理者的電子信箱
    剩餘兩項可不填入
    Step 3 & 4 是模擬 CA 第三方認證單位
    3. 輸入 genrsa -out ca.key 1024 產生CA的rsa私鑰

    4. 輸入 req -new -x509 -days 365 -key ca.key -out ca.crt -config ../conf/openssl.cnf 利用ca私鑰產生待會幫自己主機的簽署憑證,參數同step2上面設定

    5. 接著於C:\AppServ\Apache2.2\bin資料夾內新建demoCA資料夾,並於demoCA資料夾內新增newcerts資料夾,與index.txt跟serial檔案,並利用記事本開啟serial後鍵入01後存檔(這裡的值是參考C:\AppServ\Apache2.2\conf\openssl.cnf檔案裡 [ CA_default ] 這區段中的設定)

    6. 利用step 3 &4 中模擬CA替網站簽署認證的檔案,私鑰:ca.key & 簽署憑證 ca.crt 兩個檔案來替自己的網站提出的簽署憑證申請檔: server.csr 作簽署憑證,產生憑證:server.crt
    輸入ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config ../conf/openssl.cnf

    詢問是否簽署都回答 Y

    7. 將C:\AppServ\Apache2.2\bin底下的私鑰 server.key 及CA簽署過的公鑰 server.crt 兩個檔案複製至C:\AppServ\Apache2.2\conf資料夾底下

    8.打開 C:\Appserv\Apache2.2\conf\extra\http-vhost-ssl.conf檔案,修改部份如下:


    #   General setup for the virtual host
    DocumentRoot "C:/AppServ/www"
    ServerName www.xxx.com:443
    ServerAdmin xxx.xxx@globeunion.com
    ErrorLog "C:/AppServ/Apache2.2/logs/error.log"
    TransferLog "C:/AppServ/Apache2.2/logs/access.log"

    #   Server Certificate:
    SSLCertificateFile "C:/AppServ/Apache2.2/conf/server.crt"
    #   Server Private Key:
    SSLCertificateKeyFile "C:/AppServ/Apache2.2/conf/server.key"

    CustomLog "C:/AppServ/Apache2.2/logs/ssl_request.log" \
              "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

    再重啟 Apache Server 即可登入 https://localhost


    Troubleshooting:

    1. 若有 php_mbstring.dll 檔案遺失的警告,則開啟 C:\Windows\php.ini 將extension=php_exif.dll 放置於 extension=php_mbstring.dll 之後即可解決

    2. 在實做的過程中若電腦的 port:443 被佔用著,利用netstat -ano指令可以看到是哪個pid去佔著這個port,再利用 process explorer(在Win7可以執行 Task manager -> Performance -> Resource Monitor)來觀看是哪個程式佔用著,再到服務 Services 關掉即可

    參考:

    AppServ + OpenSSL Setup SSL(https) in Win32 憑證建立


    【php】利用openssl實作ssl網頁加密

    WordPress 架站必備外掛