2021-10-03

安裝 jetbrains projector 並以 user systemd 方式啟動

 安裝很簡單,直接參考github官方網站:
https://github.com/JetBrains/projector-installer

設定:
projector config list
projector config  edit <APP_NAME>

憑證:
若有用let's encrypt,可直接用如下指令安裝,記得憑證過期一樣要再重安裝一次
(APP_NAME可能為IntelliJ或DataGrip,可參照 ~/.projector/configs):

projector install-certificate <APP_NAME> --certificate /etc/letsencrypt/live/<change.to.your.site.com>/fullchain.pem --key /etc/letsencrypt/live/<change.to.your.site.com>/privkey.pem;

以下補充如何以user systemd的方式自啟動,這樣ide點擊exit或reload時就會重新啟動,也不用登入tty,以下以新增 IntelliJ IDEA為例:
mkdir -p ~/.config/systemd/user/
vi ~/.config/systemd/user/idea.service
加入:
======================
[Unit]
Description=Jetbrains Projector - IDEA

[Service]
Type=simple
#注意這裡要改為用 run.sh 執行
ExecStart=%h/.projector/configs/IntelliJ/run.sh
Restart=always

[Install]
WantedBy=default.target
======================
再執行(以一般使用者身份執行即可)
systemctl --user start idea
systemctl --user status idea
systemctl --user enable idea
#不用tty登入也可reboot時自啟動
loginctl enable-linger <username> 

ref:
https://youtrack.jetbrains.com/issue/PRJ-298
https://wiki.archlinux.org/title/systemd/User#Automatic_start-up_of_systemd_user_instances

2021-09-16

WIN7的XP Mode導出vhd檔案並在VirtualBox(或VMware) 執行

 一、先確認你記得XP Mode的XMPUser密碼(先登出再登入試試),不然就是改為無密碼登入

二、確認將XP Mode關機(ctrl + alt +del 並選關機),確保不是在儲存狀態下

三、到XP Mode設定的硬碟一(Hard Disk 1)點選「修改(Modify)」並選「合併(Merge)」映像檔,此時會產出一個vhd檔案 

四、到VirtualBox(或VMware) 新建XP虛擬機,並指定剛剛產生的vhd檔

五、此時很可能會顯示「需啟動Windows XP」而鬼打牆無法登入,即使輸入key也一樣,先重開虛擬機並按F8進入安全模式

六、下載https://t.me/joinchat/JtV8PRmFFTeDZ_PHNVtC3g 此 tg群組內的 sp3 檔案(MEGA備份),解壓縮並放到虛擬機桌面

七、把剛解壓縮的system32資料夾內的檔案覆蓋到 C:\WINDOWS\system32,並再執行資料夾內的XP_Pro_SP3_OEM_to_VLK.reg,再重開機

八、此時很可能還會要您啟動,隨便找個VLK KEY輸入即可。
HCQ9D-TVCWX-X9QRG-J4B2Y-GR2TT

九、有些MIDI軟體在Virtualbox播放時聲音會產生嚴重卡頓,不管怎麼改設定都沒用,因此後來改用VMWare完全沒問題。

ref:
https://www.hanselman.com/blog/transferringmoving-a-vhd-from-windows-virtual-pc-windows-xp-mode-to-another-computer
https://hibest.tw/oem-to-vlk-windowsxp/

2021-09-13

老筆電X61出現Possible missing firmware...訊息

由於 linux-firmware 套件缺少了i915晶片一些韌體,導致每次更新kernel就會出現下列訊息:

update-initramfs: Generating /boot/initrd.img-5.4.0-84-generic
W: Possible missing firmware /lib/firmware/i915/tgl_dmc_ver2_04.bin for module i915
W: Possible missing firmware /lib/firmware/i915/skl_guc_33.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/bxt_guc_33.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/kbl_guc_33.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/glk_guc_33.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/kbl_guc_33.0.0.bin for module i915
W: Possible missing firmware /lib/firmware/i915/icl_guc_33.0.0.bin for module i915

缺韌體問題,就來這個網址下載這一包找找:
https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/

果然找到,補到 /lib/firmware/i915/ 內就 ok 了!

ref:

老電腦舊電腦用 usb 或 live cd無法用一般模式開機時

今天準備用linux mint重灌一台AMD phenom quad的老電腦,結果無法用第一個選項正常開機(畫面會hang住),用第二個選項Compatibility mode倒是可以。後來發現按tab修改第一個選單的開機參數,改用nomodeset就可以了:

Replace "quiet splash" with "nomodeset" and press Enter to boot.

原因是現在graphic driver是直接做在kernel,這樣開機畫面會比較"漂亮",但對某些顯卡會無法正常使用,因此用nomodeset讓kernel以bios模式開機,直到進x window後再載入顯卡driver。

ref:
https://linuxmint-installation-guide.readthedocs.io/en/latest/boot_options.html#nomodeset-boot-option
https://askubuntu.com/questions/207175/what-does-nomodeset-do

2021-09-11

安裝code-server

 code-server,也就是讓你可以自架雲端版的VS Code(或開源的VSCodium),可以像GitPod(基於Eclipse Theia)一樣用瀏覽器操作遠端vs code介面。

安裝可分三種方式(Linux based):

一、直接下載script安裝(自動安裝deb或rpm):curl -fsSL https://code-server.dev/install.sh | sh

二、手動下載deb或rpm安裝

三、安裝到雲端供應商

安裝上非常簡單,安裝完後,先執行code-server跑跑看,會出現連線網址及port(預設8080),按ctrl+c停止。

打code-server --help會顯示一些可用參數,若不想用參數可修改設定檔,設定檔用的參數名稱與執行命令的參數名稱都是一樣的,設定檔位置在 ~/.config/code-server/config.yaml,以下是範例(埠號10000,使用密碼及憑證):

bind-addr: 0.0.0.0:10000
auth: password
password: mypassword
cert: /path/to/your/fullchain.pem
cert-key: /path/to/your/privkey.pem

若設為 cert: false 會使用自簽憑證,若有正式憑證請把cert及cert-key檔案路徑打上去,
建議憑證一定要設,不然複製貼上等一些功能可能會有問題,免費憑證可以使用letsencrypt,參照cerbot官網並選擇平台照建議安裝即可。

還有一個問題就是預設的plugin maketplace並不是微軟的marketplace,而是open vsx,這是因為使用條款限制的關係而不能直接使用,若想切換成微軟的marketplace,可以新增環境變數,範例script如下(.sh):

#!/bin/bash
SERVICE_URL=https://marketplace.visualstudio.com/_apis/public/gallery ITEM_URL=https://marketplace.visualstudio.com/items CACHE_URL=https://vscode.blob.core.windows.net/gallery/index code-server > /dev/null 2>&1 &  echo "$!"

用以上script執行後會顯示執行的pid並背景執行,想要關閉程式的話,可直接kill -9 <pid>,若沒記下pid而清掉螢幕,就改用 ps -u username Sf | grep code-server 找出/usr/lib/code-server/lib/node /usr/lib/code-server...執行樹最上層的process pid,並用kill -15 <pid>停止程序。

若想用systemd的方式開機自動以某user身份執行的話,可用
sudo systemctl enable --now code-server@username

記得要更換extension marketplace的話,把以下變數設定加到
/lib/systemd/system/code-server@.service
的 [Service] 裡:
Environment=SERVICE_URL=https://marketplace.visualstudio.com/_apis/public/gallery Environment=ITEM_URL=https://marketplace.visualstudio.com/items Environment=CACHE_URL=https://vscode.blob.core.windows.net/gallery/index 

執行code-server加執行參數時,可寫在
~/.local/share/code-server/argv.json 或 ~/.config/code-server/config.yaml
但像要加上 enable-proposed-api 時,寫在config.yam只能指定單個extension,用list形式指定的話無法生效(bug?),只好改寫在 argv.json,譬如:
{"enable-proposed-api": ["genuitecllc.codetogether", "ms-toolsai.jupyter"]}

ref:
https://coder.com/docs/code-server/v3.12.0/collaboration#installing-the-codetogether-extension
https://code.visualstudio.com/api/advanced-topics/using-proposed-api#sharing-extensions-using-the-proposed-api
https://coder.com/docs/code-server/v3.12.0/FAQ#how-can-i-reuse-my-vs-code-configuration


2021-09-09

vscode的鳥bug,跑python預設都只會在powershell跑

在windows上,不管怎麼修改terminal default profile為command prompt(cmd),只要點右上的執行按鈕,就是只會用powershell執行python,而且還無法正常載入conda env環境(還是linux好)。

解決方式:

一、先用管理員進powershell執行 set-executionpolicy remotesigned

二、再到vscode建立python的launch.json,加入如下(參考開始選單中conda呼叫poweshell的捷徑參數修改):

"configurations": [

    {

        "name": "Python: 目前檔案",

        "type": "python",

        "request": "launch",

        "program": "${file}",

        "console": "integratedTerminal",

        "args": [

            "-ExecutionPolicy",

            "ByPass" ,

            "-NoExit",

            "-Command",

            "& 'C:\\Users\\User\\miniconda3\\shell\\condabin\\conda-hook.ps1' ; conda activate 'C:\\Users\\User\\miniconda3' "

        ]

    }

]

 ref:
https://stackoverflow.com/questions/54828713/working-with-anaconda-in-visual-studio-code
https://stackoverflow.com/questions/56450606/how-to-add-anaconda-powershell-to-vscode/61879466#61879466
https://docs.microsoft.com/zh-tw/powershell/scripting/dev-cross-plat/vscode/using-vscode?view=powershell-7.1#workspace-debugging

2021-09-08

安裝jetbrains projector (Server Side)

 1.先依照github頁面步驟安裝projector
https://github.com/JetBrains/projector-installer#Installation

2.幫機器設定一個domain,並記得修改/etc/hostname

3.幫domain上letsencrypt憑證(不需要裝http server,因為我們需要的只是憑證而已),對外的80 port防火牆記得開。譬如OS是Ubuntu 20.04就照著選,伺服器選「None of the above」(cerbot已自帶http伺服器可自動認證)
https://certbot.eff.org/lets-encrypt/ubuntufocal-other

且certbot會產生systemd service及timer以後會自動更新憑證:
/etc/systemd/system/snap.cerbot.renew.service
/etc/systemd/system/snap.cerbot.renew.timer

4.安裝ide: projector install,再照著數字選擇你要安裝的ide跟版本,可以裝好幾個ide,所有ide安裝好後設定檔會放在 ~/.projector/configs/<config_name>
安裝時建議channel選tested,表示是有測試過能正常在projector運行的ide,否則裝非tested的有時會有些奇奇怪怪的問題。

5.設定ide:projector config edit,再照著數字選擇個別ide設定檔並設定(如ide要開在哪個port、要不要設token...等), 其中有一項會問你要不要設定ssl,選是的話會先使用jetbrains的自簽憑證。注意設定完port後也要記得開防火牆

6.幫projector裝上letsencrypt憑證,記住每裝一個ide就要重複一次上憑證的動作:
projector install-certificate <config_name> --certificate /etc/letsencrypt/live/your.domain.com.tw/cert.pem --key /etc/letsencrypt/live/your.domain.com.tw/privkey.pem

7.執行ide:projector run <config_name>
會出現連線的網址,如果有設定token,網址會帶token參數,把網址ip換成domain即可

8.可用(1)瀏覽器(2)projector client app (3)chrome的projector應用程式
等三種方式連線

9.若不想在server安裝projector, 也可以直接在本機的jetbrains ide裝projector plugin後成為本機伺服器,但每次有人從外部連線時需要點擊確認才能連線。

10.若多人共用同一台伺服器,建議修改 /et/clogin.defs 的umask值為 027,這樣使用者(ide)之後新建的檔案權限other(別人)就會是不可讀不可寫。

11.每次離開(exit)IDE, 那麼就等同於projector停止,需再project run <config_name>一次才能再啟動並連進ide,若要保持ide及projector運作,就不要在IDE點擊exit,或寫個 systemd 或用watchdog讓projector每次關閉後會再自動重啟。

2021-08-31

發現CPU及HD溫度太高,用cpulimit降低吃cpu程式的頻率,hdparm讓硬碟待命(standby, sleep)

最近發現在linux上用wine跑LINE非常吃CPU(近期發生,可能是這個原因,發生在wine6.8+以上,後來換回wine6.5就沒問題了),CPU溫度飆到快90度,於是用cpulimit降低wineserver這支程式的cpu頻率,先安裝cpulimit,並寫一支script執行,限制最高cpu最高吃到10%:

#/bin/bash
cpulimit --path /home/username/.PlayOnLinux/wine/linux-x86/6.13/bin/wineserver --limit 10

但有個缺點,打字輸入line變得非常慢還會掉字,開圖跟捲動也很慢,只好要跟人溝通時先關掉cpulimit,沒要輸入文字時再打開。

ref:
https://blog.gtwang.org/linux/limit-cpu-usage-of-a-process-in-linux-with-cpulimit-tool/
http://cpulimit.sourceforge.net/

另新裝了一顆從NSA的退下的3TB機械硬碟,查smart資訊發現溫度異常的高,我也不確定這樣正不正常,怕它提早掛掉,只好想辦法讓它平時待命以降溫。

1.方法一:修改 /etc/hdparm.conf,設定10分鐘後無存取待命,加入:

command_line {
hdparm -S 120 /dev/sdb
}

2.方法二:用systemd,新增或修改/etc/systemd/system/hdparm.service:

[Unit]
Description=hdparm sleep

[Service]
Type=oneshot
ExecStart=/usr/bin/hdparm -q -S 120 -y /dev/sdb

[Install]
WantedBy=multi-user.target

3.方法三:

直接叫出GUI磁碟工具,選擇要設定的硬碟,再按視窗右上角的「磁碟機設定值」,設定進入待命時間:


ref:
https://wiki.archlinux.org/title/hdparm#Putting_a_drive_to_sleep_directly_after_boot
https://askubuntu.com/questions/39760/how-can-i-control-hdd-spin-down-time
http://elmaz.blogspot.com/2009/08/ubuntu-linux-hdd-suspend.html

2021-08-29

Linux Mint的登入視窗(greeter)方向錯誤 & grub解析度(resolution)錯誤

 最近升級了辦公室電腦,把系統移到新電腦後,發現登入視窗的螢幕方向是左旋90度的(但登入後就變正常了),由於一直是使用雙螢幕但之前是沒這個問題的,即使重新設定設定中的「登入視窗」指定螢幕也是沒有用,於是只好直接修改/etc/lightdm/lightdm.conf,加入:

[Seat:*]
display-setup-script=xrandr -o right

強迫再右旋回來。

2022/02/22 updated:
原因是換了GTX 1660顯示卡後,/etc/X11/xorg.conf並末重新產生,導致還是舊的GT 710的設定,
可利用nvidia-xconfig或nvidia-settings重新產生xorg.conf:
https://wiki.archlinux.org/title/NVIDIA#Xorg_configuration

用nvidia-settings的話,點左邊X server Display Configuration,再點右下的Save to X Configuration File,但若是無法成功寫入的話,那麼就自行複製Preview的內容貼到xorg.conf。

GRUB的登入解析度也是變成640x480,因無法先載入nvidia驅動的關係,修改 /etc/default/grub,加入:

GRUB_GFXMODE=1024x768
GRUB_GFXPAYLOAD_LINUX=keep

再存檔執行 sudo update-grub 重開機。
(先執行sudo hwinfo --framebuffer或進grub執行videoinfo確定支援的framebuffer有哪些)

ref:
https://askubuntu.com/questions/408302/rotated-monitor-login-screen-needs-rotation
https://www.binarytides.com/ubuntu-fix-nvidia-graphics/
https://askubuntu.com/questions/54067/how-to-safely-change-grub2-screen-resolution
https://askubuntu.com/questions/217758/how-to-make-an-xorg-conf-file
https://zhuanlan.zhihu.com/p/33983810

2021-08-25

tomcat啟用jstatd及jmx (VisualVM)

因為jmx及jstatd二個用VisualVM連線時,jmx無法使用Visual GC,jstatd無法使用Mbeans(怎麼這麼煩啊),所以二個乾脆都給它同時啟用。


1.新增 /usr/lib/systemd/system/tomcat-jstatd.service:(jstatd預設port開在1099)
#Tomcat jstatd monotor service
[Unit]
Description=jstatd monitor for tomcat
Wants==tomcat.service
After=tomcat.service

[Service]
Type=simple
ExecStartPre=/bin/bash -c "echo -e 'grant { permission java.security.AllPermission; };' > /tmp/jstatd.policy"
ExecStart=/usr/bin/jstatd -p 1099 -J-Djava.security.policy=/tmp/jstatd.policy -J-Djava.rmi.server.hostname=<your_public_ip>
ExecStopPost=/bin/bash -c "rm /tmp/jstatd.policy"
User=tomcat
Group=tomcat

[Install]
WantedBy=multi-user.target

2.修改  /usr/lib/systemd/system/tomcat.service: (rmi port固定在1100,若不設定的話會隨機; jmx port開在1101,一定要設)

[Service]
...
#JMX form VisualVMEnvironment='JAVA_OPTS=-Djava.rmi.server.hostname=<your_public_ip> -Dcom.sun.management.jmxremote.rmi.port=1101 -Dcom.sun.management.jmxremote.port=1100 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false'


3.防火牆規則記得修改開通1099, 1100, 1101,不過我是直接把自已的網段加入zone=trusted,這樣所有的port都可以連:

sudo firewall-cmd --zone=trusted --add-source=100.101.102.0/24 --permanent
sudo firewall-cmd --reload
sudo firewall-cmd --list-all --zone=trusted

2021-08-24

升級JDK 1.8至最新版本後,MySQL Connector/J (TOMCAT JDBC)無法正常連線MySQL

升級JDK後,發現MYSQL JDBC無法連到資料庫,查了一下log,發現以下錯誤訊息:

javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)

看來又是TLS無法自動降級使用的問題,先到mysql下指令看一下目前使用的tls版本:

mysql> SHOW GLOBAL VARIABLES LIKE 'tls_version';
+---------------+-----------------------+
| Variable_name | Value                 |
+---------------+-----------------------+
| tls_version   | TLSv1,TLSv1.1      |
+---------------+-----------------------+

1.首先嘗試修改JDBC連線字串,加入
jdbc:mysql://<host>:<port>/<dbname>?enabledTLSProtocols=TLSv1,TLSv1.1(...後略)

然後在tomcat.service的Java啟動選項加入:
‑Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2" (但不清楚是不是會影響到tomcat網站的tls 1.3連線)

結果無效。
  
2.直接去jre修改/jre/lib/security/java.security,把以下統統mark起來
#jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
#    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL, \
#    include jdk.disabled.namedCurves

好了,JDBC連線字串跟tomcat.service復原回原來也沒問題。
  
由於試了太多次,還被mysql server block了,用以下指令可以解除:
mysqladmin -h 192.168.1.1 -u root -p flush-hosts

ref:

2021-06-18

tomcat若前面有proxy,但又有阻擋ip的需求

 tomcat若前面有proxy,但又有阻擋ip的需求,可以如下設定
(假設ip放在X-Forwarded-For裡):

<Valve className="org.apache.catalina.valves.RemoteIpValve"

        remoteIpHeader="X-Forwarded-For" 

        requestAttributesEnabled="true" />

<Valve className="org.apache.catalina.valves.RemoteAddrValve"

   deny="1\.2\.3\.\d+|5\.5\.\d+\.\d+" />


REF:
https://tomcat.apache.org/tomcat-8.0-doc/config/valve.html#Proxies_Support
https://stackoverflow.com/questions/33495416/restrict-access-to-tomcat-manager-by-ip

2021-05-20

tomcat 版本slowlirs dos攻擊修改

 很簡單,Connector加上connectionTimeout="8000" (不要大於8秒,不然會失敗) 即可,

測試工具:

https://github.com/shekyan/slowhttptest/wiki


ref

https://stackoverflow.com/questions/49442855/mitigating-slow-http-post-vulnerability-on-tomcat-8

2021-05-19

apache + php 連線過多卡住

 apache + php 連線過多卡住,若是資料庫問題,可考慮使用proxysql,畢竟php沒有sql thread pool,就算是用 pconnect() 設定上也是很麻煩,也且一個連線也只能給同一個process的thread共用,只能說是半套,那不如直接用connect()連完就drop即可。

若不是資料庫而是apache撐不住,可以調整 prefork模組的設定(可用apachectl -V或httpd -V查看是不是prefork模式),

譬如 apache 2.4的/etc/apache2/mods-available/mpm_prefork.conf:

<IfModule mpm_prefork_module>

        StartServers            4

        MinSpareServers         15

        MaxSpareServers         75

        ServerLimit             3000

        MaxRequestWorkers       3000

        MaxConnectionsPerChild  9000

</IfModule>

或apacpe 2.0 的 /etc/httpd/conf/httpd.conf

<IfModule prefork.c>

StartServers       8

MinSpareServers    15

MaxSpareServers   75

ServerLimit      3000

MaxClients       3000

MaxRequestsPerChild  9000

</IfModule>


2021-05-17

itext產生LTV(Long-Term Validation)重點-還有自然人憑證的雷

 1. PDF簽章類型使用CMS可以直接在signature內含CRL/OCSP資訊達成LTV,CADES(PAdES B-T (basic - timestamped))簽章類型則必需附加DSS(Document Secure Store)在檔案尾端(這樣用adobe reader打開會變成有「檔案已修改但被原作者承認的資訊」,但實際上itext好像不在乎你用哪個?),標準上只要包含憑證鏈所有憑證(除了CA不用)的CRL或OCSP其中之一的資訊即可達成LTV, 實作上則要先注意有的憑證內缺少OCSP URL(譬如行政院MOICA憑證...有夠雷,itext也不會提示你到底有沒有正確ocsp response,無奈)

注意,達成LTV, tsa(timestamp server)的憑證或CRL/OCSP資訊是不需要的,不用加入

2.注意憑證extension的Authority Information Access(AIA)包含的上一層issuer ca網址,格式可能是#PKCS7(.p7b)憑證(如自然人憑證的.p7b包含了一代及二代的憑證),有的套件(如pdfbox)預設會當成X509單一憑證,因此解不出來...(這也很雷)

2.時間tsa server的憑證及CRL/OCSP則無關緊要,無須包含其CRL/OCSP

3.Adobe Reader要把tsa server加到時戳伺服器信任清單,簽章的issuer及tsa的二個CA也要加到Adobe Reader的信任憑證(除非本來就在AATL或EUTL信任清單)

4.如果是包含CRL,要注意檔案有時會變得很大!而有時CRL太大抓不下來,可利用像itext的CrlClientOffline() 類別把預先抓下來的CRL載入即可。

5.檢查憑證鏈(除了根憑證)的每個憑證extension是否有包含CRL或OCSP的URL資訊,所有憑證至要有CRL或OCSP其中一個,有的憑證是同時缺少二者的,這樣無法達成LTV(這表示憑證有問題,若是CA憑證本來就不用這二個),而像MOICA就沒有OSCP只有CRL,因此個人憑證可用OCSP,但MOICA憑證只能用CRL達成LTV

5.目前試用自然人憑證做PDF數位簽章,上面1,2點的雷都有,政府(花錢叫中華)做的東西就是他X的雷。使用證券商的憑證就比較沒這些問題,一次達成LTV。

6.如果你到戶政辦自然人憑證,那麼卡片雖然會寫入個人的"二代"憑證,但用程式(如java)去取出cer1或cer2憑證鏈時,可能中繼(MOICA)及根(GRCA)都還是一代憑證!!可能為了省事只寫入個人憑證,然後舊的庫存卡片都預設先存好一代中繼及根憑證,這真的非常之雷,所以我怎麼用程式自動OCSP取得廢止狀態就是他馬的驗證不會過...後來發現這問題,就到自然人憑證網站重新寫入過一次憑證就都換成二代的了(譬如用修改email功能就會三個憑證都重寫),真的是超雷。

7.第三方套件的itext作者初始簽章LTV有點bug,我已經修改發了個PR上去了:
https://github.com/itext/itext7/pull/72


ref:
https://community.adobe.com/t5/acrobat-reader/ltv-enabled-signatures-not-longer-ltv-enabled-after-update-to-adobe-dc-2018/m-p/9898669

https://stackoverflow.com/questions/46321086/how-to-sign-a-pdf-with-embedded-timestamp-and-ltv-enabled

https://helpx.adobe.com/tw/acrobat/kb/certificates-corrupted-after-updating-trust-store.html

2021-05-12

netbeans 8 修復maven 及 plugin 問題

 新的maven要求https傳輸,所以需要升級maven:

1.下載新的maven:

http://maven.apache.org/download.cgi

2.解壓縮下載的檔案,放到netbeans安裝資料夾中的 java/maven 資料夾

3.在netbeans的jave/maven設定中,替換掉maven home

4.把 maven的conf/settings.xml的mirror區塊註解掉


然後netbeans 8的plugin portal的url發現已失效,可到以下頁面去找:
https://cwiki.apache.org/confluence/display/NETBEANS/Where+to+download+plugins+for+NetBeans+10.0+and+earlier

例如8.2: http://plugins.archive.librebeans.org/catalogue/8.2/catalog.xml

ref:

https://stackoverflow.com/questions/14026314/maven-location-when-installed-indirectly-with-netbeans-glassfish

https://oak.dev/2020/03/03/maven-error-return-code-is-501-reasonphrase-https-required/

2021-05-05

升級JDK 11.0.11後,無法正常使用TLS寄信

 ubuntu上面利用javax.mail寫的寄信程式,在系統自動升級jdk到 11.0.11 後,使用tls smtp寄信就失效了,經查是因為 jdk已禁用了 tls 1.0, tls 1.1,所以必須改強制使用 tls >= v1.2(很奇怪的點就是javax.mail握手時不會自動tls v1.2 or 1.3) ,當然你的mail server也要有支援 tls >= v1.2


            props.setProperty("mail.smtp.host", "your.smtp.server");

            props.setProperty("mail.smtp.auth", "true");

            props.setProperty("mail.smtp.port", "587");

            props.setProperty("mail.smtp.starttls.enable", "true");

            props.setProperty("mail.smtp.ssl.protocols", "TLSv1.2"); //強制tls v1.2

            Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() {

                @Override

                protected PasswordAuthentication getPasswordAuthentication() {

                    return new PasswordAuthentication("username", "password");

              }

            });

2021-03-17

phpmyadmin在innodb表格資料超過50000筆時,無法正確抓到筆數並切換頁

 

從phpmyadmin 4.8.0後,因效能考量,預設50000筆內是用select count取得資料列數,超過50000筆時才用show table status,但常會造成取的筆數不對,因此可以把phpmyadmin的$cfg['MaxExactCount']參數加大:

$cfg['MaxExactCountViews'] = 0;//disable trying to count the number of rows in any view
$cfg['MaxExactCount'] = 0;//disable correcting the InnoDB estimates

或者去點擊table總表的row count的數字去更新也行 (沒試過)

ref:
https://docs.phpmyadmin.net/en/latest/config.html#cfg_MaxExactCount
https://docs.phpmyadmin.net/en/latest/faq.html#faq3-11
https://stackoverflow.com/questions/10811405/phpmyadmin-and-big-tables
https://www.kavoir.com/2012/07/make-phpmyadmin-show-exact-number-of-records-for-innodb-tables.html

2021-03-04

netbeans在ubuntu上不斷要求開啟GNOME Keyring或KWallet 解決方法

 根據官方說明,這是netbeans用來記憶ftp, git, svn...等密碼的方法,就如同 window的login-based encryption、Mac OS X的Keychain、Linux的GNOME Keyring或KWallet。

解法一:安裝kwalletmanager或 libgnome-keyring-dev(擇一),並輸入你的使用者密碼讓netbneas有keyring或kwallet的存取權,以後就不會再來煩你了。

解法二:在netbeans.conf的netbeans_default_options加入:
-J-Dnetbeans.keyring.no.master=true
這樣以後密碼會存放在記憶體,但netbeans關掉就密碼就會消失了。

ref:

http://wiki.netbeans.org/FaqMasterPasswordDialog
https://wiki.archlinux.org/index.php/Netbeans#Integrate_Netbeans_with_kwallet
https://stackoverflow.com/questions/8666670/how-to-make-the-netbeans-doesnt-ask-for-the-master-password
https://superuser.com/questions/416976/why-does-netbeans-ask-for-master-password-at-the-begining

2021-03-03

ubuntu 強制移除套件

 sudo dpkg --purge --force-depends package-name

再用synaptic去修復損壞的套件

2021-02-25

tomcat 使用特殊字元網址或參數,造成400 bad request錯誤訊息

tomcat 使用特殊字元網址或參數,會造成400 bad request錯誤訊息,即使在web.xml設置error-page也無法禁止顯示系統報告(想不透...),需更改 server.xml,在<Host>加入:

<Valve className="org.apache.catalina.valves.ErrorReportValve" errorCode.0="conf/error.html" showReport="false" showServerInfo="false" />

其中 errorCode.0代表所有錯誤訊息,error.html 選擇使用$CATALINA_BASE相對路徑放在conf/error.html

ref:

https://stackoverflow.com/questions/794329/disable-all-default-http-error-response-content-in-tomcat

http://tomcat.apache.org/tomcat-9.0-doc/config/valve.html#Error_Report_Valve

2021-02-19

新專案上git時的必要前置設定

一、先產生.gitignore再做git init
例如你用的是netbeans的話,可以裝gitignore plugin或到這個網站,在專案的根目錄產生適合的.gitingore檔案,把不需要做版本控制的檔案(如build, dist等資料夾)排除。
可參考以下更詳細的.gitignore說明:
https://www.pluralsight.com/guides/how-to-use-gitignore-file
https://git-scm.com/docs/gitignore


二、設定gitconfig:
若一個專案的開發人員,不同人有著不同的OS平台,那麼 ~/.gitconfig (個人設定) 或 .git/config (專案設定,會覆蓋個人設定) 務必設定filemode = false及ignorecase = true

[user]

        email = username@yourmail.com

        name = username

[core]

        filemode = false #windows跟linux/macos開發者避免檔案權限錯誤訊息

        ignorecase = true #windows跟linux/macos開發者避免大小寫錯誤訊息

        autocrlf = false #false為不要自動轉換作業系統間的CRLF斷行,應以編輯器設定斷行字元。若設為input則checkout時會自動依平台轉換斷行,但commit時在linux/win一律為LF,在mac為CR



三、設定 .gitattributes
還要在repo的根目錄新增一個 .gitattributes 才解決跨平台換行(crlf)的衝突問題:

* text=auto eol=lf
*.{cmd,[cC][mM][dD]} text eol=crlf
*.{bat,[bB][aA][tT]} text eol=crlf
四、再做第一次的commit:
git commit -a -m "first commit, good luck!"

2021-01-21

iItelliJ 設定PHP XDEBUG環境

 一、安裝composer、php-cgi(注意,必須是cgi,不能用cli或fpm)、php-xdebug
sudo apt-get install php-cgi php-xdebug
sudo curl -s https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
sudo chown root.root /usr/local/bin/composer
sudo chmod 755 /usr/local/bin/composer

二、修改xdebug設定
sudo vi /etc/php/7.2/cgi/conf.d/20-xdebug.ini
加上
xdebug.remote_enable=1

php-cgi --version //須出現xdebug字眼
with Xdebug v2.6.0, Copyright (c) 2002-2018, by Derick Rethans

三、chrome或firefox安裝xdebug plugin
https://www.jetbrains.com/help/idea/2020.3/browser-debugging-extensions.html
擴充功能選項的IDE Key選擇PHPSTORM

四、修改IntelliJ的language & frameworks / PHP 設定
新增 /usr/bin/php-cgi

五、執行選單 Run / Web Server Debug Validation,看是否能正常debug

若使用intellij內建的web server + php-cgi,可能會沒有$_SERVER['SERVER_NAME'] 造成無法正常透過瀏覽器debug,下面的ref有解法但不一定有用,似乎是intellij的bug,似乎還是得換成nginx或apache才能解決,若用外部server,須到 language & frameworks / PHP / Servers及build,excution,deployment->Deployment去新增對應的server


ref:
https://www.jetbrains.com/help/idea/2020.3/configuring-xdebug.html
https://www.jetbrains.com/help/idea/2020.3/zero-configuration-debugging.html
https://youtrack.jetbrains.com/issue/WI-54542
https://stackoverflow.com/questions/23344106/php-storm-debugging-creates-empty-server-definitions
https://www.cnblogs.com/Renyi-Fan/p/9117895.html