# 實驗室交接 ### MailServer 管理 先登入 [NAS](https://nckuvisionlab.myqnapcloud.com/cgi-bin/) 找到 data > 歷屆資料備份 > 郭振鵬 > 其他備份 > 助教 > routine > 實驗室系上信箱.txt ![](https://i.imgur.com/u7uJpiq.jpg) 打開後第一行是帳號、第二行是密碼(**密碼從左括號開始複製到斷行符號前面**) 接著登入 **實驗室zimbra** [mailserver](https://web.csie.ncku.edu.tw/),如資工系辦公告所示已於 2022 採用目前新的郵件系統[link](https://www.csie.ncku.edu.tw/zh-hant/news/12252) 前往喜好設定把新進學弟妹的信箱加入實驗室轉發名單。 ![](https://i.imgur.com/bHcvGK1.jpg) ### 凱予學長 Server 開啟 MobaXterm ,Sessions 是 140.116.247.102 id : p76094266 password : ******** 大部分的東西都在 /home/p76094266/PoseFormer/ 路徑底下,demo 跟 inference 都已經透過 .sh 寫好。 至於筆電 window 的 demo 則是放在 /Reconstruction UI 這裡,先打開 demo.bash 選資料集預測。 接著透過 UI.bash 來視覺化預測結果(資料夾 result_ 是事先做好的 , result 下則是剛剛用 demo 預測的) ### 新 server 建立: 細節步驟可以參考 [學長 notion 筆記](https://greenwu.notion.site/Copy-of-Server-setup-475b1d3177084ed787e37d3bd19b968b) 來一步步建立 server 。 記得使用 Linux 為 **20.04** 那個隨身碟或是自備。 步驟: 1. **install nvidia-driver** :::spoiler 流程 ``` $ sudo add-apt-repository ppa:graphics-drivers/ppa <- Automatic Install Nvidia drivers on Ubuntu 20.04 using PPA repository (Using graphics-drivers PPA repository allows us to install bleeding edge Nvidia beta drivers at the risk of an unstable system. To proceed first add the ppa:graphics-drivers/ppa repository into your system) $ sudo apt-get update <- upgrade system $ sudo apt-get upgrade $ ubuntu-drivers devices ******************************************************* <- 輸出 log 可能如下 # == /sys/devices/pci0000:00/0000:00:01.1/0000:02:00.0 == # modalias : pci:v000010DEd00001E07sv00001458sd000037BDbc03sc00i00 # vendor : NVIDIA Corporation # model : TU102 [GeForce RTX 2080 Ti Rev. A] # manual_install: True # driver : nvidia-driver-440 - distro non-free recommended <- 通常會選 recommended 的 # driver : nvidia-driver-418-server - distro non-free # driver : nvidia-driver-440-server - distro non-free # driver : nvidia-driver-435 - distro non-free # driver : xserver-xorg-video-nouveau - distro free builtin ``` 接著: ``` $ sudo ubuntu-drivers autoinstall <- 或是根據 recommended版本 $sudo apt install nvidia-driver-440 $ sudo reboot ``` :::info 關於第一行指令的 PPA 是甚麼? Ubuntu Linux 系統下的軟體都是以 apt 的方式來管理的,一般來說絕大部分的套件都來自於 Ubuntu 官方的套件庫,而如果我們需要的套件沒有被官方的套件庫收錄,或是官方收錄的套件版本過舊,就可能會採用 PPA 個人套件庫的套件。 PPA 是 Personal Package Archive 的縮寫,軟體開發者將原始碼上傳至 Launchpad 後,透過其線上編譯服務,產生預先編譯好的套件,提供使用者使用。由於 PPA 是屬於非官方的套件庫,所以通常軟體版本比較新,但穩定性也較差。 當然除了用 PPA ,[安裝說明文章](https://linuxconfig.org/how-to-install-the-nvidia-drivers-on-ubuntu-20-04-focal-fossa-linux)還可以使用其他方式來安裝 Nvidia 驅動 [參考文章](https://blog.gtwang.org/linux/ubuntu-linux-add-and-remove-ppa-command-tutorial/) ::: ___ 2. **install CUDA** ``` sudo apt install nvidia-cuda-toolkit ``` 然後檢查一下: ``` nvcc --version ``` ___ 3. **install ssh and activate** :::spoiler 安裝 ssh 流程 ``` $ sudo apt install ssh $ sudo nano /etc/ssh/sshd_config <- Modify /etc/ssh/sshd_config ********************************** <-In sshd_config ... # Port [custom_port(1025~)] <-改port # LoginGraceTime 2m -- login period MaxAuthTries 3 <- 改試錯幾次 ... *********************************** $ sudo ufw allow [custom_port]/tcp <- 防火牆允許哪個 port 通過 tcp 接收封包 $ sudo systemctl enable --now ssh $ systemctl status ssh ``` 比如當我們修改完 ssh 的 config /etc/ssh/sshd_config 的 port 之後, ex: ``` Port 2023 ``` 就需要透過 restart 來使 ssh 改變 port(default 是 22) ``` $ sudo service ssh restart ``` 可參考[教學文章](https://www.hostinger.com/tutorials/how-to-change-ssh-port-vps)了解更多 sshd_config 的設定,當然也可以**從實驗室現有運行主機上 copy 下來直接複製貼上 config 省事**。 然後記得把密碼加密 ``` # /etc/sssd/sssd.conf ldap_default_authtok_type = password ldap_default_authtok = $ThisIsMyPassword$ <- 不用填入 # bash $ sudo apt-get install sssd-tools $ sudo sss_obfuscate -d default <- Domain selected from sssd.conf # Enter password = $ThisIsMyPassword$ <- Console 會請你輸入密碼 # Enter again = $ThisIsMyPassword$ ``` 然後重新回 sssd.conf 的 ldap_default_authtok 欄位看, 它就會變成亂碼了。 ::: ___ 4. **link to LDAP server (through SSSD)** ``` $ sudo apt install sssd libpam-sss libnss-sss ``` 接著修改 config ,一樣建議可以從連好的主機 copy 一份一樣的過來(因為這份文件是沒有 default 的,第一次建立為空): ``` $ sudo vim /etc/sssd/sssd.conf ``` 接著取得驗證連上 LDAP: ``` openssl s_client -connect nckuvisionlab.myqnapcloud.com:389 -starttls ldap -showcerts < /dev/null | openssl x509 -text | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' ``` :::spoiler 錯誤可能如下 : 基本上這步比較容易產生問題,因為我們需要通過憑證來連上我們的ldap(our lab qnap data) : ``` vision@vision-System-Product-Name:~$ sudo openssl s_client -connect nckuvisionlab.myqnapcloud.com:389 -starttls ldap -showcerts < /dev/null | openssl x509 -text | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' depth=0 CN = nckuvisionlab.myqnapcloud.com verify error:num=20:unable to get local issuer certificate <-Error! verify return:1 depth=0 CN = nckuvisionlab.myqnapcloud.com verify error:num=21:unable to verify the first certificate <-Error! verify return:1 DONE -----BEGIN CERTIFICATE----- ... ... ... -----END CERTIFICATE----- ``` or ``` vision@vision-System-Product-Name:~$ openssl s_client -connect nckuvisionlab.myqnapcloud.com:389 -showcerts < /dev/null | openssl x509 -text | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' write:errno=0 unable to load certificate 140658395555136:error:0909006C:PEM routines:get_name:no start line:../crypto/pem/pem_lib.c:745:Expecting: TRUSTED CERTIFICATE ``` [error to get cerification](https://stackoverflow.com/questions/11548336/openssl-verify-return-code-20-unable-to-get-local-issuer-certificate) [憑證產生](https://blog.cssuen.tw/create-a-self-signed-certificate-using-openssl-240c7b0579d3) 成功的話,會出現 Verification: OK 並且 id 自己在QNAP的帳號會出現 uid ,因此當我們憑證失效的時候也是透過更新LDAP憑證來重新啟用 ``` vision@vision-System-Product-Name:~$ openssl s_client -showcerts -CAfile ~/cert.pem -connect nckuvisionlab.myqnapcloud.com:389 CONNECTED(00000003) write:errno=0 --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 0 bytes and written 321 bytes Verification: OK --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) --- vision@vision-System-Product-Name:~$ id P76****** uid=1000031(P76******) gid=1000000(Domain Users) groups=1000000(Domain Users),1000002(rtxs) ``` ::: --- ### Server 資訊與 SSL 更新 通常三個月要更新一次,當有使用者使用正確的帳號密碼無法登入後就要更新憑證。 先以 root 的帳號登入系統, 下指令查看 SSSD (System Security Services Daemon) 狀態: ``` $sudo systemctl status sssd ``` ![](https://i.imgur.com/Nval8II.png) 取得新的 ssh keys : ``` $sudo openssl s_client -connect nckuvisionlab.myqnapcloud.com:389 -starttls ldap -showcerts < /dev/null | openssl x509 -text | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' ``` 複製產生的 ssh key 後,去下面的檔案覆蓋舊的 ssh key : ``` $sudo nano /etc/ssl/certs/ldapcacert.crt ``` 最後重新啟動服務試試看: ``` $sudo systemctl restart sssd ``` ![](https://i.imgur.com/L9iTysC.png) ### LDAP 更新 1. Run System Update (基本有更新) 2. Configure SSSD for OpenLDAP Authentication on Ubuntu 20.04 (基本已經裝好) 3. cat /etc/sssd/sssd.conf ![](https://i.imgur.com/LuPuAxo.png) 範例應如下 ``` [sssd] services = nss, pam config_file_version = 2 domains = default [nss] [pam] offline_credentials_expiration = 60 [domain/default] ldap_id_use_start_tls = True cache_credentials = True ldap_search_base = dc=nckuvisionlab,dc=myqnapcloud,dc=com id_provider = ldap auth_provider = ldap chpass_provider = ldap access_provider = simple ldap_uri = ldap://nckuvisionlab.myqnapcloud.com:389 # ldap_uri = ldap://140.116.247.104 # ldap_uri = ldap://[2001:288:7001:271f:265e:beff:fe29:57da]:389 ldap_default_bind_dn = cn=admin,dc=nckuvisionlab,dc=myqnapcloud,dc=com ldap_default_authtok = $ThisIsMyPassword$ ldap_tls_reqcert = demand ldap_tls_cacert = /etc/ssl/certs/ldapcacert.crt ldap_tls_cacertdir = /etc/ssl/certs ldap_search_timeout = 50 ldap_network_timeout = 60 # ldap_access_order = filter # ldap_access_filter = (objectClass=posixAccount) # ldap_access_filter = (|(cn=ag)(uid=p76084295)) simple_allow_groups = rtxs default_shell = /bin/bash override_shell = /bin/bash sudo_provider = ldap autofs_provider = ldap ldap_default_authtok_type = obfuscated_password ``` 假如有部分地方打錯或誤打可能出現ParseError,要注意一下有發生過。 ![](https://i.imgur.com/D8VSoLj.png) ldap_default_authtok 很重要,我們會利用指令來產生加密過的文字: ``` $sudo apt-get install sssd-tools $sudo sss_obfuscate -d default # Domain selected from sssd.conf # Enter password = $ThisIsMyPassword$ ->這裡就是輸入LDAP密碼的地方 # Enter again = $ThisIsMyPassword$ -> 再輸入一次 ``` 4. Install OpenLDAP Server CA Certificate on Ubuntu 20.04 LDAP client (基本已驗證) 5. 重啟服務 ![](https://i.imgur.com/Ti9WpLF.png) 6. 驗證是否有吃到 NAS 資料 輸入 ldapsearch 指令 , 其中 uid 就是你的學號(在 NAS 上面的): ``` $ldapsearch -x -b "dc=nckuvisionlab,dc=myqnapcloud,dc=com" -H ldap://140.116.247.104 -D "cn=admin,dc=nckuvisionlab,dc=myqnapcloud,dc=com" -W '(|(cn=ag)(uid=p76084295))' ``` ![](https://i.imgur.com/ajd9erj.png) 以及 id 自己的 uid: ``` $id pXXXXXXXXXXX ``` 若為 no such user 代表未成功: ![](https://i.imgur.com/jKNx7fl.png) 這樣有顯示表示設定成功: ![](https://i.imgur.com/B6FQgzO.png) ### Dash 轉 Bash 由於使用 shell來撰寫腳本時使用bash會比較方便,因此應該將預設連結到的shell改成bash。 [教學](https://clay-atlas.com/blog/2020/07/08/linux-cn-note-sh-bash-dash-point/) ### 出現無法安裝或更新的狀況 [參考文章](https://ubuntuqa.com/zh-tw/article/1125.html) ![](https://i.imgur.com/zXlOHeP.png) ![](https://i.imgur.com/3Va2wNt.png) 若內部IP無問題則可能是DNS Nameserver 出狀況。 可以在 /etc/resolv.conf 設定 Nameserver 8.8.8.8 試試 更新,因為 /etc/resolv.conf 是 NetworkManager 的設定顯示檔,因此設定在重新開機之後還是會被重製。 [參考文章](https://serverfault.com/questions/810636/how-to-manage-dns-in-networkmanager-via-console-nmcli) 透過 ``` $ nmcli con ``` 找出 connectionName , 接著: ``` $ sudo nmcli con mod $connectionName ipv4.dns "8.8.8.8 1.1.1.1" ``` 最後重新啟動 NetworkManager: ``` $ sudo service NetworkManager restart ``` 再去查看 /etc/resolv.conf 是否有設置成功 ### 出現無法用 tab 自動補全命令的情況 設定新使用者時未對其指定 shell 路徑而是使用預設的 shell。 可於建立時指定或是建立後指定也可以 [參考文章](https://www.itread01.com/articles/1502359204.html) ### Mount Through CIFS 共享 Windows local 資料夾可以使用