2018年8月30日 星期四

ubuntu 安裝完kubernetes後做apt-get update會出現錯誤

root@k8s02:~# sudo apt-get update
已有:1 http://tw.archive.ubuntu.com/ubuntu xenial InRelease
已有:2 http://tw.archive.ubuntu.com/ubuntu xenial-updates InRelease
已有:3 http://tw.archive.ubuntu.com/ubuntu xenial-backports InRelease
已有:4 https://download.docker.com/linux/ubuntu xenial InRelease
下載:6 http://security.ubuntu.com/ubuntu xenial-security InRelease [107 kB]
已有:5 https://packages.cloud.google.com/apt kubernetes-xenial InRelease
取得 107 kB 用了 1s (68.6 kB/s)
正在讀取套件清單... 完成
N: Skipping acquire of configured file 'stable/binary-i386/Packages' as repository 'https://download.docker.com/linux/ubuntu xenial InRelease' doesn't support architecture 'i386'

解決方式:
root@k8s01:/etc/apt# vi /etc/apt/sources.list

deb https://download.docker.com/linux/ubuntu xenial stable
改成
deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable

玩Docker httpd image

1.下載ˇ官方httpd image
 #docker pull httpd
root@k8s02:/container/www1# docker pull httpd
root@k8s02:/container/www1# docker images
REPOSITORY                         TAG                 IMAGE ID            CREATED             SIZE
httpd                              latest              11426a19f1a2        4 weeks ago         178 MB

2.建立並啟動容器
root@k8s02:/container/www1/conf# docker run -p 80:80 -d httpd

3.檢查容器內相關檔案路徑
root@k8s02:/container/www1/conf# docker exec -ti b0659d224641 pwd
/usr/local/apache2

root@k8s02:/container/www1/conf# docker exec -ti b0659d224641 ls
bin  build  cgi-bin  conf  error  htdocs  icons  include  logs  modules

root@k8s02:/container/www1/conf# docker exec -ti b0659d224641 ls /usr/local/apache2/htdocs
index.html
容器中網頁存放在/usr/local/apache2/htdoc中

root@k8s02:/container/www1/conf# docker exec -ti b0659d224641 ls /usr/local/apache2/conf
extra  httpd.conf  magic  mime.types  original
apache設定檔httpd.conf存放在/usr/local/apache2/conf中

4.將相關檔案放在HOST上維護,在做移轉時較方便
在HOST上建立相關目錄

mkdir /container/www1/
mkdir /container/www1/web1
mkdir /container/www1/web2
mkdir /container/www1/web3
mkdir /container/www1/conf
mkdir /container/www1/logs

分別修改3個web的index.html
cd mkdir /container/www1/web1
vi index.html

Hello,web1



(web2 以及web3)

cd /container/www1/conf

將https container的httpd.conf 轉出到HOST上
root@k8s02:/container/www1/conf# docker exec -ti b0659d224641 cat /usr/local/apache2/conf/httpd.conf > httpd.conf


5.建立容器
建立並啟動第一個httpd容器,由HOST的8001port進入
docker run -p 8001:80 -d -v /container/www1/web1/:/usr/local/apache2/htdocs/ -v /container/www1/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v /container/www1/logs/:/usr/local/apache2/logs/ --name web1 httpd

瀏覽器網址輸入http://10.88.1.134:8001,即會導到容器1的80 port
瀏覽器顯示Hello,web1

建立並啟動第二個httpd容器,由HOST的8002port進入
docker run -p 8002:80 -d -v /container/www1/web2/:/usr/local/apache2/htdocs/ -v /container/www1/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v /container/www1/logs/:/usr/local/apache2/logs/ --name web2 httpd

瀏覽器網址輸入http://10.88.1.134:8002,即會導到容器2的80 port
瀏覽器顯示Hello,web2

建立並啟動第三個httpd容器,由HOST的8003port進入
docker run -p 8003:80 -d -v /container/www1/web3/:/usr/local/apache2/htdocs/ -v /container/www1/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v /container/www1/logs/:/usr/local/apache2/logs/ --name web3 httpd

瀏覽器網址輸入http://10.88.1.134:8003,即會導到容器3的80 port
瀏覽器顯示Hello,web3


6.建立HAproxy
查出3個https容器的內部IP
root@k8s02:/container/haproxy17/conf# docker exec -it web1 ip a
ip為 172.17.0.2
root@k8s02:/container/haproxy17/conf# docker exec -it web2 ip a
ip為 172.17.0.3
root@k8s02:/container/haproxy17/conf# docker exec -it web3 ip a
ip為 172.17.0.4

haproxy.cfg設定檔會用到


mkdir /container/haproxy17
cd /container/haproxy17
vi Dockerfile

FROM haproxy:1.7
# 為了要把haproxy.cfg設定檔放在HOST方便修改,所以在容器中刪除原先設定檔再建一個設定檔連結到從HOST掛載的目錄上,建立容器時再將HOST存放haproxy.cfg的路徑掛載到容器中使用
RUN rm -f /usr/local/etc/haproxy/haproxy.cfg
RUN ln -s /usr/local/etc/haproxy/conf/haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg


mkdir conf
cd conf
vi haproxy.cfg

global
    daemon
    maxconn 4096
defaults
    mode http
    timeout connect 5000
    timeout client 5000
    timeout server 5000
frontend main
    bind *:80
    stats uri /haproxy?stats
    mode http
    balance roundrobin
    option httpclose
    option forwardfor
    server web1 172.17.0.2:80 check weight 1 maxconn 50
    server web2 172.17.0.3:80 check weight 1 maxconn 30
    server web1 172.17.0.4:80 check weight 1 maxconn 50
    option redispatch
    retries         3

建立haproxy image
root@k8s02:/container/haproxy17# docker build -t my-haproxy .

建立並啟用haproxy容器
root@k8s02:/container/haproxy17# docker run -d --name my-haproxy -p 80:80 my-haproxy

開啟瀏覽器輸入10.88.1.134,就會輪流顯示web1、web2、web3

查看haproxy status
http://10.88.1.134/haproxy?stats









2018年8月6日 星期一

windows 10 install mysql ODBC Driver 連接MySQL

1.到mysql網站下載並安裝Connector/ODBC
https://dev.mysql.com/downloads/connector/odbc/

2.使用Cortana search box 搜尋ODBC,並選擇 "設定ODBC資料來源(64位元)"

3.出現ODBC資料來源管理員畫面,選擇 "系統資料來源名稱"頁籤,按新增按紐。
4.選擇最新的驅動程式

5.設定mysql主機IP及資料庫帳密。

6.按test測試是否連線成功
7.完成

2018年7月3日 星期二

用python接收udp資訊

為了檢查是否有漏封包,寫了一支python程式接收UDP證券行情資訊,並拆解行情封包,監控並記錄接收到的資料

# -*- coding: utf-8 -*-
# 若要在程式中加入中文,需要加入上行
import sys
from socket import *
from datetime import *

multicast_group = sys.argv[1]
multicast_port  = int(sys.argv[2])
interface_ip    = '10.168.100.233'
f = open('tse001.txt', 'a')

s = socket(AF_INET, SOCK_DGRAM )
s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)  #要讓程式可以重複使用位址及port,必須設定此行`
s.bind((multicast_group, multicast_port ))
mreq = inet_aton(multicast_group) + inet_aton(interface_ip)
s.setsockopt(IPPROTO_IP, IP_ADD_MEMBERSHIP, str(mreq))

while 1:
    now = datetime.today()
    str1 = s.recv(1500)
    msg = now.strftime('%Y%m%d%H%M%S')
    m_2_1_1 = bin(ord(str1[1]))[2:].zfill(8)
    m_2_1_1a = chr(int("0b0011" + m_2_1_1[1:4].zfill(4),2))
    m_2_1_1b = chr(int("0b0011" + m_2_1_1[5:8].zfill(4),2))
    m_2_1_2 = bin(ord(str1[2]))[2:].zfill(8)
    m_2_1_2a = chr(int("0b0011" + m_2_1_2[1:4].zfill(4),2))
    m_2_1_2b = chr(int("0b0011" + m_2_1_2[5:8].zfill(4),2))
    m_2_2_1 = bin(ord(str1[3]))[2:].zfill(8)
    m_2_2_1a = chr(int("0b0011" + m_2_2_1[1:4].zfill(4),2))
    m_2_2_1b = chr(int("0b0011" + m_2_2_1[5:8].zfill(4),2))
    m_2_3_1 = bin(ord(str1[4]))[2:].zfill(8)
    m_2_3_1a = chr(int("0b0011" + m_2_3_1[1:4].zfill(4),2))
    m_2_3_1b = chr(int("0b0011" + m_2_3_1[5:8].zfill(4),2))
    m_2_4_1 = bin(ord(str1[5]))[2:].zfill(8)
    m_2_4_1a = chr(int("0b0011" + m_2_4_1[1:4].zfill(4),2))
    m_2_4_1b = chr(int("0b0011" + m_2_4_1[5:8].zfill(4),2))
    m_2_5_1 = bin(ord(str1[6]))[2:].zfill(8)
    m_2_5_1a = chr(int("0b0011" + m_2_5_1[1:4].zfill(4),2))
    m_2_5_1b = chr(int("0b0011" + m_2_5_1[5:8].zfill(4),2))
    m_2_5_2 = bin(ord(str1[7]))[2:].zfill(8)
    m_2_5_2a = chr(int("0b0011" + m_2_5_2[1:4].zfill(4),2))
    m_2_5_2b = chr(int("0b0011" + m_2_5_2[5:8].zfill(4),2))
    m_2_5_3 = bin(ord(str1[8]))[2:].zfill(8)
    m_2_5_3a = chr(int("0b0011" + m_2_5_3[1:4].zfill(4),2))
    m_2_5_3b = chr(int("0b0011" + m_2_5_3[5:8].zfill(4),2))
    m_2_5_4 = bin(ord(str1[9]))[2:].zfill(8)
    m_2_5_4a = chr(int("0b0011" + m_2_5_4[1:4].zfill(4),2))
    m_2_5_4b = chr(int("0b0011" + m_2_5_4[5:8].zfill(4),2))
    m_2_5 = m_2_5_1a + m_2_5_1b + m_2_5_2a + m_2_5_2b + m_2_5_3a + m_2_5_3b + m_2_5_4a + m_2_5_4b
    msg = msg + m_2_1_1a + m_2_1_1b + m_2_1_2a + m_2_1_2b + m_2_2_1a + m_2_2_1b + m_2_3_1a + m_2_3_1b + m_2_4_1a + m_2_4_1b + m_2_5
    print "msg     =", msg
    f.write(msg)
    f.write('\n')


其中加了一行
s.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) 

這是因為socket 預設不得重複占用位址,若要重複使用需調整程式中增加socket參數設定
socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)


若有大量重複使用位址的需求,須直接調整系統網路參數設定,否則會有大量timeout或waitting狀況

系統網路參數調整方式:

vi  /etc/sysctl.conf

加入
net.ipv4.tcp_syncookies = 1    #這一行配置文件里如果有就不用添加了
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 5

然後執行以下命令,讓設定生效
/sbin/sysctl -p



2018年6月6日 星期三

監控目錄中檔案的異動

為符合資安要求,程式更版必須控管,並留存上線紀錄,同時為避免未經核可的程式更版發生,必須監控程式的異動。

監控的部分,這次規劃用Directort Monitor免費版,搭配自己寫的script達到監控發現程式異動時,立即用email及Line notify進行通報
Directory Monotor 專業版有mail功能但沒有Line Notify功能,費用說評估如下
Directory Monotor 專業版 每台主機USD149(以主機生命週期計算)
Directory Monotor 專業版 每台主機USD79(以每年計算)

若一台主機使用5年,有10台主機,5年費用為
以主機生命週期計算:149*10=1490USD
以每年計算:79*10*5=3950USD

安裝說明如下:

1.mkdir c:\dm
2.copy sendmail.bat sendmail.ps1 is_ready.wsf inc.js c:\dm
sendmail.bat  通報主程式
sendmail.ps1 寄信主程式
is_ready.wsf  Line notify主程式

inc.js              Line notify 副程式

3.到Directory Monitor網站下載並安裝 Directory Monitor
 會自動安裝.net framework 4.0,若電腦無法上網,需要先下載安裝

執行Directory Monitor
Add設定要監控的目錄
設定Main
指定要監控的目錄、EventsOptionsTypesFilter
Filter過濾掉*.tmp~*.*,因為Office文件異動會產生暫存檔,造成監控不斷發出通報。

設定Text Log
啟用log
設定log存放路徑及檔名c:\dm\dirmon.txt
設定Timestamp,選擇Daily,可將log每天存成1各檔,檔名加上日期
設定紀錄內容


設定Execute
設定發現異動時要執行的程式,應指定到c:\dm\sendmail.bat (圖片上目錄有誤)
參數和程式有關,不可變更,否則會造成程式執行異常。

其他頁簽功能無法使用,因為是免費版。


系統其他設定
選擇Options…

Monitoring兩個方框都不要選取,否則發現異動螢幕會跳出警告,干擾作業。

當要進行程式大量更新時(如廠商換版),請先將監控停止或暫停,以免突然收到大量通報。

若要啟用email通知功能,需告知網管部要收到email通知的人員的email,網管人員在程式中設定。
若要啟用Line通知功能,要收到通知的人必須先到Line Notify網站上註冊申請Token,然後將Token告知網管人員,網管人員於程式中加入Token,同時要收到通知的人必須在Line中將Line Notify加入好友,才能收到Line Notify



2018年5月16日 星期三

npm 學習筆記

NPM 是 Node Package Manager 的簡稱,它是一個線上套件庫,可以下載各式各樣的 Javascript 套件來使用。


建立一個新專案 
https://medium.com/html-test/%E5%BE%9E%E9%9B%B6%E9%96%8B%E5%A7%8B-%E4%BD%BF%E7%94%A8npm%E5%A5%97%E4%BB%B6-317beefdf182


切換到DOS mode,建立一個新目錄
D:\npm-project>mkdir p001
D:\npm-project>cd p001
D:\npm-project\p001


初始化專案資料夾並產生package.json (package.json 是掌管 專案資訊的重要檔案)

執行npm init,詢問都用預設值。

name: 就是該專案的名字,它預設就是該目錄名。
description: 專案描述。
entry point: 專案切入點,這有點複雜,之後再說。
test command: 專案測試指令,之後說。
git repository: 專案原始碼的版本控管位置。
keywoard: 專案關鍵字
author: 專案作者,以 author-name 寫之。
license: 專案版權。

用編輯器檢視package.json內容


再來安裝javascript套件,這次示範安裝 jquery套件

發現有2個警告訊息,可直接編輯package.json加入內容後載重新安裝套件,也可不用理會。
repository 裡的 url 要先去 github 建立一個空白的專案

安裝套件,也可以加入--save  參數。
會將安裝的套件版本寫入package.json

檢查package.json會發現多了iquery版本資訊

每個用 npm 安裝的套件,一律放在 node_modules 資料夾裡,以剛剛安裝的 jquery 來說,我們可以在 node_modules/jquery/dist/jquery.min.js 找到 最小化的 jquery 的版本。


編輯index.html測試 jquery是否可用

用瀏覽器開啟index.html

測試成功













2018年5月8日 星期二

install lubuntu-18.04-desktop-amd64

1.download lubuntu-18.04-desktop-amd64 from https://lubuntu.net/ 2.install lubuntu-18.04-desktop-amd64 3.安裝完後有幾個問題 無線網路無法使用 解決方式: 1.先用有線網路上網 2.開啟終端機執行 sudo apt-get install firmware-b43-installer reboot 中文輸入法無法使用 lubuntu 預設會安裝 fcitx 輸入法管理工具,但沒安裝輸入法 開啟Synaptic Package Manager 套件管理工具 搜尋fcitx 勾選及安裝 fcitx-chewing (注音輸入法) 重新啟動 fcitx 螢幕右下角狀態列會出現小鍵盤圖示 在圖示上點選滑鼠左鍵,出現選單,選擇Input Method -> 新酷音 螢幕右下角狀態列會出現紅色(酷)圖示,表示已切換至新酷音輸入法 按Shift鍵(或Ctrl+空白)可切換中英輸入模式

ubuntu 安裝完kubernetes後做apt-get update會出現錯誤

root@k8s02:~# sudo apt-get update 已有:1 http://tw.archive.ubuntu.com/ubuntu xenial InRelease 已有:2 http://tw.archive.ubuntu.com/ubuntu xenia...