2023年2月16日 星期四
DL380p Gen8 安裝ubuntu 22.04及hpasmcli 及異常log處理方式
2023年2月2日 星期四
Install Percona Monitoring Plugins for Cacti
話說最近apache常常自己死掉,然後mysql常常不理我。所以打算在另一台server上用cacti監控它們。我選用的是percona,它在cacti上有開發相關的監控套件。
環境:rhel 8, apache 2.4.52, mysql 5.5.60-MariaDB
percona的部份,可以參考以下說明:
https://www.percona.com/doc/percona-monitoring-plugins/LATEST/cacti/index.htmlpercona的說明算是詳細,但照說明書做的話一定搞不定,我自己都搞了快兩天。所以我還是自己弄了一份教學,希望可以幫上其它人的忙。
由於我們要抓apache的資料,因此要幫他開新功能,請參考下列網頁。難度不高照作即可。
https://httpd.apache.org/docs/2.4/mod/mod_status.html裝完之後要試一下能不能跑:(網址記得代換為自己的IP或網址)
wget wget -U Cacti/1.0 -q -O - -T 5 "http://www.omg.com/server-status?auto"如果你apache裝對了,應該會有下面的回應:(我只節錄部份)
www.omg.com
ServerVersion: Apache/2.4.52 (codeit) OpenSSL/1.1.1m PHP/5.6.40 SVN/1.7.14 mod_wsgi/3.4 Python/2.7.5
ServerMPM: event
Server Built: Dec 20 2021 11:29:54
CurrentTime: Thursday, 02-Feb-2023 16:24:36 CST
我這一台server裝的是rhel8,所以我用yum來裝percona。
yum install percona-cacti-templates
這樣裝起來是1.1.8版,也是最後一版,以後也不會有新的版本了。
接著我們要先修改一下它的設定檔。
vi /usr/share/cacti/scripts/ss_get_by_ssh.php
vi /usr/share/cacti/scripts/ss_get_mysql_stats.phpMySQL的部份要修改帳號及密碼,ssh的部份你要設定一個可以免密碼登入要監控主機的帳號。 不過我只打算透過網頁抓Apache的資料,因此我就不設定ssh的部份。
php /usr/share/cacti/scripts/ss_get_by_ssh.php --type apache --host www.omg.com --items gg,gh/usr/bin/php -q /usr/share/cacti/scripts/ss_get_mysql_stats.php --host www.omg.com --items kx,ky --user omg --pass ohmygod --port 3306再來就是麻煩的部份:
cd /usr/share/cacti/resource/percona/binperl pmp-cacti-template --script ../../../scripts/ss_get_by_ssh.php ../definitions/apache.def > apache.xmlRedundant argument in sprintfrm pmp-cacti-templatewget https://raw.githubusercontent.com/percona/percona-monitoring-plugins/master/cacti/bin/pmp-cacti-templatevi pmp-cacti-template./pmp-cacti-make-hashes --refresh /usr/share/cacti/resource/percona/definitions/mysql.def > /usr/share/cacti/resource/percona/definitions/mysql_now.def./pmp-cacti-make-hashes --refresh /usr/share/cacti/resource/percona/definitions/apache.def > /usr/share/cacti/resource/percona/definitions/apache_now.defperl pmp-cacti-template --script ../../../scripts/ss_get_by_ssh.php ../definitions/apache_nowdef > apache.xmlBoth the meta file and the script file must have a version at pmp-cacti-template line 641.vi /usr/share/cacti/scripts/ss_get_by_ssh.php perl pmp-cacti-template --script ../../../scripts/ss_get_by_ssh.php ../definitions/apache_nowdef > apache.xmlperl pmp-cacti-template --script ../../../scripts/ss_get_mysql_stats.php ../definitions/mysql_now.def > mysql.xmlcd /usr/share/cactiphp cli/import_template.php --filename=resource/percona/bin/apache.xmlphp cli/import_template.php --filename=resource/percona/bin/mysql.xml2023年1月15日 星期日
CE (Cheat Engine)指標 (pointer) 遊戲修改應用教學
用Cheat Engine (以下簡稱CE) 改遊戲的人應該會遇到一個問題,在重開遊戲後需要重新找要修改
的東西所在的記憶體位址。其實CE有提供指標的功能,簡單說就是找出記憶體的相對位址,
這樣每次重開遊戲就不需要重新找一次了。
這邊做一個簡單的教學(其實是我常忘,寫個備忘錄)。
在此我們用snes9x64及ce7.4 64做驗證,如果用32位元的程式就用ce7.4 (32),我們在此使用
64 bit的版本做示範。
開啟snes9x,然後開啟三國志3,接著選擇第一時期(189年),我們選擇劉備,他目前住在平原。
目前黃金是2300,先用模擬器的功能做隨機存檔。接著我們用簡單的搜尋功能,找到其目前記
憶體位址 (長度是2 byte)。這邊的操作不再細述。
接著我們再讀存檔,取回黃金2300的狀態。
我們將這筆記錄按兩下左鍵,丟到下面的修改區。接著對這一筆記錄按右鍵,點選
『Find out what writes to this address』
會有確認視窗,按Yes即可。
然後會跳出一個監控視窗,它目前是空的。
跟著我們再花100元。再回頭看這個監控視窗,在Instruction的部份已經有東西了。
接著點選『More information』
再來就是關鍵了,CE建議的位址是:『04E0ECF0』在這頁是RDX的位址,我們儲存備用
(對它點右鍵就會提示自動複製)。但我們看一上面的組合語言:它是『rcx+rdx』,
RCX是它的偏移位址,它是『000028C0』同樣存下來備用。(另外開一個文字檔來存它)
回到CE的搜尋視窗,開始一個新搜尋,勾選Hex,長度改為4 Bytes,輸入04E0ECF0,
找出誰的值是它。我們找到一堆,通常是第一個,如果不是就一直往下試。我們這個例子
剛好是第一個。
對第一筆按兩下左鍵,讓它跑到下方的修改區。接著對它的位址『1408D8BE8』點兩下左鍵。
它的Address是『”snes9x-x64.exe”+8D8BE8』,把它複製起來。
快要完成了,我們點選右下角『Add Address Manually』,先點選『Pointer』,再來要輸入
offset,我們把之前備份的『000028C0』貼上去,接著來指標的位址,我們貼上剛剛複製的
:『”snes9x-x64.exe”+8D8BE8』,記得Type要改成『2 Bytes』因為我們的原始搜尋就是2 bytes。
最後我們看一下Address下方欄右邊的數字,已經變成2200塊了。看來我們大功告成了 ,
我們點選『OK』讓它跑到下方的編輯區。
最後我們對這一筆點選『Active』,滑鼠對『No description』點選兩下左鍵改成『189-平原金』
以茲識別。最後再點選Value將它改成5000做測試。
有趣的是,你改完指標資料之後,第一次找到記憶體位址也一併修改了。因為它本來就是結果,
是記憶體互相指來指去的結果,但我們找到的是最原始的指標,是用來找到這些記憶體存放位
址的方式(相對於snex9x的位址)。即使我們下次開遊戲前電腦已做過各項操作,但它永遠會是正
確的。
我們回到遊戲,也可以看到它變成5000塊了。記得要刷新一下畫面,開啟幾個指令再取消。
我們將作弊碼碼存檔,點選左上角File,點選Save as ,再隨意取個檔名存檔。在此我用san3j。
最後我們關掉模擬器跟CE,然後隨便做一些操作。看重新載入遊戲及修改器時,這個作弊碼
能不能正常運作。我們依序開啟模擬器載入遊戲,讀入剛剛的隨機記憶。這個時候還是2300元
。
接著開啟CE,然後讀取模擬器的程式,再讀取剛剛儲存的CT檔。
(你也可以直接對CT檔按兩下左鍵,它會自己呼叫CE,你再從CE讀取模擬器的主程式)
接著將189-平原金Actvie,再修改其數值為5000。這邊可以觀察一下,之前一開始找到的
04E115B0已經變成跟2300元無關的16068了。
接著我們回到遊戲,再切換一下視窗。變回5000元囉。真方便,不需要每次都搜尋一次。
在此說明一下,這個範例比較簡單,只有一次偏移(offset),實務上有可能會遇到偏移兩次、
三次、甚至四次的CASE。就再麻煩讀者自行評估哪種方便了。
2022年12月13日 星期二
wkhtmltopdf (wkhtmltoimage) 與openssl (libssl-dev)的衝突問題
早上突然發現有一個報表很久沒有發了。它的作法是去查某網頁,若有更新就截圖寄給我。
看了一下是wkhtmltoimage在https的環境不能跑了。看了一下錯誤訊息,有一連串的這個:
QSslSocket: cannot resolve CRYPTO_num_locks
查了一下關鍵字,應該是我之前手動升版openssl造成的libssl-dev的路徑對不上的關係 (當時是為了玩ftps)
試著把libssl-dev重裝,無效。
找第三方的libssl來裝,也沒有效。
好吧,反正ftps沒有在用了,把openssl降版,也沒有效。
既然openssl的部份沒有解,就來解wkhtmltoimage的部份好了。
裝了新版的wkhtmltoimage,再執行它,它說glibcxx_3.4.21' not found。
看了libstdc++.so.6檔案的內容:strings libstdc++.so.6 | grep GLIBC
它確實沒有3.4.21這個版本。
原本已經打算手動更新gcc了。但在找相關檔案時發現,我之前在這機器上有裝docker。它有libstdc++.so.6.25,看了它的字串,它有GLIBC_3.4.21。
於是我就用libstdc++.so.6.25取代本來的libstdc++.so.6.19 (當然19版的我有保留下來,說不定又會有其它問題)。
接著再跑wkhtmltoimage。
OK,問題解決了。
2022年12月8日 星期四
一些ESP-01, ESP8266, ESP32 的使用及燒錄方式
前些日子因緣際會,剛好拿到ESP-01, ESP8266, ESP32。常常會忘記使用方式。因此做個簡單的筆記。
實際接線:
ESP-01比較麻煩,除了vcc(3.3v),gnd,tx,rx要接到對應的線之外, enable也要接上3.3v (有一些是標註CH_PD,縮寫是chip power-down)。如果要更新firmware的話。他的GPIO0要接地,這邊指的是送電時就要接地,等它開機後要不要接地都沒有影響。
更新firmware可以用官方工具ESP8266 flash download tool或ESP8266一键烧录工具來燒錄,我兩者都有成功跟失敗過,失敗的這幾次似乎是因為ESP-01之前已經被我玩壞了。
記得,要測試的時候,記得把GPIO0的接地拿掉。我的作法是先斷電,拿掉它的接地再送電。再使用realteam或putty進行測試(baud rate要設對,預設是115200)。
接線的部份如下:
來源網頁:
https://sites.google.com/mail3.hwsh.tc.edu.tw/earth/arduino/%E5%8F%83%E8%80%83%E8%B3%87%E6%96%99/%E5%85%B6%E4%BB%96esp8266-01%E6%9B%B4%E6%96%B0%E9%9F%8C%E9%AB%94%E8%88%87%E8%A8%AD%E5%AE%9A
2022年10月21日 星期五
BGP redistribute IGP (RIP , OSPF ) redistribute BGP
但想想不對 ,明明R2都有學到R1跟R3的網段了,應該是RIP那邊的問題比較合理。
後來試出來,是要這樣處理,就這一個指令花掉我幾個小時的時間。
router rip
redistribute bgp 5566 metric transparent
順便測試一下OSPF的部份,重點是在 match external 2 (因為我放的是OSPF external type 2)
router bgp 4780
address-family ipv4
bgp redistribute-internal
redistribute ospf 99 metric 1 match internal external 2
eigrp的部份是最特別的。由於interface ip跟要放的network overlap。所以在R1的部份需要設定其eigrp router-id才能把想放的網段放出去。
例如interface是22.141.187.1要放的是22.141.184.0這樣是放不出去的。要指定router-id才行。
router eigrp 110
eigrp router-id 1.1.1.1
2022年7月15日 星期五
cacti手動撰寫script建立template
最近在重寫cacti的template,做一個簡單的筆記,不然過幾年我又忘了。
我們針對的是script_server的部份
1、通常是把scripts找一個適合的出來改。
cp ss_cisco_temperature.php test.php
vi test.php
把
function ss_cisco_temperature 上面都刪除。
但要載入必要的library,通常我會再加一點料,這樣要測試的時候比較好測試。
error_reporting(0);
include_once(dirname(__FILE__) . '/../include/global.php');
include_once(dirname(__FILE__) . '/../lib/snmp.php');
$cmd = "get";
$arg1 = "rbnEntityTempCurrent";
$arg2 = "104.1";
$hostname = "1.2.3.4";
$host_id = "30";
$result = ssr_temperature($hostname, $host_id, "2:161:5000:1:10:iiiseed:::::: ", $cmd, $arg1 , $arg2 );
print_r($result);
$cmd有兩種:index, num_indexes,
$arg1有兩種:query (walk全部) get (get一個值)
如果$arg1是get的話,$arg2要填入你要查的oid。
之後要測試的時候很簡單,
把查詢的查參數改掉就好。
$result = ssr_temperature("139.175.240.150", "52", "2:161:5000:1:10:public:::::: ", $cmd, $arg1 = '', $arg2 = '');
php test.php
就可以驗證測試結果,把index,num_indexes, query arg2,get arg2
都各測一輪就差不多了。稍微看一下輸出的格式是否跟其它檔案或者與你預期的是否相符。
index就要列出所有的index
num_indexes要計算有幾個index
query arg1(descr) ,通常是列出所有index及其對應的descr
query arg1(value) ,通常是列出所有index及其對應的value
以下兩個如果沒有show出來 (我的範例是沒有的,要自己print_r($result);
get arg1(descr) arg2(oid),先snmpwalk所有的index如果有相符的再秀出其oid對應的descr
get arg1(value) arg2(oid),取出該oid對應的value
之後就是調校data query, data template, graph template,通常我是duplicate其它的template後再進行修改。
在cacit 1.2.x版,有一個我常常忘記的設定,在建立data query時,需要Associated Data Templates,在建立Data Source後,後方的check box記得勾選,不然不會生效。
最後要提醒一下,把test.php還原成ssr_temperature.php時,我們會把前面的檔頭加回去,print call_user_func_array('ssr_temperature', $_SERVER['argv']); 這一行記得要更新成你命名的function 名稱,不然在執行時就無法執行了。





