顯示具有 軟體應用 標籤的文章。 顯示所有文章
顯示具有 軟體應用 標籤的文章。 顯示所有文章

直接連線到Mail Server,用Command來寄發Mail

 有時候會遇到使用者收不到程式自動寄發信件的問題,可以用Command的方式來測試Mail Server,記錄一下步驟:

用Telnet登入Mail Server,假設Mail server的IP是192.168.1.100,Port是25
$ telnet 192.168.1.100 25

成功登入Mail Server後,首先用helo或ehlo跟Server打招呼,成功會回傳250的Code
HELO

輸入指令MAIL FROM:<email address>,讓mail server知道是誰要寄信,如果mail server允許寄件人則會回傳成功的Code:250
MAIL FROM: test01@test.com

輸入指令RCPT TO:<email address>,收件人,成功會回傳250的Code
RCPT TO: test02@test.com

接著輸入指令DATA,通知Server要準備要輸入信件的主旨與內容
DATA

輸入指令SUBJECT: <text>,主旨,按下Enter
SUBJECT: test subject

接著開始輸入內容,預設在新行頭一字輸入「.」來可以結束內容,就可以把信寄發出去

要結束Telnet,輸入quit就可以離開了。


下面是實際的例子:

[2023-12-06 10:29.25]  ~

[test.6138] ➤ telnet 192.168.1.100 25

Trying 192.168.1.100...

Connected to 192.168.1.100.

Escape character is '^]'.

220 test-mail.server.local Microsoft ESMTP MAIL Service ready at Wed, 6 Dec 2023 10:30:09 +0800

HELO

250 test-mail.server.local Hello [192.168.1.39]

MAIL FROM: test01@test.com

250 2.1.0 Sender OK

RCPT TO: test02@test.com

250 2.1.5 Recipient OK

DATA

354 Start mail input; end with <CRLF>.<CRLF>

SUBJECT: test subject


body test

.

250 2.6.0 <8cd94457@test-mail.server.local> Queued mail for delivery

Docker for MS SQL Server的建置

 微軟有為SQL Server發行Docker的版本,對於測試與學習資料庫是非常方便的。

稍微記錄一下操作,以便之後可以快速重建。

Docker Hub:https://hub.docker.com/_/microsoft-mssql-server

下面是我用來產生Docker Container的語法
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=password" -e "MSSQL_PID=Express" -p 4433:1433 -d mcr.microsoft.com/mssql/server:2019-latest


說明:

1、因為我想要測試SQL Server 2019,所以我有指定版本2019-latest

2、MSSQL_PID是指定使用的版本,如不指定預設是developer,我使用的是Express是資源受限的免費版本,可用在生產環境,但是有資源限制

3、SQL Server版本的差異:https://learn.microsoft.com/zh-tw/sql/sql-server/editions-and-components-of-sql-server-2019?view=sql-server-ver16

4、因為我的Docker還有其他的Container,所以必需指定Port:4433

5、在SQL Server Managerment Studio連線特定的port時,可用「,」來指定,例如:192.192.192.10,4433

6、查SQL Server版本的語法:select @@version

樹莓派(Raspberry Pi)開機自動執行Chrome瀏覽器

 有一個需求是當樹莓派開機後,可以自動執行Chrome瀏覽器,並且開啟Kiosk模式,其步驟如下:


進入家目錄中的一個隱藏資料夾

$ cd /home/pi/.config


建立特定名稱的資料夾

$ mkdir autostart


進入autostart資料夾後,新建一個檔案

$ tocuh chrome.desktop


編輯chrome.desktop並加入下列的語法

[Desktop Entry]
Type = Application
Exec = chromium-browser -kiosk "http://a-test:9901/ft-th-test"


重開機測試,應該就可以成功了


Datadomain OS 6.2查看CIFS的Log

 我們的Datadomain OS是6.2,有設定CIFS協定並限制可連線的IP,於是想了解當未許可的IP連線時,是否有記錄可查詢。

首先我在網頁的管理介面的message、audit等log中沒有看見相關的記錄,於是查找OS 6.2的管理手冊,找到了方法。

登入CLI的管理介面,執行log list的指令,結果如下,與網頁的管理介面是一樣的。


而執行log list debug指令後,可以發現有更多log檔,截取部份如下:


在debug下,有一個名為cifs.log的檔案,位置在debug/cifs/cifs.log

所以執行log view debug/cifs/cifs.log的指令,果然看見了CIFS連線的詳細記錄。



Oracle REST Data Services無法連線資料庫

 今天因為更新了一些元件,所以重啟Docker Containe後,ORDS就出現了下圖的錯誤


因為已確定資料庫是有開啟且可以正常使用,所以問題應該是出現在ORDS, 觀察目前的Pool的設定值
# ords --config /ords/conf config list


由上圖可得知資料庫的設定值為172.17.0.3,但是資料庫已被Docker設定為172.17.0.2,所以需要修改這個設定值
# ords --config /ords/conf config set db.hostname 172.17.0.2

重啟ORDS後,卻出現下列的訊息,這是資料庫密碼有問題,重新設定資料庫的密碼
# ords --config /ords/conf config secret db.password

將密碼輸入完成後,再重開一次ORDS,這次就成功讀取到資料了。





VS Code遠端開發功能測試

 微軟在VS Code 11月更新版本有遠端開發預覽功能—遠端通道(Remote Tunnels),

遠端通道讓開發者可以安全地從任意裝置使用vscode.dev,或是VS Code桌面的遠端通道擴充套件來存取自己的機器進行遠端開發。

在本機上開啟VS Code,如下點選頭像圖示後選取「啟用遠端通道存取」


接著會要求以Github的帳戶登入

登入後VS Code就會啟用遠端通道,並且出現如下圖的訊息,可以複製連結


將連結貼上瀏覽器的網址列上,就可以在vscode.dev上開發自己機器上程式,如下圖


如果要關閉通道或其他功能,在本機的VS Code上點選頭像圖示後再選擇下圖紅色圈框處




這功能實在方便,讓工程師在外可以臨時馬上連線修改,不過也讓工作變成隨時可做。


 




Oracle REST Data Services(ORDS)安裝

 為了方便測試,我用Docker來測試,直接從Oracle下載好21c XE版DB的Image,並且將它啟動。

這台DB我有新建一個PDB是xepdb1,port:1521

簡述一下我的IP配置

Docker Hosting:192.192.192.10
ubuntu:172.17.0.2
Oracle 21c DB:172.17.0.3

因為不打算將DB與ORDS安裝在同一台server,所以再準備一台ubuntu的container來安裝ORDS,一邊學習一邊記錄。

1、先從Oracle下載ORDS的zip檔並解壓到ubuntu上。

2、在ubuntu上安裝JDK,我安裝的是Oarcle JDK 19並且在.bash_profile設定好變數JAVA_HOME與PATH

3、在ubuntu設定ODRS的環境變數

   # echo -e 'export PATH="$PATH:/<ords product folder>/bin"' >> ~/.bash_profile

4、第一次啟動前先設定ODRS configure:ords -–config <config folder> install,我的指令如下:

   # ords -–config /opt/ords/conf install

  接著就依照提示輸入相關的訊息,如IP、Port…等,其中有一項是要求administrator username,我用的是sys

   另外ORDS會問你是否start ORDS in standalone mode,我是選擇YES,所以安裝完後會自動啟動ORDS Service。

   ORDS除了可以standalone mode啟動外,也可以模組的方式應用在Oracle WebLogic Server、Apache Tomcat,之後如果有機會再來測試看看。   

5、完成上述的步驟後,基本上ORDS就安裝完成了,之後如果要重新啟動ORDS,可以下列的指定啟動:

   #  ords --config /opt/ords/conf serve


用docker來執行firebase CLI login注意事項

 我想在docker container上執行firebase cli,在login時遇到了一些問題,故將步驟記錄下來。

1、我用node最新的docker image來建立container。

2、安裝firebase cli:npm install -g firebase-tools

3、為了避免時區的問題,所以在建立container時一併指定了時區;firebase login會用到port:9005,所以我的指令如下:

   # docker run -it -p 9005:9005 --name firebase_cli -e TZ=Asia/Taipei firebse_cli /bin/bash

4、在cli下執行firebase login時,因為認證會轉到localhost,所以會無法成功,可改用firebase login --no-localhost,用取得authorization code的方式登入

 


EMC DataDomain登入時出現 HTTP Status 404

 今天要登入EMC DataDomain時一直無法登入,但是CLI登入卻又是正常的,因為不知道原因,所以就把DataDomain重開機,重開完成後,要登入Web管理介面時卻出現了Http Status 404的錯誤。


最後找到文章說可能是憑證失效了,重新產生憑證後就恢復正常了。

# adminaccess certificate generate self-signed-cert regenerate-ca


EMC DataDomain重建Replication ,出現Error

事件:DD Replication出現Error的錯誤

注:我是參考手冊與測試得出的結果,故將此事件記錄下來,如觀念有錯,請以官方文件為主

因為一直無法恢復正常,所以Disable Pair再Enable Pair也是出現Error,而訊息中有提到可能需要重建Replictaion

我把Replication Pair Delete後,想要重建一個新的Replication,但是卻出現Mtree already exists


環境是有兩台DD,分別為DD1、DD2,其中DD1是源系統,只做一對一的複製。

如果在新建Replication時,設定DD2一個新的mtree,此時兩台DD會從頭開始同步,如果網路速度有限,在擁有龐大的資料量下,此方案並非好選擇。

因為DD2還存有原本的資料,只是Replication需要重建,所以應該會有其他的方案。

在DD2登入CLI,輸入mtree list,可以發現下列的資訊:


其中/data/col1/backup_DD3300-1的status是「D」,這是我之前手動刪除了這個mtree,在還沒有執行filesys clean的情況下,mtree僅是被註記。此時新建的Replication如果指定相同的名稱「backup_DD3300-1」,一樣會出現Mtree already exists的錯誤訊息,僅管在Web的管理介面上已經看不到這個mtree。

要解決這個情況,只要手動執行clean,當然你如果有設定clean的排程,也可以等待排程自動執行。下列指令是執行與停用clean,如果只是要刪除status為「D」的mtree,不用等到clean作業完成,只要等待一至兩分鐘,就可以停用clean(如果你的clean很快完成,就不需要停用了)

# filesys clean start

# file sys clean stop

 

因為在DD2上已經有Error之前的同步資料,所以改用另一個方案。

一樣在DD2的CLI執行mtree list

 

Status為「RO/RD」表示是mtree是屬於Replication Destination,此時我們把Replication Pair刪掉後,則Status會變成「RW」,因此該mtree會變成獨立。也因為如此,在新建Replication時,是無法在DD2指定相同的名稱。

選擇Start Resync,接著步驟與新建Replication一樣,而且可以指定DD2已存在的mtree,它會警告如果與源資料不一致,會同步DD2的資料。

CLI指令為:replication resync destination


 

設定完成後,因為DD2已存有Error前的同步資料,所以原本需要同步5T的資料,只需要70G即可




Ubuntu:更新node版本後,還是顯示舊版本

 在建立新的react專案時,遇到下列訊息:
The engine node is incompatible with this module. Expected version … >=17.10.0. …

意思大概指要安裝的module需要Node更新的版本,所以記錄一下更新的步驟

清除npm缓存:npm cache clean -f

安裝n模組:npm install -g n

安裝官方穩定版本:n stable

安裝官方最新版本:n latest

接著我執行 node --version來查看版本,結果發現還是原本的版本:16.17.0

後來執行 n 來查看已安裝的node版本,發現其實已經安裝了新版本如下圖。



選擇新版本後,再以node --version來查看,就顯示為18.9.0版本

重新建立新的react專案,就不再出現警告的訊息了。


利用Plink替代Putty來建立Script

以往都是用putty這套好用的小程式來連接Server並撰寫Script來自動執行指令。

我的Script資料夾中有一個免安裝的putty,並設定好Session:test01,所以Script有一行指令:putty.exe -load test01。

直到前幾天因為某些原因,重設了另一個資料夾下putty的Session,結果發現原本設定好的test01也不見了。

經查文件後,我才知道putty的設定是放在windows的registery裡面,所以所有的putty都會共用這些設定。


後來在putty的document中發現putty有建議用另一個command line tool:plink來建立script,並提供了許多參數的說明。

document:https://the.earth.li/~sgtatham/putty/0.76/htmldoc/


所以我依文件改寫了scirpt,如下:

plink.exe -ssh -l tt01 -i private.key -batch 192.168.199.126  replication status all


記錄一下我自己的說明:

-ssh:使用ssh協定

-l:指定帳號

-i:private key,我用這個來取代密碼

-batch:取消所有交談提示

192.168.199.126:Server IP

replication status all:連上Server後要執行的指令


詳細的參數說明可以直接下plink或參考document

Excel VBA 自訂函數 傳入儲存格參數

 為了解決一個有1000個欄位的判斷問題,所以使用自訂函數來自動判斷。

但是自訂函數又遇到了另一個問題,也就是沒有辦法自動加號,先看程式碼如下:

Function test01(aa, bb)

   a = Cells(aa, bb).Value

   test01 = a

End Function

程式碼很簡單,只是如果單純傳入欄號、列號時,下一列無法自動加號,如下圖

(為了顯示公式,所以直接轉成文字)


由上圖可知,公式都是(1,1),而不會自動變成(1,2),(1,3),這樣對於一個有數百列的Excel,要一個一個手動改實在太麻煩了。

還好最後有試出一個方法可以解決這個問題,就是利用標準的公式column與row,這樣終於可以解決問題了。


公式說明如下:
Column是傳回參照位址欄之編號,如COLUMN(B1)傳回2,也就是欄B
Row是傳回參照位址列之編號,如ROW(C2)傳回2,也就是第二列

用這兩個公式就可以將儲存格的參照位址傳入VBA,並享受自動加號的功能。





IE 11 更新後無法開啟Oracle EBS 11i的Forms

在更新之前,IE開啟EBS都是正常的,安裝的是Java 1.6_51的版本,後來系統要求更新,之後就無法開啟EBS了。

檢查一下IE的版本如下,也有將EBS的網址加入「相容性」及「安全性網站」內,畢竟之前都是正常的。


接著再檢查「管理附加元件」內也有java的plug-in元件,但是就是無法開啟EBS



最後是在IE的捷徑上按右鍵,選擇「以系統管理員」執行,沒想到這樣就可以開啟EBS了。


樹莓派Raspberry Pi關閉休眠、螢幕長亮

 記錄一下同事找到的作法,以備日後有需要時可以參考。

# cd /etc/lightdm

# vi lightdm.conf

找到xserver-command並將註解拿掉,其值改為如下:

xserver-command=X -s 0 -dpms

其中 -s # 設置螢幕保護不啟用

dpms 關閉電源節能管理

重開樹莓派即可。

還有另一種方式就是安裝 xscreensaver 套件

# sudo apt-get install xscreensaver

在X window的畫面左上點擊樹莓派icon > 偏好設定 > 螢幕保護程式

將 Mode 改為 Disable Screen Saver


反向代理伺服器

 前篇提到記錄自己用ubuntu 18.04 來安裝nginx與certbot,主要目的在架設一個反向代理伺服器。

這篇記錄一下自己對反向代理的理解,以免日後又忘了。

我有三台API的服務,分別是s1.test.com、s2.test.com、s3.test.com,其中s1、s2是Docker Container,因此IP是一樣的,利用不同的Port來區分。

以前遇到這樣的架構時,我會設定防火牆的規則,可是也產生了一些問題。

1、防火牆必須開放Port 1234、5555

2、外部網站需要使用https,則每個API服務都要各別設定SSL憑證

3、前端應用可能基於安全原則,只允許呼叫https(Port 443)的服務

因此,利用nginx建置了反向代理伺服器,並設定了三個proxy rule:

1、如下圖當前端呼叫https://s1.test.com時,反向代理伺服器就會轉送要求給10.10.10.1:1234

2、我只需要在反向代理啟用SSL,後端可以不必額外的設定

3、防火牆只需要開通Port 443即可

4、外部只與反向代理伺服器連接,不與後端連線,增加一層安全性





chrome for android 開發人員遠端除錯

為了測試無密碼登入的功能,試寫了一個簡易的網頁,採用WebAuthn技術。

在桌機上的Chrome測試時,成功出現使用USB安全金鑰登入的畫面,可是我沒有金鑰,只好以手機來測試,也成功出現使用金鑰或指紋來登入的畫面。

但是我想用console.log來輸出一些object等訊息,但是桌機的Chrome因為無硬體金鑰,所以無法繼續,故也秀不出之後的console log;而用手機的Chrome是叫不出開發人員選項,所以也無秀不出console log。

之後找到一篇遠程調試 Android 設備的文章,可以利用桌機的Chrome來遠端對Android的Chrome進行除錯,故記錄我的步驟,方便使用。

手機Chrome版本:81、桌機Chrome版本:80

1、啟用紅米手機的開發人員模式,並將「USB調試」功能打開

2、將手機與桌機用USB線串在一起,並開啟手機的Chrome

3、開啟桌機Chrome的開發人員模式(F12),點選 Remote devices



4、在新增的頁籤「Remote devices」點選下圖紅色圈選處的連結,開啟新頁面



5、確定「Discover USB devices」有勾選;有成功連上手機就會出現下列圈選的機碼



6、offline代表未認證,打開手機(我的是紅米)畫面出現需要確認的畫面,確認它。

7、手機確認後就offline就會變成online,並且看見手機上Chrome



8、直接在手機上操作或在「Open tab with url」輸入url,如上圖我已開啟ngrok.io的測試網頁,按下「inspect」,就可以遠端對手機Chrome進行除錯。



VNC Client:No supported authentication methods

在準備使用VNC Client工具連上Raspberry Pi時,出現了錯誤 。

訊息是:No supported authentication methods

已確定VNC Server已啟用,Raspberry Pi也沒有問題,最後在一個論壇上找到一段話:
By default, the RealVNC Server uses "UNIX Password" authentication, which allows you to login using system account credentials (e.g. pi/raspberry)

所以嘗試加上一些參數後經測試可以成功連線,指令如下:
# vncserver Authentication=VncAuth AdminPassword=123456 :2

上述指令是說以Vnc自已的帳號來驗證,密碼是123456


Jenkins版本更新(Docker container)

今天將Jenkins的Docker容器啟動後,發現有新版本的Jenkins可以更新



Jenkins的更新只有一個jenkins.war的檔案,將它下載至Docker容器內。

以root進入Jenkins Container
C:\ docker container exec -u 0 -it jenkins /bin/bash

將新版的 jenkins.war 移動並取代舊版本,路徑為 /usr/share/jenkins
# mv jenkins.war /usr/share/jenkins

修改權限
# chown jenkins:jenkins /usr/share/jenkins/jenkins.war

退出Jenkins Container
# exit

重新啟動 Jenkins Container
C: \docker container restart ebd587cc3763

等待一段時間,讓服務重啟後即完成版本更新。

PRTG自訂Web API


PRTG有提供Web API可以讓我們取得監控資料,也可以自訂Web API來讓我們有更大的彈性來使用。

1、到PRTG的安裝目錄的webroot\api內
      例如:C:\Program Files (x86)\PRTG Network Monitor\webroot\api

2、Web API的程式都在這裡,複製一個並更名,
     例如:getstatus.htm -> getstatus_customer.htm

3、格式可參考其他Web API的內容來自訂格式
      例如:{ "Status": "<#objectstatus name="status" show="text">" }
      可回傳object的status狀態,回傳格式為JSON

4、不用開機即可使用,使用方式與Web API一樣,例如: http://192.168.1.131:9090/api/getstatus_custom.htm?id=3322&name=status&show=text



AI創作實驗紀錄