2023年1月31日 星期二

docker: Error response from daemon: cgroups: cgroup mountpoint does not exist: unknown.

發生狀況


Ubuntu從20.04升級到22.04後,docker跑起來就會出現這問題。


問題筆記


後續的container在安全性上有做調整。如果直接安裝22.04並不會碰到cgroup設定的問題。而這調整也會直接影響到docker和podman的使用。




解決辦法


只要兩行就可以搞定docker。(但還沒辦法完整搞定podman使用gpu權限的問題)



sudo mkdir /sys/fs/cgroup/systemd
sudo mount -t cgroup -o none,name=systemd cgroup /sys/fs/cgroup/systemd


處理完畢後,nvidia-docker應該會暫時掛點,

如果只有安裝docker沒有podman,那就重新安裝nvidia-docker就好。

有使用到podman,就會需要去指定reousrce的方向。但之前發現這邊設定以後會跟docker相衝。所以運氣不好的話應該會面臨podman跟docker二選一的局面。這部分的設定方式記錄在其他文章裡面。






references:

  • https://bigdata-etl.com/docker-cgroup-mountpoint-does-not-exist-unknown/

2023年1月28日 星期六

VS Code 不進行 ssh server check

情境

  1. 透過VS code的遠端連線功能
  2. 遠端是使用docker,常常會需要重啟docker container

每次重啟等於重新製作一個Server,因此會讓ssh的know_hosts的check無法通過。通常這狀況就是把~/.ssh/known_hosts (windows也是放在使用者家錄這位置,VS code也是來這進行檢查)刪除掉就好。

但如果常常重啟Container,這樣刪除很煩人。

解決辦法

在vs code的遠端config加上StrictHostKeyChecking no   和 UserKnownHostsFile NUL 即可。樣子大概會像是這樣:

Host poca
  StrictHostKeyChecking no
UserKnownHostsFile NUL
  HostName 192.168.XXX.XXX
  Port 50222
  User poca


references

  • https://github.com/microsoft/vscode-remote-release/issues/2626

2023年1月16日 星期一

透過synology web api進行基本檔案上傳下載

 synology預設只有提供給管理者ssh,所以有一些使用到ssh channel的方法都無法使用。如果需要用到NAS使用者自身權限進行檔案上下載,除了可以透過內建的rsync來完成之外,也可以嘗試使用synology的web API來達成。

該文件放在:

 https://global.download.synology.com/download/Document/Software/DeveloperGuide/Package/FileStation/All/enu/Synology_File_Station_API_Guide.pdf 

這邊先截取一些個人比較常用的工具做個紀錄。

Synolgy的web api大概可以區分成login -> action -> logout 。各自關係如下:



因為是web api,所以可以使用瀏覽器開之外,部分服務也可以透過curl來開啟。

確認目前NAS有提供哪些服務?

透過瀏覽器或curl輸入:

http://<IP>:5000/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=all

or curl

curl -v "http://<IP>:5000/webapi/query.cgi?api=SYNO.API.Info&version=1&method=query&query=all"

IP就是NAS所使用的IP。如果有https的使用者就把port從5000改為5001。(這是預設狀況,有自己修改的使用者再自行轉換)。通常在家用網路都不會有DNS,所以大部分的狀況下https都不會直接通,需要透過使用者進行二段式確認。

瀏覽器應該會噴出一些資訊,那些就是目前NAS有提供的服務。

測試NAS認證是否能登錄?

使用瀏覽器

http://<IP>:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=<帳號>&passwd=<密碼>&

or curl

curl -v "http://<IP>:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=<帳號>&passwd=<密碼>&"

如果出現以下類似訊息(重點是success)

{"data":{"did":"gTB7R8aNM7nHn7KNDhXLHxtIcwDQUmsd--y_Clz0iBwmpkkpQlICM2xUieck2-6OLcFANSwATOWgN2S8MXefkA","sid":"-rJX_WSNkhvyHIr8h0nhAFMGRYSkGSUwltQ6X8b-XhYJkzONnYy0oncxOz-1T_kIT3_5wVl_xVRfn_Syk2gaCM"},"success":true}

另外一項重點是_sid這項目。這等於是取得token以方便後面的上下載動作。


也透過curl可以把登錄資訊放在cookie中:

curl -v "http://<IP>:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=<帳號>&passwd=<密碼>&format=cookie" -c synocookie

這樣登錄資訊就會放在synocookie中以利後面的使用。


登出則是

http://<IP>:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=logout&account=<帳號>&passwd=<密碼>&


比較方便的方式是把資訊放到cookie中,後續可以用-b參數讀取


curl -j -c ./cookie http://<IP>:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=<帳號>&passwd=<密碼>&session=FileStation&format=cookie


上傳資料

curl -F "filename=@檔案位置" -F "path=<NAS上的位置>" "http://<IP>:5000/webapi/entry.cgi?api=SYNO.FileStation.Upload&version=2&method=upload&_sid=1Z8QjAmvU0FMeX49MEFfwAf28oWE3CSslKVRmHHjNXUTcv-EU2I7cidfNwjoi5y1pZ_q0kzS-y65xrcVxUrM_0"

如果嫌SID部分太冗長,可以使用上面提到的cookie。使用curl的-b參數讀取

curl -F "filename=@檔案位置" -F "path=<NAS上的位置>" "http://<IP>:5000/webapi/entry.cgi?api=SYNO.FileStation.Upload&version=2&method=upload&" -b synocookie

上傳時,NAS上的位置要注意,開頭一定要用斜線(/)開頭,他會依照使用者的根目錄作出相對路徑。如果沒有用斜線開頭會噴錯。


後記
經過測試,有些帳號可以透過上面的方式成功上傳資料。但有些帳號不行。目前尚未找到無法成功的原因。
目前還是有部分package透過synology的web API上傳資料。有無法讓使用者透過SSH或是rsync上傳的需求或是希望讓使用者能用自己權限來操作的可以使用 N4S4 的 synology_api

references:
  • https://global.download.synology.com/download/Document/Software/DeveloperGuide/Os/DSM/All/enu/DSM_Login_Web_API_Guide_enu.pdf
  • https://global.download.synology.com/download/Document/Software/DeveloperGuide/Package/FileStation/All/enu/Synology_File_Station_API_Guide.pdf 



2023年1月12日 星期四

透過rsync不互動(without prompting)輸入密碼上傳資料

情境

  • synology 的 NAS 只有 administrator群組可以使用SSH。因此跟SSH相關的服務可能無法順利運作(如scp、sftp等等)。如果開通了權限,把 administrator帳號放到遠端機器上也不是個聰明的作法。
    1. 使用synology NAS
    2. 有特定使用者需要自動化在特定時間上傳資料,所以沒辦法親自輸入密碼
    3. 不是特別在意密碼可能會被別人看到(例如使用公用帳號,密碼也是公用的)

    處理方式大綱
    1. 建立特定帳號(如果沒有建立也沒關係,可以在底下步驟中把rsync權限改為開通給特定人士)
    2. 開通特定帳號rsync權限
    3. 在client進行檔案上傳
    作法

    ======  server (synology nas) 設定部分 =======

    • 開啟公用帳號。這邊是要避免自己在NAS上的帳號密碼在遠端server上暴露。所以設定一個帳號。這帳號記得把權限都縮到最小,避免出意外的時候災情慘重。

    • 打開rsync的權限。先進入到NAS當中:
    控制台 > 檔案服務 > rsync


    把"啟用rsync"跟"啟用rsync帳號"打勾。

    • 設定rsync帳號
    "編輯rsync帳號" > "新增"

    把剛剛設定的公用帳號設定進去。這邊比較奇怪的地方是這邊選項應該是可以設定額外密碼的。但我設定完以後都沒辦法用這密碼進行rsync,只能用這帳號登入DSM的密碼才能正常運作。所以這邊密碼就不是太重要,有設定就好。

    以上NAS端就設定完畢。後面進行client設定


    ======  client 設定部分 =======


    client設定是使用普通電腦,上面跑的作業系統會比synology OS有彈性些。synology的NAS不是使用daemon進行rsync服務,所以把密碼放在環境變數中(export RSYNC_PASSWORD)或是使用檔案(--password-file=rsync_pass)儲存都無法成功。

    變通方式是採用"sshpass"指令達成。
    這個指令的原理大概就是會搜尋互動(prompt)的文字中有出現password的pattern,然後就直接把密碼輸入進去。狀況類似expect指令,但比expect專業一些。原本是用於ssh的互動部分,看來rsync也可以支援。
    以下設定是公用帳號為rsync.cd,密碼是********。上傳的檔案檔名是zero,要放到NAS_IP的/volume1/p 資料夾底下。

    • 方式1. 把密碼直接給到指令當中
    sshpass -p "********" rsync -vh zero rsync.cd@NAS_IP:/volume1/p/


    • 方式2. 把密碼放在檔案中(這邊檔名範例是passwrod.txt當中放入密碼)
    sshpass -f passwrod.txt rsync -vh zero rsync.cd@NAS_IP:/volume1/p/



    方式1跟方式2的差異在於後續推到git上需不需把密碼放到程式碼中。方式1會連同密碼一起推上去。方式2則可以透過Ansible等佈署工具做第二段設定。





    iscsi 連線問題筆記

    如果要進行umount但是出現target buzy sudo fuser -km 掛載點 sudo umount 掛載點 iSCSI重啟 sudo open-iscsi restart  掛載lun iscsiadm -m discovery -t sendtargets -p...