發表文章

目前顯示的是 2023的文章

python qgrid 安裝是個大坑

 python qgrid for jupyter 是個快速瀏覽資料的ui工具,可惜的是它的維護狀況有問題(在試了各種安裝和除錯後才發現),從 python 3.11 試到 3.9 ,ipywidgets 8 降到 7.8 再降到 7  不再折騰了,留給神人吧… ipydatagrid, datasette ... 可能可以考慮

Pandas profiling not able to import due to error cannot import name DataError from 'pandas.core.base'

 pandas profiling 是個好用的探索式資料分析工具,多好用,一行生成報表     pandas_profiling.ProfileReport(df)  But ....   工作環境:     windows 10 home         Anaconda:               python 3.11, 3.10               jupyter notebook     這個還是先裝吧               pandas                         openpyxl      和 pandas 一起裝               pandas-profiling     再裝這個 ( conda install -c conda-forge pandas-profiling ) 錯誤訊息:    P andas profiling not able to import due to error cannot import name DataError from 'pandas.core.base' 不引用 pandas-profiling 可以透過 pandas 取用資料的,所以問題出在引用 pandas-profiling ,由於之前遇過 python 版本太新造成問題,先裝一個之前版本(3.10)的環境,然後重裝一次所須的套件,重新執行 jupyter notebook 還是出現上述的錯誤訊息… 股溝後發現可以裝 ydata-profiling 然後可以用之前的程式碼來執行一行報表,只是會出現警示訊息( 建議改用 ydata-profiling 之類的… ),至少 3.10 版可以用了… 3.11 版在使用 anaconda 本身的套件管理所提供的套件,Apply 之後過了很久(3.10版也要很久)還是出現 conflict 的訊息(就是沒辦法裝的意思)…懶得折騰了…    收工!

vscode terminal 執行 anaconda activate ENV

  之前的 vscode 不知裝了什麼套件,之後在終端機(terminal)裏執行 python script 時都會自動啟動相應的 env ,在新電腦上不知怎麼了,在 vscode 中的 terminal 執行 conda activate 時總是一直要求要 conda init <指定的shell> ,但是 init 總是失敗,糟糕的是,失敗沒有成為母親……  雖然執行[F5]時,在 terminal 會出現,& path\Python.exe path\ptyhonScript.py 還是可以執行,但那些除錯訊息還是一直出現,蠻惱人的 工作環境:   Windows 10    anaconda     python env    VS Code     python extension     anaconda extension 最簡單的解法:  裝 anaconda extention 指定 env 名稱給它,執行時按右鍵 > Run in anaconda  這個解法其實也有個煩人的地方,在設定 extension 時,需要用到 github 或是 microsoft 認證 使用批次檔(.bat):這個方式會跟著 anaconda 繞來繞去,會啟動兩層的 env(base 和你指定的 env)  因為每次要手動輸入指令太麻煩,指令也懶得記,把指令存成批次檔,之後要用時呼叫一下就行 powershell:( & 'C:\anaconda\shell\condabin\conda-hook.ps1' ;  可以省略沒差,這個方式好像會同時啟用 base 和你指定的 env ),這個方式好像會隨 anaconda 啟動兩層的 env,因為 conda deactivate 要兩次,第一次會退回 base env powershell.exe -ExecutionPolicy ByPass -NoExit -Command "& 'C:\anaconda\shell\condabin\conda-hook.ps1' ; conda activate 'C:\anaconda\envs\yourEnvFolder' " cmd: 這個方式挺乾淨的  cm

把 WSL 裝在非系統碟(Non C drive)

 WSL 全名 Windows Subsystem for Linux ,可以在 windows 下直接運行 Linux ,可以用來掛載、讀寫 ext4 硬碟(沒錯,可讀、可寫,表示再也不用裝一些特別的應用程式),運行原生的 Linux 功能,像是 wget, rsync ...,等 ,只是,就是那個 But,它會把 Linux 裝在 C 槽,也就是那個小小的 SSD 的所在  工作環境:   Windows 10 home 20H2     WSL   假設你已經裝好 WSL ,而且也已經更新好了 (wsl --update)   用系統管理員身份啟用 PowerShell 並且啟用 WSL ,完成後可能需要重開機  Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux  建立一個工作用資料夾:   D:   mkdir WSL   cd wsl  下載 Linux(default, 新版的):    Invoke-WebRequest -Uri https://aka.ms/wslubuntu -OutFile Ubuntu.appx -UseBasicParsing     如果遇到安全性問題無法下載,請 參考  更名、解壓縮:   Rename-Item .\Ubuntu.appx Ubuntu.zip   Expand-Archive .\Ubuntu.zip -Verbose  執行:   Ubuntu\ubuntu.exe   要設一個使用者名稱,設定他的密碼  查詢目前安裝的 WSL:   wslconfig /list /all  要用的時侯:   wsl 收工!          

Invoke-webrequest 未能創建 SSL/TSL 連線

 明明只是想下載個檔案,也能…  Invoke-webrequest 出錯,未能創建 SSL/TSL 連線  工作環境:   Windows 10    WSL installing on non-system Drive  查詢現階段既有的連接安全協議   [Net.ServicePointManager]::SecurityProtocol  此時應該只有 Ssl3, Tls   [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Ssl3 -bor [Net.SecurityProtocolType]::Tls -bor [Net.SecurityProtocolType]::Tls11 -bor [Net.SecurityProtocolType]::Tls12  再查   [Net.ServicePointManager]::SecurityProtocol  應該變成   Ssl3, Tls, Tls11, Tls12  再次 Invoke-webrequest 可行 收工!

Redo backup and restore 開機 USB 無法開機

 曾幾何時,要製作開機 USB 已經可以經易使用 rufus 達成,就算有 UEFI 從中作梗,也是能開機,奈何時過境遷,現在作好了開機 USB ,遇到了 secure boot violation 0x1A  工作環境:   redo backup and restore 4.0.0 USB 開機碟  錯誤訊息:   secure boot violation 0x1A  解法:   進 BIOS 把安全開機(Secure Boot (Controll)) 關掉 (Disable)  雖然有骨狗到可以用 enroll key 之類的設定,懶得折騰了,反正不是生產環境用的,趕快把資料備份完(打)上(電)工(動)才是王道。     收工!

Linux Mint cinnamon 的一些坑

 久別 Linux Desktop 之後再次啟用,因為 ubuntu Desktop 用起來覺得會三不五時卡頓一下,後來轉到 Linux Mint Cinnamon 上,比較不會頓一下頓一下,而且剛裝好就會有精靈引導設定系統,最好是先把這些精靈導引事項先搞定,再接著客製使用環境。 工作環境:  Linux Mint Cinnamon  一、fcitx 別先急著裝:先在啟用時的導引精靈裏有個 system Manager 的輸入法(input method)裏面,記得先把 traditional Chinese 依照說明完成之後,再去各別裝 fcitx-table-boshiamy 之類的個人愛用軟體  否則會出現 fcitx-data conflict )(*&^()(*& 之類的難解狀況;如果已經遇到了就得 sudo apt autopurge fcitx* 移除 fcitx 之後,再回去 system Manager 把 traditional Chinese 的設定搞定才重裝無蝦米輸入法 二、gnome-terminal 突然失效:在完成 traditional Chinese 的設定之後,gnome-terminal 只會轉一轉之後就沒有開起來 :   重裝無效,其他 terminal 如 Xterm 可正常使用  vi /etc/locale.conf(預設是沒有這個檔案的):加入 LANG=en_US.UTF-8 就能修好  未試: LANG=en_US.UTF-8 bash gnome-terminal 一切回復正常 收工!

WSL 突然無法使用

 有時侯 Windows 就是有它自已的想法,所謂林子大了什麼樣的鳥都有,軟體用多了什麼樣的狀況都會出  工作環境:   Windows 11 Pro    WSL  錯誤訊息:   一開始是出現了類似找不到 wsl 的訊息像是 沒有 profile 的檔案之類的(沒抓下畫面)   接著出現 因為這個系統上已停用指令碼執行,所以無法載入 D:\docs\WindowsPowerShell\profile.ps1 檔案。如需詳細資訊,請參閱 about _Execution_Policies,網址為 https:/go.microsoft.com/fwlink/? LinkID =135170。   試著打開權限: Set-ExecutionPolicy Unrestricted > A   試著繞過權限限制: powershell -ep bypass   一直繞來繞去:還出現了這個訊息 裝載其中一個檔案系統時發生錯誤。如需詳細資料,請執行 'dmesg'   還有這個 WSL 2 需要更新其核心元件  因為是突然出現的怪現象 這次學乖了 稍微折騰一會兒之後 決定先重開機 重開機後發現沒有什麼變化繼續繞圈圈 於是給它 wsl --update 一下   然後  然後就都回復正常了  收工!

在 Windows 10 下掛載 Ext4 硬碟

 工作環境:     Windows 11, 10 Home ver. 22H2          WSL          PowerShell (可能需要管理者權限)          ext4 硬碟  Get-wmiobject -query "SELECT * FROM Win32_DiskDrive" Partitions : 1 DeviceID   : \\.\PHYSICALDRIVE0 Model      : ******************** Size       : 1000202273280 Caption    : 廠牌型號資訊 Partitions : 3 DeviceID   : \\.\PHYSICALDRIVE1 Model      : ******************** Size       : 256052966400 Caption    :廠牌型號資訊  wsl --mount \\.\PHYSICALDRIVE1 --partition 1 到檔案總管的 Linux 下的任一個虛擬機器下的 /mnt/wsl 即可讀取  Linux(\\wsl.********)\********\mnt\host\wsl\PHYSICALDRIVE3p1  可讀可寫,可用中文 卸載硬碟  wsl --unmount \\.\PHYSICALDRIVE1  wsl --unmount #卸載所有掛載的硬碟 ======================= 除錯 ======================= 開啟或關閉Windows功能  開啟 Windows 子系統 Linux 版  開啟 Windows Hypervisor 平台  開啟 虛擬機器平台 要先裝一個 WSL 就是在 windows 底下裝一個 Linux 子系統  調整 UEFI 設定  打開 Direct IO  打開 VT-d  如果以上都做了,或是原本就已經打開了,還是出現類似「你必需啟用 Windows 虛擬平台」的訊息  bcdedit /set hypervisorlaunchtype auto 命令列選項無效: --mount 的訊息:  Windows 10 家用版 22h2 如果你是先前就裝的 WSL 還是需要 wsl

raspberry Pi 固定 IP

 有兩種方式 一種在 dhcp server 上進行設定 一種在 raspberry Pi 上設定 因為分享器是自已管的就用第一種方式了  透過保留 ip 位址(reserve IP) 的方式 用戶端還是用動態取得 ip ( dhcp )的方式連線 只是每次連線的時侯都會取得同樣的 IP 位址  在安裝 raspberry Pi 上面的伺服器之前完成哦 以免重開機後找不到伺服器了   收工!

raspberry Pi 的一些相關操作

 話說 之前想要搞個 NAS 來玩玩 然後發現用老機有點難搞 因為太久沒用了 連要重置個 Windows XP 的密碼都卡來卡去的 再者就是得養個吃電怪獸 剛好 有人因為拿到了個很難搞的 raspberry Pi 4B 說是太麻煩了 沒有預裝的 Windows 之類的作業系統 於是就有了新玩具  工作環境:     raspberry Pi 4B           有 micro SD 卡讀取器          micro SD 卡          micro HDMI 公 to HDMI 公 訊號線          USB type C 電源線          無線鍵鼠(USB 連接器)         OS: raspbian Lite 32 bit     Windows 筆電           有 SD 卡讀取器          micro SD 卡轉 SD 轉接卡(買卡的時侯注意一下,買有轉卡的)          angery IP scan     可攜式外接顯示器(mini-HDMI 母 接頭) 買 HDMI 接頭的好 miniHDMI 要轉接頭麻煩   安裝系統: 其實要給 raspberry Pi 裝系統算是簡單的 去官網下載映像 寫入程式(Raspberry Pi imager) 然後全部都選預設選項不要動 指定好你的 sd 卡的磁區 就可以進行燒錄(寫入系統到 SD 卡) 把寫好的 SD 卡放到 raspberry Pi 的讀卡器 接上電源就可以開機了  在這種情形下你需要外接一個 HDMI 的顯示器 需要無線鍵鼠 以便直接對 raspberry Pi 進行操作 無線鍵鼠買一般 Windows 用的就行了 不用特規的裝置(真不錯) 由於我的可攜顯示器接口是 miniHDMI 得多加個轉接器 這個買設備的時侯可以注意一下 不然又要多買轉接頭 等多等幾天  好在 如果你要的是寫好系統 raspberry Pi 直接接上電源和網路線就可以直接透過 SSH 連線進行遠端操控 所謂的 headless 那在打開 imager 的程式時 按下 Ctrl + Shift + X 就有進階選項可以選 按照標題填入對應的參數 像是     給 raspberry Pi 取一個 名字.local(等一下掃 IP 可以用)     勾選啟用 SS

Linux desktop 安裝無蝦米輸入法

 每個人慣用的輸入法不同,無蝦米好記,雖比不上注音輸入法來得廣,得另裝輸入法程式,之前,在 Linux 上要安裝無蝦米有點麻煩,現在簡單多了  工作環境:     Linux desktop (ubuntu/mint)          boshiamy  設定的話有幾件事要做:裝 boshiamy 字碼表、指定用 fctix 管理輸入法、加入 boshiamy 字碼表  安裝輸入法很簡單: sudo apt install fcitx-table-boshiamy 一行指令就行  指定用 fcitx 管理輸入法:到系統設定的輸入法( Input Method ) 裏面選定 fcitx,登出再登入  加入 boshiamy 字碼表:進入系統後,上方或下方工作列的圖示會多一個鍵盤的圖案,按右鍵選 configure,加字碼(+)的時侯先把 Only show current Language 的勾取消掉,再搜尋 boshiamy 加上去,加上 boshiamy 的字碼此時輸入時就可以用無蝦米了  輸入的時侯按 [Ctrl] + [空格] 就可以切換輸入法了  同理可證,如果要裝注音,先裝 fcitx-chewing 再設定,要切換時 [Ctrl] + [空格] + [LShift]     收工!

python env 與 odfpy

 python 開發時為了套件相依性、維運開發環境…等原因,所以有了 env 的設計,用來保持開發環境的單純可用,這次就遇到了奇怪的事,開啟了獨立的開發環境,用 pip 裝了套件(package /module),list 時看得到,但是 import 時說沒有這個 module 工作環境:     python 3.10          env               odfpy 1.4.1  用了很多方法都無法解決,一開始肯定是重裝套件,接著重裝 env ,試著裝一些相關的套件,想看看是不是有相依的套件沒裝到,最後還試著最笨的方式,重裝 anaconda ,這傢伙一裝就要1小時,登登,還是不行  最後開始降 python 版本,從次新版的 3.10 一路降到了 3.5 終於…不再找不到 odfpy ,程式也可以用了,過了好久才發現,原來這個套件本來就只支援到 3.5 版,chat 你看得到嗎?看一下喲, odf 只支援到 python 3.5 版呀,QQ................  其實應該換個讀檔的方式的,也就是放棄這個 odfpy 套件,用別的套件或是別的方式來讀檔,像是 pandas 本身就有讀檔函式,唉!繞了一大圈又發現 debug 本身可能是沒有效益的,有時侯適時的跳開這些坑,轉換跑道才是王道 收工!

瀏覽網頁之前你可能要先登出蝦皮

 以往使用手機瀏覽網頁好像比較安全,畢竟手機少了很多電腦上的功能,手機瀏覽好像比較危險,因為很多支付都綁手機上了…  以往手機上很多存取權限要開放之後才能使用,雖然帳戶裏也沒幾個錢,但是最近搜尋網路資源時發現瀏覽某些網頁的時侯,那些網站會去開啟蝦皮的網頁,即使你已經開啟「封鎖彈出視窗」功能也是一樣,如果你的手機有蝦皮 app ,它還會直接開進你的蝦皮 app ,不會問你要不要跳轉,這個行為對使用者來說真的很危險,畢竟有時侯就是會搜尋到一些奇怪的網站,點進去之後你可以很容易判斷,但是點進去之前很難(來不及啦:蝦皮已經開啟)  免費的最貴,聯想到前一陣子的蝦皮資安新聞,目前可能只能先登出蝦皮再看網站了      

Mikrotik 定期執行腳本(script)

 已經設定好的腳本(Name: testScript)在 system > script list 裏面,原本想用檔案(.rsc)來管理,但是找不到檔案要怎麼移動,只好看看有沒有辦法繞過這個限制  工作環境:     Mikrotik wifi router          既存的 script: testScript          定期執行  結果找來找去只要一行指令:     system scheduler add name=testScript on-Event=testScript intervel=10m  system scheduler print 出現 testScript      收工!

在 Mikrotik 上更新 cloudflare 的 DDNS 記錄

 提供 DDNS 的服務商有很多,其實如果你用 M 家的機器,啟動後就有 DDNS 可以用,只是買了服務商的網域名稱,掛上自已的名字來用,所以得來折騰一下。   工作環境:     Mikrotik wifi router          DDNS update script     cloudflare DNS manager  參照 既有的 script ,到 dash > 概觀裏把 zone ID,你要更新的 domain (其實是 hostname / FQDN) ,再到 profile 裏把 API token for DNS ,TTL 這些參數找到,等一下設定 script 要用,然後在 cloudflare DNS manager 裏,把你要設的 A record 記錄,指到「 不正確 」的 IP,由於這個方式只適用非 proxy 的狀態( 僅DNS ),剛好合用, proxy 的部份就不折騰了,留給能人去試 XD,以上是和 cloudflare 相關的設定部份  回到 M 家的 wifi router 上,把剛才的收集到的參數在腳本裏改好,將改好的 script 貼到 system > scirpt list > name: DDNS > policy: read,write,test > source(貼上改好的腳本) > apply > run script ,以上是和 M 家 wifi router 相關的部份  如果你回到你的 cloudflare DNS manager 裏,你的 A 記錄和 TTL 更新了,恭喜你,成功了!  收工!    參考資料 / 資源: https://github.com/mike6715b/Mikrotik_CF_DDNS/blob/main/CF-Update.rsc  cloudflare > dash > profile cloudflare > profile > API > token

在 eeebox 上安裝 linux 之烏龍連連

 Linux 在很多老機器上表現一直不俗,為了榨取老機的最後價值,想在塵封多年的 eeebox 上裝 Linux 讓它做一台 NAS,雖然知道 synology 極好用,也明白它的價值在於它的整合和軟體,以及到處可以存取的好處,但是這 3000 還是想省下來,沒想到的是這麼多年了, Linux 也改進了不少,硬體也更新了,於是,又撞牆了  工作環境:     eeebox     Linux Mint     rufus  首先還是把系統先備一下,雖然不太可能再把 windows 裝回來,還是習慣做一下備份,結果 rufus 做的開機 usb 都開不進去,不管是 redo backup and restore、easeus、clonezilla,後來是看到 clonezilla 的版本不符的訊息才想到, XP 是 32bit 的時代,只好拿出舊 usb 開進 dos(好久不見) ghost(也是好久不見) 系統磁區  想當然爾,原本收錄的 64bit Linux 發行版都不能用,要重新下載 32bit 的,結果用 rufus 做的開機 usb ,硬是開不進去,一直出現類似 stdin: Not a typewriter,之類的訊息;kernal panic;開進 busybox (initramfs);Can not mount /dev/loop0 (cdrom.....);後來是降到 Linux Mint 16 而且用 DD 寫入模式做的開機 usb 才開進 live CD ,居然 1G ram 可以跑 Linux Mint Mate,可能是沒有用 syslinux 的方式做開機 usb 吧,目前已經能開進 liveCD 改天再來試試 syslinux 的方式看看,畢竟那時代沒有 UEFI 這惱人的東東,先求有、閃過 /dev/loop0 的問題先  沒想到搞老機器得要考古軟體    收工!

再探 chrome 遠端桌面

 遠端桌面從最早的 X 、 VNC 、 RDP 、 team viewer 、 anydesktop …… chrome remote desktop 可以和前3項比肩,它免費,而且透過擴充套件(extension)的方式就能啟用,號稱安全,可以透過 gmail 帳號管理  工作環境:     Windows 10 桌機          chrome 瀏覽器               chrome 遠端桌面(chrome remote desktop)     手機 / 筆電 / chromebook  先在桌機上裝好 chrome 遠端桌面:三個點 > 更多工具 > 擴充功能 > 搜尋 desktop > 安裝起來 > 設好密碼並且記住,等一下會用到  從手機 / 筆電 / chromebook 連線到已登錄的裝置:連線到 https://remotedesktop.google.com/access > 選取你要連線的 已經登錄的 裝置 > 輸入密碼   此時你可以從遠端操作你的電腦了  和 RDP 不同的是,你用 RDP 有時侯會被遠端的信任對話擋住,就連不上了,而 chrome 遠端桌面是先講好要連進來時的密碼,有密碼就能連  收工!

在 windows 驗證下載檔案

 以往在 windows 裏面想要驗證檔案的 hash 需要另外安裝工具才能達成,現在不用了  工作環境:     windows 10          certutil  使用方法也很簡單:      certutil -hashfile <filename> <hash-mode>  例如:     certutil -hashfile downloaded.iso sha256  檢查看看和網站上提供的雜湊值有沒有一樣,沒有的話就得重新下載了     收工!

Mikrotik router 無法使用 winbox 透過 IP 連接

 不知道是不是設定的時侯連線狀態有佔住,還是用的是 wiregurad 的連接方式,當時是可以順利連上 router 的,這次想測 site-to-site wireguard 2個節點下的內部網路機器是否可以互相連通,發現要使用  winbox 進其中一個 router 時,無法透過 IP 登入,還好透過 MAC 仍然可以連進去,檢查 IP > services 發現 winbox 有打開,兩端內部網路機器可以互相 ping 到,多半又是防火牆擋住了  工作環境:     2 mikrotik router with site-to-site wireguard VPN       進入 router 後趕快把 log freeze ,並且找關鍵字 8291(預設的 winbox port),發現被 DROP ALL 的 firewall filter 擋下了,所以要設 log 才好排查設定啊~~  有 log 幫忙就能很容易知道要開什麼洞給自已鑽,因為 log 會詳細記錄封包的來龍去脈,照著把小門打開就行:記得 dst-address ,還有 src-address 要視你的需求和設定,改成你的目的地和來源的 IP 位置或是範圍 /ip firewall filter add action=accept chain=input comment="allow LAN/bridge to Winbox" \     connection-state=new dst-address=192.168.1.254 dst-port=8291 in-interface=\     bridge1 log=yes log-prefix="allow LAN/bridge to Winbox" protocol=tcp \     src-address=192.168.1.0/24   設好了以後,馬上用 winbox 透過 IP 連進 router ,已經可以登入了      收工!

rufus 外接 SSD 卡關

 rufus 在製作開機 usb 的時侯非常方便,而且是個可攜的小程式,小巧好用,用過就回不去了,但是這次想用它把外接 SSD 硬碟做成可開機碟時卡關了,選項裏沒有這個 usb 磁區  工作環境:     windows 10         rufus 3     USB 外接盒 + SSD 硬碟  打開 rufus  的時侯傻眼,因為根本沒有外接硬碟的磁區可選,還好它有個模式,用 Ctrl + Alt + F 按下之後,馬上看到外接硬碟,之後操作方式就和平常 rufus 一樣 收工!

Mikrotik CCR 無法更新

 新版(7.8) RouterOS 釋出,想要看看有沒有 ROSE storage 可以用,先升級看看,然後就GG了  工作環境:     Mikrotik CCR          firewall DROP all input after some open services  錯誤訊息: can't resolve DNS ,想必是沒開 DNS 進來,看了一下 log 知道從哪個介面來,從哪個 src port 來     /ip firewall filter add action=accept chain=input comment="allow DNS response" in-interface=\     pppoe-out1 log=yes log-prefix="allow DNS response" protocol=udp src-port=\     53  錯誤訊息變了: connection timed out,google之後找到論壇有人討論     /ip firewall filter add action=accept chain=input comment="allow Update allow established connections" in-interface=\add action=accept chain=input comment="Allow Update allow established connections" connection-state=\     established add action=accept chain=input comment="Allow Update2 allow related connections" connection-state=\     related  可以更新了 收工!

ubuntu Server 系統升級速記

 久久用一次的功能,打完就收工! 更新套件 sudo apt update sudo apt list --upgradable sudo apt upgrade 重開機 sudo reboot 移除舊檔案 sudo apt --purge autoremove 安裝更新管理工兩 sudo apt install update-manager-core 升級 sudo do-release-upgrade 完成升級後再次更新系統內的套件 更新伺服器的套件檔案清單。 sudo apt update 更新套件。 sudo apt -y dist-upgrade 清除更新時下載回來的檔案。 Sudo apt clean 清除更新後用不到的舊檔案 sudo apt autoremove --purge

建立 virtualbox 和 windows 之間同步資料夾

  之前使用 vagrant 的時侯,它有個很炫的功能,就是設定好密鑰之後,可以在 windows 上指定一個資料夾和 virtualbox 裏的資料夾同步,雖然要透過 ssh 多一層的設定,但是真的很方便,那時用 vagrant 還得折騰一番才能設好,原本就要在 virtualbox 和 windows 兩邊折騰了,想少一點折騰的功夫,去掉 vagrant 和 ssh 這些個中間層  工作環境:     Windows 10     virtualbox 6          ubuntu 22 server LTS  virtualbox 有提供一個共用資料夾的功能,把它設定好,就可以實現願望了  Windows 端:      virtualbox > ubuntu22 > 設定 > 共用資料夾 >         資料夾路徑:指定你在 Windows 裏要分享來同步的資料夾(例如:D:\share)         資料夾名稱:隨便給一個(例如:share),等一下給 ubuntu /etc/fstab 第1個變數用         唯讀:不勾(雙向同步不勾)         自動掛載:勾         掛載點:要放在 ubuntu 的掛載名字(例如:share)         設為永久:勾     > 確定  ubuntu 端:不需要先裝 VBoxGuestAdditions     sudo mkdir /media/share     sudo vim /etc/fstab 加入以下這一行          share     /media/share     vboxsf     _netdev,uid=1000,gid=1000     0     1     sudo init 6 (可以先試試 sudo mount -a 掛不上去再重開機)  重開機後測試一下: touch /media/share/test.txt 應該在 Windows D:\share 下可以看到多了一個 test.txt 的空白檔案,在 windows 裏打開這個檔案,加入 test 的字樣,在 ubuntu 裏面 cat /media/share/test.txt 應該會出現 test 的字樣,表示成功了   收工! 

使用 python 處理 excel 檔案的前置準備

 因為要處理 excel 檔案的內容,由於數量龐大,不想 ctrl C + ctrl V N 次,所以想要動用程式來處理,這次要用的是 python,雖然說是處理 excel ,其實拿到的檔案是 ods 的格式,所以還得做一些前置工作。  工作環境:     Windows 10     python     anaconda 建立一個名為 excel 的獨立 python 工作環境   conda create -n excel   cd excel 啟用名為 excel 的工作環境   conda activate excel 這個工作環境裏要安裝這些 python 套件   python -m pip install openpyxl   python -m pip install pyexcel pyexcel-ods pyexcel-ods3 pyexcel-odsr pyexcel-xlsx pyexcel-xlsxw   關閉現行的工作環境   conda deactivate 可以寫程式取用 ods/excel 了 收工!

VSCode 使用者模板一直把內容打在檔案名稱上

 在使用 Visual Studio Code(以下稱 VSC) 的時侯,常常會設定常用的模板以增加開發速度,只要填空關鍵字就好,只是怪在,想要的內容跑到檔案名稱上去了,就是不呈現在檔案的內容上,怎麼改,改 settings.json 也不是,改使用者模板(snippet)也不是  工作環境:     Windows 10     VSC         snippet  突然想到多給一行空白好了,結果就成了… coding *(*^%^*()^ 那一行不會再出現在檔案名稱上了     "Python File" : {         "prefix" : "pf" ,         "body" : [         "" ,         "# -*- coding: utf-8 -*-" ,         "" ,         "def main():" ,         "    pass" ,         "" ,         "" ,         "if __name__ == '__main__':" ,         "    main()"         ],         "description" : "Python file with default settings"     }       收工!

使用 vue.js 也引用 bootstrap 和 FontAwsome

 克服忘性用的筆記  工作環境:     Windows 10          Node 18               vue.js               bootstrap               FontAwsome 已經安裝 node 18 和 vue.js 想在開發時也使用 bootstrap 和 FontAwsome ,     npm install bootstrap  bootstrap 好像會用到所以還是裝了     npm install --save @popperjs/core  裝 FontAwsome     npm i --save @fortawesome/fontawesome-svg-core      npm i --save @fortawesome/free-solid-svg-icons  檢查 dependencies (package.json)看起來像醬子:   "dependencies" : {     "@fortawesome/fontawesome-svg-core" : "^6.3.0" ,     "@fortawesome/free-solid-svg-icons" : "^6.3.0" ,     "@fortawesome/vue-fontawesome" : "^3.0.0-5" ,     "@popperjs/core" : "^2.11.6" ,     "bootstrap" : "^5.3.0-alpha1" ,     "vue" : "^3.2.45"   },   引用套件(main.js)看起來像醬子: import 'bootstrap/dist/css/bootstrap.min.css' import "bootstrap" import { library } from '@fortawesome/fontawesome-svg-core'

chatGPT 襲來

 寫程式原本是一項有點特別的能力,具備一定的門坎,現在它不是了,而且門坎低到只需要一個 google 帳號的程度,只要會下指令,還不是以前那種生冷的指令,而是透過對話的方式,就和平時和其他「人」說話一樣,只不過對象換成了 AI ,就有個神奇、真的是神奇的助手來完成寫程式這件事,現階段還免費幫你寫,如果不告訴你是和 AI 對話,你能察覺嗎?為什麼要免費開放 AI 給普羅大眾?  都說有人幫我寫程式就好了何必管那麼多?假以時日,程式設計師這工作,怕是時日無多,至少,這工作的內容和工作方式會被改變,變成一般人會用人工智慧助理就行,雖然說,寫程式本來就只是手段,至少需求還產生工作機會,現在乍看是利用這助理幫忙做事,整體來看卻好像在幫人工智慧集思廣議,舖天蓋地的新聞又像在幫人工智慧除錯,而且是以一整個網際網路的規模,再來,這個 AI 他會推測你的需求,而且推測準確,像是你在過程中提到了輸入檔案時要處理中文字碼的事情,他就自動幫你把所有輸出的字碼也處理好了,更不用說他會根據對話,自動產生適當的標題,可以想見的是失業的規模,只怕與一整個網際網路的規模相差不多。  總而言之潘朵拉的盒子已經打開,唯獨不知道剩多少時間,以及盒子裏最後剩下的是?       瞬間驚喜,卻不禁悲從中來

Windows 用戶端連線不同做法 site-to-site VPN 測試

 如果有多個不同的端點,通常會用相同的串接法,有時侯新的方式可以用了,就產生了過渡期,理想狀況是第一時間做整合,有更多的時侯,只是不想多折騰,開個便道湊和湊和…  工作環境:      site-to-site SSLVPN VPN     site-to-site wireguard VPN     Windows 10 用戶端  測試結果因為使用設備不同可能不同,這裏只是做個備忘錄  如果兩個 site-to-site 的資源都要能存取只能先連 SSLVPN 再連 wireguard VPN , 反過來操作是不行的,可能是由於 SSLVPN 的路由和防火牆的設置做得比較全面的關係,新的 wireguard VPN 因為測試 site-to-site 為主很多設定還沒有考慮進來   收工!

Ubuntu 設置 Wireguard

  開始想用 wireguard 的時侯,套件一開始就裝好了,一直找不到設定檔,而且試著開始用的時侯,發現怎麼顯示出來的介面和設定的不一樣,於是又開始了一陣胡搞瞎搞…  工作環境:      Ubuntu 22 server  LTS      wireguard 1  設定的方式大同小異,可以參考 這裏 、 這裏、 或是 這裏 ,設定檔的資料夾權限可能要注意一下:     mkdir -m 0700 /etc/wireguard/      cd /etc/wireguard/      umask 077      wg genkey | tee privatekey | wg pubkey > publicke y  看別人設定覺得好像不難,居然也能撞牆…  就在完成設定檔之後, start wireguard 發現 interface 的資訊和設定的不一樣,而且找不到地方可以改原始的設定,是的,系統裏找關鍵字 conf 和 wg 就只會找到自已剛才開的設定檔,其他的檔案看起來就是長得和自已剛才開的設定檔不像,那時忘了先重開機一下,可能就沒事了,千金難買早知道啊…畢竟是很少需要重開機的系統  為了讓 wireguard 可以「正確」的啟用,開始針對訊息和設定的落差,透過刪改既有的檔案的方式來「修正」「落差」,於是乎這個檔重建也不是,殺也不是,unmask 也不行, wireguard 就是無法啟用  Failed to enable unit: Unit file /lib/systemd/system/wg-quick@.service is masked  原本設定檔裏想要透過 `cat privatekey` 來引用私鑰也是不行地…乖乖地把私鑰貼上設定檔了  如果可以很快地抓到問題所在,排除狀況,當然對症下藥,用修的;然而很多時侯,打掉重練看起來吃力,卻是最佳解, 重設設定吧,記得也要重開機   sudo dpkg-reconfigure wireguard     收工!    =================== 後記 =================== 要改設定時,可能要先 stop service 再重開 service,client 也先斷線,以免出現怪怪的回應或是改不動設定的情形     sudo systemctl stop

Mikrotik winbox refuse connection

  在整個 wireguard 的設定一陣忙祿之後,嘗試用 IPSec VPN 再次連回分享器,GG 了,好在這次只有一邊不能連,進去看 Log...  Log 說,用的是 IP Sec 連線,用的是 192.168.9.0 的網段,要連到 Winbox 被拒了  工作環境:   Mikrotik   Windows VPN 連線    winbox  相比2個端點的 firewall 發現有一點點不同,簡單,調成一樣就行,然後還是 GG…  後來看到2個端點的 service 設定不太一樣,原來是 IPSec 的網段沒有在允許的範圍內,於是把小門打開(winbox service 的 Address: 加入 IPSec 的網段 192.168.9.0/24),winbox 應聲打開 收工!

Mikrotik DNS Server 提供內部使用的名稱伺服器

 網域名稱對於使用者是蠻重要的服務,它雖然不貴一年400台幣左右,但是方便性無價,使用者絕對不會想去知道它的 IP ,他只想要他想找那台機器的時侯,提供你一個名字,然後你能幫他找到,那台機器在哪裏,所以就需要 DNS Server(以下稱DNS) ,也就是名稱伺服器,用來提供名稱和 IP 的對應,方便人機溝通  工作環境:   Mikrotik router    DNS Server for internal clients   Windows clients  Mikrotik 提供靜態名稱伺服器供使用者使用,在 IP > DNS > DNS settings: > Servers: 把內網的 Gateway(以下稱gw)的 IP 打上(例如: 192.168.0.1) > Allow Remote Request 勾起來 > Apply > OK ,這樣 DNS 就設好了  如果你要設定名稱對應,例如:192.168.0.2 名稱要叫使 notebook.router.lan 的話,在 IP > DNS > DNS settings: > Static > + > name: notebook.router.lan > Type: A > TTL: 1d > Address: 192.168.0.2 > Apply > OK ,有很多個就加很多次  如果你提供了 DHCP Server(以下簡稱 DHCP)讓使用者可以自動取得 IP 的話,記得到 IP > DHCP Server > Networks > 把對應的 Servers 填上去以便使用者自動取得 IP 時也使用你指定的 DNS  記得,那個 Allow Remote Request 勾起來,Allow Remote Request 勾起來,Allow Remote Request 勾起來,不然查找 DNS 的時侯,會一直 request timed out      收工!

Mikrotik firewall 開洞給 wireguard 鑽

 為了把不必要的門關起來,把 input drop all 的政策開起來之後,原本可以連線的 Wireguard 連不上了…  還好現在在設備旁  工作環境:   Mikrotik CCR site-to-site wireguard hapAC, CCR ip firewall filter +default drop input all   Wireguard windows peer   CCR 的 input filter 相對於 hapAC 在 wireguard 的路由管理應用在 firewall 好像是比較嚴格,其他設定一樣的狀況下,在開啟 input drop all 之後, wireguard 連接 hapAC 還是可以存取資源,但是連接 CCR 就馬上被關在門外,想必是得開小門… 操作:  wireguard 連遠端 site (hapAC)無法連回 CCR ,wireguard 連近端 site(CCR)無法通  在 CCR 實體線路把對方的內網 gateway 打開: /ip firewall filter add action=accept chain=input src-address=192.168.2.1  wireguard 連遠端 site (hapAC)可以連回 CCR ,wireguard 連近端 site(CCR)無法通  再把 wireguard 的網段打開: /ip firewall filter add action=accept chain=input src-address=10.10.10.0/30  wireguard 連近端也可以通了   收工!

wireguard 連到 site-to-site VPN 時同時存取兩個 site 下的資源

  連到 VPN Server 就是為了要存取內部網段的資源,如果2個 VPN server 用 site-to-site 的方式連好了,想說就能同時存取兩邊的資源,但是…  工作環境:   2 Mikrotik router with site-to-site wireguard    peer(road-warroir) link one of 2 peers above 不管連接任何一個剛設好的點(peer) 都只能看到一邊的資源(例如:nas),最簡單的解法可以參考之前同時連接多點的方式,就收工了! 只是我們都期待一個更美好的世界…,因為都是自家的設備、資源,所以想要不管連那個點都能看到所有的設備,這種方式有好有壞,好處就是一鍋端,壞處就是有別人進來也是一鍋端,安全的事留給大神,居家自用只管方便就好 還記得 設定 wireguard Server 的時侯有兩種方式可以讓使用者獲得存取權限嗎?要用 firewall的方式:  /ip firewall filter add action=accept chain=input comment="allow WireGuard" dst-port=12345 \ protocol=udp 之後再把 wireguard 的連進來的網段(192.168.0.0/24)加到 firewall NAT 到自已的 gateway 的網址: /ip firewall nat add action=src-nat chain=srcnat src-address=192.168.0.0/24 to-addresses=192.168.1.1    如此一來,不管是用 Wireguard 連接哪個 site-to-site 的點,或是兩點都連,都能存取2個點的資源    收工!

Mikrotik site-to-site wireguard config 用 wireguard VPN 連接2個不同的分享器資源

  利用 VPN 來連接不同的網際網路上的節點實務上蠻常見的,如果你剛好在不同的房間裏,各自用分享器接到小烏龜上撥接上網是不是很方便,然後,各自掛了nas在自已的分享器上用,還是很方便,如果,有那麼一天,你隔壁的朋友說要存資料來我的 nas 存,是不是就有點麻煩又不怎麼安全,話說有網路用網路沒網路才走馬路…  工作環境:  中華電信小烏龜  2台分享器(Mikrotik)各自已經設好可以上網      各自接好了自已的nas在分享器下  使用 winbox / webfig 設定 :wireguard 的設定方式都是一樣的,請對方設好給你的 ip 位址,請對方提供你公鑰,然後就把這些資訊填好就可以連了,不管對方是一個site還是一個節點,連線位址在 Quick Set 右下角有個 )*^&*()*&^&*( .sn.mynetname.net 就是了,就不用煩惱ip是會變的, 可以參考這裏  site-to-site 要多設路由的部份(2個分享器都要設): IP > Routes > Dst. address: 對方(開放的)內網網段(eg:192.168.0.0/24) / gateway: 對方的 wireguard 的 IP(eg: 10.10.10.1/30) > Apply > OK  設好之後,就可以看到對方的網段之內的設備了,不用馬路也可以連來連去了。 收工!

Wireguard connecting multiple peers 一次連接多個節點

因為有2個點想要同時連接,從連線程式發現原本的連接設定是分別設定的,所以只能一次取得一個 Peer 之中的資源 ,如果想要同時連接的話,要修改一下。 工作環境:  Mikrotik routerOS 7.*  Windows wireguard 設定範例如下: [Interface] PrivateKey = removed Address = 192.168.0.11/32 [Peer] PublicKey = removed AllowedIPs = 192.168.1.0/24, 10.0.0.0/24, 192.168.0.0/24 Endpoint = 1.2.3.4:12345 PersistentKeepalive = 25 [Peer] PublicKey = removed AllowedIPs = 192.168.1.0/24, 10.0.0.0/24, 192.168.0.0/24 Endpoint = 2.3.4.5:23456 PersistentKeepalive = 25 如此便能一次連接2個節點,也能同時取得2個節點下的資源了。   收工!  ===================== 後記 ===================== wireguard server 的 ip 不能一樣,不然一次只能連一個點,如果 server IP 不一樣可以同時開兩個 p2p 的連接,不用再設定第3個連接設定檔把 Peer 設定合在一起

Mikrotik 看 MOD 的設定方式

種花電信說: MOD 一定要直接接小烏龜才能看 ,偏偏有些分享器可以接到指定 port 就能看 MOD,所以自家的 Mikrotik 在使用 Quick Set 建立連線之後,想要把 MOD 接到 Mikrotik 之下看,當然,不透過 Mikrotik ,MOD 直接接在小烏龜上,不用另外設定分享器就能看 XD,那究竟是在窮忙什麼? QQ 工作環境:  Mikrotik ROS v7.7   Quick Set 已經完成,可以上網    將 MOD 放到 eth4 介面連接 有蠻多網頁在討論這個如何達成這個目的,畢竟很多入門的分享器根本不用設定,例如T牌只要把 mod 的線路插在最後一個實體 port 就行,網路上有很大部份的資訊是設定 vlan 來完成實作,由於利用 Quick Set 完成設定的環境未動用到 VLAN ,環境相對上單純,這次以不使用 VLAN 的方式來實做,而用新增橋接的方式來完成,主要是參考 這個文章 ,參照文章的做法最主要要注意的地方在於第7版的介面是沒有 master Port 可以調整的,所幸只要略過那個動作就好 設定方式:簡單說就是新增一個橋接(bridgeHinet),然後把 gateway 的介面(eth1)和指定的介面(eth4)綁到新增的橋接上,並且設定撥接(pppoe)指到這個橋接上,實作方式如下 使用 Winbox / Webfig Bridge / Bridge / + / bridgeHinet 勾選 IGMP Snoop / Apply / OK Bridge / Ports / eth4 / Bridge: 選剛才建立的 bridgeHinet / Apply / OK Bridge / Ports / + / interface: eth1; bridge: bridgeHinet / Apply / OK Interfaces / Interface / pppoe-out1 / interfaces: bridgeHinet / Apply / OK 設定好了以後,把 MOD 的線插到 eth4 的介面上就可以連線了,測試一下,原本可以連到網路的部份功能不變,MOD 接在 Mikrotik 路由器上也可以看了 收工!

Mikrotik wireguard server 設定範例

Wireguard 做為 VPN 概念上十份直覺,設定也是,交換一下金鑰就可以相連接,雖然比起 Quick Set 的 VPN access 來說要再多設定一下,仍然是個不錯的解決方案,既然 Mikrotik ROS 第7版起已經支援,立馬來試一下。  工作環境:  Server: Mikrotik ROS 7 Hap Ac router  Client: Windows 設定  #wireguard 出門在外連線用 #新增 wireguard 介面(interface) /interface wireguard add listen-port=12345 mtu=1420 name=wireguard1 /ip address add address=192.168.0.1/24 interface=wireguard1 network=192.168.0.0 #新增連入的 peer 設定用戶端(client)時要用這個的 ip ,persistent-keepalive 非必設 /interface wireguard peers add allowed-address=192.168.0.3/32 interface=wireguard1 \ persistent-keepalive=10s public-key=\ "ljdalsfjlasdflksdjflkJLSFDJlUJALDSAJflfjsdfd=" " #讓 Client 端連進來,以下2 個選1個 /interface list member add interface=wireguard1 list=LAN /ip firewall filter add action=accept chain=input comment="allow WireGuard" dst-port=12345 \ protocol=udp  然後去 wireguard 下載 windows 版的連線程式, 把 client 端設定好 ,就可以連回家了。    收工!

Windows Wireguard 連線設定參數及範例

Wireguard 可以讓雙方透過交換金鑰的方式快速建立 VPN 通道相互連接,只要設定好參數就行,十分好用,但是… 如果你在 Windows 裏執行連線程式時設定值只有2行,而要完成連線當然不能只用這2行…  工作環境:  Windows 10   Wireguard windows 版 Wireguard 設定範例: #名稱:自已設,認得出來就行 #公鑰:要提供給對方(可能是伺服器)設定用的 [Interface] #windows wireguard 新增隧道精靈自動產生的私鑰; `cat server.key` on linux  ,絕對不是不是不是不是不是不是不是不是不是不是不是不是不是不是提供這個給對方 PrivateKey = ******************************************= #對應到對方(伺服器)設定我方( peer )的 IP Address = 192.168.0.3/32 #非必要(給對方連進來的port) ListenPort = 12345 #對應到對方的 wireguard 的 DNS IP DNS = 192.168.0.1 [Peer] #因為可能會同時連很多個 peer 可能在這裏記一下對方是誰 #`cat client.key.pub` on linux PublicKey = *************對方提供給我方的金(公)鑰************= #全部的 IP 都能連 #AllowedIPs = 0.0.0.0/0 #可以連的 IPs: VPN 的網段和內網的網段 AllowedIPs = 192.168.0.0/24,192.168.1.0/24 #對方 wireguard ( server ) 的 IP/網址:port Endpoint = 1.2.3.4:54321 #非必要 每25秒送個訊號以保持連線 PersistentKeepalive = 25 [Peer] #剛才說了,可能同時連很多個 peer …… ……    如果你得到這個訊息: You must use the native version of wireguard on this computer 很有可能是你或是對方的參數沒有設好,參數沒有相對應,會造成連不上對方,或是連不到你要的目的網段

Mikrotik 快速設定 VPN server 使用 QuickSet

圖片
要連線回家拿東西就需要 VPN Server ,雖然 Mikrotik 提供很多種方式可以完成這個工作,但是總是繞來繞去,點來點去,常常連不上,卡來卡去,於是繼續點來點去、卡來卡去、無限循環,有負 QuickSet 的美意,又讓人有小孩開大車的感覺,趁著新年收假前,把這個爛尾已久的設定搞定。  工作環境:   Mikrotik Hap ac Router  最好是把路由器重設,把環境回復到最單純的程度,Quick Set 用起來就和市面上的分享器一樣好用,把設定值填一填馬上就可以上網,因為要啟用 VPN Server 所以記得把右下角的 VPN access 勾起來,然後設定好 Password,基本上就可以連回路由器了,真的是 Quick Set(如下圖)。 在 Windows 下連線 VPN 非常簡單,只要把你的 ip 或是右下方的 VPN address 填好,就可以連上了, 詳此 , ping 得到內網的 gateway IP、 DNS IP ,也連得到外界的網頁,但是…  連回自家的路由器之後會發現,連不到自家路由器裏的設備,等於得到一個跳板而已,沒有達成原本連回家拿東西的目的…  檢查 /interface/bridge 的設定, proxy-arp 已經打開,後來發現有人提到,把 /PPP/profile/default-encrypt 的 interface 指到 LAN 裏面就行了,如此一來 VPN 連入的設備會被視為 LAN 的一部份,再次開啟 webfig ,可以連到。    收工!

Windows 設定 VPN 連線

簡單記錄一下 Windows 設定 VPN 連線的方式,簡便好用  工作環境: Windows 10  網路及網際網路設定 > 網路和共用中心 > 設定新的連線或網路 > 連線到工作地點 > 下一步 > 否,建立新連線 > 下一步 > 使用我的網際網路連線(VPN)(I) > 填入網際網路位址(ip 或是網址名稱) > 建立  完成以上步驟之後,右下角的工作列的 Wifi 連線圖形按左鍵會出現剛才建立的連線名稱,按下這個 VPN 連線就會以 VPN 的方式連線到網際網路(通常也就能連回家裏的路由器/分享器 了)    收工!

phpmyadmin MySQL 5 新增使用者及密碼設定

使用 phpmyadmin 新增使用者的時侯出現了 #1364 - Field "details" doesn't have a default value,查了一下大致上是某個欄位沒有設定預設值,就沒辦法新增這筆資料。  工作環境:  Windows 10 pro  laragon with MySQL server 5.7  解決方式:  可以修改 my.ini 去掉 "STRICT_TRANS_TABLES" # Set the SQL mode to strict # sql-mode ="STRICT_TRANS_TABLES,NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION" 改成以下醬子 sql-mode="NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION"  或者直接在 phpmyadmin 裏面執行 SQL 指令: 查一下: Select @@GLOBAL.sql_mode; 執行一下: SET @@GLOBAL.sql_mode = "NO_AUTO_Create_USER,NO_ENGINE_SUBSTITUTION";   完成之後就可以新增使用者了  如果要改/設定使用者的密碼: ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'usersPasswordUWant';    收工!