wsl安裝筆記 === 參考: https://ithelp.ithome.com.tw/articles/10310188 如何啟用windows WSL https://ithelp.ithome.com.tw/articles/10255920 ## 安裝wsl ubuntu ``` wsl -l -v # 查詢自己已經安裝過的linux wsl -l -o # 查詢線上有哪些linux可以安裝 wsl --install -d Ubuntu #安裝Ubuntu wsl --set-default-version 2 # 讓目前處於wsl2的環境,通常用於要安裝linux前設定為安裝wsl2的版本 wsl --unregister Ubuntu # 讓你想要解除安裝某linux環境的指令,做完後還是要到開始頁面把環境給解除安裝 ``` ## 在wls中安裝docker 安裝docker遇到的坑(無法直接安裝) ### 更換Systemd 現在很多Linux套件都需要systemd來管理跟啟動服務. 由於WSL2是Windows下的一個VM, 所以微軟實作了一個init (PID 1) 來做到快速啓動WSL VM以及作為與windows 溝通的橋樑. 可以執行systemctl確認是否有systemd 參考作法https://ithelp.ithome.com.tw/articles/10255920(會遇到問題先別急著裝) ### 記得先看這個 https://blog.csdn.net/yellow_hill/article/details/128526709 [WSL]配置systemD 和解决nsenter: cannot open /proc/320/ns/time: No such file or directory 的问题 ### docker 安裝指令參考 https://blog.kennycoder.io/2020/01/12/Docker-%E4%BB%8B%E7%B4%B9%E5%8F%8A%E5%AE%89%E8%A3%9D%E6%95%99%E5%AD%B8/ ## 不登入使用者執行docker的方法 參考: https://viml.nchc.org.tw/archive_blog_771/ #### 進到wsl(ubuntu)環境設定允許不需要密碼的sudo username ALL=(ALL) NOPASSWD:ALL #### 設定工作排程器自動執行 接下來,則是可以在 Windows 的工作排程器中,加入一個隨著電腦啟動而執行的工作、來自動執行 WSL 內的 docker daemon。 「工作排程器」可以在開始選單的「Windows 系統管理工具」內找到,也可以用搜尋的方式來執行。 這邊是直接在「工作排程器程式庫」中,點選右方的「建立工作」,然後給他一個名字。 ![image](https://hackmd.io/_uploads/HJhMbHb0a.png) Heresy 這邊是把它叫做「WSL-Docker」,然後記得要選取「不論使用者登入與否均執行」。 然後要修改的地方還有「觸發程序」和「動作」兩項。 在「觸發程序」中,是加入一個「啟動時」的觸發程序,個人是習慣會勾選「延遲工作的時間」,讓他在開機後一小段時間後再執行。 ![image](https://hackmd.io/_uploads/rkhXbBbCp.png) 在「動作」的部分,則是設定成「啟動程式」。 ![image](https://hackmd.io/_uploads/rJ54WSbCT.png) 然後在「程式或指令碼」這邊,輸入「c:windowssystem32wsl.exe」,在「新增引數(可省略)」這邊,則是輸入「sudo dockerd」。 新增完成後,可以選取他後,手動執行看看是否可以正確地維持在「執行中」的狀態;如果可以的話,則可以在打開 WSL 試試看 docker 是否可以正確執行。 如果都沒問題的話,那以後重開機後,就算使用者沒有登入,WSL2 內的 Docker daemon 都會自動跑起來了~ #### 實驗測試 建立一個container並且每十件秒寫入log ```shell docker run -d --name logtest --restart=always -v ./log:/app python:3.8 /bin/sh -c "while true; do python3 /app/test.py ; sleep 10; done" ``` #### python code ```python= import logging # Creating and Configuring Logger Log_Format = "%(levelname)s %(asctime)s - %(message)s" logging.basicConfig( filename="/app/log/logfile.log", format=Log_Format, level=logging.ERROR ) logger = logging.getLogger() logger.error("Test Log Message") ``` ### 2024/3/21 如何在局域网的其他主机上中访问本机的WSL2 參考: https://zhuanlan.zhihu.com/p/425312804