###### tags: `reinstall` `tutorials` `linux` `ubuntu`
# Re-install flow
```graphviz
digraph reinstall_recommend_flow {
node [shape=box]
Network[href="/@jimmy801/network_setting", target="_blank", label="Network setting"]
OS [href="/@jimmy801/ubuntu_update", target="_blank", style="dashed", label="Upgrade OS\n(if necessary)"]
disk [href="/@jimmy801/linux_mount", target="_blank", label="mount disks"]
sf_link [href="/@jimmy801/soft_link", target="_blank", style="dashed", label="soft link"]
nv [href="/@jimmy801/nv_driver", target="_blank", label=<nvidia driver<br></br><font color="red">(need to reboot)</font>>]
igd [href="/@jimmy801/igd_display", target="_blank", style="dashed", label=<Desktop use intergrated graph card<br></br><font color="red">(need to reboot)</font>>]
docker [href="/@jimmy801/docker_install", target="_blank", label="docker"]
docker_compose [href="/@jimmy801/docker_compose_install", target="_blank", style="dashed", label="docker-compose"]
SSH [href="/@jimmy801/SSH", target="_blank", label="SSH"]
packages [href="/@jimmy801/linux_packages", target="_blank", label="packages"]
samba [href="/@jimmy801/samba_setting", target="_blank", label="samba"]
bashrc [href="/@jimmy801/bashrc", target="_blank", label="~/.bashrc"]
not_update [href="/@jimmy801/disbale_ubuntu_update", target="_blank", style="dashed", label=<Disable update packages and kernel>]
Network->OS
OS->SSH
SSH->bashrc
SSH->packages
SSH->disk
disk->sf_link [style="dashed", label="if necessary"]
SSH->nv
nv->docker
docker->docker_compose
nv->igd [style="dashed", label="if necessary"]
SSH->samba
SSH->not_update
}
```
:::success
- 其中安裝完 `nvidia driver` 和設定 `Desktop use intergrated graph card` 後會需要重啟電腦,***或許可以等所有套件都裝完後再一起重啟***
- 要看更多相關資訊請點上面流程圖中的 block 來看更多相關資訊
:::
:::spoiler super lazy mode
- 設定網路
```bash= !
$ y=($(ls /etc/netplan/*.yaml)) && n=$(ls /sys/class/net | grep '^eth'); n=${n:-$(ls /sys/class/net | grep 'en')}; sudo sh -c "echo \" ethernets:\n ${n}:\n addresses: [XXX.XXX.XX.YYY/24]\n gateway4: XXX.XXX.XX.ZZZ\n nameservers:\n addresses: [8.8.8.8]\" >> ${y[0]}" && sudo netplan apply
```
> - addresses: `XXX.XXX.XX.YYY` 要自行修改為指定 ip
> - addresses 中的 `24` 是因為 netmask(這裡是設定為 `255.255.255.0`) 所以是 $8\times3+0=24$
> - getway4: `XXX.XXX.XX.ZZZ` 要自行設為指定的 gateway(或是稱為 route)
> - 可以直接在這行末加上 `&&` 後並接續下行
- 安裝 `SSH`
```bash=+ !
$ sudo apt-get update && sudo apt-get -y install ssh && sudo sed -i 's/^#Port 22/Port XXXX/' /etc/ssh/sshd_config && sudo sh -c "echo \"sshd: YYY.YYY.YYY.YYY/ZZZ.ZZZ.ZZZ.ZZZ :allow\" >> /etc/hosts.allow" && sudo sh -c "echo \"sshd:ALL :Deny\" >> /etc/hosts.deny" && sudo /etc/init.d/ssh restart
```
> - `Port XXXX` 的 `XXXX` 部分要改為自己要設定的 port
> - `sshd: YYY.YYY.YYY.YYY/ZZZ.ZZZ.ZZZ.ZZZ :allow` 的 `YYY.YYY.YYY.YYY`、`ZZZ.ZZZ.ZZZ.ZZZ` 要改為自己設定允許連進的網域,並透過接下來寫的 `/etc/hosts.deny` 來封鎖其他所有網域連線
> - 安裝完後可以使用 `SSH` 遠端完成剩餘安裝作業
> - 也可以直接在這行末加上 `&&` 後並接續下行
```bash=+ !
$ sudo apt-get update && sudo apt-get -y install cmake wget curl git vim software-properties-common samba lm-sensors && cp ~/.bashrc ~/.bashrc_bk && sed -i '0,/PS1.*/ s/PS1.*/'"\PS1=\'\$\{debian_chroot:\+\(\$debian_chroot\)\}\\\[\\\033\[01;36m\\\]\\\u\\\[\\\033\[00;33m\\\]@\\\[\\\033\[01;31m\\\]\\\h\\\[\\\033\[00m\\\]:\\\[\\\033\[01;34m\\\]\\\w\\\[\\\033\[00m\\\]$ \'"'/' ~/.bashrc && sed -i 's/^#force_color_prompt=yes/force_color_prompt=yes/' ~/.bashrc && echo -e "alias nv='nvidia-smi'\nalias wnv='watch -n 1 nvidia-smi'\nalias wwnv='watch -n 0.1 nvidia-smi'\nwuu='watch -n 1 \"sensors && nvidia-smi\"'\nalias wwuu='watch -n 0.1 \"sensors && nvidia-smi\"'" >> ~/.bash_aliases && source ~/.bashrc && sudo add-apt-repository -y ppa:graphics-drivers/ppa && sudo apt update && sudo ubuntu-drivers autoinstall ; sudo apt-get -y remove docker docker-engine docker.io ; sudo apt-get -y update && sudo apt-get install -y apt-transport-https ca-certificates && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - && sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" && sudo apt-get -y update && docker_version=$(apt-cache madison docker-ce | grep -m1 "ubuntu") && docker_version=${docker_version#*|} && docker_version=${docker_version%|*} && docker_version=${docker_version//+([[:space:]])/} && sudo apt-get -y install docker-ce=$docker_version && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - && distribution=$(. /etc/os-release;echo $ID$VERSION_ID) && curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list && sudo apt-get -y update && sudo apt-get -y install nvidia-container-toolkit && sudo groupadd docker ; sudo usermod -aG docker $USER ; v=$(curl -s https://github.com/docker/compose/releases/latest) && v=${v#*href} && v=${v#*\"} && v=${v%\"*} && v=${v##*/} && sudo curl -L "https://github.com/docker/compose/releases/download/${v}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && sudo chmod +x /usr/local/bin/docker-compose && sudo ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
```
<div class="alert alert-warning">
<ul>
<li>設定網路部分需將 <code>XXX</code> 改為要設定的 ip</li>
<li>
執行完以上指令後,仍須自己
<ul>
<li><a href="/@jimmy801/linux_mount", target="_blank">分割硬碟</a></li>
<li><a href="/@jimmy801/soft_link", target="_blank">建立軟連結</a></li>
<li><a href="/@jimmy801/igd_display", target="_blank">設定桌面 GUI (如果要用內顯執行才需修改,建議 reboot 完再修改)</a></li>
<li><a href="/@jimmy801/samba_setting#編輯-samba-連線路徑", target="_blank">設定 Samba (以上指令已經有包含安裝 Samba)</a></li>
</ul>
因為這些設定上比較沒固定
</li>
</ul>
</div>
<div class="alert alert-info">
<ul>
<li>此指令沒有對 ubuntu 版本做更動</li>
<li>此指令安裝的是自動安裝版本的 <code>nvidia-smi</code></li>
<li>此指令安裝的是最新版 Docker</li>
<li>要看更多相關資訊請點上面流程圖中的 block 來看更多相關資訊</li>
</ul>
</div>
- 等所有東西都設定安裝完畢後再重啟電腦和 `docker`
```bash=+ !
$ sudo reboot
$ sudo systemctl restart docker
```
:::
- 等所有東西都設定安裝完畢後或許要禁止 ubuntu 自動更新 kernel
```bash=+ !
$ sudo apt-mark hold $(uname -r)
```
- 等所有東西都設定安裝完畢後或許要禁止 ubuntu 自動更新套件
```bash=+ !
$ sudo systemctl disable --now apt-daily{,-upgrade}.{timer,service} && sudo sed -i 's/APT::Periodic::Update-Package-Lists "1"/APT::Periodic::Update-Package-Lists "0"/' /etc/apt/apt.conf.d/20auto-upgrades
```