drupal 安裝備忘錄
#安裝php及mysql環境
yum install php php-cli php-common php-gd php-mbstring mysqld zlib
(php-gd和php-mbstring是必要的,當初安裝drupal一直失敗就是這個原因)
#修改/etc/php.ini,找到[Date]區塊,新增以下一行設定(開頭分號要拿掉)
date.timezone = "Asia/Taipei"
#修改/etc/httpd/conf/httpd.conf,找到<Directory "/var/www/html">設定,
#將AllowOverride改成All
<Directory "/var/www/html">
#AllowOverride None
AllowOverride All
</Directory>
#到drupal官網下載drupal-8.3.3.tar.gz
cp drupal-8.3.3.tar.gz /var/www/html
cd /var/www/html
tar -zxvf drupal-8.3.3.tar.gz
mv drupal-8.3.3 drupal
rm drupal-8.3.3.tar.gz
#新增Drupal檔案上傳存放資料夾 (使用者上傳的圖檔會放到該資料夾)
cd /var/www/html/drupal/default/
mkdir files
chmod 775 files
chgrp apache files
#新增預設的settings.php
cd /var/www/html/drupal/default/
cp default.settings.php settings.php
chmod 660 settings.php
chgrp apache settings.php
#在settings.php中,加入以下兩行以下設定
ini_set('mbstring.http_input', 'pass');
ini_set('mbstring.http_output', 'pass');
#之後開啟瀏覽器,輸入http://localhost/drupal,進入安裝頁面
#在Requirement review會出現Clean URL和PHP OPCODE CACHING is not enable的警告,
#不要理他,直接下一步到底
#之後會要求輸入MySQL帳號密碼,剛開始可以用root,但上線系統並不建議
#安裝完成後,請修改/var/www/html/drupal/default/settings.php權限為644
2017年6月11日 星期日
產生C語言Call Graph的方法
測試了多個c語言的call-graph產生器,覺得最好用的還是cflow這個指令,
配合htags,能產生超強大的html來瀏覽source code
以下將說明指令使用方式
安裝相關套件:
yum install cflow global
cflow使用方式:
首先先切換到專案底下:
cd myproject;
目錄的結構大約如下,source code分別放在src及lib資料夾
myproject
+--src
+--a.c
+--b.c
+--lib
+--cqji.c
假設我的程式碼分別放在src及lib目錄下,我希望產生所有c檔的call-graph,
cflow src/*.c lib/*.c;
執行後輸出:
main() <int main (int argc, char *argv[]) at src/main.c:319>:
getopt()
print_usage() <void print_usage (const char *pro_name) at src/main.c:40>:
printf()
time()
printf()
ctime()
packet_queue_init() <BOOL packet_queue_init (void) at src/packet_queue.c:22>:
pthread_mutex_init()
flow_init() <int flow_init (void) at src/flow.c:175>:
flow_hash_init() <int flow_hash_init (void) at src/hash_table.c:30>:
MALLOC()
pthread_mutex_init()
flow_queue_init() <int flow_queue_init (void) at src/flow_queue.c:27>:
pthread_mutex_init()
pthread_create()
可以加上-T選項,產生如下
+-main() <int main (int argc, char *argv[]) at src/main.c:319>
+-getopt()
+-print_usage() <void print_usage (const char *pro_name) at src/main.c:40>
| \-printf()
+-time()
+-printf()
+-ctime()
+-packet_queue_init() <BOOL packet_queue_init (void) at src/packet_queue.c:22>
| \-pthread_mutex_init()
+-flow_init() <int flow_init (void) at src/flow.c:175>
| +-flow_hash_init() <int flow_hash_init (void) at src/hash_table.c:30>
| | +-MALLOC()
| | \-pthread_mutex_init()
| \-flow_queue_init() <int flow_queue_init (void) at src/flow_queue.c:27>
| \-pthread_mutex_init()
+-pthread_create()
配合htags指令,可以產生一個超強大的html
cflow src/*.c -o cflow.txt -f posix
htags -ngoIsv --cflow cflow.txt
配合htags,能產生超強大的html來瀏覽source code
以下將說明指令使用方式
安裝相關套件:
yum install cflow global
cflow使用方式:
首先先切換到專案底下:
cd myproject;
目錄的結構大約如下,source code分別放在src及lib資料夾
myproject
+--src
+--a.c
+--b.c
+--lib
+--cqji.c
假設我的程式碼分別放在src及lib目錄下,我希望產生所有c檔的call-graph,
cflow src/*.c lib/*.c;
執行後輸出:
main() <int main (int argc, char *argv[]) at src/main.c:319>:
getopt()
print_usage() <void print_usage (const char *pro_name) at src/main.c:40>:
printf()
time()
printf()
ctime()
packet_queue_init() <BOOL packet_queue_init (void) at src/packet_queue.c:22>:
pthread_mutex_init()
flow_init() <int flow_init (void) at src/flow.c:175>:
flow_hash_init() <int flow_hash_init (void) at src/hash_table.c:30>:
MALLOC()
pthread_mutex_init()
flow_queue_init() <int flow_queue_init (void) at src/flow_queue.c:27>:
pthread_mutex_init()
pthread_create()
可以加上-T選項,產生如下
+-main() <int main (int argc, char *argv[]) at src/main.c:319>
+-getopt()
+-print_usage() <void print_usage (const char *pro_name) at src/main.c:40>
| \-printf()
+-time()
+-printf()
+-ctime()
+-packet_queue_init() <BOOL packet_queue_init (void) at src/packet_queue.c:22>
| \-pthread_mutex_init()
+-flow_init() <int flow_init (void) at src/flow.c:175>
| +-flow_hash_init() <int flow_hash_init (void) at src/hash_table.c:30>
| | +-MALLOC()
| | \-pthread_mutex_init()
| \-flow_queue_init() <int flow_queue_init (void) at src/flow_queue.c:27>
| \-pthread_mutex_init()
+-pthread_create()
配合htags指令,可以產生一個超強大的html
cflow src/*.c -o cflow.txt -f posix
htags -ngoIsv --cflow cflow.txt
2017年5月19日 星期五
C語言小抄
用snprintf模擬asprintf來處理字串相加
基本型態與跟指標的大小,結論就是sizeof(任意型態的指標)都是8bytes
char* cstr; int c = snprintf( NULL, 0, "%d * %d = %d", tmp, tmp, tmp*tmp ); cstr = new char[ c + 1 ]; snprintf( cstr, c + 1, "%d * %d = %d", tmp, tmp, tmp*tmp );
基本型態與跟指標的大小,結論就是sizeof(任意型態的指標)都是8bytes
printf("char : %d\n", sizeof(char)); //輸出1 printf("char*: %d\n", sizeof(char *)); //輸出8 (我用64bit的OS,因此address是8byte) printf("int : %d\n", sizeof(int)); //輸出1 printf("int* : %d\n", sizeof(int *)); //輸出8 (我用64bit的OS,因此address是8byte)
2017年4月25日 星期二
C語言巨集篇 -- C preprocessor (節錄Gcc Macro Manual)
https://gcc.gnu.org/onlinedocs/cpp/Macros.html
本篇將快速介紹C語言巨集的用法,以及一些實用的技巧
巨集(Macro)最基本的用法,就是拿來定義常數,或是拿來定義一段程式碼區塊,其中 '\' 符號在巨集中表示換行,下面是一個例子
C語言前處理器的編譯是循序的,因此巨集必須先定義才會生效,以下是個例子
本篇將快速介紹C語言巨集的用法,以及一些實用的技巧
巨集(Macro)最基本的用法,就是拿來定義常數,或是拿來定義一段程式碼區塊,其中 '\' 符號在巨集中表示換行,下面是一個例子
#define BUFFER_SIZE 1024 #define NUMBERS 1, \ 2, \ 3 foo = (char *) malloc (BUFFER_SIZE); int x[] = { NUMBERS };你可以用以下指令來察看前處理器將巨集語法編譯後的結果,你會發現所謂的巨集就是拿來做語法上的字串替換
gcc -E -P XXX.c像上面這一段程式碼經過前處理器編譯後變成
foo = (char *) malloc (1024); int x[] = { 1, 2, 3 };以下將用註解呈現編譯後的結果
C語言前處理器的編譯是循序的,因此巨集必須先定義才會生效,以下是個例子
foo = X; #define X 4 bar = X; //前處理器編譯後變成 //foo = X; //bar = 4;實際上巨集定義是能包含其他巨集名稱的,例如
#define TABLESIZE BUFSIZE #define BUFSIZE 1024 //此時TABLESIZE變成1024另一個有趣的例子,先定義BUFSIZE後,再重新定義BUFSIZE,結果很有趣
#define BUFSIZE 1020 #define TABLESIZE BUFSIZE #undef BUFSIZE #define BUFSIZE 37 //此時TABLESIZE為37, //不管何時使用TABLESIZE,TABLESIZE都會是37不會是1020
2017年4月2日 星期日
列印gcc 預設include path
列印gcc 預設include path:
列印c++預設include path:
echo | gcc -E -Wp,-v -
列印c++預設include path:
echo | cpp -xc++ -Wp,-v
搜尋含有關鍵字的檔案
在bash中輸入以下指令,可以搜尋src資料夾下,
包含main關鍵字的檔案,並印出該關鍵字出現在該檔案的行號
執行結果:
src/main.c~:273:capture_main(const char* interface, void (*pkt_handler)(void*), int livemode){
src/main.c~:319:int main(int argc, char *argv[]){
src/main.c~:376: /* Start main capture in live or offline mode */
src/main.c~:378: capture_main(interface, packet_queue_enq, 1);
src/main.c~:381: capture_main(tracefile, packet_queue_enq, 0);
或者配合find指令
執行結果:
src/main.c~:273:capture_main(const char* interface, void (*pkt_handler)(void*), int livemode){
src/main.c~:319:int main(int argc, char *argv[]){
src/main.c~:376: /* Start main capture in live or offline mode */
src/main.c~:378: capture_main(interface, packet_queue_enq, 1);
src/main.c~:381: capture_main(tracefile, packet_queue_enq, 0);
兩者的差別是,第1種會將結果上色,比較利於閱讀。
包含main關鍵字的檔案,並印出該關鍵字出現在該檔案的行號
grep -nr main ./src
執行結果:
src/main.c~:273:capture_main(const char* interface, void (*pkt_handler)(void*), int livemode){
src/main.c~:319:int main(int argc, char *argv[]){
src/main.c~:376: /* Start main capture in live or offline mode */
src/main.c~:378: capture_main(interface, packet_queue_enq, 1);
src/main.c~:381: capture_main(tracefile, packet_queue_enq, 0);
或者配合find指令
find ./src -type f -exec grep -nH -e main {} +
執行結果:
src/main.c~:273:capture_main(const char* interface, void (*pkt_handler)(void*), int livemode){
src/main.c~:319:int main(int argc, char *argv[]){
src/main.c~:376: /* Start main capture in live or offline mode */
src/main.c~:378: capture_main(interface, packet_queue_enq, 1);
src/main.c~:381: capture_main(tracefile, packet_queue_enq, 0);
兩者的差別是,第1種會將結果上色,比較利於閱讀。
2017年3月30日 星期四
抓取證交所資料網址
外資買賣超日報
http://www.tse.com.tw/ch/trading/fund/T86/T86.php
download=?
qdate=?
select2=ALLBUT0999
外資買賣超週報
http://www.tse.com.tw/ch/trading/fund/TWT54U/TWT54U.php
外資買賣超月報
http://www.tse.com.tw/ch/trading/fund/TWT47U/TWT47U.php
三大法人買賣金額統計表
http://www.tse.com.tw/ch/trading/fund/BFI82U/BFI82U.php
每日成交量前20%
http://www.tse.com.tw/ch/trading/exchange/MI_INDEX20/MI_INDEX20.php
個股歷年最高價最低價
http://www.tse.com.tw/ch/trading/exchange/FMNPTK/FMNPTKMAIN.php
1402遠東新 紡織纖維
1434福懋 紡織纖維
<option value="ALL">全部</option>
<option value="ALLBUT0999">全部(不含權證、牛熊證、可展延牛熊證)</option>
<option value="0049">封閉式基金</option>
<option value="0099P">ETF</option>
<option value="019919T">受益證券</option>
<option value="0999">認購權證(不含牛證)</option>
<option value="0999P">認售權證(不含熊證)</option>
<option value="0999C">牛證(不含可展延牛證)</option>
<option value="0999B">熊證(不含可展延熊證)</option>
<option value="0999X">可展延牛證</option>
<option value="0999Y">可展延熊證</option>
<option value="0999GA">附認股權特別股</option>
<option value="0999GD">附認股權公司債</option>
<option value="0999G9">認股權憑證</option>
<option value="01" selected="">水泥工業</option>
<option value="02">食品工業</option>
<option value="03">塑膠工業</option>
<option value="04">紡織纖維</option>
<option value="05">電機機械</option>
<option value="06">電器電纜</option>
<option value="07">化學生技醫療</option>
<option value="21">化學工業</option>
<option value="22">生技醫療業</option>
<option value="08">玻璃陶瓷</option>
<option value="09">造紙工業</option>
<option value="10">鋼鐵工業</option>
<option value="11">橡膠工業</option>
<option value="12">汽車工業</option>
<option value="13">電子工業</option>
<option value="24">半導體業</option>
<option value="25">電腦及週邊設備業</option>
<option value="26">光電業</option>
<option value="27">通信網路業</option>
<option value="28">電子零組件業</option>
<option value="29">電子通路業</option>
<option value="30">資訊服務業</option>
<option value="31">其他電子業</option>
<option value="14">建材營造</option>
<option value="15">航運業</option>
<option value="16">觀光事業</option>
<option value="17">金融保險</option>
<option value="18">貿易百貨</option>
<option value="23">油電燃氣業</option>
<option value="9299">存託憑證</option>
<option value="19">綜合</option>
<option value="20">其他</option>
<option value="CB">可轉換公司債</option>
</select>
http://www.tse.com.tw/ch/trading/fund/T86/T86.php
download=?
qdate=?
select2=ALLBUT0999
外資買賣超週報
http://www.tse.com.tw/ch/trading/fund/TWT54U/TWT54U.php
外資買賣超月報
http://www.tse.com.tw/ch/trading/fund/TWT47U/TWT47U.php
三大法人買賣金額統計表
http://www.tse.com.tw/ch/trading/fund/BFI82U/BFI82U.php
每日成交量前20%
http://www.tse.com.tw/ch/trading/exchange/MI_INDEX20/MI_INDEX20.php
個股歷年最高價最低價
http://www.tse.com.tw/ch/trading/exchange/FMNPTK/FMNPTKMAIN.php
1402遠東新 紡織纖維
1434福懋 紡織纖維
<option value="ALL">全部</option>
<option value="ALLBUT0999">全部(不含權證、牛熊證、可展延牛熊證)</option>
<option value="0049">封閉式基金</option>
<option value="0099P">ETF</option>
<option value="019919T">受益證券</option>
<option value="0999">認購權證(不含牛證)</option>
<option value="0999P">認售權證(不含熊證)</option>
<option value="0999C">牛證(不含可展延牛證)</option>
<option value="0999B">熊證(不含可展延熊證)</option>
<option value="0999X">可展延牛證</option>
<option value="0999Y">可展延熊證</option>
<option value="0999GA">附認股權特別股</option>
<option value="0999GD">附認股權公司債</option>
<option value="0999G9">認股權憑證</option>
<option value="01" selected="">水泥工業</option>
<option value="02">食品工業</option>
<option value="03">塑膠工業</option>
<option value="04">紡織纖維</option>
<option value="05">電機機械</option>
<option value="06">電器電纜</option>
<option value="07">化學生技醫療</option>
<option value="21">化學工業</option>
<option value="22">生技醫療業</option>
<option value="08">玻璃陶瓷</option>
<option value="09">造紙工業</option>
<option value="10">鋼鐵工業</option>
<option value="11">橡膠工業</option>
<option value="12">汽車工業</option>
<option value="13">電子工業</option>
<option value="24">半導體業</option>
<option value="25">電腦及週邊設備業</option>
<option value="26">光電業</option>
<option value="27">通信網路業</option>
<option value="28">電子零組件業</option>
<option value="29">電子通路業</option>
<option value="30">資訊服務業</option>
<option value="31">其他電子業</option>
<option value="14">建材營造</option>
<option value="15">航運業</option>
<option value="16">觀光事業</option>
<option value="17">金融保險</option>
<option value="18">貿易百貨</option>
<option value="23">油電燃氣業</option>
<option value="9299">存託憑證</option>
<option value="19">綜合</option>
<option value="20">其他</option>
<option value="CB">可轉換公司債</option>
</select>
在Bash中用sftp上傳檔案
IP="172.17.254.152" echo $IP #PORT=$2 #echo $PORT USERNAME="user" echo $USERNAME PASSWORD="passwd" echo $PASSWORD #REMOTE_FILE=$6 #echo "LOCAL_FILE = $REMOTE_FILE" REMOTE_DIR_A="/upload/serverA" echo "REMOTE_DIR_A = $REMOTE_DIR_A" REMOTE_DIR_B="/upload/serverB" echo "REMOTE_DIR_B = $REMOTE_DIR_B" DES_DIR_A="/home/vslog/bkrchnl_report/serverA" echo "DES_DIR_A = $DES_DIR_A"
DES_DIR_B="/home/vslog/bkrchnl_report/serverB" echo "DES_DIR_B = $DES_DIR_B" lftp -u $USERNAME,$PASSWORD sftp://$IP << END_SFTP cd $REMOTE_DIR_A lcd $DES_DIR_A mput "RC_`date -d yesterday "+%Y%m%d"`*" cd $REMOTE_DIR_B lcd $DES_DIR_B mput "RC_`date -d yesterday "+%Y%m%d"`*" quit END_SFTP
Oracle 安裝步驟
Oracle安裝步驟
下載linux.x64_11gR2_databases_1of2.zip及linux.x64_11gR2_databases_1of2.zip兩個檔案並解壓縮
1. 在/etc/hosts檔案最後一行新增:
10.144.27.208 hadoop001.cht.local hadoop001
2. 在/etc/sysctl.conf最後一行新增:
fs.suid_dumpable = 1
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
(註)如果你的sysctl裡面有類似的值,且原本的值比上面的還高,以值高的為主。
之後執行/sbin/sysctl -p讓設定生效。
3. 在/etc/security/limit.conf最後一行新增:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 4096
oracle hard nofile 65536
oracle soft stack 10240
* soft nofile 102400
* hard nofile 102400
3. 新增以下帳號及群組
groupadd oinstall
groupadd dba
groupadd oper
groupadd asmadmin
groupadd asmdba
groupadd asmoper
adduser -g oinstall -G dba,asmdba,oper oracle
passwd oracle #(設定oracle的密碼)
mkdir -p /opt/oracle/product/11.2.0/db_1
chown -R oracle.oinstall /opt/oracle
chmod -R 775 /opt/oracle
4. 在/etc/profile最後一行新增以下環境變數
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=OracleDB
export ORACLE_UNQNAME=OracleDB
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$CLASSPATH
存檔後,執行source /etc/profile,讓當前終端機生效,若要永久生效,請重新開機。
下載linux.x64_11gR2_databases_1of2.zip及linux.x64_11gR2_databases_1of2.zip兩個檔案並解壓縮
1. 在/etc/hosts檔案最後一行新增:
10.144.27.208 hadoop001.cht.local hadoop001
2. 在/etc/sysctl.conf最後一行新增:
fs.suid_dumpable = 1
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
(註)如果你的sysctl裡面有類似的值,且原本的值比上面的還高,以值高的為主。
之後執行/sbin/sysctl -p讓設定生效。
3. 在/etc/security/limit.conf最後一行新增:
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 4096
oracle hard nofile 65536
oracle soft stack 10240
* soft nofile 102400
* hard nofile 102400
3. 新增以下帳號及群組
groupadd oinstall
groupadd dba
groupadd oper
groupadd asmadmin
groupadd asmdba
groupadd asmoper
adduser -g oinstall -G dba,asmdba,oper oracle
passwd oracle #(設定oracle的密碼)
mkdir -p /opt/oracle/product/11.2.0/db_1
chown -R oracle.oinstall /opt/oracle
chmod -R 775 /opt/oracle
4. 在/etc/profile最後一行新增以下環境變數
export TMP=/tmp
export TMPDIR=$TMP
export ORACLE_HOSTNAME=OracleDB
export ORACLE_UNQNAME=OracleDB
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$CLASSPATH
存檔後,執行source /etc/profile,讓當前終端機生效,若要永久生效,請重新開機。
Cloudera 安裝失敗時,重裝步驟
service cloudera-scm-server stop
service cloudera-scm-agent stop
yum remove cloudera*
~/rm_hadoop.sh
rpm -ivh cloudera-manager-server cloudera-manager-daemons cloudera-manager-agent
drop database metastore;
drop database scm;
create database metastore character set utf8;
create database scm character set utf8;
/usr/share/cmf/schema/scm_prepare_database.sh mysql scm scm hadoop
netstat -tlunp | grep 7180
netstat -tlunp | grep 7182
netstat -tlunp | grep 9000
netstat -tlunp | grep 9001
service cloudera-scm-server start
service cloudera-scm-agent stop
yum remove cloudera*
~/rm_hadoop.sh
rpm -ivh cloudera-manager-server cloudera-manager-daemons cloudera-manager-agent
drop database metastore;
drop database scm;
create database metastore character set utf8;
create database scm character set utf8;
/usr/share/cmf/schema/scm_prepare_database.sh mysql scm scm hadoop
netstat -tlunp | grep 7180
netstat -tlunp | grep 7182
netstat -tlunp | grep 9000
netstat -tlunp | grep 9001
service cloudera-scm-server start
訂閱:
文章 (Atom)