本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 [署名 4.0 国际 (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/deed.zh) 本文作者: 苏洋 创建时间: 2025年01月17日 统计字数: 13129字 阅读时间: 27分钟阅读 本文链接: https://soulteary.com/2025/01/17/guide-to-setting-up-ubuntu-24-04-basic-development-environment.html ----- # 搭建 Ubuntu 24.04 基础开发环境指南 本篇文章聊一聊如何在 Ubuntu 24.04 上搭建基础开发环境。 ## 写在前面 两年前我写过一篇《[在笔记本上搭建高性价比的 Linux 学习环境:基础篇](https://soulteary.com/2022/06/21/building-a-cost-effective-linux-learning-environment-on-a-laptop-the-basics.html)》,随着时间推移,里面的一些内容需要更新了。 如果你对这些话题感兴趣: - 为什么要在裸机上运行 Linux - 用笔记本跑 Linux 比云服务器能省多少钱 - 该选择哪个 Linux 发行版 可以去看看之前那篇文章,这里就不再重复了。 最近经常要配置系统环境,索性整理成这篇文章,也方便后面写相关内容时少点重复。 ## Ubuntu 24.04 系统安装指南 Ubuntu 24.04 的安装过程保持了一贯的简单直观。无论你是新手还是老用户,只需要三个步骤就能完成:下载系统镜像、制作启动盘、安装系统。 如果你已经在使用 Ubuntu 但还没升级到 24.04 版本,可以参考我之前写的《[抢先体验 Ubuntu 22.04 Jammy Jellyfish](https://soulteary.com/2022/04/10/early-access-to-ubuntu-22-04-jammy-jellyfish.html)》这篇文章来完成升级。升级完成后,你可以直接跳过下面文章安装相关的内容。 ### 选择合适的系统镜像 你可以直接访问 Ubuntu 官方[24.04 版本的发布网站](https://releases.ubuntu.com/noble/)获取需要的镜像: - 桌面版(x86-64):[ubuntu-24.04.1-desktop-amd64.iso](https://releases.ubuntu.com/noble/ubuntu-24.04.1-desktop-amd64.iso) - 服务器版(x86-64):[ubuntu-24.04.1-live-server-amd64.iso](https://releases.ubuntu.com/noble/ubuntu-24.04.1-live-server-amd64.iso) 如果你需要其他 CPU 架构(比如 ARM)的镜像,可以去 Ubuntu 官方的 [CD 镜像站](https://cdimage.ubuntu.com/releases/24.04.1/release/)下载: - 服务器版(ARMv8):[ubuntu-24.04.1-live-server-arm64.iso](https://cdimage.ubuntu.com/releases/24.04.1/release/ubuntu-24.04.1-live-server-arm64.iso) 选择建议:对于服务器和虚拟机,我通常选择“服务器版”镜像。而对于笔记本这类需要显示器支持、外设管理、电源管理的设备,我会选择“桌面版”镜像。 ### 制作系统安装引导盘的两种方法 在制作系统引导盘时,我一般会使用两款工具:Balena Etcher 或者 Ventoy。 如果你选择使用 Etcher,建议直接去 [Etcher GitHub 的发布页面](https://github.com/balena-io/etcher/releases/tag/v1.19.25)下载最新版本。使用起来也很简单,只需要打开软件,选择下载好的系统镜像文件,就能快速制作出一个引导安装盘。 ![使用软件制作启动盘](https://attachment.soulteary.com/2025/01/17/make-usb.jpg) 另一个选择是 Ventoy,这是一个更全能的维护工具。相比 Etcher 制作的一次性专用安装盘,Ventoy 的使用方式特别便捷:只要把系统镜像文件直接拷贝到 U 盘就能用来引导安装了。(使用可以参考之前的文章《[开源的全能维护 U 盘工具:Ventoy](https://soulteary.com/2023/11/08/open-source-all-in-one-usb-flash-drive-maintenance-tool-ventoy.html)》) 之所以跟大家介绍这两种方案,是因为在实际使用中,可能会碰到一些硬件设备不兼容 Ventoy。遇到这种情况时,用 Etcher 这种传统方式反而能够更稳定地完成系统安装。 ### 系统安装步骤 Ubuntu 24.04 的安装过程和之前版本相比变化不大,基本上跟随安装向导一步步操作即可。 ![一路“下一步”,完成安装](https://attachment.soulteary.com/2025/01/17/simple-install.jpg) 不过这里有几点实用建议: 对于笔记本用户来说,建议在安装过程中先断开网络连接。这样可以加快整个安装流程,系统更新的事情可以等到进入系统后更换更快的软件源再进行。 另外需要注意的是,不要在安装时勾选“安装三方驱动”选项。因为安装程序的发布时间较早,如果你使用较新的硬件,这个选项可能会导致安装器崩溃。 ## Ubuntu 24.04 系统基础配置指南 接下来我们要对系统进行一些基础但重要的配置,在[之前的文章基础上](https://soulteary.com/2022/06/21/building-a-cost-effective-linux-learning-environment-on-a-laptop-the-basics.html#%E8%BF%9B%E8%A1%8C%E7%B3%BB%E7%BB%9F%E5%9F%BA%E7%A1%80%E9%85%8D%E7%BD%AE)做进一步优化。 ### 安装 OpenSSH Server 我习惯用一台主力设备来统一管理其他设备。正如我在[《2024年终,个人设备盘点》中提到的](https://soulteary.com/2024/12/20/at-the-end-of-2024-share-personal-device-to-friends.html#%E4%B8%BB%E5%8A%9B%E7%94%9F%E4%BA%A7%E5%8A%9B%E8%AE%BE%E5%A4%87macbook-air-m3),我现在使用的是 MacBook Air M3。为了方便在局域网中实现跨设备管理,我们需要在新安装的系统上配置 SSH 服务器。 安装完系统后,打开终端,首先更新软件包索引并安装 `openssh-server`: ```bash sudo apt update && sudo apt install -y openssh-server ``` 这里我们先不执行 `upgrade` 命令。因为在更换软件源之前,升级所有软件包会耗费大量时间,我们把这步放到后面再做。 ### SSH 免密登录配置 当我们完成程序安装后,可以通过 `ssh username@host-ip` 命令来访问 Linux 设备。如果你的本地用户名和 Linux 设备上的登录用户名相同,那么可以直接省略 username。 第一次连接时,你会看到这样的提示: ```bash # 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 系统欢迎界面: ```bash # 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 <你的密钥路径> <目标机器地址>`),让工作更顺畅: ```bash # 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` 命令后,系统会要求我们输入密码。 ```bash sudo apt update [sudo] password for soulteary: ``` 虽然这个设计出发点是安全考虑,但在个人使用场景下,频繁输入密码确实会影响工作效率。其实我们可以通过一个更优雅的方式来解决这个问题:在 `sudoers.d` 目录下创建独立的用户权限规则文件,而不是直接修改系统的默认配置。 只需要执行下面这条命令: ```bash 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) 等信息。 ```bash # 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 ``` 为了加快国内用户的下载速度,我们可以用一行命令将源切换到清华镜像: ```bash 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` 命令了: ```bash sudo apt update && sudo apt upgrade -y ``` 因为更换了国内的软件源,所以安装过程中可以节约大量时间。 ```bash sudo reboot ``` 由于首次更新会包含内核更新,我们需要执行重启操作,让内核和各种补丁生效。 ### 安装基础的系统软件工具 在配置 Linux 开发环境时,有一些基础且实用的系统工具是必不可少的。下面我来分享下这些工具的安装方法,它们能让你的开发工作更加顺畅。 首先是一些基础开发工具包,包括 build-essential(编译工具)、git(版本控制)、curl 和 wget(文件下载)、net-tools(网络工具)等: ```bash # 安装基础开发工具 sudo apt install -y build-essential git curl wget net-tools ``` 其次是一些系统监控工具,它们能帮助你实时观察系统状态: ```bash # 安装系统监控软件 sudo apt install -y neofetch glances htop iftop iotop bmon dstat ``` 最后是文本处理和终端管理工具: ```bash # 安装常用文本工具 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` 我们前面已经装好了): ```bash sudo apt install -y zsh ``` 虽然 OH-MY-ZSH 官网提供了标准安装方式,但考虑到网络环境不稳定的问题,我们可以使用“[清华镜像源](https://mirrors.tuna.tsinghua.edu.cn/help/ohmyzsh.git/)”来加速安装: ```bash 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`。它不同于普通的自动补全,而是会根据你的历史命令智能提示,让终端操作更加顺滑: ```bash git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions ``` 安装好插件后,需要修改配置文件来启用它: ```bash sed -i 's/plugins=(git)/plugins=(git zsh-autosuggestions)/' ~/.zshrc ``` 我在多个设备上都安装了OH-MY-ZSH,为了方便区分,我会给非主力设备换个主题: ```bash sed -i 's/ZSH_THEME="robbyrussell"/ZSH_THEME="half-life"/' ~/.zshrc ``` ## Docker 基础环境配置 首先,让我们从 Docker 的基础安装开始。我写了一个完整的安装脚本,它会自动完成证书配置、软件源设置和Docker的安装。 ```bash 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 的详细信息,包括版本号、运行状态、系统配置等。 ```bash # 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 后端服务开始: ```bash # 创建专门的配置目录 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` 过程): ```bash # 创建配置目录 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 ``` 完成配置后,我们可以通过简单的命令来验证代理是否生效。 ```bash # 检查服务级别代理 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 的深度学习环境:入门篇](https://soulteary.com/2023/03/22/docker-based-deep-learning-environment-getting-started.html)》、《[基于 Docker 的深度学习环境:Windows 篇](https://soulteary.com/2023/07/29/docker-based-deep-learning-environment-under-windows.html)》(基于 WSL2 Linux 环境)。 ## Python 基础环境配置 在我 2022 年的文章中曾介绍过 Conda 这个实用工具:“[使用 Conda 简化 Python 程序环境准备工作](https://soulteary.com/2022/06/04/create-your-own-anime-video-with-an-ai-model-that-surprised-makoto-shinkai.html#%E4%BD%BF%E7%94%A8-conda-%E7%AE%80%E5%8C%96-python-%E7%A8%8B%E5%BA%8F%E7%8E%AF%E5%A2%83%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C)”。趁着这篇文章,让我们一起来看看 2025 年最新的使用方法和一些实用技巧。 我们可以在 [Conda 官网存档网站](https://repo.anaconda.com/archive/) 找到各种 CPU 架构的安装包,相比较几年前的 500M 的安装包体积,现在已经膨胀到了 1GB 左右的尺寸: - Linux x86\_64 版本:[Anaconda3-2024.10-1-Linux-x86\_64.sh](https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh) - Linux ARM64 版本:[Anaconda3-2024.10-1-Linux-aarch64.sh](https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-aarch64.sh) - macOS ARM64 版本(适用于 M 系列芯片):[Anaconda3-2024.10-1-MacOSX-arm64.sh](https://repo.anaconda.com/archive/Anaconda3-2024.10-1-MacOSX-arm64.sh) - macOS x86\_64 版本(适用于 Intel 芯片):[Anaconda3-2024.10-1-MacOSX-x86\_64.sh](https://repo.anaconda.com/archive/Anaconda3-2024.10-1-MacOSX-x86_64.sh) 我们以 Ubuntu(x86架构)为例,安装过程非常简单。首先下载安装包: ```bash curl -LO https://repo.anaconda.com/archive/Anaconda3-2024.10-1-Linux-x86_64.sh ``` 如果你想要更快的下载速度,推荐使用[Conda 的清华源](https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/)。我测试时速度能达到 120MB/s,一个 1GB 出头的安装包仅需 8 秒就能下载完成。 ```bash # 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 bash Anaconda3-2024.10-1-Linux-x86_64.sh ``` 安装完成后,强烈建议配置国内镜像源来提升使用体验。使用 `vim ~/.condarc`编辑配置文件,添加清华源相关配置: ```bash 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` 到设备上(重新登录使配置生效)。接下来,我们可以通过以下命令来验证配置是否正常: ```bash conda clean -i conda create -n myenv numpy ``` 如果下载速度飞快,那么说明配置正常。 ## 最后 这篇文章就先写到这里,接下来的文章,来折腾一个有趣的硬件设备。 --EOF