本篇文章聊一聊如何在 Ubuntu 24.04 上搭建基础开发环境。
写在前面
两年前我写过一篇《在笔记本上搭建高性价比的 Linux 学习环境:基础篇》,随着时间推移,里面的一些内容需要更新了。
如果你对这些话题感兴趣:
- 为什么要在裸机上运行 Linux
- 用笔记本跑 Linux 比云服务器能省多少钱
- 该选择哪个 Linux 发行版
可以去看看之前那篇文章,这里就不再重复了。
最近经常要配置系统环境,索性整理成这篇文章,也方便后面写相关内容时少点重复。
Ubuntu 24.04 系统安装指南
Ubuntu 24.04 的安装过程保持了一贯的简单直观。无论你是新手还是老用户,只需要三个步骤就能完成:下载系统镜像、制作启动盘、安装系统。
如果你已经在使用 Ubuntu 但还没升级到 24.04 版本,可以参考我之前写的《抢先体验 Ubuntu 22.04 Jammy Jellyfish》这篇文章来完成升级。升级完成后,你可以直接跳过下面文章安装相关的内容。
选择合适的系统镜像
你可以直接访问 Ubuntu 官方24.04 版本的发布网站获取需要的镜像:
- 桌面版(x86-64):ubuntu-24.04.1-desktop-amd64.iso
- 服务器版(x86-64):ubuntu-24.04.1-live-server-amd64.iso
如果你需要其他 CPU 架构(比如 ARM)的镜像,可以去 Ubuntu 官方的 CD 镜像站下载:
- 服务器版(ARMv8):ubuntu-24.04.1-live-server-arm64.iso
选择建议:对于服务器和虚拟机,我通常选择“服务器版”镜像。而对于笔记本这类需要显示器支持、外设管理、电源管理的设备,我会选择“桌面版”镜像。
制作系统安装引导盘的两种方法
在制作系统引导盘时,我一般会使用两款工具:Balena Etcher 或者 Ventoy。
如果你选择使用 Etcher,建议直接去 Etcher GitHub 的发布页面下载最新版本。使用起来也很简单,只需要打开软件,选择下载好的系统镜像文件,就能快速制作出一个引导安装盘。
另一个选择是 Ventoy,这是一个更全能的维护工具。相比 Etcher 制作的一次性专用安装盘,Ventoy 的使用方式特别便捷:只要把系统镜像文件直接拷贝到 U 盘就能用来引导安装了。(使用可以参考之前的文章《开源的全能维护 U 盘工具:Ventoy》)
之所以跟大家介绍这两种方案,是因为在实际使用中,可能会碰到一些硬件设备不兼容 Ventoy。遇到这种情况时,用 Etcher 这种传统方式反而能够更稳定地完成系统安装。
系统安装步骤
Ubuntu 24.04 的安装过程和之前版本相比变化不大,基本上跟随安装向导一步步操作即可。
不过这里有几点实用建议:
对于笔记本用户来说,建议在安装过程中先断开网络连接。这样可以加快整个安装流程,系统更新的事情可以等到进入系统后更换更快的软件源再进行。
另外需要注意的是,不要在安装时勾选“安装三方驱动”选项。因为安装程序的发布时间较早,如果你使用较新的硬件,这个选项可能会导致安装器崩溃。
Ubuntu 24.04 系统基础配置指南
接下来我们要对系统进行一些基础但重要的配置,在之前的文章基础上做进一步优化。
安装 OpenSSH Server
我习惯用一台主力设备来统一管理其他设备。正如我在《2024年终,个人设备盘点》中提到的,我现在使用的是 MacBook Air M3。为了方便在局域网中实现跨设备管理,我们需要在新安装的系统上配置 SSH 服务器。
安装完系统后,打开终端,首先更新软件包索引并安装 openssh-server
:
sudo apt update && sudo apt install -y openssh-server
这里我们先不执行 upgrade
命令。因为在更换软件源之前,升级所有软件包会耗费大量时间,我们把这步放到后面再做。
SSH 免密登录配置
当我们完成程序安装后,可以通过 ssh username@host-ip
命令来访问 Linux 设备。如果你的本地用户名和 Linux 设备上的登录用户名相同,那么可以直接省略 username。
第一次连接时,你会看到这样的提示:
# ssh 10.11.12.231
The authenticity of host '10.11.12.231 (10.11.12.231)' can't be established.
ED25519 key fingerprint is SHA256:xyz......
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '10.11.12.231' (ED25519) to the list of known hosts.
连接成功后,你会看到熟悉的 Ubuntu 系统欢迎界面:
# ssh 10.11.12.231
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-41-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
Expanded Security Maintenance for Applications is not enabled.
251 updates can be applied immediately.
115 of these updates are standard security updates.
To see these additional updates run: apt list --upgradable
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
soulteary@ThinkBook-14-G6-IRL:~$
但是每次输入密码确实挺烦的,我们来配置下免密登录(ssh-copy-id <你的密钥路径> <目标机器地址>
),让工作更顺畅:
# ssh-copy-id -i ~/.ssh/your-key-path 10.11.12.231
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/Users/soulteary/.ssh/your-key-path.pub"
The authenticity of host '10.11.12.231 (10.11.12.231)' can't be established.
ED25519 key fingerprint is SHA256:xyz......
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
soulteary@10.11.12.231's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '10.11.12.231'"
and check to make sure that only the key(s) you wanted were added.
现在再用 ssh
登录时,就不用输入密码了,轻松又安全。
执行特权命令时不用重复输入密码
在日常使用 Linux 系统时,不管是通过 SSH 远程登录设备,还是直接打开本地终端,当我们需要执行一些系统维护操作(比如更新软件包)时,都会遇到这样的情况:使用 sudo
命令后,系统会要求我们输入密码。
sudo apt update
[sudo] password for soulteary:
虽然这个设计出发点是安全考虑,但在个人使用场景下,频繁输入密码确实会影响工作效率。其实我们可以通过一个更优雅的方式来解决这个问题:在 sudoers.d
目录下创建独立的用户权限规则文件,而不是直接修改系统的默认配置。
只需要执行下面这条命令:
echo "`whoami` ALL=(ALL) NOPASSWD:ALL" | sudo tee "/etc/sudoers.d/dont-prompt-$USER-for-sudo-password"
设置完成后,我们先按 CTRL+D
退出当前会话,然后重新使用 ssh <设备 IP>
登录系统。这时候再执行任何需要 sudo
权限的命令,就不会再提示输入密码了,整个操作流程会更加顺畅。
更换软件源并更新系统
在 Ubuntu 24.04 中,系统引入了全新的软件源配置格式。现在的源配置文件内容更加结构化且清晰,主要包含了软件类型 (Types)、源地址 (URIs)、版本代号 (Suites) 以及组件 (Components) 等信息。
# cat /etc/apt/sources.list.d/ubuntu.sources
Types: deb
URIs: http://archive.ubuntu.com/ubuntu/
Suites: noble noble-updates noble-backports
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
Types: deb
URIs: http://security.ubuntu.com/ubuntu/
Suites: noble-security
Components: main restricted universe multiverse
Signed-By: /usr/share/keyrings/ubuntu-archive-keyring.gpg
为了加快国内用户的下载速度,我们可以用一行命令将源切换到清华镜像:
sudo sed -i 's/\(archive\|security\).ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list.d/ubuntu.sources && sudo apt update && sudo apt upgrade -y
切换完源后,建议执行上文中一直没有执行过的系统更新 upgrade
命令了:
sudo apt update && sudo apt upgrade -y
因为更换了国内的软件源,所以安装过程中可以节约大量时间。
sudo reboot
由于首次更新会包含内核更新,我们需要执行重启操作,让内核和各种补丁生效。
安装基础的系统软件工具
在配置 Linux 开发环境时,有一些基础且实用的系统工具是必不可少的。下面我来分享下这些工具的安装方法,它们能让你的开发工作更加顺畅。
首先是一些基础开发工具包,包括 build-essential(编译工具)、git(版本控制)、curl 和 wget(文件下载)、net-tools(网络工具)等:
# 安装基础开发工具
sudo apt install -y build-essential git curl wget net-tools
其次是一些系统监控工具,它们能帮助你实时观察系统状态:
# 安装系统监控软件
sudo apt install -y neofetch glances htop iftop iotop bmon dstat
最后是文本处理和终端管理工具:
# 安装常用文本工具
sudo apt install -y vim jq
# 安装常用终端复用工具
sudo apt install -y tmux screen
当然,这只是一个基础配置建议,你完全可以根据自己的实际需求来增减工具。比如如果你更习惯使用 nano 编辑器,可以用 nano 替换 vim;如果你不需要终端复用,可以去掉 tmux 和 screen 的安装。
上面的每个工具都有其特定用途:
htop
和glances
用于系统资源监控iftop
和iotop
分别用于网络和磁盘 IO 监控tmux
和screen
让你能更好地管理终端会话jq
则是一个强大的 JSON 处理工具
选择合适的工具,能让你的开发工作事半功倍。
ZSH 的快速安装与简单配置
我日常中的 SHELL 环境是 ZSH,搭配经典的开源软件 OH-MY-ZSH,能够节约大量时间。网上已经有很多关于它们的详细介绍,这里我就直接分享一下最实用的安装和配置步骤。
在开始之前,首先需要安装 zsh
(git
我们前面已经装好了):
sudo apt install -y zsh
虽然 OH-MY-ZSH 官网提供了标准安装方式,但考虑到网络环境不稳定的问题,我们可以使用“清华镜像源”来加速安装:
git clone https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git
REMOTE=https://mirrors.tuna.tsinghua.edu.cn/git/ohmyzsh.git sh ohmyzsh/tools/install.sh
rm -rf ohmyzsh
安装过程中会询问是否将 zsh
设置为默认 shell,大家可以根据个人需求选择。安装完成后,我们就可以开始打造自己的专属终端了。
这里我要分享一个非常实用的插件 zsh-autosuggestions
。它不同于普通的自动补全,而是会根据你的历史命令智能提示,让终端操作更加顺滑:
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
安装好插件后,需要修改配置文件来启用它:
sed -i 's/plugins=(git)/plugins=(git zsh-autosuggestions)/' ~/.zshrc
我在多个设备上都安装了OH-MY-ZSH,为了方便区分,我会给非主力设备换个主题:
sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="half-life"/' ~/.zshrc
Docker 基础环境配置
首先,让我们从 Docker 的基础安装开始。我写了一个完整的安装脚本,它会自动完成证书配置、软件源设置和Docker的安装。
sudo apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu/ \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo gpasswd -a ${USER} docker
将上面的内容保存为 docker.sh
,然后执行 bash docker.sh
,等待安装完成后,我们可以通过运行 docker info
命令来验证安装是否成功。输出结果会显示 Docker 的详细信息,包括版本号、运行状态、系统配置等。
# docker info
Client: Docker Engine - Community
Version: 27.5.0
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.19.3
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.32.4
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 27.5.0
Storage Driver: overlay2
Backing Filesystem: extfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: runc io.containerd.runc.v2
Default Runtime: runc
Init Binary: docker-init
containerd version: bcc810d6b9066471b0b6fa75f557a15a1cbf31bb
runc version: v1.2.4-0-g6c52b3f
init version: de40ad0
Security Options:
apparmor
seccomp
Profile: builtin
cgroupns
Kernel Version: 6.8.0-41-generic
Operating System: Ubuntu 24.04.1 LTS
OSType: linux
Architecture: x86_64
CPUs: 20
Total Memory: 62.32GiB
Name: ThinkBook-14-G6-IRL
ID: b9a0619f-1a5d-4810-97e4-db3491519cea
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Live Restore Enabled: false
有时候,我们需要在企业环境中统一管理 Docker 的网络访问,包括镜像获取、存储和访问认证。这时候就需要为 Docker 配置代理服务器。代理配置分为两个部分:Docker 服务守护进程 (dockerd
) 代理配置、Docker 客户端代理配置。
先从 Docker 后端服务开始:
# 创建专门的配置目录
sudo mkdir -p /etc/systemd/system/docker.service.d
# 创建代理配置
sudo tee /etc/systemd/system/docker.service.d/http-proxy.conf << EOF
[Service]
Environment="HTTP_PROXY=http://proxy-host:port"
Environment="HTTPS_PROXY=http://proxy-host:port"
Environment="NO_PROXY=localhost,127.0.0.1,docker-registry.example.com,.corp"
EOF
# 重新加载配置并重启 Docker 服务
sudo systemctl daemon-reload
sudo systemctl restart docker
接着,配置 Docker 客户端的代理(影响 docker build
过程):
# 创建配置目录
mkdir -p ~/.docker
# 创建或编辑配置文件
tee ~/.docker/config.json << EOF
{
"proxies": {
"default": {
"httpProxy": "http://proxy-host:port",
"httpsProxy": "http://proxy-host:port",
"noProxy": "localhost,127.0.0.1,docker-registry.example.com,.corp"
}
}
}
EOF
完成配置后,我们可以通过简单的命令来验证代理是否生效。
# 检查服务级别代理
sudo systemctl show --property=Environment docker
# 检查配置是否生效
docker run --rm alpine wget -qO- http://ipinfo.io
在实际配置时,请将 proxy-host:port
替换为实际的代理服务器地址和端口,如果你有不需要代理的地址,尤其是局域网内的私有仓库的地址,可以使用 NO_PROXY/noProxy
来指定不需要代理的地址。如果你的地址需要鉴权,可以使用下面的 URL 格式:http://user:password@proxy-host:port
。
如果你想继续折腾下 Docker 和 GPU 环境联动,可以参考下面两篇文章:《基于 Docker 的深度学习环境:入门篇》、《基于 Docker 的深度学习环境:Windows 篇》(基于 WSL2 Linux 环境)。
Python 基础环境配置
在我 2022 年的文章中曾介绍过 Conda 这个实用工具:“使用 Conda 简化 Python 程序环境准备工作”。趁着这篇文章,让我们一起来看看 2025 年最新的使用方法和一些实用技巧。
我们可以在 Conda 官网存档网站 找到各种 CPU 架构的安装包,相比较几年前的 500M 的安装包体积,现在已经膨胀到了 1GB 左右的尺寸:
- Linux x86_64 版本:Anaconda3-2024.10-1-Linux-x86_64.sh
- Linux ARM64 版本:Anaconda3-2024.10-1-Linux-aarch64.sh
- macOS ARM64 版本(适用于 M 系列芯片):Anaconda3-2024.10-1-MacOSX-arm64.sh
- macOS x86_64 版本(适用于 Intel 芯片):Anaconda3-2024.10-1-MacOSX-x86_64.sh
我们以 Ubuntu(x86架构)为例,安装过程非常简单。首先下载安装包:
curl -LO https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
如果你想要更快的下载速度,推荐使用Conda 的清华源。我测试时速度能达到 120MB/s,一个 1GB 出头的安装包仅需 8 秒就能下载完成。
# curl -LO -H "User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36" https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2024.10-1-Linux-x86_64.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1051M 100 1051M 0 0 118M 0 0:00:08 0:00:08 --:--:-- 120M
下载完成后,还是只需要一个命令就能启动安装:
bash Anaconda3-2024.10-1-Linux-x86_64.sh
安装完成后,强烈建议配置国内镜像源来提升使用体验。使用 vim ~/.condarc
编辑配置文件,添加清华源相关配置:
channels:
- defaults
show_channel_urls: true
default_channels:
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
- https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
custom_channels:
conda-forge: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
pytorch: https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud
配置完成后,按下 CTRL+D
退出登录,然后再次 ssh
到设备上(重新登录使配置生效)。接下来,我们可以通过以下命令来验证配置是否正常:
conda clean -i
conda create -n myenv numpy
如果下载速度飞快,那么说明配置正常。
最后
这篇文章就先写到这里,接下来的文章,来折腾一个有趣的硬件设备。
–EOF