该手册可用于对新系统进行快速配置。

基于不同的系统环境,会有不同的配置方法,下面列举了5种场景.

Windows

安装系统

当需要自己进行系统安装时,按如下步骤进行。

  1. 制作启动盘
    • 进入大白菜官网下载制盘工具,将得到Dabaicai.exe,启动它。

      我的存放于E:\app_tools\a00.关于装系统、分区、EFI启动项设置等\重装系统\DaBaiCai\Dabaicai.exe

    • 根据使用教程逐步制作。
    • 它会制作多个镜像到你指定目录中(我的在J:\windows_iso_library),按需选择一个制作启动盘。
  2. 已有启动盘,做好一切C盘重要数据备份后,重启。
    • 重启界面迅速按F12,进入BIOS界面
    • 选择含USB Device类似字符,进入winPE操作系统模式。
    • 可进行选择性分区等操作。最后一键还原进行重装系统。

      注:某些iso跟大白菜不太兼容,一键还原后,开机重启长久卡在logo界面。别慌,重进PE系统,解压该iso,按照里面的说明再次重装(即此时大白菜只给了我PE界面,重装的活儿是其他工具搞定的)

配置系统

安装驱动

若你的系统的各种硬件驱动不完善时,请百度获取你主板厂商的驱动程序,然后安装,重启生效,不然蓝牙、音响等都会有问题。

我的驱动程序存在E:\app_tools\a00.关于装系统、分区、EFI启动项设置等\装机驱动等\雷神官网驱动下载,按README.md操作。

解放C盘

  • win10: 修改文件夹左边快速访问栏的‘下载、文档、图片’的属性→位置,移动到其他盘(如G:\doc)
  • win11: 只需系统设置→ 系统→ 存储→ 高级存储设置→ 保存新内容的地方,把里面所有选项迁离系统盘即可。

office的部署安装

当你需要安装并使用正版无阉割的office全家桶时,请按照蓝点网的’新手教程‘一步步操作。我这里时v10.8.5, 总结如下:

  1. 下载
    下载office部署工具到任意位置并解压(我的存放于I:\02.办公工具\2.office\Office Tool\Office Tool Plus
  2. 准备工作
    • 清理干净系统中旧的office、WPS office。
    • (可选) 进入Office Tool Plus.exe
      • 清除旧版本的激活信息:激活→ 激活下拉菜单→ 清除激活信息
      • 清除office设置:工具箱→ 重置office设置为默认
  3. 进入部署菜单
    1. 添加产品:建议选择MS365企业应用版
    2. 添加语言:简中
    3. 部署设置:若担心网速问题使安装卡住,可以把下载后再布署选上,其他的可以默认。
    4. 最后点击开始部署。等待许久后,office将会部署完成。
  4. 激活office
    • 方法1:用蓝点网的激活方法(简单永久)
      Office Tool Plus中点开命令输入框,执行下面命令即可。其中MondoVolume代表office的Mondo的批量版本.

      ospp /inslicid MondoVolume /sethst:kms.loli.beer /setprt:1688 /act

      若有问题,请参考

    • 方法2:用暴风激活工具(非永久)。我的存放于E:\app_tools\暴风激活工具V17.0.zip

安装配置生产环境Git-SDK-64

跳转文章的第二、三节。

其他不重要但有用的配置

实现windows资源浏览器的备注功能

如果你想方便地管理文件(夹), 但又总忘记这个陌生的文件(夹)是什么, 有什么用, 你自然会想对其备注. 文件(夹)条目后面跟一句解释性文字, 多方便啊. Windows允许你在资源管理器中查看备注, 但似乎不太乐意你添加和编辑备注.

下面, 我将用3个步实现这些功能. 最终的效果就是:

  • 对于文件, 右键属性→ 详细信息→ 单击备注即可编辑.
  • 对于文件夹, 进入remark.exe软件, 按提示即可编辑.
1-设置以允许显示备注
显示文件备注
2-给文件添加备注功能

参考文章, 总结如下:

  • 下载安装: 进入GitHub仓库下载FileMeta.x64.msi并安装.
  • 设置允许备注: 进入软件界面, 按如下1-4给特定后缀的文件添加备注功能.给文件添加备注功能
  • 进行备注: 下图1-3是步骤,4是效果.实现文件的备注 > 注: 如果有的文件(e.g. `.exe`)不让备注, 那就编辑`标题, 作者`等也是可以的.
3-给文件夹添加备注功能

参考仓库

  • 下载解压
  • 执行软件: 进入安装目录/dist/remark/remark.exe窗口, 按操作来.实现文件夹的备注

访客身份的配置

当因为客观需要, 你得在别人的Windows系统上进行工作时, 建议新开一个用户, 并远程ssh登录.

新开PS用户

# 创建用户及密码
New-LocalUser -Name "ray3060" -Password (ConvertTo-SecureString "0798" -AsPlainText -Force)
# 给予管理员和普通用户权限
Add-LocalGroupMember -Group "Administrators" -Member "ray3060"
Add-LocalGroupMember -Group "Users" -Member "ray3060"

然后创建一个快捷方式, 在其路径里填入: runas /user:ray3060 "powershell -NoExit -Command \"cd ~\"".
于是当你双击该快捷键, 输入密码后就能进入新用户家目录下的powershell了.

BUG & Solution: 该场景下, 新用户不方便打开管理员权限窗口, 一个讨巧的方法.

远程ssh登录

参考中的1.11.4.

WSL2

很多时候, 你需要你的Windows里能原生兼容Linux, 所以你必须有一个wsl2.

wsl2和Ubuntu的关系:

WSL2 是一个平台,提供了虚拟化的 Linux 内核,
实例 (如Ubuntu) 是运行在 WSL2 上的不同 Linux 发行版。每个实例都是独立的操作系统,有自己的文件系统、配置和生命周期管理。

安装前环境准备

  • 确保虚拟化选项开启:一般默认开启,不然需要进电脑的BIOS设置里开启

    描述
  • 打开设置:控制面板->程序->启用或关闭windows功能->开启下面多个选项

    • Hyper-V
    • Windows虚拟机监控程序平台
    • 容器
    • 适用于Linux的Windows子系统
    • 虚拟机平台Virtual Machine Platform
  • (可选)在powershell中,将虚拟化平台的启动类型设置为自动:bcdedit /set hypervisorlaunchtype auto

  • 重启.

wsl2实例安装

四种方法

  • 安装前, 先更新wsl内核: wsl --update

  • 查看网上有哪些可用的分发版:wsl -l --online

  • 方法1: 用install

    • 从MSstore安装: wsl --install Ubuntu-20.04;
    • 从Internet安装: wsl --install Ubuntu-20.04 --web-download
  • 方法2(⭐推荐⭐): 用import+ 官网镜像

    • 先在ubuntu-wsl网站找到你想要的镜像, 下载其.rootfs.tar.gz, 如:
      curl https://cloud-images.ubuntu.com/wsl/releases/24.04/current/ubuntu-noble-wsl-amd64-24.04lts.rootfs.tar.gz -o ubt2404.tar.gz;
    • 然后执行wsl --import ubuntu24.04 /d/my_wsls/ubuntu2404/ /path/to/ubuntu24.04.tar.gz --version 2

      上述参数的顺序是: <自定义实例名> <指定安装到的位置> <.tar.gzext4.vhdx的路径>

  • 方法3: 用import+ 自建镜像
    此法多用于文件系统的迁移.

    • 先制作文件系统压缩包: wsl --export <目标分发版名字> <你想存放的路径.tar.gz>
    • 然后注销目标分发版: wsl --umregister <目标分发版名字>
    • 最后在新位置导入: (同方法2的第二步)
  • 方法4: 可视化安装
    在Microsoft store搜索“Ubuntu-20.04”进行安装。

安装后查看你的分发版wsl -l -v, 列表中有你刚安装的分发版, 则安装成功.
一定要确保实例的version是wsl2而非wsl1

WSL的BUG合集

wsl安装命令报错–灾难性故障

命令行安装wsl2内核总报错灾难性故障(catastrophic failure), 形如:

PS C:\Users\ray> wsl --update
正在下载: 适用于 Linux 的 Windows 子系统 2.2.4
正在安装: 适用于 Linux 的 Windows 子系统 2.2.4
灾难性故障

尝试了多种方法:

  • 启用或关闭windows功能中的检查开启了相关特性;
  • 在命令行关了wsl特性并重开:
    关闭: dism.exe /online /disable-feature /featurename:Microsoft-Windows-Subsystem-Linux /norestart,
    查看: dism.exe /online /get-features /format:table | findstr /C:"Microsoft-Windows-Subsystem-Linux",
    开启: dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart后重启.
  • 删除了wsl内核软件:
    Remove-AppxPackage MicrosoftCorporationII.WindowsSubsystemForLinux_2.2.0.0_x64__8wekyb3d8bbwe -AllUsers
    Remove-AppxPackage MicrosoftCorporationII.WindowsSubsystemForLinux_2.2.0.0_x64__8wekyb3d8bbwe
  • 放弃命令行安装, 从Microsoft store重新安装
  • … 都没效果.

直到我在issue-11319中看到MatthewL246的回答: 在确保你之前安装的所有版本的wsl内核软件都删干净的前提下, 直接下载安装wsl仓库最新发布.msixbundle包, 而非.msi包.

即使你是amd64, 也可放心安装它的Microsoft.WSL_<version>_x64_ARM64.msixbundle.

这之后, 就有可以愉快使用wsl的所有命令了.

wsl实例的文件系统损坏

一个wsl实例, 对应着一个ext4.vhdx文件, 它存储着实例的文件系统.
在开发过程中, 你可能会遇到文件系统损坏的情况, 比如我执行一个程序时将文件系统所在的磁盘空间占满了, 导致wsl实例无法启动. 解决步骤如下:

  • 关机: 执行wsl --shutdown, 关掉所有实例.

  • 转移: 在资源管理器中找到该实例的ext4.vhdx文件, 将其移动到空间充足的其他磁盘.

  • 注销: 执行wsl --unregister <Distro>, 注销该实例.

  • 挂载: 确保系统内还有其他wsl实例, 执行命令把这个损坏的文件系统作为虚拟硬盘挂载到Linux里面, wsl --mount "X:\path\to\ext4.vhdx" --vhd. 得到的输出如下:

    磁盘已附加,但装载失败: Invalid argument。
    要查看更多相关信息,请在 WSL2 中运行 'dmesg'
    若要分离磁盘,请运行 'wsl.exe --unmount \\?\D:\a_WSL\ext4.vhdx'

    ⚠️ 注意, 千万不要把这个挂载步骤改为导入步骤, wsl --import <Distro> <target_dir> <path_to_ext4_vhdx> --vhd. 因为:

    • 文件系统本就损坏了, 导入成一个新的wsl实例, 也是进不去的;
    • 导入的过程会新创建一个ext4.vhdx文件, 原文件系统本就存储爆炸了, 再导入一个, 岂不是雪上加霜;
    • 导入速度非常慢.
  • 查看日志: 进入其他wsl实例, 执行dmesg查看日志,锁定未挂载成功的块设备, 如这里的/dev/sdc,

    [   52.697055] WSL (364): Detected (null) filesystem for device: /dev/sdc
    [ 52.697376] WSL (364) ERROR: UtilMount:1681: mount(/dev/sdc, /mnt/wsl/DaWSLext4vhdx, (null)
  • 修复: 在其他实例中, 执行如下

    lsblk        # 确认块设备名, 及其分区
    sudo fsck -y /dev/sdc # 修复未挂载成功的块设备
    sudo mkdir /mnt/tmp
    sudo mount /dev/sdc /mnt/tmp # 重新挂载

    接下来你就可以在/mnt/tmp下看到, 那个损坏的文件系统的所有内容都能访问了.
    此时赶紧把当初造成内存爆炸的东西给删掉吧.

  • 测试: 退出实例, 执行wsl --shutdown, 再重新执行挂载, 你会发现成功了.

    PS C:\Users\ASUS> wsl --mount "D:\a_WSL\ext4.vhdx" --vhd
    已成功将磁盘装载为“/mnt/wsl/DaWSLext4vhdx”。
    注意: 如果已修改 /etc/wsl.conf 中的 automount.root 设置,则位置将不同。
    若要卸载和分离磁盘,请运行“wsl.exe --unmount \\?\D:\a_WSL\ext4.vhdx”。
  • 瘦身:

wsl管理分发版本的常用命令

前提:使用wsl命令的终端有管理员权限.

wsl -l -v            # 查看本机的Linux实例列表 即 --list --verbose
wsl --uninstall <Distro> # 卸载指定的Linux分发版本
wsl --update # 升级内核
wsl --shutdown <Distro> # 把指定的Distro关机
wsl -d <Distro> [--user ray]# 把指定的Distro开机, 并指定用户
wsl [--user ray] # 也是开机, 是对默认的Distro
wsl --unregister <Distro> # 取消注册分发版并删除根文件系统。

# 查看、删除wsl的进程
tasklist | findstr wsl
taskkill /F /PID xxxx
# 挂载. 如果挂载的是虚拟磁盘, 要加`vhd`
wsl --mount <Disk> --vhd
# 导入
wsl --import ubt20 "D:\a_WSL\ubt20\" "D:\a_WSL\ext4.vhdx" --vhd
wsl --import-in-place ubt20 "D:\a_WSL\ext4.vhdx"

wsl2实例配置

(可选)迁离C盘

如果你是以默认方式(上面方法1方法4)安装的wsl分发版, 那出于瘦身C盘的考虑, 你可能需要进行迁移的工作. 迁移方法有两种:

  • 命令行方法: 详见上面的方法3
  • win11简单的系统设置:
    设置→ 应用→ 安装的应用→ Ubuntu-20.04→ 右键→ 移动到其他盘

修改初始化系统(即启动管理器)

一般的Linux是使用systemd作为启动管理器, 即使用systemctl命令来管理服务.

而wsl2是使用其他启动管理器, 即使用service命令来管理服务.

当然在wsl2中切换systemd不是必须的, 但我很建议切换.

进入ubuntu,执行:
{
cat <<EOT
[boot]
systemd=true
EOT
} | sudo tee /etc/wsl.conf​
exit

然后重启wsl:wsl --shutdown; wsl
最后验证: ps -p 1 -o comm=,如果输出systemd,则表示其成功被启用。

可能出现的bug
  • 问题: 上述验证不成功; 或使用systemctl status ssh时报错:
    System has not been booted with systemd as init system (PID 1). Can't operate.
    Failed to connect to bus: Host is down
  • 原因: systemd启用失败
  • 解决方法1: 在Windows开始适当的特性
    管理员权限进入powershell
        dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
    ```
    然后重启电脑.
    - 如果还失败, 我也没办法了, 老实使用`service`吧.

    #### 剩下遵照Linux流程完成配置
    [跳转](#Linux)

    ## docker容器

    docker容器, 即一个虚拟的Linux系统. 想拥有它, 你首先得在宿主机中安装docker, 然后拉取Linux的`docker镜像`, 最后由镜像创建`docker容器`.

    ### docker的安装

    #### 在win安装Docker-Desktop

    > ⚠️ 不建议,因为吃内存和cpu;可选择在wsl中安装docker.
    > ✨ win端docker的角色就是wsl下的一个`分发版本`.

    - [<u>安装教程</u>](https://docs.microsoft.com/zh-cn/windows/wsl/tutorials/wsl-containers)
    - 验证:在终端窗口执行`docker --version`,或`wsl -l -v`
    - 配置国内源:进设置→ docker Engine→ 框中添加:
    ```txt
    "registry-mirrors": ["https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn" ]
  • 迁离C盘:
    关闭docker后执行
    wsl --shutdown    # 关机分发版
    wsl --export docker-desktop-data <自定义路径>\docker-desktop-data.tar # 导出压缩包
    wsl --export docker-desktop <自定义路径>\docker-desktop.tar # 导出
    wsl --unregister docker-desktop-data # 注销
    wsl --unregister docker-desktop # 注销
    wsl --import docker-desktop-data <自定义路径>\data\ <上面的路径>\docker-desktop-data.tar --version 2 # 导入
    wsl --import docker-desktop <自定义路径>\distro\ <上面的路径>\docker-desktop.tar --version 2 # 导入

在Linux端安装Docker-Engine

安装

教程速览:

# (可选)卸载旧版本
sudo apt remove docker docker-engine docker.io containerd runc
# 安装依赖
sudo apt update
sudo apt install ca-certificates curl gnupg
# 添加官方的gpgkey
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# 设置软件库
codename=$(grep VERSION_CODENAME /etc/os-release | cut -d'=' -f2)
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
"$(. /etc/os-release && echo "$codename")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
# 安装docker引擎
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动
sudo service docker start
# 验证
sudo docker run hello-world
配置1-为拉取docker镜像加速

由于国内镜像仓库覆灭了(方法1), 只能用http_proxy的方式了.

  • 方法1: 配置阿里云提供的镜像源

    ❌ 2024/06/24阿里云公告: 不再提供镜像服务. 新闻: 中国境内 Docker Hub 镜像仓库关闭

    • 获取镜像加速器地址:登录阿里云->控制台->搜索容器镜像服务->’镜像加速器’ 示例图片
    • 添加镜像
      sudo mkdir -p /etc/docker
      sudo tee /etc/docker/daemon.json <<-'EOF'
      {
      "registry-mirrors": ["https://你自己的.mirror.aliyuncs.com"]
      }
      EOF
      sudo systemctl daemon-reload
      sudo systemctl restart docker
  • 方法2: 若系统中已经配置好代理, 则可直接用docker pull拉取国外镜像.
    验证方法: 执行docker info | grep -i proxy, 得到类似HTTP Proxy: http://127.0.0.1:7890即可.

  • 方法3: 如果方法2未生效, 可为Docker守护进程专门添加代理

    # 创建或编辑 Docker 守护进程的配置文件
    sudo mkdir -p /etc/systemd/system/docker.service.d
    sudo vim /etc/systemd/system/docker.service.d/http-proxy.conf
    # 在配置文件中添加以下内容
    [Service]
    Environment="HTTP_PROXY=http://127.0.0.1:7890"
    Environment="HTTPS_PROXY=http://127.0.0.1:7890"
  • 方法4: (方法3的替代) 在Docker客户端配置文件中设置代理

    ~/.docker/config.json
    {
    "proxies": {
    "default": {
    "httpProxy": "http://127.0.0.1:7890",
    "httpsProxy": "http://127.0.0.1:7890",
    "noProxy": "localhost,127.0.0.1"
    }
    }
    }

然后重新加载 Docker 配置并重启服务:

sudo systemctl daemon-reload
sudo systemctl restart docker
# 验证代理是否生效
sudo systemctl show --property=Environment docker

wsl2中, systemctl不行就用service.

配置2-给docker容器内添加代理

详见场景2-3

debug
  • 碰到Temporary failure resolving ‘gb.archive.ubuntu.com’问题:
    可以永久性地在你的系统中添加一个DNS服务器:echo "nameserver 8.8.8.8" | sudo tee /etc/resolvconf/resolv.conf.d/base > /dev/null

😀 在wsl2安装Docker Engine

和上面Linux端一模一样。

docker镜像的获取和容器的创建

镜像可以来自Docker Hub, 或自己造的.
然后拉取镜像并创建容器:

docker pull <镜像名>
docker run -itd --name=mycontainer <镜像名>

⭐⭐⭐一个很难受的BUG:
wsl2中的docker中的Ubuntu容器,其内核依然是WSL2,不是纯粹的Linux。

  • 原因:wsl2是Linux,但不是完整的Linux;那么和wsl2共用内核的docker容器,自然是跟wsl2啦。
  • wsl2的局限性:不能使用Linux原生的systemctl来管理服务。
  • 局限性的解决办法:
    • 对于wsl2,
    • 对于wsl2里的docker容器,设置docker run的参数来模拟原生环境:

      --privileged: 赋予容器特权,这对于模拟Systemd环境是必要的。
      --tmpfs /run --tmpfs /run/lock: 将 /run 和 /run/lock 设置为tmpfs文件系统,以便Systemd单元正常工作
      -v /sys/fs/cgroup:/sys/fs/cgroup:ro: 将主机的 /sys/fs/cgroup 挂载到容器中,以便容器内的Systemd能够访问它。

docker容器的配置

你拉取到的镜像里面, 已经由它的Dockerfile定义好了你想要的初始化配置, 可无需自己配置, 开箱即用.
如果你拉取的是一个纯白的镜像, 那么:

  • 如果是Linux下的docker容器, 直接跳转Linux;
  • 如果是wsl2中的docker容器, 跳转wsl2

Linux

Linux的安装不必多言, 它可以是来自各分发版的ISO镜像, 是虚拟机镜像, 是云服务器, 是wsl2, 也可以是docker容器. 下面只讲初始配置, 让我们得以快速展开生产工作.

0-预装最基础软件包

谨防你的系统是精简版, 若不预装这些, 在正式执行后面的脚本时会报错.

# tzdata: 时区包,cmake的依赖包。安装有交互,因此放在最前。
sudo apt update
sudo apt install sudo tzdata ca-certificates -y
或直接使用无交互脚本
install_basebase_pkgs() {
echo "✨ ✨ INSTALLING: basebase packages... ✨ ✨"
if [ "$(id -u)" -eq 0 ]; then
packages=("sudo" "tzdata" "ca-certificates")
for package in "${packages[@]}"; do
if ! dpkg -l | grep -q "^ii $package"; then
DEBIAN_FRONTEND=noninteractive apt-get install -y $package
echo " ✅ Installed: $package"
else echo " ✅ Already installed: $package"
fi
done
# 安装tzdata时放弃了交互, 那就这里手动设置时区配置
echo "Asia/Shanghai" > /etc/timezone
ln -fs /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
dpkg-reconfigure -f noninteractive tzdata
fi
}
install_basebase_pkgs

1-确保你是可以使用sudo的非root用户

一般来说, 初次进入Linux, 系统会引导你创建并进入到一个普通用户, 这样最好.

但一些时候, 你进入系统就是root用户, 比如首次登入云服务器, 或登入docker最精简的Linux镜像, 或登入以import方式导入的wsl实例……如此, 你需要新建并配置一个普通用户.

其具体步骤为: 添加新用户→ 设置密码→ 赋予sudo权限→ (可选)设置免密使用sudo.

相关命令参考下面的无交互脚本
new_user="your_username"
user_psd="your_password"
config_new_user() {
if ! id "$new_user" &>/dev/null; then
# 创建新用户
if [ "$(id -u)" -eq 0 ]; then
useradd -m -s /bin/bash "$new_user"
# 如果在wsl2, 可设`自动登录`. (重启系统生效)
uname -a |grep -q microsoft &&
echo -e "[user]\ndefault=$new_user" >> /etc/wsl.conf
else
# `sudo -S`实现无交互的密码输入
echo "$user_psd_old" | sudo -S useradd -m -s /bin/bash "$new_user"
fi
# 设置新密码👉 加入sudo组👉 免密使用sudo
echo "$new_user:$user_psd" | sudo chpasswd
sudo usermod -aG sudo "$new_user"
echo "$new_user ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers
echo " ✅ Created user: $new_user"
fi
}
config_new_user

2-配置软件源

在国内, 用apt下载Linux的软件时多会遇到速度非常慢的问题, 我们只需将系统的软件源配置为国内镜像即可.

常见的镜像有: 清华源, 阿里源, 中科大源, 华为源, 腾讯源, 网易源. 如果你的是那些大厂的云服务器就更好了, 它们已经默认配置好了.

具体配置步骤为: 备份原配置文件→ 写入新配置文件→ 更新软件源.

相关命令参考下面的无交互脚本
config_domestic_apt_sources() {
echo "✨ ✨ CONFIGING: apt mirror to $apt_mirror... ✨ ✨"
local apt_mirror=${1:-"tsinghua"}
local sources_list="/etc/apt/sources.list"
local backup_sources_list="/etc/apt/sources.list.backup"
local url=""
# 提前退出
if grep -q "tsinghua\|aliyun\|ustc\|huawei\|tencent" "$sources_list"; then
echo " ✅ Already configured apt mirror" && return 0
fi

case "$apt_mirror" in
"tsinghua")
url="https://mirrors.tuna.tsinghua.edu.cn/ubuntu/"
;;
"aliyun")
url="http://mirrors.aliyun.com/ubuntu/"
;;
"ustc")
url="https://mirrors.ustc.edu.cn/ubuntu/"
;;
"huawei")
url="https://mirrors.huaweicloud.com/ubuntu/"
;;
"tencent")
url="https://mirrors.cloud.tencent.com/ubuntu/"
;;
esac
sudo mv "$sources_list" "$backup_sources_list"
# sources_list中只配置 deb 源就足够了, 除非你需要查看或修改软件的源代码. 这样可以节省一些磁盘空间并加快 apt-get update 的速度。
sudo tee "$sources_list" > /dev/null <<EOF
deb ${url} ${codename} main restricted universe multiverse
deb ${url} ${codename}-security main restricted universe multiverse
deb ${url} ${codename}-updates main restricted universe multiverse
deb ${url} ${codename}-proposed main restricted universe multiverse
deb ${url} ${codename}-backports main restricted universe multiverse

# deb-src ${url} ${codename} main restricted universe multiverse
# deb-src ${url} ${codename}-security main restricted universe multiverse
# deb-src ${url} ${codename}-updates main restricted universe multiverse
# deb-src ${url} ${codename}-proposed main restricted universe multiverse
# deb-src ${url} ${codename}-backports main restricted universe multiverse
EOF
sudo apt-get update
sudo apt-get upgrade -y
}
config_domestic_apt_sources "tsinghua"

3-安装基础软件包

不是所有的Linux操作系统里都自带常用的软件包, 比如docker的一些基础镜像, 它们由于最小化原则特定用途原则等原因, 甚至连vim, curl, git等基础软件包都没有.

相关命令参考下面的无交互脚本
install_basic_pkgs() {
echo "✨ ✨ INSTALLING: basic packages... ✨ ✨"
packages=("build-essential" "git" "vim"
"curl" "wget" "net-tools" "iputils-ping"
"htop" "psmisc"
"tree" "tar" "gzip"
"zsh" "tmux"
"openssh-client" "sshpass"
"kmod" "language-pack-en")

for package in "${packages[@]}"; do
if ! dpkg -l | grep -q "^ii $package"; then
echo " 👉 install package: ${package}"
sudo apt-get install -y $package
else
echo " 👉 no need to install: $package."
fi
done
}
install_basic_pkgs

4-安装终端美化工具oh-my-zsh

若不想安装zsh, 最简单的bash美化:在~/.bashrc中添加:export PS1="\033[1;35m> \T, \u, \w\[\033[0m\] \$ ",可将命令行头变成:

> 08:29:56, root, ~ $

  • 安装zsh
    sudo apt install zsh -y
  • 下载安装ohmyzsh
    官方仓库及教程, 鉴于国内环境,将纯手动安装:
    • 将官方仓库导入到gitee.com
    • 下载安装脚本:
      wget -O- https://gitee.com/mirrors/ohmyzsh/raw/master/tools/install.sh > ~/install_ohmyzsh.sh
    • 手动修改脚本:
      • 可手动寻找:进入脚本搜索ohmyzsh/ohmyzsh改为jamesray0713/ohmyzsh,搜索github改为gitee;
      • 也可用命令:
        sed -i 's/REPO:-ohmyzsh\/ohmyzsh/REPO:-jamesray0713\/ohmyzsh/' install_ohmyzsh.sh
        sed -i 's/REMOTE:-https:\/\/github/REMOTE:-https:\/\/gitee/' install_ohmyzsh.sh
    • 最后安装:sh ~/install.sh
  • 配置ohmyzsh
    • 换主题:sudo vim ~/.zshrc,修改为 ZSH_THEME="robbyrussell"
    • 加插件:
      cd .oh-my-zsh/custom/plugins    
      git clone https://gitee.com/jamesray0713/zsh-autosuggestions # 自动填充
      git clone https://gitee.com/jamesray0713/zsh-syntax-highlighting # 高亮
      vim ~/.zshrc
      # 进入到配置文件后,将 plugins=( git ) 改为:
      plugins=( git zsh-autosuggestions zsh-syntax-highlighting )
    • 改抬头:
      进入~/.oh-my-zsh/themes/robbyrussell.zsh-theme
      修改第二行为:PROMPT+=' %{$fg[cyan]%}[$PWD]%{$reset_color%} $(git_prompt_info)'
  • 设为默认终端
    echo 'if [ -t 1 ]; then exec zsh; fi' >> ~/.bashrc
  • 重启终端

5-开启ssh-server

一般的生产场景, Linux都是需要被远程连接, 所以我们先把当前机器的ssh服务给配置好, 使得其他机器可以顺利通过ssh连接到该主机.

如果当前机器是docker容器就没必要配置了, 直接在容器的宿主机上配置就行.

具体步骤请参考

6-开启端口转发

如果你的机器在内网, 没有公网ip, 又想被外部ssh连接, 那么就需要开启端口转发功能.
具体步骤请参考

7-安装并配置代理工具clash

如果你的机器想访问外网资源, 开启代理服务是必不可少的.
具体步骤请参考.

8-安装python包和项目管理工具

如果你的生产场景是AI相关项目, python的安装和管理必不可少. 这里推荐使用miniforge + poetry的组合.
具体操作请参考miniforgepoetry.

9-安装docker

如果你想取用别人的docker镜像进行生产, docker的安装和配置必不可少.
具体操作请参考

10-安装code-server

如果你只想用ssh连到本机, 那么在完成了上面的step5-6就足够了, 可跳过本节.
如果你想通过任何设备(包括手机和pad)都能连接到本机, 那么安装web版的vscode服务是必要的.

具体操作请参考.

11-安装nvidia-container-toolkit

如果你的项目位于docker容器中, 且需要使用NVIDIA-GPU, 那么安装nvidia-container-toolkit是必要的.
具体操作请参考.

🚩 自动配置脚本:

点击下载脚本.
该脚本可对一个Ubuntu新系统进行一键配置,配置内容在上面的

脚本有以下模块(如果只想手动配置部分模块请跳转下一节):

  • 必定安装的①②③⑦模块:
    • 配置国内源:加速apt的软件包的下载速度。
    • 安装基础软件包

      “wget” “curl” “git” “vim” “net-tools” “iputils-ping” “htop” “tmux”
      “zsh” “kmod” “g++” “gcc” “cmake” “psmisc” “language-pack-en” “tree”

    • 安装oh-my-zsh:比Linux默认的bash更便捷高效的命令行工具。
    • 安装vscode CLI:vscode的无桌面版客户端,用于远程生产。
  • 选择性安装的:若带--in-container参数,则脚本提前结束;若不带,则安装④⑤⑥模块
    • 安装Miniconda
    • 安装docker
    • 安装NVIDIA Container Toolkit
  • 注:脚本不包含安装CUDA+ cuDNN部分, 需手动

脚本使用方法:

  • 下载脚本:下载到本地后,复制里面所有内容;
  • 编写脚本:进入你要配置的Linux的命令行,执行cd ~ && tee ~/config_script.sh;粘贴ctrl+ V;退出文件ctrl+ C
  • 执行脚本:bash ~/config_script.sh [--in-container]
    • 注意:根据实际需求,完全可以自选任意模块的组合,进行一键配置。
    • 注意:将执行较长时间,结束后注意排查日志看有无报错。
    • 注意:除了开始阶段可能可能需要手动设置时区外,其他命令均自动完成。
    • 时区设置如下,需按提示依次填写6, 70:
  • 刷新配置:source ~/.bashrc

为深度学习做系统配置

为了让你的代码能在新系统的GPU中跑起来,这里提供一站式解决方案,即把CUDA和cuDNN准备妥当即可。鉴于目前我常用的场景,这里只介绍Nvidia显卡在win、Ubuntu、wsl下的应用。

资料:

1. 安装显卡驱动

一般来说系统已经配置好了,若需要重装驱动,可去主板厂商官网、或NVIDIA官网下载;
若需升级驱动,进入GeForce Experience软件查看并更新。
安装成功后,可通过命令验证:nvidia-smi,其中能获得驱动版本号、显卡最大支持的CUDA版本号等。

2.1 在Windows平台搞DL

  • 装CUDA流程总结:
    • 选择CUDA版本:不高于显卡最大支持版本,且要契合项目要求
    • 下载exe(local),执行安装
    • 自定义安装: 第一次安装,尽量全选(除了CUDA->visual studio); 第n次安装,尽量只选择CUDA,不然会出现错误。
    • 安装目录尽量默认,因为后期开发中很多报错来源于路径问题。
    • 控制面板->程序将得到一堆CUDA软件
    • 添加到系统环境变量:有4个,可能后两个未自动生成,需参考下图手动配,NVCUDASAMPLES_ROOT; NVCUDASAMPLES11_0_ROOT 示例图片
    • 验证:nvcc -V
  • 装cuDNN流程总结
    • 注册/登录账号,下载匹配CUDA的版本
    • 解压得到3个文件夹,直接全盘拷贝到cuda的安装目录下

      cuDNN 其实是 CUDA 的一个补丁,专为深度学习运算进行优化的。

    • 以下4个路径添加到系统环境变量的path:
      ....\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin
      ....\NVIDIA GPU Computing Toolkit\CUDA\v10.1\include
      ....\NVIDIA GPU Computing Toolkit\CUDA\v10.1\lib
      ....\NVIDIA GPU Computing Toolkit\CUDA\v10.1\libnvvp
    • 验证:执行将得到显卡详细配置参数
      cd 安装目录\extras\demo_suite
      .\bandwidthTest.exe
      .\deviceQuery.exe

2.2 在wsl2平台搞DL

wsl2直接调用宿主机的显卡驱动,无需安装。

由于wsl2可看作Ubuntu,具体操作直接参考【2.4 在Linux中搞DL】

2.3 ⭐在容器中搞DL(最常用)

由于对docker for windows不爽,这里只介绍Linux下的docker容器。

  • 宿主机中:装NVIDIA Container Toolkit, 该工具能使docker容器具有调用宿主机GPU的能力。
    安装方法
    # 建立package repository 和 GPG key
    distribution=$(. /etc/os-release; echo $ID$VERSION_ID) \
    && curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \
    && curl -s -L https://nvidia.github.io/libnvidia-container/experimental/$distribution/libnvidia-container.list | \
    sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
    sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
    sudo apt update
    # 安装
    sudo apt install -y nvidia-container-toolkit
    # 设置Docker daemon 守护进程识别Nvidia容器Runtime
    sudo nvidia-ctk runtime configure --runtime=docker
    ##重启docker
    sudo systemctl restart docker
    # 测试
    docker run --rm -it --gpus=all nvcr.io/nvidia/k8s/cuda-sample:nbody nbody -gpu -benchmark
  • 容器中:
    • 最简单:直接pull带CUDA、cuDNN的镜像;
    • 手动搞:参照【2.4 在Linux中搞DL】手动配置CUDA和cuDNN。

2.4 在Linux平台搞DL

安装CUDA

这个链接中指定操作系统、架构、发行版本(wsl或Ubuntu)、安装包类型(尽量选则'deb(local)'),即可得到相应安装命令脚本。

不同CUDA版本间的脚本会有各种各样的差异,无法类推,只能现用现搜。下面是一个例子:

Linux-x86_64-WSL-Ubuntu-2.0-deb(local)
wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-wsl-ubuntu.pin
sudo mv cuda-wsl-ubuntu.pin /etc/apt/preferences.d/cuda-repository-pin-600
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo dpkg -i cuda-repo-wsl-ubuntu-11-8-local_11.8.0-1_amd64.deb
sudo cp /var/cuda-repo-wsl-ubuntu-11-8-local/cuda-*-keyring.gpg /usr/share/keyrings/
sudo apt update
sudo apt -y install cuda

后续动作——添加环境变量:在~/.zshrc末尾添加export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}

其他可选后续动作
  • 安装用户空间的守护进程:sudo /usr/bin/nvidia-persistenced --verbose, TODO: 报错,缺少libnvidia-cfg.so.1文件
  • 验证:
    • 验证驱动:cat /proc/driver/nvidia/version(wsl2中无效);
    • 验证编译器:nvcc -V
    • 编译&运行测试:
      • 获取示例目录(放到当前目录下):cuda-install-samples-11.2.sh .
      • 编译deviceQuery: 进入NVIDIA_CUDA-11.2_Samples/1_Utilities/deviceQuery/,执行make,直接得到二进制文件
      • 运行deviceQuery:执行./deviceQuery,得到结果。

安装cuDNN

教程总结: 先下载合适的版本;然后执行

cd /path/of/deb
# 安装deb
sudo dpkg -i cudnn-local-repo-ubuntu2004-8.9.6.50_1.0-1_amd64.deb
# 拷贝CUDA GPG key
sudo cp /var/cudnn-local-repo-*/cudnn-local-*-keyring.gpg /usr/share/keyrings/
# 刷新, 查看支持的软件包(一般为3个:运行时库、开发库、样例库)
sudo apt update
apt-cache search cudnn
# 正式开始安装cudnn的3个库
# 报错:libcudnn8只有8.9.6.50-1+cuda11.8的版本,那此时就照它的意思来,就用cuda11.8好了,后面不会因为我预装的CUDA11.2而报错。
sudo apt install libcudnn8=8.9.6.50-1+cuda11.2
sudo apt install libcudnn8-dev
sudo apt install libcudnn8-samples
# 验证能正常使用cudnn
cp -r /usr/src/cudnn_samples_v8/ $HOME && cd $HOME/cudnn_samples_v8/mnistCUDNN && make clean && make
# 最后得到`./mnistCUDNN`可执行文件,运行得到`Test passed!`即成功。

Static Badge Static Badge Static Badge Static Badge
Copyright © 2023-2024 Raymond H., All Rights Reserved.