標籤

4GL (1) 人才發展 (10) 人物 (3) 太陽能 (4) 心理 (3) 心靈 (10) 文學 (31) 生活常識 (14) 光學 (1) 名句 (10) 即時通訊軟體 (2) 奇狐 (2) 爬蟲 (1) 音樂 (2) 產業 (5) 郭語錄 (3) 無聊 (3) 統計 (4) 新聞 (1) 經濟學 (1) 經營管理 (42) 解析度 (1) 遊戲 (5) 電學 (1) 網管 (10) 廣告 (1) 數學 (1) 機率 (1) 雜趣 (1) 證券 (4) 證券期貨 (1) ABAP (15) AD (1) agentflow (4) AJAX (1) Android (1) AnyChart (1) Apache (14) BASIS (4) BDL (1) C# (1) Church (1) CIE (1) CO (38) Converter (1) cron (1) CSS (23) DMS (1) DVD (1) Eclipse (1) English (1) excel (5) Exchange (4) Failover (1) Fedora (1) FI (57) File Transfer (1) Firefox (3) FM (2) fourjs (1) Genero (1) gladiatus (1) google (1) Google Maps API (2) grep (1) Grub (1) HR (2) html (23) HTS (8) IE (1) IE 8 (1) IIS (1) IMAP (3) Internet Explorer (1) java (4) JavaScript (22) jQuery (6) JSON (1) K3b (1) ldd (1) LED (3) Linux (117) Linux Mint (4) Load Balance (1) Microsoft (2) MIS (2) MM (51) MSSQL (1) MySQL (27) Network (1) NFS (1) Office (1) OpenSSL (1) Oracle (126) Outlook (3) PDF (6) Perl (60) PHP (33) PL/SQL (1) PL/SQL Developer (1) PM (3) Postfix (2) postfwd (1) PostgreSQL (1) PP (50) python (5) QM (1) Red Hat (4) Reporting Service (28) ruby (11) SAP (234) scp (1) SD (16) sed (1) Selenium (3) Selenium-WebDriver (5) shell (5) SQL (4) SQL server (8) sqlplus (1) SQuirreL SQL Client (1) SSH (2) SWOT (3) Symantec (2) T-SQL (7) Tera Term (2) tip (1) tiptop (24) Tomcat (6) Trouble Shooting (1) Tuning (5) Ubuntu (37) ufw (1) utf-8 (1) VIM (11) Virtual Machine (2) VirtualBox (1) vnc (3) Web Service (2) wget (1) Windows (19) Windows (1) WM (6) Xvfb (2) youtube (1) yum (2)

2024年10月18日 星期五

Python certificate_verify_failed-解決方法

 https://www.jeffcodingmentor.com/python%E5%AD%B8%E7%BF%92/certificate_verify_failed-%E8%A7%A3%E6%B1%BA%E6%96%B9%E6%B3%95

 

CERTIFICATE_VERIFY_FAILED 解決方法

for Windows + Anaconda + Python 3

用 Python requests 要到台北科技教育網抓取網站資料時,會遇到 SSL: CERTIFICATE_VERIFY_FAILED 錯誤,而瀏覽器(如Chrome)都沒有問題,原因是環境中 (windows + anaconda) 沒有台北科技教育網 SSL 所要的憑證

import requests

requests.get("https://techpro.tp.edu.tw/manager/cms/taipei-edu/scartch.html")


SSLError: HTTPSConnectionPool(host='techpro.tp.edu.tw', port=443): Max retries exceeded with url: /manager/cms/taipei-edu/scartch.html (Caused by SSLError(SSLError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:852)'),))

如果只是測試,那關掉認證就可以解決,但還是有警告提示。

requests.get("https://techpro.tp.edu.tw/manager/cms/taipei-edu/scartch.html", verify=False)


C:\Users\ManaTsao\.conda\envs\tensorflowenv\lib\site-packages\urllib3\connectionpool.py:986: InsecureRequestWarning: Unverified HTTPS request is being made to host 'techpro.tp.edu.tw'. Adding certificate verification is strongly advised. See: https://urllib3.readthedocs.io/en/latest/advanced-usage.html#ssl-warnings

InsecureRequestWarning,

若要徹底解決問題,就要將憑證加到環境中。步驟如下:

1. 先更新 certifi :

在 andaconda prompt 中執行

pip install certifi

pip install -U pyopenssl

若此時再執行 requests.get 沒有出錯,那就不必繼續下面的步驟。

2. 找出台北科技教育網所用的認證:

在 Chrome 中打開台北教育網後,按 F12 進入開發人員工具模式,並選擇 Security


找到用的是 RapidSSL RSA CA 2018。點 View Certificate 進去找一下是哪一家公司發行的,是 digicert 這家公司。

3. 接著到 Google 搜尋 “RapidSSL RSA CA 2018 download” 並找到 digicert 的網頁


注意是digicert的網頁

一路可以找到下載的地方



點選 Download PEM 下載 RapidSSLRSACA2018.crt.pem , 用文字編輯器打開,大概長這樣:


RapidSSLRSACA2018.crt.pem 的內容

4. 回到 Jupyter Notebook 執行

import certifi

certifi.where()

執行結果:

'C:\\Users\\ManaTsao\\.conda\\envs\\tensorflowenv\\lib\\site-packages\\certifi\\cacert.pem'

找到該檔案,也用文字編輯器打開,內容會像是這樣:


cacert.pem 的內容

5. 接著把網頁上 Rapid SSL RSA 的說明,copy 到 cacert.pem 的最下方,再 copy RapidSSLRSACA2018.crt.pem 裡面所有的內容,結果如下:


加上 RapidSSLRSACA2018.crt.pem 的結果

完成後記得存檔

6. 回到 Jupyter Notebook 重新執行

import requests

requests.get("https://techpro.tp.edu.tw/manager/cms/taipei-edu/scartch.html")

就不會有錯誤或警告了,結果如下:

<Response [200]>

第一次發此類文,只是把這幾天受的苦、網路爬的文做個記錄,希望能幫到大家。Bye now~

************************************************************************

有另一個方法可以試試:

使用Browser 的下載憑證,載網址左邊有一鎖頭小圖示,點進去後下載發行公司的憑證

2024年9月27日 星期五

tiptop 環境登入設定

 1. $HOME/.profile

</u1/usr/tiptop> cat .profile
#echo "?D?i?U?u§@Ao1O (1)¥?|!°I (2)’u﹐O°I (3)?D·C°I *) Exit  [1]:\c"
echo "請選擇工作環境 (1)正式區 (2)測試區 (3)標準區 *) Exit  [1]:\c"
echo ""
read ans
case $ans in
  1) . /u1/usr/profile/profile.topprod
     ;;
  2) . /u1/usr/profile/profile.toptest
     ;;
  3) . /u1/usr/profile/profile.topstd
     ;;
  *) exit
     ;;
esac

2. 根據選取,讀檔

資料庫設定在選取的檔案內,如 /u1/usr/profile/profile.topprod
環境變數在這裡的檔案設定
例如,$FGLPROFILE就是在這裡設定,然後tiptop程式會呼叫環境變數來讀取資料庫設定

##########################################################################

另外,一般user,
1. default directory 在/etc/passwd 設定為/u1/usr/topgui
2. /u1/usr/topgui/.profile 裡面會直接執行udm7

[root@tiptop ~]# cat /u1/usr/topgui/.profile
. /u1/usr/profile/profile.topprod.udm7
exit

所以一般user在linux shell 下,su 過去時,就會直接開啟GUI

2024年9月25日 星期三

舊 Linux Server 使用者帳號轉移到新 Server

https://junhanli.blogspot.com/2016/07/linux-server-server.html

 在遇到Linux Server要移轉或者作備援機時,需要連同用者帳號一同移轉,移轉的步驟如下:

一、會影響到的舊Server的檔案:

/etc/passwd – 內含帳號資訊, 如家目錄, shell 等
/etc/shadow – 內含帳號加密的密碼
/etc/group – 定義用戶群組
/etc/gshadow – 內含群組加密資訊
/home – 用戶預設的家目錄


二、先在舊Server本機上做備份


1.mkdir /root/move
2.export UGIDLIMIT=500   只要移轉uid500以上的使用者帳號
3.awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/passwd > /root/backup/passwd.mig  
複製使用者帳號
4.awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534)' /etc/group > /root/backup/group.mig  
複製群組帳號
5.awk -v LIMIT=$UGIDLIMIT -F: '($3>=LIMIT) && ($3!=65534) {print $1}' /etc/passwd | tee - |egrep -f - /etc/shadow > /root/backup/shadow.mig  
複製/etc/shadow
6.cp /etc/gshadow /root/backup/gshadow.mig  複製/etc/gshadow
7.tar -zcvpf /root/backup/home.tar.gz /home  備份/home

三、在新的Server上將使用者帳號作備份
1.mkdir /root/oldusers.bak
2. cp /etc/passwd /etc/shadow /etc/group /etc/gshadow /root/oldusers.bak   將新機使用者及群組帳號檔備份
3. 將舊帳號加入新機帳號檔
# cat passwd.mig >> /etc/passwd  
#
cat group.mig >> /etc/group
# cat shadow.mig >> /etc/shadow
# /bin/cp gshadow.mig /etc/gshadow 
 
上面必須用雙箭頭 ">>", 不能用單箭頭 ">", 如果用單箭頭的話會將新 Server 的系統帳號刪除。

四、將 home.tar.gz複製及解壓縮至新Server的/home
# cd /
# tar -zxvf /path/to/location/home.tar.gz

2024年9月12日 星期四

Genero連結資料庫

 https://ithelp.ithome.com.tw/m/articles/10259775

既然是從 INFORMIX 剝離出來的工具,應該連結資料庫的能力是強大的。本段落我們檢視一下Genero連結資料庫的能力。

市面上常用的資料庫,都有自己努力的強項,個別的指令也稍微有些不同。為了最大化能共通於這些資料庫,以做到『Write Once, Use Everywhere』,Genero FGL具有自開發的『共通性資料庫介面 ODI, Open Database Interface』,以 INFORMIX 指令為基準 (因為來自於 INFOMIX ),將其他資料庫具有的些微差異,利用 ODI 進行轉譯,概略流程如下:
https://ithelp.ithome.com.tw/upload/images/20210903/20051169moOCaveFDG.png
透過 ODI 的轉換,資料庫內包含數據型態、SQL語法、指令等,能在最大限度下求同,但仍舊保持了使用 PREPARE 方法,使得特殊指令仍在 Genero內能被使用,滿足『優化』的需求,此為存異。

FGLPROFILE

FGL套件的設定檔案是 FGLPROFILE,在這裡可以指定許多必要的設定,今天專門針對『資料庫的連線』進行說明。

FGLPORIFLE採用 entry 的方式設定 (非INI模式),行首 # 字號時代表為註解

  • dbi.default.driver = "" #預設連結的 db 種類驅動程式,安裝時有詢問就會補上
    此設定可以參考 $FGLDIR/dbdrivers 路徑下設定,若為 ORACLE 則通常為 dbmora (注意部分Genero須帶版號)
  • dbi.database..X #指定資料庫連線字串, 可隨產品需求自行定義,X 則是設定帳號密碼等訊息,不同資料庫列出差異於下方

Genero各版本可對接的數據庫

Genero可對接 IBM DB2 / INFORMIX / MS SQL Server / ORACLE / MySQL / PostgreSQL / SAP Hana / SQLite / Sybase ASE (以上按照名稱排序),但是支持版本各有不同,以下挑選部分資料庫作為簡介對象

資料庫廠牌 Genero 2.40 Genero 2.50 Genero 3.20
ORACLE 8.x / 9.x / 10.x / 11.x 9.2 / 10.x / 11.x / 12x 11.x 以上全版本
INFORMIX 5.x / 7.x / 8.x / 9.x / 10.x / 11.x 5.x / 7.x / 8.x / 9.x / 10.x / 11.x 5.x以上全版本
MS SQL Server 2005 / 2008 / 2012 2005 / 2008 / 2012 2012以上全版本,Azure SQDBL V12
PostgreSQL 8.x.y / 9.x.y 8.x.y / 9.x.y 9.6 / 10 / 11 / 12
SQLite 3.5.x / 3.6.x 3.5.x / 3.6.x 3.x

Genero端連線方法

連線到資料庫時,最重要的就是連線字串的設定。包含連結的資料庫主機位置 (port) 、登入資料庫的帳號密碼,以及對應需使用的字元組等環境變數。
^ 例如 ORACLE 資料庫會將相關訊息以 ORACLE_SID 含括成為一組設定時,則須依照該資料庫要求進行設定。

使用靜態的 FGLPROFILE 設定

Genero支持靜態的設定檔,即透過 FGLPROFILE 進行連線字串的設定。FGLPROFILE的存放有兩組路徑:$FGLDIR/etc/fglprofile 與 $FGLPROFILE 指定檔案,遇有同樣的設定時,後者可壓過前者;同檔案內衝突時,下方設定壓過上方設定

使用動態的 CONNECT 指令設定

若需要連結的資料庫眾多,或是需要動態設定,則可以在程式內部使用 CONNECT 指令
語法
『CONNECT TO連線對象+ODI驅動程式名稱 USER 連線帳號 USING 連線密碼』
註:連線對象依照不同資料庫有不同需求。部分資料庫如SQLite無帳號密碼則可省略

以下將以 Genero 3.20 為例說明個別資料庫連線注意事項

本文摘錄需特別關注要點進行說明與介紹,需大量採用或作為生產環境時,仍應詳讀FGL的ODI文件,該文件內均會詳列連線時,DB的特殊之處、須採用的特殊語法、如何將原有程式或查詢語句進行轉換為 ODI 通用語句。

ORACLE

連線前

需在 Genero 所在主機安裝完成對應的 ORACLE Client 軟件,並配置 tnsname.ora,確認ORACLE_SID / ORACLE_HOME 等必須存在的環境變數時,可進行 Genero 端設定

FGLPROFILE設定
dbi.database.dbname.driver = "dbmora"
dbi.database.dbname.source = "stock"
dbi.database.dbname.username= "登入帳號"
dbi.database.dbname.password= "登入密碼"
dbi.database.dbname.schema= "登入SCHEMA"

INFORMIX

連線前

驅動程式配置完成後,需確認 INFORMIXSERVER 環境變數是否已完成配置

因為源自於 INFORMIX,所以在 FGLPROFILE 中指定驅動程式即可

PostgreSQL

連線前

需安裝好client,且必須完成下列環境變數的設定

  • PGHOST PostgerSQL資料庫所在IP/Domain
  • PGPORT PostgreSQL資料庫需要通信埠 (預設為5431可在db端新增額外區或調整)
  • PGDATABASE 預期要使用的database
  • PGHOME 若DB與Genero裝在同一台時,指向PostgreSQL安裝路徑用的
  • PGLOCALDIR 若DB與Genero裝在同一台時,指向語系檔用的
  • PGDATA 若DB與Genero裝在同一台時,指向data file存放路徑
FGLPROFILE設定
dbi.database.dbname.driver = "dbmpgs"
dbi.database.dbname.source = "test1"   #或用dbname[@host[:port]]
dbi.database.dbname.username= "登入帳號"
dbi.database.dbname.password= "登入密碼"

MS SQL Server

連線前

SQL Server在2.40與更早前的版本,有支持 open source的FREETDS與Easysoft 的連線,此兩種連線需透過 OPEN ODBC的協助。設定上較為繁雜且軟件為社群維護,可能會有維護窗口的顧慮。可考慮直接使用微軟推出的 Linux 版本SQL Server驅動 SNC (SQLserver Native Client) 。
依據 Genero 官網要求,SQL Server連線前應先確定 Linux 上是否已完成對應驅動程式安裝的最低版本要求如下

FGLPROFILE設定
dbi.database.dbname.driver = "dbmsnc"
dbi.database.dbname.source = "test1"
dbi.database.dbname.username= "登入帳號"
dbi.database.dbname.password= "登入密碼"

SQLite

連線前

單機文件型資料庫,只需確認套件已安裝即可

FGLPROFILE設定
dbi.database.dbname.driver = "dbmsqt"
dbi.database.dbname.source = "/opt/myapp/stock.dbs"

若完成FGLPROFILE的設定後,即可令程式進行連線

要驗證連線時,可先利用 DATABASE 指令進行連線,依據上方的FGLPROFILE設定,以『dbname』為範例,測試連線如下

MAIN
   DEFINE cnt INTEGER
   DATABASE dbname
   SELECT COUNT(1) INTO cnt FROM hello_table 
   IF cnt > 0 THEN
     DISPLAY “CONNECT OK!”
   END IF
END MAIN

即可確認 DB連線成功。

 

2024年9月11日 星期三

VirtualBox重設硬碟大小

 https://tech.digitgeek.net/t/199.html

 

VirtualBox重設硬碟大小

改變VirtualBox硬碟大小按下列步驟執行:

(1)VirtualBox 虛擬PC關機狀態

(2)使用系統管理者的身分來開啟"cmd"

(3)在命令提示視窗切換VirtualBox安裝目錄,例如: C:\Program Files\Oracle\VirtualBox

(4)使用指令" VBoxManage modifyhd "修改vdi硬碟大小

例如:想將虛擬硬碟修改成40GB

VBoxManage modifyhd C:\Users\USER\Desktop\WINS2019\WINS2019.vdi -–resize 40960

(5)執行後,虛擬硬碟就被修改為40GB

(6)虛擬PC開機進入系統
到"系統管理工具"==>"電腦管理"

將滑鼠移至舊的分割區C:,按右鍵,選取"延伸磁碟區"(見圖2)

進入後如圖4,直接按"下一步",即可完成,如圖5

到此即完成修改硬碟大小及增加C槽大小的任務

[圖1]

[圖2]

[圖3]

[圖4]

[圖5]

 

 

Ubuntu Linux 檔案系統擴充邏輯分割區

 https://www.concerto.one/posts/2021-09-28-Extend-Ubuntu-Linux-Volume.html

 

【運維管理】Ubuntu Linux 檔案系統擴充邏輯分割區

虛擬機更動磁區的實體大小之外,還需要追加擴充邏輯磁區,才能百分百將所有的實體磁碟空間納入儲存用途

虛擬機的設置中,僅更動硬碟的容量是不夠的

首先觀察虛擬機的硬碟 8G,執行 lsblk 檢查磁區的紀錄看起來如下。

[root@ubuntu]$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda           8:0     0  8G   0  disk 
└─sda1        8:1     0  1M   0  part 
└─sda2        8:2     0  1G   0  part /boot
└─sda3        8:3     0  7G   0  part
  └─u-vg-lv   253:0   0  7G   0  lvm  /

接著,將虛擬機硬碟從 8G 更改至 16G 時,會發現 lsblk 檢查磁區的紀錄與前述相同,沒有反應出更動後新的變化。

執行 df -hT 會發現可用的儲存空間依然只有 4.4G,與原來完全相同。

[root@ubuntu]$ df -hT
Filesystem          Size  Used Avail Use% Mounted on
...
/dev/mapper/u-vg-lv 6.9G  2.2G 4.4G  34%  /
...

根據 lsblk 顯示的磁碟設備名稱與分割區位置來更改磁碟容量

從前述執行 lsblk 可以得知,我們要擴充分割區的磁碟名稱為 sda ,而分割區位置在第三個。所以構成的 growpart 參數如下。

[root@ubuntu]$ sudo growpart /dev/sda 3

再一次執行 lsblk 將會看到設備 sda 磁碟的尺寸從 8G 變成 16 G。但是邏輯分割區 u-vg-lv 依然是 7G。

[root@ubuntu]$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda           8:0     0  16G  0  disk 
└─sda1        8:1     0  1M   0  part 
└─sda2        8:2     0  1G   0  part /boot
└─sda3        8:3     0  15G  0  part
  └─u-vg-lv   253:0   0  7G   0  lvm  /

擴充邏輯分割區將所有空間納入檔案系統

執行 pvs,根據顯示的結果,可以看出需要更動的磁碟名稱是 /dev/sda3。所以擴充設備分割區的指令如下。

sudo pvs
sudo pvresize /dev/sda3

接著擴充邏輯分割區的檔案系統。u-vg-lv 是掛載在磁碟設備 /dev/sda3 上邏輯分割區的名稱。

lvextend -r -l +100%FREE /dev/mapper/u-vg-lv

再一次執行 lsblk 檢查 lvextend 的執行結果。可以看到邏輯分割區 u-vg-lv 從原來的 7G 變成 15G。

[root@ubuntu]$ lsblk
NAME          MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda           8:0     0  16G  0  disk 
└─sda1        8:1     0  1M   0  part 
└─sda2        8:2     0  1G   0  part /boot
└─sda3        8:3     0  15G  0  part
  └─u-vg-lv   253:0   0  15G  0  lvm  /

2024年9月6日 星期五

查看so文件架构 so文件怎么查看

 https://blog.51cto.com/u_16213724/7325973

ldd命令

linux 下可以使用ldd查看可执行文件所需要的动态链接库(*.so)。
注:下文用so代替动态链接库文件。

// 举个例子
~$ ldd /bin/ls
    linux-vdso.so.1 =>  (0x00007ffe06386000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007fd686b54000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd68678b000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007fd68651a000)
    libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fd686316000)
    /lib64/ld-linux-x86-64.so.2 (0x0000563411315000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fd6860f9000)

问题

如果ldd命令没有找到对应的共享库文件和其具体位置?

可能是两种情况引起的:

1)共享库没有安装在该系统中;

2)共享库保存在/etc/ld.so.conf文件列出的搜索路径之外的位置。

通常情况下,许多开源代码的程序或函数库都会默认将在即安装到/usr/local目录下的相应位置(如:/usr/local/bin 或 /usr/local/lib)以便于系统自身的程序或函数库相区别。而许多linux系统的/ect/ld.so.conf 文件中默认又不包含 /usr/local/lib 。因此出现安装了共享库,但是却无法找到共享库的情况。

解决办法:
检查/etc/ld.so.conf文件,如果其中缺少/usr/local/lib 目录,就添加进去;
注意:在修改了/etc/ld.so.conf 文件或者在系统中安装了新的函数库之后,需要运行命令 ldconfig ,该命令用来刷新系统的共享库缓存,即 /etc/ld.so.cache 文件。为了减少共享库系统的库搜索时间,共享库系统维护了一个共享库so名称的缓存文件 /etc/ld.so.cache 。 因此,在安装新的共享库之后,一定要运行 ldconfig刷新该缓存。

Ubuntu 安裝 Python 3.12.3 + OpenSSL (openssl-3.3.2.tar.gz)

安裝OpenSSL
1. https://openssl-library.org/source/index.html 下載 OpenSSL source code (wget ...)
2. ./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared (因為Python安裝時,只會吃ssl底下的目錄)
3.make; make test; sudo make install
4.
echo "/usr/local/ssl/lib64" > /etc/ld.so.conf.d/openssl.conf
5.sudo
ldconfig -v

安裝Python
1.(應該是需要這些)
  sudo apt-get install libbz2-dev
  sudo apt-get install libctypes-dev
  sudo apt-get install libffi-dev
  sudo apt-get install libncurses-dev
  sudo apt install libgdbm-compat-dev
  sudo apt-get install lzma
  sudo apt-get install liblzma-dev
  sudo apt-get install uuid-dev lzma-dev liblzma-dev
  sudo apt-get install nis
  sudo apt-get install libnsl2 libnss-nis
  sudo apt-get install libncurses5-dev
  sudo apt-get install libncurses-dev
  sudo apt-get install libreadline-dev
  sudo apt-get install nis
  sudo apt-get install tk
  sudo apt-get install tk-devel
  sudo apt-get install tk*dev
  sudo apt-get install nis
  sudo apt-get install libnsl-dev libnsl2
  sudo apt-get install libsqlite3-dev
  sudo apt install libssl*dev
或者
sudo apt-get update sudo apt-get install -y build-essential libssl-dev zlib1g-dev libbz2-dev \ libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \ xz-utils tk-dev libffi-dev liblzma-dev git

2. ../configure --enable-optimizations --with-openssl=/usr/local/ssl --with-ensurepip=install --with-openssl-rpath=/usr/local/ssl/lib64/

3. vim configure

Change

OPENSSL_LDFLAGS=-L/usr/local/ssl/lib

To:

OPENSSL_LDFLAGS=-L/usr/local/ssl/lib64

4. make -j$(nproc) ; sudo make altinstall

這裡可以找到 firefox 較舊的版本喊所屬OS平台

 https://ftp.mozilla.org/pub/mozilla.org/firefox/releases/?_gl=1*114952f*_ga*NDQ0MjQ3MDMzLjE2NjkzNjAwNzQ.*_ga_2VC139B3XV*MTcyNTYxMDg5Ni4xMC4wLjE3MjU2MTA4OTYuMC4wLjA.

如果是linux,
1. 解壓縮,將目錄後放到 /usr/lib/ 之下,形成 /usr/lib/firefox,
2. 並下sudo ln -s /usr/lib/firefox /usr/bin/firefox 指令就可以了

2024年9月5日 星期四

Ubuntu sqlpus 啟動會報錯 sqlplus: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

$ sudo apt install libaio1 libaio-dev
$ sudo ln -s /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1

Ubuntu 的library 和CentOS 名稱不太一樣...沒辦法

2024年9月4日 星期三

使用Python 寫爬蟲範例

############################ ubuntu ############################
$ sudo apt install python3-pip
$ sudo apt install python3-selenium
$ sudo apt install python3-bs4
$ sudo apt install python3-requests
$ sudo apt install xvfb
$ export DISPLAY=:99
$ Xvfb :99 -screen 0 1024x768x16 &

############################ fedora ############################
$ sudo yum install python3-pip
$ sudo pip3 install selenium
$ Xvfb :99 -screen 0 1024x768x16 &sudo pip3 install bs4


$ wget https://github.com/mozilla/geckodriver/releases/download/v0.35.0/geckodriver-v0.35.0-linux64.tar.gz
$ tar xvf geckodriver-v0.35.0-linux64.tar.gz
$ sudo cp geckodriver /usr/local/bin/

$ cat get_fedex.py
#!/usr/bin/python3

# 載入需要的套件
from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
from selenium.webdriver.firefox.service import Service
import requests
import time

# 開啟瀏覽器視窗(Chrome)# 方法一:執行前需開啟chromedriver.exe且與執行檔在同一個工作目錄
#driver = webdriver.Chrome()
#service = Service(executable_path='/usr/local/bin/geckodriver')
service = Service('/usr/local/bin/geckodriver')
driver = webdriver.Firefox(service=service)
#driver = webdriver.Firefox()

# 方法二:或是直接指定exe檔案路徑
#driver = webdriver.Firefox("/usr/local/bin")

driver.implicitly_wait(3) #等10秒,讓網頁資料load進來
driver.get("https://www.fedex.com/zh-tw/shipping/surcharges.html") # 更改網址以前往不同網頁
#time.sleep(100)

#driver.find_elements(By.CLASS_NAME,"fxg-gdpr__accept-all-btn cc-aem-c-button cc-aem-c-button--responsive cc-aem-c-button--primary")[0].click()
#buttons=driver.find_elements(By.CLASS_NAME,"fxg-gdpr__accept-all-btn cc-aem-c-button cc-aem-c-button--responsive cc-aem-c-button--primary")

button=driver.find_elements(By.CSS_SELECTOR,".fxg-gdpr__accept-all-btn")[0] #使用Selenium IDE找出來 "accept all cookie" 的按鈕
print(button)
button.click()

driver.refresh() #接受cookie後,要將網頁refresh, 重load資料

#使用Selenium IDE找出來要抓資料
data=driver.find_elements(By.CSS_SELECTOR,".fuelsurcharg-dynamic-datalookup .cc-aem-c-table__tbody:nth-child(2) .cc-aem-c-table__tbody__td:nth-child(1)")[0]
print(data.get_attribute("innerText"))
data=driver.find_elements(By.CSS_SELECTOR,".fuelsurcharg-dynamic-datalookup .cc-aem-c-table__tbody:nth-child(2) .cc-aem-c-table__tbody__td:nth-child(2)")[0]
print(data.get_attribute("innerText"))
data=driver.find_elements(By.CSS_SELECTOR,".fuelsurcharg-dynamic-datalookup .cc-aem-c-table__tbody:nth-child(2) .cc-aem-c-table__tbody__td:nth-child(3)")[0]
print(data.get_attribute("innerText"))

#print (driver.title)
#html=driver.page_source
#print (html)

#soup = BeautifulSoup(driver.page_source, 'lxml')
#print(soup.prettify())
#
#with open('index.html', 'w', encoding='utf-8',) as file:
#    file.write(soup.prettify())

driver.close() # 關閉瀏覽器視窗


2024年8月2日 星期五

使用Selenium 做爬蟲 Perl

####################### fedora linux:####################

$ sudo yum install python3-pip
$ sudo pip3 install selenium
$ export DISPLAY=:99
$ Xvfb :99 -screen 0 1024x768x16 &

$ cat test.pl
#!/usr/bin/perl
use Selenium::Remote::Driver;
#use Selenium::Firefox;

my $driver = Selenium::Remote::Driver->new(
        'browser_name' => 'firefox',
        'remote_server_addr' => '127.0.0.1',
        'port' => '4444',
        'platform' => 'linux',
    'auto_close' => true,
    'debug' => false
);
#my $driver = Selenium::Firefox->new;

$driver->set_timeout("implicit",10000);
$driver->set_implicit_wait_timeout(10000);
#$driver->get("https://www.google.com");
$driver->get("https://www.fedex.com/zh-tw/shipping/surcharges.html");
print $driver->get_title();

#############################################################
#兩種寫法都可以
#############################################################
#my @buttons = $driver->find_elements("//button[3]");
#print "@buttons\n";
#$buttons[0]->click;
#############################################################
my $button = $driver->find_element("//button[3]");
print "$button\n";
$button->click;
#############################################################
$driver->refresh;

my $data = $driver->find_element("//div[2]/div/table/tbody/tr/td");
#print "$data\n";
print "\n". $data->get_text(). "\n";
my $data = $driver->find_element("//div[2]/div/table/tbody/tr/td[2]");
#print "$data\n";
print "\n". $data->get_text(). "\n";
my $data = $driver->find_element("//div[2]/div/table/tbody/tr/td[3]");
#print "$data\n";
print "\n".$data->get_text() ."\n";

#$driver->close;




2024年8月1日 星期四

使用Selenium 做爬蟲 by python

sudo apt install python3-pip
sudo apt install python3-selenium
sudo apt install python3-bs4

#!/usr/bin/python3

# 載入需要的套件
from selenium import webdriver
from selenium.webdriver.common.by import By
from bs4 import BeautifulSoup
from selenium.webdriver.firefox.service import Service
import requests
import time

# 開啟瀏覽器視窗(Chrome)# 方法一:執行前需開啟chromedriver.exe且與執行檔在同一個工作目錄
#driver = webdriver.Chrome()
#service = Service(executable_path='/usr/local/bin/geckodriver')
service = Service('/usr/local/bin/geckodriver')
driver = webdriver.Firefox(service=service)
#driver = webdriver.Firefox()

# 方法二:或是直接指定exe檔案路徑
#driver = webdriver.Firefox("/usr/local/bin")

driver.implicitly_wait(3) #等10秒,讓網頁資料load進來
driver.get("https://www.fedex.com/zh-tw/shipping/surcharges.html") # 更改網址以前往不同網頁
#time.sleep(100)

#driver.find_elements(By.CLASS_NAME,"fxg-gdpr__accept-all-btn cc-aem-c-button cc-aem-c-button--responsive cc-aem-c-button--primary")[0].click()
#buttons=driver.find_elements(By.CLASS_NAME,"fxg-gdpr__accept-all-btn cc-aem-c-button cc-aem-c-button--responsive cc-aem-c-button--primary")

button=driver.find_elements(By.CSS_SELECTOR,".fxg-gdpr__accept-all-btn")[0] #使用Selenium IDE找出來 "accept all cookie" 的按鈕
print(button)
button.click()

driver.refresh() #接受cookie後,要將網頁refresh, 重load資料

#使用Selenium IDE找出來要抓資料
data=driver.find_elements(By.CSS_SELECTOR,".fuelsurcharg-dynamic-datalookup .cc-aem-c-table__tbody:nth-child(2) .cc-aem-c-table__tbody__td:nth-child(1)")[0]
print(data.get_attribute("innerText"))
data=driver.find_elements(By.CSS_SELECTOR,".fuelsurcharg-dynamic-datalookup .cc-aem-c-table__tbody:nth-child(2) .cc-aem-c-table__tbody__td:nth-child(2)")[0]
print(data.get_attribute("innerText"))
data=driver.find_elements(By.CSS_SELECTOR,".fuelsurcharg-dynamic-datalookup .cc-aem-c-table__tbody:nth-child(2) .cc-aem-c-table__tbody__td:nth-child(3)")[0]
print(data.get_attribute("innerText"))

#print (driver.title)
#html=driver.page_source
#print (html)

#soup = BeautifulSoup(driver.page_source, 'lxml')
#print(soup.prettify())
#
#with open('index.html', 'w', encoding='utf-8',) as file:
#    file.write(soup.prettify())

driver.close() # 關閉瀏覽器視窗


2024年7月30日 星期二

CentOS 6.2 安裝 Java8

 https://blog.51cto.com/sugarlovecxq/1551000

 

 

环境:CentOS release 6.2 (Final) 64bit

安装:

1.在官网下载Linux版的JDK

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

2.直接安装即可

[root@localhost opt]# rpm -ivhjdk-8u20-linux-x64.rpm

Centos 6.2上JDK 8的安装与卸载_java

本次下载的是rpm格式的,如果下载的是jdk-8u20-linux-x64.tar.gz,也就是后缀名是tar.gz格式的,放在/usr/java下直接解压,然后设置下环境变量就可以。

3.设置环境变量

  a.编辑vi /etc/profile文件,添加如下几句:

     export JAVA_HOME=/usr/java/jdk1.8.0_20

     export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib

     export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOMR/bin

     export DISPLAY=locahost:0

     以上这样设置环境变量会对所有的用户的shell都生效的。

b.也可以直接在命令行输入以上几句,但是这样设置环境变量只对当前的shell             生效,如果再打开一个shell,就不可以使用刚刚设置的环境变量

c.还有一种方法就是编辑.bashrc文件设置环境变量,这样设置只对当前设置的       某个用户有效。

   设置好之后,使其生效

   [root@localhost ~]# source /etc/profile

   [root@localhost ~]# echo $CLASSPATH

   [root@localhost ~]# echo $JAVA_HOME

   [root@localhost ~]# echo $PATH

4.验证JDK是否可以使用

   [root@localhost ~]# vi java_test.java

class java_test
{
   public static void main(String[] args)
    {
        System.out.println("This is java program");
    }
}

编辑之后保存

[root@localhost ~]# javacjava_test.java

会发现在当前目录下产生java_test.class文件,

[root@localhost ~]# java java_test

Centos 6.2上JDK 8的安装与卸载_jdk安装_02

卸载:

1.查看

[root@localhost ~]# rpm -qa|grep jdk

jdk1.8.0_20-1.8.0_20-fcs.x86_64

如果使用[root@localhost ~]# java –version可以看到有安装java,可以使用以下的方法进行查看

rpm -qa|grep gcj、rpm -qa|grep java 、rpm -qa|grep jre查看

2.卸载

使用rpm –e 进行卸载即可

[root@localhost ~]# rpm -ejdk1.8.0_20-1.8.0_20-fcs.x86_64

以上就是java的安装与卸载大致过程。

2024年5月3日 星期五

Oracle x$bh

來源 https://blog.csdn.net/qq_34556414/article/details/82836112

SYS用户可查询 buffer header数据,可以从数据库的数据字典表中查询得到。

这张字典表就是x$bh,其中的bh就是指buffer headers。

每个buffer在x$bh中都存在一条记录.。

buffer header中存储每个buffer容纳的数据块的文件号,块地址、状态等重要信息,根据这些信息,结合dba_extents视图,可以很容易地找到每个buffer对应的对象信息:

 x$bh中还有一个重要的字段TCH,TCH为Touch的缩写,表示一个Buffer的访问次数,buffer被访问的次数越多,说明该buffer就越抢手,也就可能存在热块竞争的问题。

可以结合DUMP BH来对比X$BH中字段。

 

 

2024年1月3日 星期三

tiptop 閒置時間的觸發邏輯

 出處:https://blog.csdn.net/weixin_36324426/article/details/116813713

 

1、闲置时间的触发逻辑

ON IDLE g_idle_seconds   --代码里面设置触发器,g_idle_seconds表示闲置多少秒后就触发

CALLcl_on_idle()        --设置ON IDLE g_idle_seconds 触发时的处理函数

--所以系统怎么处理闲置时间的逻辑就全在cl_on_idle()此函数中了,你可以根据企业需求定制(ex:针对某一个用户不管制)

2、系统哪里可以设置闲置时间?管控方式怎样?

①.优先根据「p_zz」里面该程序设定的『闲置时间』管控方式

②.如果①里面是“3:遵照整体设定”,则再 根据「p_zx」该用户里面设定的『权限类别』中「p_zw」的『闲置控管方式』

③.如果②继续是“3:遵照整体设定”,则最后根据「aoos010」里面设定的『闲置设置』“启动闲置时间”、“闲置处理”.....