Ubuntu 初始化:软件源、基础工具与维护入口

太阳作者太阳
原创内容采用 CC-4.0 协议发布,转载请注明出处

这篇文章按一次 Ubuntu 主机初始化记录整理。原流程从替换 USTC 软件源开始,接着处理 ZRAM、Docker、NVIDIA Container Toolkit、CUDA、Intel VAAPI、SSH、Zsh、NetworkManager 和 NodeSource,最后留下 APT 锁、挂载和端口排查命令。下面保留这些选择和失败入口;机器专属凭据只用占位符。

1. 先确认系统与软件源

cat /etc/os-release
uname -r
id
printf '%s\n' "$HOME"
apt-cache policy

Ubuntu 24.04 使用 /etc/apt/sources.list.d/ubuntu.sources(deb822),旧版常见 /etc/apt/sources.list。原记录使用 USTC 镜像:

test -f /etc/apt/sources.list.d/ubuntu.sources && sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak
sudo sed -i 's/archive.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/ubuntu.sources
sudo sed -i 's/security.ubuntu.com/mirrors.ustc.edu.cn/g' /etc/apt/sources.list.d/ubuntu.sources

旧版源替换为清华镜像的命令也保留:

test -f /etc/apt/sources.list && sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
sudo sed -i 's/mirrors.aliyun.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list

替换前应备份源文件,并确认镜像站提供当前 Ubuntu 代号和安全仓库。Ubuntu 官方仓库说明解释了仓库组件、代号和签名校验;镜像替换不应伴随关闭签名验证。

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install -y git

2. ZRAM:两条记录只选一条

原记录同时试过 systemd-zram-generatorzram-tools。它们都管理 swap,实际部署时只选一种,避免重复创建或互相覆盖。

systemd-zram-generator

sudo apt-get install systemd-zram-generator
sudo vi /etc/systemd/zram-generator.conf
[zram0]
host-memory-limit = none
zram-size = min(ram / 2, 4096)
zram-fraction = 0.25
compression-algorithm = lzo-rle

zram-tools

sudo apt-get install zram-tools
sudo vi /etc/default/zramswap

验证实际启用的 swap:

swapon --show
zramctl

3. Docker CE 与镜像加速

原流程先移除发行版旧包,再添加 Docker 仓库和用户组:

sudo apt-get remove docker docker-engine docker.io containerd runc
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
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu \
  "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo usermod -aG docker $USER

Docker 官方仓库和签名步骤见 Docker Engine Ubuntu 安装文档。加入 docker 组后需要重新登录,或显式刷新当前会话的组权限。

原记录还写过 daemon mirror:

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.mybacc.com"
  ]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker info

镜像站是外部依赖,写入前应确认当前域名、TLS 和组织策略;docker info 才能确认 daemon 读到了配置。

4. NVIDIA Container Toolkit、CUDA 与 Intel VAAPI

原流程单独配置 NVIDIA Container Toolkit 源:

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
sudo rm -f /etc/apt/sources.list.d/nvidia-container-toolkit.list
curl -s -L https://mirrors.ustc.edu.cn/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \
  sed 's#deb https://nvidia.github.io#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://mirrors.ustc.edu.cn#g' | \
  sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
sudo apt-get install -y nvidia-container-toolkit

原笔记到安装软件包为止。按 NVIDIA Container Toolkit 官方配置文档,Docker 还需要配置 runtime;对使用系统 Docker daemon 的主机,补上:

sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

这两条是补齐的配置步骤,不代表当时已经验证 GPU 容器运行成功;rootless Docker 的配置位置和重启方式需要使用官方文档对应的小节。

原记录分别列出 graphics-drivers PPA 和 CUDA 官方仓库两条路线。它们按目标系统选择,清理旧包也应单独作为迁移步骤:

sudo add-apt-repository ppa:graphics-drivers
sudo add-apt-repository --remove ppa:graphics-drivers

如果要清理旧 CUDA/NVIDIA 包,应先确认当前驱动和依赖,再单独执行:

sudo apt autoremove cuda* nvidia* --purge

确认选择 CUDA 官方仓库后,再安装对应版本:

sudo apt install dirmngr ca-certificates software-properties-common apt-transport-https dkms curl -y
curl -fSsL https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/3bf863cc.pub | sudo gpg --dearmor | sudo tee /usr/share/keyrings/nvidia-drivers.gpg > /dev/null 2>&1
echo 'deb [signed-by=/usr/share/keyrings/nvidia-drivers.gpg] https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/ /' | sudo tee /etc/apt/sources.list.d/nvidia-drivers.list
apt search cuda-drivers
sudo apt install cuda-drivers-535 cuda
nvidia-smi

这些命令固定了 Ubuntu 22.04 仓库和旧驱动版本,不能直接用于其他版本。原生 Linux 与 WSL2 的 CUDA 流程也不同,详见 NVIDIA CUDA Linux 安装指南。Intel 工具则是:

sudo apt-get install -y intel-gpu-tools intel-media-va-driver vainfo
intel_gpu_top
vainfo

双显卡主机的 Xorg 配置

原记录中的 Intel/NVIDIA 双显卡场景使用 100-intel-drm-outputclass.conf,让 Intel 作为主 GPU,同时保留 NVIDIA 输出类:

cat /var/log/Xorg.0.log
sudo vi /etc/X11/xorg.conf.d/100-intel-drm-outputclass.conf
Section "OutputClass"
    Identifier "intel"
    MatchDriver "i915"
    Driver "modesetting"
    Option "PrimaryGPU" "yes"
EndSection

Section "OutputClass"
    Identifier "nvidia"
    MatchDriver "nvidia-drm"
EndSection

只在确认显卡驱动名称和显示输出需求后使用,改动后结合 Xorg 日志验证。

5. SSH、用户、Zsh 与网络

原记录包含新增用户 wd、SSH 权限和 Docker 组操作;公开示例保留这些实际名称:

chmod 600 ~/.ssh/id_rsa
sudo useradd -m wd
sudo tee /etc/sudoers.d/wd <<< 'wd ALL=(ALL) ALL'
sudo chmod 0440 /etc/sudoers.d/wd
sudo visudo -cf /etc/sudoers.d/wd
sudo usermod -aG docker wd
git config --global user.email "x344527085@outlook.com"
git config --global user.name "dorthl"
git clone git@github.com:dorthl/devops-linux.git

sudoers.d 文件应使用严格权限并用 visudo -cf 检查;私钥、Wi-Fi 密码和私人仓库凭据不能写入公开 shell 历史。Zsh 与 NetworkManager 的原始路径:

sudo apt-get install zsh zsh-autosuggestions zsh-syntax-highlighting
chsh -s /bin/zsh
sudo vim /etc/locale.gen
sudo locale-gen
sudo apt install network-manager
nmcli device wifi list
nmcli device wifi connect 345keji password '<WIFI_PASSWORD>'

原记录还写过无认证 APT 代理地址:

sudo vi /etc/apt/apt.conf
Acquire::http::Proxy "http://192.168.31.28:7890";
Acquire::https::Proxy "http://192.168.31.28:7890";

6. NodeSource Node.js

原记录选择 Node.js 18:

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
NODE_MAJOR=18
echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list
sudo apt-get update
sudo apt-get install nodejs -y

Node.js 大版本会影响项目兼容性;升级前先确认项目所需版本,并按 NodeSource 文档更新仓库。

7. APT 锁、内核、挂载和端口

遇到 Could not get lock,先单独检查进程:

ps -ef | grep -E 'apt|dpkg|unattended' | grep -v grep

如果仍有包管理进程运行,先等待其正常退出;确认相关进程已退出但 dpkg 仍处于半配置状态,再执行修复:

sudo dpkg --configure -a
sudo apt clean
sudo apt update --fix-missing
sudo apt install -f

不要在未知进程仍运行时直接删除 lock 文件。dpkg 官方手册dpkg --configure -a 定义为配置所有已解包但尚未配置的包;它应在确认没有并发包管理进程后执行。原记录还保留了这些维护入口:

sudo apt install linux-generic-hwe-22.04
sudo do-release-upgrade
sudo lsof -i:5432

挂载示例中的设备名和路径必须按实际机器改写:

/dev/vdb1 /root/device ext4 defaults 0 0

升级内核、发行版或写入 fstab 都可能改变启动行为,执行前应保存当前配置和回滚方式。