这篇文章按一次 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 policyUbuntu 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 git2. ZRAM:两条记录只选一条
原记录同时试过 systemd-zram-generator 和 zram-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-rlezram-tools
sudo apt-get install zram-tools
sudo vi /etc/default/zramswap验证实际启用的 swap:
swapon --show
zramctl3. 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 $USERDocker 官方仓库和签名步骤见 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.confSection "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.gitsudoers.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.confAcquire::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 -yNode.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 都可能改变启动行为,执行前应保存当前配置和回滚方式。