# Ubuntu 安裝筆記
## X86
### 參考連結
[具體安裝](https://blog.jihongo.com/posts/2020/10/29/install-ubuntu-on-a-usb-drive/)
[set nomodeset](https://www.dell.com/support/kbdoc/zh-tw/000123893/%E6%89%8B%E5%8B%95-nomodeset-%E5%85%A7%E6%A0%B8%E9%96%8B%E6%A9%9F%E8%A1%8C%E9%81%B8%E9%A0%85-linux-%E5%95%9F%E5%8B%95)
[grub名詞](https://documentation.suse.com/zh-tw/sles/12-SP5/html/SLES-all/cha-grub2.html)
[各種名詞解釋(nomodeset, acpi...)](https://medium.com/caesars-study-review-on-web-development/acpi-osi-linux-nomodeset%E6%98%AF%E4%BB%80%E9%BA%BC%E6%84%8F%E6%80%9D-%E5%8A%9F%E8%83%BD-42d8e2c444c3)
[wsl vs virtualbox](https://medium.com/%E6%B5%A6%E5%B3%B6%E5%A4%AA%E9%83%8E%E7%9A%84%E6%B0%B4%E6%97%8F%E7%BC%B8/wsl-docker-virtual-box-on-hyper-v-ca77deebcf86)
[docker安裝](https://docs.docker.com/desktop/install/ubuntu/)
[docker-ce-cli](https://stackoverflow.com/questions/72299444/docker-desktop-doesnt-install-saying-docker-ce-cli-not-installable)
[docker打不開!](https://stackoverflow.com/questions/75907472/docker-desktop-does-not-launch-on-ubuntu-failed-to-start-docker-desktop-service)
### 推薦做的事!
#### build-essential
+ 安裝完後先使用以下指令讓它自動下載重要的組件,後續可以省掉很多工作!
```bash=
sudo apt-get install build-essential
```
#### conda 安裝
https://www.anaconda.com/docs/getting-started/miniconda/install#linux-terminal-installer
#### 雙系統時間問題
+ 如果跟我一樣使用雙系統的人可能會發現每次使用完ubuntu後,跳回windows時間總會跑掉,可以用以下的指令把ubuntu的時間調到跟windows一樣
+ 原因:其實是因為windows和ubuntu抓取時區跟設定時間的邏輯不一樣,導致他們兩個配合不了([參考](https://weirenxue.github.io/2021/06/17/ubuntu_windows_time/))
+ Windows:取得硬體時間 (BIOS 的時間) 直接為當地時間 (Local Time)。
+ Ubuntu:取得硬體時間 (BIOS 的時間) 並視之為 UTC+0,所以顯示出來的時間是硬體時間 +8 後的結果,也就是 Windows 的時間 +8。
```bash=
sudo apt-get install ntpdate # network time protocol date
sudo ntpdate time.windows.com # 從微軟公司的時間伺服器取得時間
```
<!-- #### homebrew
+ 習慣用mac的人(像我)可以下載homebrew在ubuntu裡面用
+ 先下載build tools!
```bash=
sudo apt-get install build-essential procps curl file git
```
+ 再來下載本體
```bash=
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
+ 最後把它加到path讓你可以正常的在terminal使用!
```bash=
test -d ~/.linuxbrew && eval "$(~/.linuxbrew/bin/brew shellenv)"
test -d /home/linuxbrew/.linuxbrew && eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
echo "eval \"\$($(brew --prefix)/bin/brew shellenv)\"" >> ~/.bashrc
```
+ 測試一下!
```bash=
brew install hello
```

-->
### 需要的可以用
#### 推薦要裝的東西
- imwheel
```bash=
# 滑鼠滾輪預設超慢,推薦調快。
".*"
None, Up, Button4, 3
None, Down, Button5, 3
Control_L, Up, Control_L|Button4
Control_L, Down, Control_L|Button5
Shift_L, Up, Shift_L|Button4
Shift_L, Down, Shift_L|Button5
#
```
- pavucontrol
```bash=
sudo apt install pavucontrol
```
#### docker安裝
+ 可以去[docker官方](https://docs.docker.com/desktop/install/ubuntu/)安裝,基本上就是下面這樣
+ 官方其實有說是這樣
+ SDN docker 安裝!
+ 
+ 先setup docker apt repository
```bash!
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
```
+ 然後再去做apt-get
```bash!
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
```
+ 測試安裝結果
```bash!
sudo docker run hello-world
sudo docker version
```
<!-- + 首先先下載檔案本人[deb](https://desktop.docker.com/linux/main/amd64/157355/docker-desktop-amd64.deb?utm_source=docker&utm_medium=webreferral&utm_campaign=docs-driven-download-linux-amd64&_gl=1*1uvn7x9*_gcl_au*MjI2MjM4MzY0LjE3MjExMTM3MTI.*_ga*MTM0MzgzNTk2NC4xNzIxMTEzNzEy*_ga_XJWPQMJYHQ*MTcyMTExMzcxMS4xLjEuMTcyMTExNDU5NS4yMi4wLjA.)
+ 因為ubuntu 24.04的支援問題,官方說要執行下面
```bash=
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
```
+ 接下來(記得底下那個docker-desktop那個要改成你正確的路徑!)
```bash=
sudo apt-get update
sudo apt-get install ./docker-desktop-<arch>.deb
```
+ 理論上執行接下來這行就會動了
```bash=
systemctl --user start docker-desktop
```
+ 接下來就是踩雷筆記了
+ 首先我執行上面的apt-get install時遇到
```bash=
docker-desktop : Depends: docker-ce-cli but it is not installable
```
+ 執行下面的指令
```bash=
sudo apt install -y ca-certificates curl gnupg lsb-release
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update -y
```
+ 再執行一次install
```bash=
sudo apt-get install ./docker-desktop-<arch>.deb
```
+ 跳下面這個錯誤可以不用理它
```bash=
Download is performed unsandboxed as root as file docker-desktop-
<version>-<arch>.deb couldn't be accessed by user '_apt'. -
pkgAcquire::Run (13: Permission denied)
```
+ 後來執行下面這個完全沒反應
```bash=
systemctl --user start docker-desktop
```
+ 可以用force-reload就解決了
```bash=
systemctl --user force-reload docker-desktop
```
+ 如果還是不行可以看看[這篇](https://stackoverflow.com/questions/75907472/docker-desktop-does-not-launch-on-ubuntu-failed-to-start-docker-desktop-service)
##### 解決需要使用sudo 才能跑docker指令
- 將當前的使用者新增到 Docker 群組: 使用以下命令將你的使用者名(通常是 $USER)新增到 Docker 群組
```bash=
sudo usermod -aG docker $USER
```
- 重啟
```bash=
sudo systemctl restart docker
```
- 可以重開機或者執行下面這段直接更新權限(但你關掉這個terminal就會不見,所以建議重開機直接解決)
```bash=
newgrp docker
```
- 執行這個會過沒有出現permission deny就代表對了
```bash=
docker ps
``` -->
#### python venv
+ 若你要用到python環境,可能會遇到不能直接pip install 的問題 -> 因為現在python怕你亂裝套件導致python環境出問題,所以要求你需要使用虛擬環境架設套件
+ 怎麼做?
+ 先安裝
```bash=
pip3 install virtualenv
```
+ 首先先創建venv環境
```bash=
python3 -m venv myenv #myenv可以改成你喜歡的名字
```
+ 將你的terminal使用該環境開啟,就可以在裡面正常的使用python!
```bash=
source myenv/bin/activate
```
+ 若你習慣使用code runner和vscode
+ 點開code runner的設定,並且在setting json裡面把python的設置改為在myenv/bin裡面的python檔
+ 另外你在vscode可能會看到他的lib出現波浪號
+ 在vscode按下ctrl(cmd) + shift + p
+ 輸入
```
Python: Select Interprete
```
+ 然後一樣貼上剛剛那個python檔路徑
## mac(arm)
- https://www.youtube.com/watch?v=nUhQy5PDj2A&t=594s
- 遠端連接
```bash=
ssh 使用者名稱@ip地址
```
- 理論上他會跳出以下內容,輸入yes(因為你是初次使用這個裝置用ssh連過去)
```bash=
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?
```
- "This key is not known by any other names." - 這代表SSH客戶端沒有之前記錄過這個遠端服務器的密鑰。因為這是你第一次連接到一個新的server。
- "Are you sure you want to continue connecting (yes/no/[fingerprint])?" - 這是一個安全確認。系統在確認你是否要繼續連接, 即使這個服務器的密鑰是未知的。
- 然後你就輸入那個系統的密碼,理論上你就可以進到他的terminal(命令行介面),然後可以輸入ls去確認是不是跟你那台遠端電腦輸出的是一樣的
```bash=
ls
```