2023年12月15日 星期五

VS code 搭配 語言模型

 使用情境

1. VS code + Llama coder

2. windows 11

安裝方式

1. 開啟VS code,到market搜尋Llama coder,並且安裝完畢。

Llama coder github: https://github.com/ex3ndr/llama-coder


2. Windows就需要安裝docker。安裝完畢後將docker啟動,並輸入以下指令來啟動ollama。

docker run -d --gpus=all -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama


ollama專案也是蠻有趣的,

官網: https://ollama.ai/

ollama github: https://github.com/jmorganca/ollama

ollama docker site: https://hub.docker.com/r/ollama/ollama (啟動ollama的方式在docker網頁比較多)


3. 重新開啟VS coder以後,底下應該有個圖示:


4. 使用VS code打開一個檔案。這時候Llama coder就會自動下載模型。如果想要更動模型或是有指定其他遠端的ollama機器也可以到Llma coder的設定區進行修改:







如果想看狀態,可以到vs code最底下的命令列,調閱"輸出"的tab,然後把窗格訂在Llama coder的位置上:



接下來每次寫code的時候,底下的Llama Coder應該都會一直轉,表示正在生成code。

理論上這個視窗不需要一直開著。整體看來,code的生成速度還是沒有whisper快速。




References:
https://github.com/ex3ndr/llama-coder/issues/3



2023年11月30日 星期四

太新的ubuntu無法安裝docker

 症狀

透過官方安裝的文件安裝docker之後,進行apt-get install docker-ce出現以下錯誤訊息:


markliou@ct-mulan:~$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-com  pose-plugin

Reading package lists... Done

Building dependency tree... Done

Reading state information... Done

Package docker-ce is not available, but is referred to by another package.

This may mean that the package is missing, has been obsoleted, or

is only available from another source


E: Package 'docker-ce' has no installation candidate

E: Unable to locate package docker-ce-cli

E: Unable to locate package containerd.io

E: Couldn't find any package by glob 'containerd.io'

E: Couldn't find any package by regex 'containerd.io'

E: Unable to locate package docker-buildx-plugin

E: Unable to locate package docker-compose-plugin


部分文章指出這是因為ubuntu版本太新,docker來不及製作該目錄。
但實際測試發現有些機器可以安裝,有些機器不可以。
目前看到推測是會有不明原因,某些機器透過官方給定的repo就會給定錯誤的網址(參閱解決辦法2)。


解決辦法1.

就不要透過apt-get安裝,改用snap:

sudo snap install docker


解決辦法2.

修改 /etc/apt/sources.list.d/docker.list

deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu   mantic stable

#deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian   mantic stable


把原本沒辦法用的url註解,換成上面可以用的url。



references:

https://forums.docker.com/t/cant-install-docker-on-ubuntu-20-04/93058

2023年11月28日 星期二

Gitlab error: WARNING: Appending trace to coordinator... failed code=500 job=XXXX

 徵兆:

1. CI/CD runner 無法連線

2. issue區域,無法正常上傳圖片


說明:

應該是因為gitlab的網頁引擎nginx在權限出現問題。進入runner看log是報出:

WARNING: Appending trace to coordinator... failed   code=500 job=xxxx ......

這邊讓gitlab自行重建該資料夾比較快


方法步驟:

解決辦法主要假設是透過container架起服務。

1. 進入到container中(docker exec -it xxx bash),中止服務。

gitlab-ctl stop    

2. 備份nginx資料夾,這邊建議改為"nginx-old"。位置在:

root@gitlab-gitlab-ce-1:/var/opt/gitlab# mv nginx nginx-old    

3. 重構一次gitlab,之後再重新啟用gitlab

gitlab-ctl reconfigure

gitlab-ctl start     



references:

https://gitlab.com/gitlab-org/gitlab-runner/-/issues/29395

https://gitlab.com/gitlab-org/gitlab/-/issues/428329



2023年10月6日 星期五

使用sacred 與 dvc 進行機器學習模型管理

 使用情境

  1. 需要跑多次實驗,管理不同hyper parameters。包括神經網路拓譜(透過git搭配branch)
  2. 透過GitOps來Triger運算。
  3. 比較不同版本模型的performance。涉及到不同branch進行triger,因此只能透過遠端資料庫把結果算完後往遠端資料庫推送。
  4. DVC具備了基本的模型管理,但是如果同時triger不同的branch到不同的computing node上,會造成不同node計算結果無法同時呈現。這邊只能仰賴多架構一個外部管理系統,來蒐集不同節點上的運算結果。這邊就依賴sacred。
預計會有多台運算節點。每次在進行模型管理時,如果有修改神經網路架構,就會透過使用不同branch進行管理。因此架構會比較類似:


  1. 使用者把code推到git上,觸發了CI流程。
  2. runner開始執行git上的模型訓練程式碼。
  3. runner一邊跑一邊把模型結果往sacred database上推送。
  4. 所有結果透過omniboard呈現。
這種狀態的使用情境說得更清楚一些,就是如果今天有一個GitOps都透過Git進行模型和數據管理。在不同的實驗下可以透過Git的branch來設定不同的模型架構或是訓練參數。但很多時候會開很多個分支,並透過CI流程同時訓練這些不同的分支,這時候就需要有一個Server來接受不同機器回傳的結果。(儘管DVC已經說明有內部的實驗管理,且聲稱無須架構其他Server,但做法比較類似先把迴圈在分支中寫好,然後在同一分支中一個一個進行實驗再進行記錄。跨分支管理實驗比較難以實現)


就需要針對幾個主題進行筆記:
  • 遠端的sacred database架設與如何透過omniboard進行資料調閱
  • 程式碼中如何進行資料推送
  • DVC (data version control) 使用

DVC使用基礎

這邊集中在如何使用Webdav進行DVC管理。DVC還支援頗多的檔案伺服器傳輸協定,可以回頭參考說明文件。這邊跳過dvc安裝步驟。

1. 把專案加入dvc

在專案資料夾底下下達:

dvc init

整個專案就會進入dvc管理的狀態。

2. 指定dvc storage

dvc支援一些檔案傳遞協定,包括s3、ssh、scp等等。可以參閱官網的說明。目前很多NAS都有提供webdav服務,這邊就用webdav作為範例。記得把Server上面的webdav先打開。

dvc remote add <該位點的暱稱> wedav://<帳號>@<ip>:<port>/<資料夾>

除了webdav之外,也支援webdavs服務,如果有SSL憑證的使用者可以把webdav改為webdavs。帳號部分就是使用nas上面的帳號。這些資訊都會放到 .dvc 底下的config中。也就是會一起推到git server上。用這種方式大概也需要透過密碼詢問,因此讓dvc在上下載資料的時候進行密碼詢問:

dvc remote modify <該位點的暱稱> ask_password true

如果有 1)自動輸入密碼 跟 2)不想讓人看到自己在nas上面的帳號,dvc也允許使用者把帳號密碼透過放在本地端處理。這邊如果要進行DevOps就要記得在secrets裡面進行設定,這邊先略過不提。

dvc remote modify --local <該位點的暱稱> password <密碼>
dvc remote modify --local <該位點的暱稱> user <帳號>  #有這行,上面的webdav網址就不用使用@指定帳號

這邊會建立一些local的檔案,並且修改某些gitignore。因此記得git commit 一下

存放Dataset的位置可以不只一個。當有增加不同Dataset位置時,可用上面的指令加入。不過也設定default repo。

dvc remote default <該位點的暱稱>   (如果忘記有哪些remote,可以先用 dvc list 把目前設定的位點列出來)

如果出現錯誤訊息: WARNING: No file hash info found for ...............................
就先回頭Check一下是不是帳號跟名稱沒有給定。

3. 特定資料夾加入dvc

dvc add <資料夾名稱>

這指令會自動增加.gitignore檔案,並且把這些資料夾加入gitignore。背後的涵義就是這些資料都不會透過git管理。所以後續記得把gitignore進行git commit。


4. 把資料加入後,確定資料是否有被追蹤到

dvc status


5. 如果資料有更動,且dvc status有追蹤到,就能把資料進行commit並把資料上傳

dvc commit
dvc push


6. 下載資料

dvc pull

Sacred database 架設

sacred有許多不同格式。官方推薦MongoDB,經過不同方式的文件描述,看起來也是透過MongoDB架設的狀況下,如果同時進行多個實驗彼此之間結果比較不會互相干擾。因此後面就透過docker進行MongoDB架設和可視化。

訓練程式碼範例



references

  • https://www.runoob.com/mongodb/mongodb-tutorial.html 菜鳥教程



2023年5月19日 星期五

啟動一個docker container時,希望可以預先載入特定服務


建構Container時,我們只能把特定檔案放入。如果是普通機器進行開機時,會進入到run level管理階段。如果我們希望可以在特定階段啟動哪些服務(例如網頁服務)就可以在run level管理中放入script讓機器去執行。

但container並沒有Run level的開機程序,因此要把某些特定的服務叫起來,光是把Scrip放在那邊也無法被trigger。這邊可以透過 supervisor  這工具進行類型工作的處理。

詳細可參考鄭大的: https://philipzheng.gitbook.io/docker_practice/cases/supervisor

resolv.conf is linked file and cann't be edited

這問題比較容易出現在 ubuntu 進行 do-release-upgrade 以後。

具體症狀就是升級完畢後使用apt-update 結果所有的repo都回應IGN。原因就是DNS設定全部都跑掉了。

結果回去編輯 /etc/resolv.conf 系統也回應說這檔案為連結檔(linked file)因此不給編輯。

這時候非常簡單,直接把目前這個resolv.conf 刪除掉,重新建立就可以編輯了。把新建的檔案內容修改為:

nameserver 8.8.8.8


就能正常運作。

2023年5月16日 星期二

在ubuntu使用do-release-upgrade 結果終端機斷線

 do-release-upgrade有自動幫忙開screen (前提是主機上就要先裝上screen,如果沒裝可能就錯賽了)

在使用

sudo screen -D -r


就能回到之前中斷狀態

2023年4月1日 星期六

同步不同電腦上vs code的remote host資訊

 情境

在不同的電腦上安裝VS code,會需要連到遠端同一台server上進行程式開發。不過在vscode中,遠端機器的設定(如IP、帳號等等)並不會跟著VS code的同步功能一起同步。


解決邏輯

透過共用硬碟(如synology drive、one drive、google drive、raidrive、syncthing)在特定資料夾中放入vs code remote的設定檔。然後把vs code的設定部分指向到該檔案上。


步驟

在雲端硬碟上建立一個空白檔案。把這名稱訂為"vscode_remote_config"。名稱有測試過了,應該不會有影響,就取一個喜歡的名字即可。


開啟vs code以後,找到remote圖示:


叫出選單後,找到ssh地方,點下齒輪圖示:

右邊選單跳出後,找到remote ssh config:


把設定檔位置填入後,千萬要記得一件事情,就是這個遠端掛載的硬碟可能會在不同地方因為電腦掛載位置不同,所以不能同步。否則另外一台電腦吃到這個路徑有可能就報錯。

所以記得把這欄位的同步關掉: (這步非常非常非常重要)

就是到左邊那個齒輪上,把"不同步此設定"點開,這時候就會看到原本的欄位變成"同步此設定",而欄位的旁邊也是顯示"未同步"。







2023年2月3日 星期五

自架docker registry及基礎用法

 使用情境

  • 內部進行CI/CD使用。主要透過Self-host Gitlab runner進行pipeline
  • 全部在內網進行,沒有常規的SSL可供使用
  • 透過Docker進行架設
  • 已經有內部的DNS可供使用
架設的理由是有些container還是必須寫入一些比較具有開發機密性的內容,而這些內容有些無法避免,有些則是不小心放進去。如果有內部的registry就能比較放心一些。Gitlab的registry主要是透過專案進行管理,有部分的跨專案的使用會稍微不方便。

直接使用docker進行registry架設

registry預設會把推上去的image放在映像檔中  /var/lib/registry ,希望這個位置可以在Server上的/registryt。另外使用到http的話,在節點是專一的狀況下可以直接把server上80 port給占掉,但registry是用5000 port:

sudo docker run -d -v /registry:/var/lib/registry --restart=always -p 443:5000 registry:2

這邊使用的是version 2的registry,因此後面使用的RESTful API也要使用到v2的。

無SSL狀況下使用該registry

預設的docker在推拉image時,會檢查SSL。但是目前在內網無法針對該節點進行SSL認證。因此需要把內部的節點都設定為可以對該registry進行推拉。

修改: /etc/docker/daemon.json (假設沒有這檔案就自行創建。因為這檔案只有在有設定時才會有,而一開始安裝都假設使用者沒有任何設定。)

在檔案中加入:

{
  "insecure-registries" : ["http://myregistrydomain.com"]
}

因為設定是80 port,所以後面不用加上port號碼。如果是用預設的5000,就是要用 http://myregistrydomain.com:5000 。網址跟網址之間可以透過逗號隔開。

後面記得再重啟docker:

sudo service docker restart


查詢registry狀況

預設的docker registry有RESTFul API可以使用,如果有需要可以透過curl來達成。例如要看到目前registry中的image:

curl http://192.168.71.204/v2/_catalog



references
  • https://philipzheng.gitbook.io/docker_practice/repository/local_repo
  • https://docs.docker.com/registry/insecure/
  • https://docs.docker.com/registry/spec/api/
  • https://ithelp.ithome.com.tw/articles/10191285











在ubuntu上建構LVM

 使用情境

  1. ubuntu 22.04 (系統在sdb上)
  2. 已經有固有系統,後續有幾顆空白小硬碟要合併成一個LVM磁區

LVM原則

  • 硬碟的區域組成實體volume,稱呼為physical volume (PV)
  • 幾個PV要拚成一個大的虛擬硬碟,稱為volume group(VG)
  • 虛擬硬碟VG上面可以製作成幾個我們需要的分割區,稱呼為logical volume(LV)

因此步驟就是 :
  1. 建構PV
  2. 把幾個PV拚成一個VG
  3. 在VG上面切割LV

建構步驟

確定硬碟狀況,並且將硬碟切成physical volume: 這邊建議使用parted替代fdisk。

sudo parted -l #列出目前有的分割區和硬碟

sudo parted /dev/sdc #假設目前需要處理的是sdc這顆硬碟

GNU Parted 3.4
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)


開始進行切割

(parted) mkpart #目前切割的硬碟大小是1T

(parted) mkpart
Partition name?  []? 1
File system type?  [ext2]? ext4
Start? 0
End? 1000G
Warning: The resulting partition is not properly aligned for best performance: 34s % 2048s != 0s
Ignore/Cancel? Ignore


透過print確認狀態

(parted) print
Model: ATA WDC WD10JFCX-68N (scsi)
Disk /dev/sdc: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  1000GB  1000GB  ext4         1

打開LVM系統並且確認狀態

(parted) set 1 lvm on
(parted) print
Model: ATA WDC WD10JFCX-68N (scsi)
Disk /dev/sdc: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      17.4kB  1000GB  1000GB               1     lvm

(parted) q


製作PV

sudo pvcreate /dev/sdc1

如果後面有幾顆硬碟就依照上面的狀況,全部都弄成PV。

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...