Posts

markdown快速筆記

git的README.rd可以使用一個特殊的語法,稱為markdown
其用意是簡化書寫README的方法,而不用<H1><H1/>這樣的HTML語法書寫

線上markdown,可以用這個網站即時看到書寫的結果
https://stackedit.io/app#


# Title
# H1
## H2
### H3

# Title End
# H1 #
## H2 #
### H3 #

# 引用
> 一層引用
>> 二層引用

# 斜體
*AA*

# 粗體
**AA**

# 清單
* A
* B
* C

# 縮排清單
* A
  * B
    * C

# 序號
1. A
2. B
3. C

# 程式碼
(前面加上四個空白)<br />
(與前一行要一個空行)<br />

    function()
        AA + BB
        return A

# 行內程式碼
AA `function()` BB


# 分隔號

- - -


# 超連結
[連結名稱](http://example.com "連結文字,移到連結上面產生的文字")

# 參考形式的超連結
你可以使用[google][a]或是[yahoo][b]連到入口網站

[a]: http://www.google.cpm "Google網站"
[b]: http://tw.yahoo.com "奇摩網站"

# 圖片
![Alt text](/path/to/img.jpg "Optional title")

# 參考形式的圖片
![Alt text][id]

[id]: url/to/image  "Optional title attribute"

MySQL個人手札-Database

設定檔位置
ubuntu 16 18
mariadb 10.1.37
/etc/mysql/mariadb.conf.d/50-server.cnf
mysql 8.0
/etc/mysql/conf.d/mysql.cnf

centos7
mysql
/etc/my.cnf


建立Database
( [ ] 中跨號代表可以有無 )
CREATE DATABASE [IF NOT EXISTS] db_name
[ [DEFAULT] CHARACTER SET [=] charset_name ]
[ [DEFAULT] COLLATE [=] collation_name ]

IF NOT EXISTS - 如果Database不存在,就建立新的Database
(如果沒有上面的指令,且Database已存在,mariaDB會報錯)

[DEFAULT] CHARACTER SET - Database裡面的Table預設會使用的字集,也就是文字的二進位編碼

[DEFAULT] COLLATE - 儲存的文字的排序方法
(末碼為 ci 帶表不分大小寫,AaBbCcDdEe)
(末碼為 cs 帶表區分大小寫,ABCDEabcde)
(末碼為 bin 處理的單位事二進位)

CHARACTER SET 建議用 utf8mb4,可以儲存emoji
COLLATE 建議用 utf8mb4_bin

範例:
CREATE DATABASE IF NOT EXISTS testDB
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_bin;


修改資料庫的CHARACTER和COLLATE
ALTER DATABASE db_name
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_bin;


顯示全部Database
SHOW DATABASES;





顯示DATABASE的CHARACTER和COLLATE
SHOW CREATE DATABASE db_name;


顯示預設的資料庫ENGINE
(現在都預設 INNODB)
SHOW VARIABLES LIKE 'storage_engine';


顯示全部支援的ENGINE
在support的地方會有 DEFAULT
(\G 表示已人比較容易看的懂的方式顯示)
SHOW ENGINES \…

Fortigate link-monitor 類似 IP SLA

Fortigate也有類似Cisco IP SLA 的功能,叫做 link-monitor
以前Fortigate有GUI,後來只剩下CLI。

link-monitor,可以監控介面和Ping對方位置,如果Ping不到,會認定這條線路不能用而變更路由。
這個功能可以在不使用WAN Loadbalance的狀況下,使多條WAN可以做為備援。
與WAN Load Balance不同的是,WAN Load Balance是屬於 Active Active Mode,而link-monitor是 Active Passive Mode。

設定方法:

config system link-monitor  #進到link-monitor設定模式
  edit wan1                 #建立或修改link-monitor,名稱可以自行設定,建議與介面名相同
    set srcintf wan1        #設定要被監控的介面,Ping封包會從這個介面出去
    set gateway-ip 123.123.123.123 #Gateway位置,用來轉送Ping封包用
    set server 168.95.1.1   #要Ping的位置,建議用對方的gateway
    set source-ip 123.1.1.1 #Ping封包的來源IP,可以不設定,預設會用監控介面的IP
    set protocol ping       #設定ping的方法,方法有http和ping
    set interval 3          #兩次發送Ping封包的間隔,單位秒,預設 5
    set timeout 1           #Ping封包的tiemout時間,單位秒,預設 1
    set failtime 3          #掉封包幾次,會認定線路不能用,預設 5
    set recoverytime 5      #當線路是"不能用"的狀態時,連續Ping到幾次才會恢復,預設 5
    set update-cascade-interface disable #當不能用時,同時會讓介面shutdown
    set update-static-route enable #當線路不能用/恢復…

raspberryPI + strongswan 建立自己的VPN伺服器

紅色字 - 重要訊息,須多加注意
綠色字 - 指令
(裡面的指令無須在意工作目錄)
(須使用root角色執行命令或再前面加上 sudo)

環境介紹
raspberry 3 B+,使用內建的WIFI連線,沒有使用實體網路線
raspberry的IP為 192.168.10.100
作業系統用raspbian,2018 12月

使用小米AP
WAN的部分使用PPPOE
LAN的部分設定為192.168.10.1
設定 UDP 500和UDP 4500兩個對應到raspberry
(連接阜轉發,外對內NAT,DMZ,依照AP品牌名字不一樣)

使用的手機是小米note5



前置作業
建議先更新到最新,並且確定WIFI每次重開機IP都依樣且會自動連線



安裝相關軟體
apt-get install strongswan libcharon-extra-plugins libstrongswan-extra-plugins strongswan-ike strongswan-pki



建立VPN伺服器憑證
有兩種建立方法,兩種則ㄧ
1. 用 ipsec pki 工具

建立VPN伺服器憑證私鑰
ipsec pki --gen --type rsa --size 2048 --outform pem > /etc/ipsec.d/private/vpnHostKey.pem

建立VPN伺服器憑證公鑰
這邊一次建立10年
第五行的部分可以依照個人狀況修改
C=代表國家縮寫, O=組織名稱, OU=組織內的單位, CN=伺服器的FQDN名稱
下一行的san同CN
ipsec pki --pub --in /etc/ipsec.d/private/vpnHostKey.pem --type rsa | \
 ipsec pki --issue --lifetime 3650 \
   --cacert /etc/ipsec.d/certs/strongswanCert.pem \
   --cakey /etc/ipsec.d/private/strongswanKey.pem \
   --dn "C=TW, O=YourCompanyName, OU=IT, CN=vpn.MyCompany.com" \
   --san vpn.MyCompany.com \
   --flag se…

Nginx server 和 location 優先順序

Nginx是一個輕量形的 WEB 伺服器,功能很強大。

其中 server 和 location 可以有很多種的設定方式,也因此需要有個機制去選擇出到底該用哪一個。

這篇文章會說明 Nginx 選擇 server 和 location 的方法。



Server 當設定檔中有多個 server (...) 區塊,Nginx會怎麼選擇呢?
server的選擇相對比較簡單,在開始之前,要先了解Nginx怎麼編譯 Server 裡面的 listen 。
預設的 listen 通常是 :
listen 80 default_server;

但是一個完整的描述方法因該是:
listen IP:PORT;

而缺少的部分(不管是缺少IP還是Port號)Nginx會自動使用預設值補齊。
補齊的方式如下

缺少IP
如 listen 80;,Nginx會自動補0.0.0.0,變成 :
listen 0.0.0.0:80;

缺少Port
如 listen 10.1.1.1;,Nginx會自動補80 Port號,變成 :
listen 10.1.1.1:80;

兩個都缺
也就是沒有使用 listen ,nginx會自動補上 listen 0.0.0.0:80;

知道自動補齊的方法後,就可以開始討論選擇server的順序。


首先 Nginx會先檢查 IP:Port 的匹配。
選擇順序為
listen 有指定IP (如 10.1.1.1)
listen 無指定或使用0.0.0.0

第二 比對 server_name
當第一個IP:Port匹配檢查完後,發現有多個符合的結果,才會繼續比對。
選擇順序為
1. 完整比對到server_name,如 server_name www.example.com;
2. server_name前面有 * 符號,如 server_name *.example.com;
3. server_name後面有 * 符號,如 server_name www.*;
4. server_name是正規表示法,如 server_name ~www.example[1-3].com;
5. 全部的server_name都不匹配,此時Nginx會使用 listen 後面有 default_server字樣的
    如 :
    listen 80 default_server…

linux文字修改大師-sed-01-基本介紹

Image
會寫這篇文章,主要是為了自己可以記住龐大的sed功能。
章節的編排主要是依據功能性。
個人使用sed的主要原因是自動化修改設定檔。

目前看過最好的sed和awk中文教學網站大概是底下這個連結
http://wanggen.myweb.hinet.net/ach3/ach3.html

本篇文章主要是依照 GUN 的 sed所撰寫,連結為
https://www.gnu.org/software/sed/manual/sed.html

這邊提供一些線上的正規表示法網頁,可以即時知道自己寫的正規是否有匹配

https://regex101.com/
裡面有很多範例可以直接複製使用

https://regexr.com/
可使用replace功能, 方便驗證 command s 是否正確,裡面還有正規的符號參考



sed簡介

學習sed建議具備正規表示法的基礎,沒有此基礎也可學習。

GUN的sed簡介說到,sed是一種串流型態的文字編輯器

類似一個管道(pipe),特別的是,sed會在管道中間進行文字的取代、刪除、插入等功能。

input =======>output
              filter

sed的input可以是一個或多個檔案、stdin或前一個指令利用 | (pipe)傳到sed



目錄
sed基礎介紹
常用option
address
除了某個條件以外,其它都符合
p指令
s指令
a、i、c、d指令





sed基礎介紹

sed的指令格式為
sed [option] "/address/ , /address/ command argument [flag] " [inputFile...]

從左到右介紹
[option] 第一個option是常見到的以 - 符號開頭的功能,如 -n、-r、-i,可省略
/address/ address有兩個,代表開始行數和結尾行數
              只有一個代表指定的這行,都不輸入代表每行都會執行command
              address可以用正規表示法
command 進行的動作,當匹配address後,會進行怎樣的行為,常見的command有s、a、i、c
argument 給command使用的參數,大部分command後面要接參數
flag 只有 s 指令才會用到
inputF…

Zabbix 可以用中文輸入

會看到這篇文章表示目前的資料庫字集不支援中文
如果之前是照官方方法設定,資料庫語系會是latin1

修改語系的方式目前找到的方法是:
1. 暫停Zabbix服務 (建議)
2. 修改資料庫的預設字集 (這一步其實可以不用)
3. 倒出資料庫的資料 (會等很久)
4. 複製一份備份出來的資料 (怕出現不可預期的錯誤)
5. 用sed指令修改資料庫內的table語系
6. 倒回資料庫




1. 暫停Zabbix服務
建議執行,可以加快備份速度
service zabbix-server stop




2. 修改資料庫的預設字集
先登入資料庫
mysql -uzabbix -p zabbix
輸入資料庫使用者 zabbix 的密碼,進到mysql指令介面
mysql> ALTER DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;
mysql> quit;




3. 倒出資料庫的資料
這個動作依照資料庫大小大概在10分鐘倒30分鐘不等

mysqldump -uzabbix -p zabbix --skip-lock-tables > zabbix.tmp.sql




4. 複製一份備份出來的資料
cp zabbix.tmp.sql zabbix.tmp.sql.backup




5. 用sed指令修改資料庫內的table語系
sed -i 's/CHARSET=latin1/CHARSET=utf8\ COLLATE=utf8_bin/g' zabbix.tmp.sql





6. 倒回資料庫
cat zabbix.tmp.sql | sudo mysql -uzabbix -p zabbix
輸入資料庫使用者 zabbix 的密碼,開始恢復資料




7. 啟動Zabbix Server
service zabbix-server start




到此已經可以在資料庫中輸入中文,如果要讓繪製的圖形也可以用中文要照底下的步驟進行


修改字型
預設的圖形字型不能顯示中文,因此需要修改字型

先到Windows的 "字型",找到微軟正黑體(建議),點兩下進去後找到微軟正黑體 粗體
按右鍵複製到桌面,這個字型檔的副檔名是 ttc ,要改成ttf
複製到Zabbix伺服器內,把字型檔複製到Zabbix的字型檔資料夾
sudo cp msjh…

Windows DC Error Code 5774, 5775, 5781

Image
主要的DC重開機常會出現5774, 5775, 5781錯誤訊息

當DC把DNS指向自己的時候(Primary DNS)
在開機的過程中有可能netlogon服務會比DNS服務提早開啟
當這個狀況發生時,因為Netlogon要註冊資料到DNS內,因為DNS還沒啟動完成,因此造成5774, 5778, 5781的錯誤訊息

等待5分鐘後,NetLogon會再次向DNS註冊

如果不想看到這個錯誤訊息發生
可以修改註冊檔

regedit
KEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Netlogon
右邊的[DependOnService],點兩下新增DNS在最下面




出處
https://support.microsoft.com/zh-tw/help/259277/troubleshooting-netlogon-event-5774,-5775,-and-5781