2020年1月5日

Ubuntu 上更換 DBeaver 語系問題

DBeaver 啟動時會判斷電腦的語系並自動切換為中文,不過實在是看不慣
簡體中文,透過界面上調整語系後卻出現存取錯誤的訊息:
Can't save startup configuration - access denied. You could try to change national locale manually in '/usr/share/dbeaver/dbeaver.ini'. Refer to readme.txt file for details. /usr/share/dbeaver/dbeaver.ini /usr/share/dbeaver/dbeaver.ini

在讀了 readme.txt 後依照說明在 dbeaver.ini 新增 -nl en 但重啟軟體還是無效,最後在網路上找到在 --add-modules 下方,新增 -Duser.language=en 就解決了,如下

Shell># sudo vim /usr/share/dbeaver/dbeaver.ini
-startup
plugins/org.eclipse.equinox.launcher_1.5.600.v20191014-2022.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.1100.v20190907-0426
-vmargs
-XX:+IgnoreUnrecognizedVMOptions
--add-modules=ALL-SYSTEM
-Duser.language=en <= 增加這行
-Xms64m
-Xmx1600m


2020年1月3日

Postfix阻擋垃圾郵件的方式

從郵件標頭進行判斷過濾


#在 main.cf 啟用標頭檢查
shell># vim /etc/postfix/main.cf
header_checks = pcre:/etc/postfix/header_check

#在 header_check 新增過濾條件
#建議過濾條件的訊息給予特定的代號,你才會知道郵件被哪一條規則阻擋,方便除錯
shell># vim /etc/postfix/header_check

#過多的收件者或CC通常是垃圾信,以下表示過濾掉15個以上的收件者
/^To: (?:[^@]*@){15,}.*/                         DISCARD Discard by rule H01
/^Cc: (?:[^@]*@){15,}.*/                         DISCARD Discard by rule H02

#過濾郵件主旨有性暗示的文字,有些信件會用base64編碼
/^Subject:(.*)5aiB6ICM5Ymb(.*)/           DISCARD Discard by rule H030
/^Subject:(.*)威而剛(.*)/                          DISCARD Discard by rule H031

#不收某些國家的主機轉過來的信,例如波蘭
/^Received:(.*)from(.*)+\.pl(.*)/              DISCARD Discard by rule H705

2017年10月22日

用 SSH 金鑰登入 GCP


#於伺服器建立新使用者帳號
shell># useradd username -C "新使用者"

#建立金鑰,執行過程會要求輸入密碼,建議還是要有密碼,若金鑰掉了還有道密碼卡著
shell># su username
shell>$ mkdir .ssh
shell>$ ssh-genkey -t rsa -f .ssh/username-key -C "username"

#可以看到公鑰及私鑰
shell>$ ls .ssh
username-key
username-key.pub

#調整私鑰權限
shell>$ chmod 400 .ssh/username-key

#複製公鑰的內容,將內容新增到GCP的【中繼資料】 > 【ssh金鑰】中
shell>$ cat .ssh/username-key.pub














#將私鑰提供給帳號擁有者
#使用putty登入,也可以建立一個profile紀錄


#使用filezilla





2017年4月16日

bash 的 history-search-backward 功能

在 bash 按下鍵盤的上或下來可顯示先前輸入的指令,若加上 history-search-backward 和 history-search-forward 會更好用,可惜預設並沒有啟用,有了這個你可以輸入 vim 然後按上或下來搜尋先前輸入 vim 開頭的指令,設定方式如下

首先利用showkey找出鍵盤的代碼
shell>$ showkey -a

Press any keys - Ctrl-D will terminate this program
出現上述提示訊息後,請按下鍵盤的上
^[[A   27 0033 0x1b
         91 0133 0x5b
         65 0101 0x41

再按鍵盤的下
^[[B   27 0033 0x1b
         91 0133 0x5b
         66 0102 0x42

最後按下Ctrl+D退開showkey的互動模式,若想要整個系統都支援這個功能時請編輯/etc/bashrc,若只想個人帳號支援請編輯 ~/.bashrc

shell># vim /etc/bashrc
在檔案最下方加上下面兩行,儲存離開後登出在登入就完成了
bind '"\x1b\x5b\x41":history-search-backward'
bind '"\x1b\x5b\x42":history-search-forward'



2016年12月17日

autofs 內建的 -host map 用法

/etc/auto.master 有個預設設定"/net    -hosts",啟用時系統會將 key (主機名稱)拋給 /etc/auto.net 來掛載 NFS 磁碟,詳細運作方式可以看一下 /etc/auto.net 這個腳本程式

假設我們有個 NFS 磁碟,利用 showmount 可查出以下資訊
shell># showmount -e 192.168.1.100
Export list for 192.168.1.100
/volume1/project 192.168.1.1

假設這個 NFS 主機名稱為 mike,在 /etc/hosts 新增以下設定
shell># echo "192.168.1.100  mike" >> /etc/hosts

在 /net 下建立 mike 目錄,若無法建立目錄時,請確認autofs服務是否有啟動,若有就先停掉避免服務咬住無法建立
shell># mkdir /net/mike

啟動 autofs 及掛載NFS等相關服務
shell># service rpcbind start
shell># service autofs start

然後切換目錄到 /net/mike/volume1/project 時,可以發現 autofs 自動將NFS磁碟掛起來了
shell># cd /net/mike
shell># df -h
mike:/volume1/project
                     28084178816 7826209664 20257969152  28% /net/mike/volume1/project


來源出處
man 5 auto.master



2016年12月11日

base64 加解密

加密
shell># echo '要加密的字串' | base64
6KaB5Yqg5a+G55qE5a2X5LiyCg==
shell>#

解密
shell># echo '6KaB5Yqg5a+G55qE5a2X5LiyCg==' | base64 -d -i
要加密的字串
shell>#

2016年10月9日

CentOS7 修改時區(time zone)

CentOS7有個好用指令方便調整時區:timedatectl (systemd-219-19.el7_2.11.x86_64)

列出所有時區
shell> timedatectl list-timezones

設定時區
shell> timedatectl set-timezone Asia/Taipei

2016年2月5日

離線延伸DRBD磁碟 - internal meta data & without LVM

由於internal meta data必須存放於磁區的最後面,按照官方的手冊說明需要手動處理metadata的延伸,但我照著做之後一啟動DRBD就會造成系統當機,後來參考 http://www.ogris.de/drbd/ 的流程才成功,若按照官網手冊有遇到問題的人, 不妨試試以下的方法。建議先在測試環境試過,別貿然在正式環境處理。

注意:以下的步驟是有一定風險的,請務必做好資料備份

實做環境
CentOS 6 x86_64
ESXi 6.0 U1
DRBD-8.3 (elrepo)
heartbeat
檔案系統格式: ext4
----------------------------------------------------------------------------

預設狀態
node1的DRBD狀態為primary
node2的DRBD狀態為secondary

 步驟一
通常DRBD會搭配heartbeat或crm等叢集套件使用,先將node2的開機啟動服務停掉
node2>#chkconfig drbd off
node2>#chkconfig heartbeat off

步驟二
將node2主機關機,然後透過ESXi的管理介面,並加大虛擬硬碟。請注意這個時候node1還在正常運作,且角色為 primary。
node2>#poweroff

步驟三
啟動node2的電源開機

步驟四
將node2的磁碟進行延伸。用parted可以看到/dev/sda已經由原本的32.2GB變成42.9GB。
 Model: VMware Virtual disk (scsi)
Disk /dev/sda: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos

Number  Start   End     Size    Type     File system     Flags
 1      1049kB  8423MB  8422MB  primary  ext4            boot
 2      8423MB  9476MB  1053MB  primary  linux-swap(v1)
 3      9476MB  32.2GB  22.7GB  primary  ext4
將原本的/dev/sda3磁區刪除並重建。
node1&2>#  parted /dev/sda
parted> rm 3
parted> mkpart primary ext4 9476M 100%
parted> quit
node1&2># reboot

步驟五
手動啟動DRBD服務
node2># service drbd start
Starting DRBD resources: [ r0
Moving the internal meta data to its proper location
Internal drbd meta data successfully moved.
d(r0) s(r0) n(r0) ].

啟動後請確認 drbd 連線狀態是否已經正常
node2># cat /proc/drbd
version: 8.3.15 (api:88/proto:86-97)
GIT-hash: 0ce4d235fc02b5c53c1c52c53433d11a694eab8c build by mockbuild@builder10.centos.org, 2013-03-27 16:01:26
 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
    ns:340 nr:8 dw:348 dr:33 al:5 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b
oos:0
手動啟動 heartbeat
node2># service heartbeat start
啟動後請確認heartbeat紀錄檔有以下資訊
info: Ping node count is balanced.

 步驟六
復原node2的開機啟動服務設定
node2>#chkconfig drbd on
node2>#chkconfig heartbeat on

 步驟七
再來處理node1,基本上就是重複之前在node2執行的動作
先關閉開機啟動服務。
node1>#chkconfig drbd off
node1>#chkconfig heartbeat off

 步驟八
 將node1關機,然後透過ESXi介面加大硬碟。注意這個時候 node2還在運作中,由於有啟動 heartbeat的關係,node2會被提昇為primary。

步驟九
啟動node1的電源開機

步驟十
 一樣用parted工具處理磁碟延伸,方式同步驟四。

步驟十一
手動啟動node1的DRBD服務
node1>#service drbd start
Starting DRBD resources: [ r0
Moving the internal meta data to its proper location
Internal drbd meta data successfully moved.
d(r0) s(r0) n(r0) ].

執行以下指令,你會發現DRBD在進行同步
node1>#cat /proc/drbd

查看/var/log/messages紀錄可發現以下訊息
kernel: block drbd0: drbd_bm_resize called with capacity == ......
手動啟動heartbeat,記得確認狀態,方法同步驟五
node1>#service heartbeat start

 步驟十二
 趁著還在同步,先復原node1的開機啟動設定
node1>#chkconfig drbd on
node2>#chkconifg heartbeat on

步驟十三
於同步完成後,在DRBD primary主機(node2)延伸檔案系統
node2>#umount /mnt
node2>#e2fsck -f /dev/drbd0
node2>#resize2fs /dev/drbd0

步驟十四
掛載磁區檢查磁碟大小是否延伸,且資料是否存在
node2>#mount -t ext4 /dev/drbd0 /mnt
node2>#df -h

2016年1月7日

蒐集系統資訊工具 sosreport

在 RedHat / CentOS 下有個蒐集系統資訊的指令:sosreport
 sosreport 是模組設計,可以根據你想要的模組進行資料的蒐集

安裝
shell># yum install sos

列出支援的模組:
shell># sosreport -l

蒐集指定的模組資訊
shell># sosreport -o postfix

蒐集所有的模組資訊
shell># sosreport -a

執行後會將蒐集到的資訊打包成壓縮檔及一個md5檢核檔
解壓縮後請找 sos_reports 目錄內有個 sosreport.html 可以方便讀取



2015年12月7日

Apache mod_rewrite 自動 HTTP 轉 HTTPS

請確認已載入 mod_rewrite 模組後,在 httpd.conf 加入下方設定,重啟 apache 即可

方法一
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^/(.*)?$ https://%{SERVER_NAME}/$1 [L,R]

方法二
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R,L]

2015年11月12日

sendmail 修改主機名稱

sendmail 預設會抓系統 hostname,若要強制修改主機名稱
可在 sendmail.mc 加上以下設定

define(`confDOMAIN_NAME', `mail.yourdomain.com')dnl

或直接改 sendmail.cf
Djmail.yourdomain.com

完成後重啟 sendmail 服務即可完成

 

2015年11月2日

利用 taskkill 大量刪除程序

我發現系統下有大量的 php-cgi.exe 程序已經失控了,想把所有程序都 kill
但數量實在太多了,用工作管理員清除會花上不少時間,這時可以用 taskkill 指令處理

指令:taskkill /IM php-cgi.exe /F

參考文獻
https://technet.microsoft.com/en-us/library/bb491009.aspx

2015年7月6日

windows上等同 cat 及 grep 的指令

linux 的 cat 及 grep 指令在查找紀錄檔時相當好用,windows系統上也有類似的指令,分別是 type、find 及 findstr,指令的詳細用法可以用 help command 取得說明

顯示檔案內容
cmd> type _vimrc
 set nocompatible
 behave mswin
 set nobackup
 set tabstop=4
 colorscheme koehler

搜尋輸出的資訊,例如查找系統在監聽的通訊埠
cmd> netstat -an | find "LISTEN"
  TCP    0.0.0.0:135             0.0.0.0:0              LISTENING
  TCP    0.0.0.0:445             0.0.0.0:0              LISTENING
  TCP    0.0.0.0:4000           0.0.0.0:0              LISTENING
  TCP    0.0.0.0:5357           0.0.0.0:0              LISTENING

那兩個指令的結合就是等同 cat 及 grep
cmd> type file | find "pattern"