AlmaLinux 软件安装全攻略 从基础命令到实战技巧 一文解决你的安装难题

AlmaLinux 是一个由社区驱动的、与 RHEL(Red Hat Enterprise Linux)二进制兼容的开源操作系统。它继承了 CentOS 的衣钵,为需要稳定、可靠企业级 Linux 发行版的用户提供了完美的选择。对于系统管理员、开发者和运维工程师来说,熟练掌握在 AlmaLinux 上安装和管理软件是核心技能。本指南将从最基础的命令开始,逐步深入到高级技巧和实战场景,帮助你彻底解决软件安装难题。
一、AlmaLinux 包管理基础:DNF 与 RPM
AlmaLinux 使用
dnf
(Dandified Yum)作为其默认的包管理器,它是
yum
的下一代替代品,功能更强大、速度更快。所有软件安装、更新、删除操作都围绕
dnf
和底层的
rpm
包格式展开。
1.1 系统更新与基础准备
在安装任何新软件之前,确保系统是最新的,这可以避免很多依赖冲突问题。
# 更新所有已安装的软件包到最新版本
sudo dnf update -y

# 或者,只检查可用的更新而不实际安装
sudo dnf check-update
示例说明
:
-y
参数用于自动回答“yes”确认所有提示,这在脚本中非常有用。在生产环境中,建议先运行
sudo dnf update
不带
-y
参数,仔细查看将要更新的软件包列表,确认无误后再执行。
1.2 搜索软件包
在安装前,你需要知道软件包的确切名称。
# 搜索包含 “nginx” 的软件包
sudo dnf search nginx

# 搜索更精确的包名,使用通配符
sudo dnf search ‘httpd*’

# 查看软件包的详细信息,包括版本、大小、描述和仓库来源
sudo dnf info httpd
实战技巧
:如果
dnf search
结果太多,可以结合
grep
进行过滤:
sudo dnf search all | grep -i ‘database’
这会搜索所有仓库中包含“database”关键词的软件包。
1.3 安装软件包
安装软件包是核心操作,
dnf
会自动处理复杂的依赖关系。
# 安装单个软件包
sudo dnf install httpd

# 安装多个软件包,用空格分隔
sudo dnf install mariadb-server mariadb

# 安装指定版本的软件包(如果仓库中有多个版本)
sudo dnf install nginx-1.20.1
依赖解析示例
:当你运行
sudo dnf install httpd
时,
dnf
会检查
httpd
所需的所有依赖包(如
apr
,
apr-util
,
httpd-tools
等),并列出将要安装的完整软件包列表。确认后,它会从配置的仓库(如 BaseOS, AppStream)下载并安装所有这些包。
1.4 移除软件包
移除软件包时,
dnf
也会处理依赖关系。
# 移除软件包及其不再需要的依赖
sudo dnf remove httpd

# 仅移除软件包,保留其依赖(不推荐,可能导致依赖残留)
sudo dnf remove –noautoremove httpd
重要提示
:
dnf remove
会同时移除该软件包所依赖的其他软件包,如果这些依赖包没有被其他软件使用。这有助于保持系统整洁。
1.5 查看已安装的软件包
# 列出所有已安装的软件包
sudo dnf list installed

# 查找已安装的特定软件包
sudo dnf list installed | grep httpd

# 查看软件包安装的文件列表
sudo dnf repoquery -l httpd
二、管理软件仓库(Repositories)
软件仓库是软件包的来源。AlmaLinux 默认配置了官方仓库,但你可能需要添加 EPEL、RPM Fusion 等第三方仓库来获取更多软件。
2.1 查看当前启用的仓库
sudo dnf repolist
这将列出所有已启用的仓库及其状态。
2.2 安装 EPEL 仓库(Extra Packages for Enterprise Linux)
EPEL 是最重要的第三方仓库,提供了大量官方仓库中没有的软件。
# 安装 EPEL 仓库(适用于 AlmaLinux 9)
sudo dnf install epel-release

# 对于 AlmaLinux 8,命令相同,但仓库内容略有不同
验证
:安装后,再次运行
sudo dnf repolist
,你会看到
epel
仓库已启用。
2.3 启用或禁用仓库
# 临时禁用某个仓库(仅对当前命令有效)
sudo dnf –disablerepo=epel install some-package

# 临时启用某个仓库
sudo dnf –enablerepo=epel install some-package

# 永久禁用仓库(编辑配置文件)
sudo dnf config-manager –set-disabled epel
2.4 添加第三方仓库(以 RPM Fusion 为例)
RPM Fusion 提供了多媒体、游戏等软件。
# 对于 AlmaLinux 9
sudo dnf install –nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-9.noarch.rpm
sudo dnf install –nogpgcheck https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-9.noarch.rpm

# 对于 AlmaLinux 8
sudo dnf install –nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm
sudo dnf install –nogpgcheck https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-8.noarch.rpm
注意
:
–nogpgcheck
参数用于跳过 GPG 密钥验证,仅在你信任该仓库时使用。更安全的方式是先导入密钥。
三、高级安装技巧与实战场景
3.1 从源代码编译安装
当官方仓库没有你需要的软件版本时,从源代码编译是常见选择。以安装最新版的
nginx
为例。
步骤 1:安装编译工具和依赖
sudo dnf groupinstall “Development Tools”
sudo dnf install pcre-devel zlib-devel openssl-devel
步骤 2:下载源代码
cd /usr/local/src
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
步骤 3:配置、编译和安装
# 配置编译选项,这里启用了 SSL 和 HTTP/2
./configure –with-http_ssl_module –with-http_v2_module –with-http_stub_status_module

# 编译,-j 参数指定并行编译核心数,加快速度
make -j$(nproc)

# 安装到系统
sudo make install
步骤 4:创建 systemd 服务文件
编译安装的 nginx 不会自动创建 systemd 服务,需要手动创建。
# 创建服务文件
sudo nano /etc/systemd/system/nginx.service
内容如下:
[Unit]
Description=nginx – high performance web server
After=network.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -q -g ‘daemon on; master_process on;’
ExecStart=/usr/local/nginx/sbin/nginx -g ‘daemon on; master_process on;’
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target
步骤 5:启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl status nginx
验证
:访问
http://your-server-ip
,应该能看到 nginx 的欢迎页面。
3.2 使用 Snap 或 Flatpak 安装桌面应用
对于桌面用户,Snap 和 Flatpak 提供了沙盒化的应用安装方式,适合安装最新的桌面软件。
安装 Snap(需要启用 EPEL)
sudo dnf install epel-release
sudo dnf install snapd
sudo systemctl enable –now snapd.socket

# 创建符号链接(如果需要)
sudo ln -s /var/lib/snapd/snap /snap

# 安装一个应用,例如 VLC
sudo snap install vlc
安装 Flatpak
sudo dnf install flatpak
flatpak remote-add –if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo

# 安装应用,例如 GIMP
flatpak install flathub org.gimp.GIMP
使用
:通过桌面菜单或命令
flatpak run org.gimp.GIMP
启动。
3.3 使用 Docker 安装应用
Docker 是容器化部署的首选,特别适合数据库、Web 服务等。
安装 Docker
# 添加 Docker 官方仓库
sudo dnf config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo

# 安装 Docker 引擎
sudo dnf install docker-ce docker-ce-cli containerd.io

# 启动 Docker
sudo systemctl enable –now docker
sudo usermod -aG docker $USER # 将当前用户加入 docker 组,避免每次使用 sudo
newgrp docker # 立即生效,或重新登录
使用 Docker 安装软件(以 MySQL 为例)
# 拉取 MySQL 镜像
docker pull mysql:8.0

# 运行 MySQL 容器
docker run -d –name mysql-server -p 3306:3306 -e MYSQL_ROOT_PASSWORD=yourpassword mysql:8.0

# 进入容器执行命令
docker exec -it mysql-server mysql -u root -p
持久化数据
:使用卷(Volume)避免数据丢失。
docker run -d –name mysql-server -p 3306:3306 -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=yourpassword mysql:8.0
3.4 使用 Ansible 自动化安装
对于多台服务器,使用 Ansible 可以批量安装软件,确保一致性。
安装 Ansible
sudo dnf install ansible
编写 Playbook(例如安装 Nginx)
创建文件
install_nginx.yml
:
—
– name: Install and configure Nginx
hosts: webservers
become: yes
tasks:
– name: Install Nginx package
dnf:
name: nginx
state: present

– name: Ensure Nginx is started and enabled
systemd:
name: nginx
state: started
enabled: yes

– name: Copy custom Nginx configuration
template:
src: files/nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: ‘0644’
notify: restart nginx

handlers:
– name: restart nginx
systemd:
name: nginx
state: restarted
运行 Playbook
ansible-playbook -i inventory.ini install_nginx.yml
四、常见问题与故障排除
4.1 依赖冲突
问题
:安装软件时提示依赖冲突。
解决方案
:
检查冲突的包:
sudo dnf deplist 尝试更新系统:
sudo dnf update
使用
–skip-broken
跳过有问题的包(不推荐,可能破坏系统)
使用
dnf history
查看最近的操作并回滚:
sudo dnf history list
sudo dnf history undo 4.2 仓库不可用
问题
:
sudo dnf update
报错,提示仓库无法连接。
解决方案
:
检查网络连接:
ping 8.8.8.8
检查仓库配置:
sudo dnf repolist all
临时禁用有问题的仓库:
sudo dnf –disablerepo= update
检查系统时间:
date
,不正确的时间会导致 SSL 证书验证失败。
4.3 软件包签名验证失败
问题
:
GPG key retrieval failed
或类似错误。
解决方案
:
导入仓库的 GPG 密钥:
sudo rpm –import /etc/pki/rpm-gpg/RPM-GPG-KEY-AlmaLinux-9
对于第三方仓库,从其官网下载并导入密钥。
4.4 磁盘空间不足
问题
:安装大软件包时提示空间不足。
解决方案
:
清理缓存:
sudo dnf clean all
查找大文件:
sudo du -sh /var/cache/dnf/* | sort -hr
移除旧内核:
sudo dnf remove $(dnf repoquery –installonly –latest-limit=-1)
扩展磁盘分区(如果使用 LVM)。
五、最佳实践与安全建议
优先使用官方仓库
:官方仓库的软件包经过测试和签名,安全性更高。
定期更新
:设置定时任务自动更新安全补丁。
# 编辑 crontab
sudo crontab -e
# 添加以下行,每周日凌晨 3 点更新
0 3 * * 0 /usr/bin/dnf update -y
使用
dnf history
追踪变更
:记录所有安装、更新、删除操作,便于审计和回滚。
最小化安装
:只安装必要的软件包,减少攻击面。
备份配置文件
:在安装或更新关键软件(如数据库、Web 服务器)前,备份其配置文件。
sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup.$(date +%Y%m%d)
六、总结
AlmaLinux 的软件安装体系强大而灵活,从基础的
dnf
命令到高级的源代码编译、容器化部署和自动化管理,覆盖了各种场景。掌握这些技巧,你将能够高效、安全地管理 AlmaLinux 系统上的软件。
关键要点回顾
:
基础
:
dnf install/remove/update/search
是日常操作的核心。
扩展
:EPEL 等第三方仓库是获取更多软件的关键。
高级
:源代码编译、Snap/Flatpak、Docker 和 Ansible 提供了更多灵活性和自动化能力。
安全
:始终优先使用官方仓库,定期更新,并善用
dnf history
进行审计。
通过本指南的系统学习和实践,你将不再为 AlmaLinux 的软件安装问题所困扰,能够从容应对各种安装挑战。