|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
引言
Rocky Linux是一个社区支持的企业级操作系统,作为CentOS的替代品,由CentOS创始人Gregory Kurtzer领导开发,旨在与Red Hat Enterprise Linux (RHEL)保持二进制兼容。通过源码安装Rocky Linux,用户可以更深入地了解系统的工作原理,同时获得更高的自定义性和优化空间。
源码安装相比二进制安装有以下优势:
• 完全控制系统的组件和功能
• 可以针对特定硬件进行优化
• 移除不必要的组件,提高系统效率
• 学习Linux系统内部工作原理的绝佳机会
本教程将详细介绍如何从源码安装Rocky Linux,并构建一个个性化的Linux系统环境。
准备工作
在开始源码安装之前,我们需要确保满足以下条件:
系统要求
• CPU:64位处理器(x86_64或ARM64)
• 内存:至少4GB RAM(推荐8GB或更多)
• 存储空间:至少20GB可用空间(推荐50GB或更多)
• 网络:稳定的互联网连接(用于下载源码和依赖包)
必要工具
你需要一个现有的Linux系统来编译Rocky Linux。可以使用任何主流的Linux发行版,如Ubuntu、Fedora或已有的Rocky Linux系统。
首先,安装必要的编译工具和依赖:
- # 对于基于RHEL的系统(如CentOS、Fedora)
- sudo dnf groupinstall "Development Tools"
- sudo dnf install wget curl git ncurses-devel openssl-devel bc bison flex elfutils-libelf-devel
- # 对于基于Debian的系统(如Ubuntu)
- sudo apt update
- sudo apt install build-essential wget curl git libncurses-dev libssl-dev bc bison flex libelf-dev
复制代码
创建工作目录
创建一个专门的工作目录来存放源码和编译文件:
- mkdir -p ~/rocky-linux-build
- cd ~/rocky-linux-build
复制代码
获取Rocky Linux源码
Rocky Linux的源码可以从其官方Git仓库获取。以下是获取源码的步骤:
克隆Rocky Linux源码仓库
- # 克隆主要的Rocky Linux源码仓库
- git clone https://github.com/rocky-linux/rocky.git
- # 如果需要特定的版本,可以检出对应的标签
- cd rocky
- git checkout -b R8 origin/R8 # 对于Rocky Linux 8
- # 或者
- git checkout -b R9 origin/R9 # 对于Rocky Linux 9
复制代码
获取必要的SRPM包
Rocky Linux使用SRPM(Source RPM)包来分发源码。我们需要获取这些SRPM包并解压它们:
- # 创建存放SRPM的目录
- mkdir -p ~/rocky-linux-build/srpms
- cd ~/rocky-linux-build/srpms
- # 使用dnf下载SRPM包
- sudo dnf install yum-utils
- yumdownloader --source rocky-release
- # 解压SRPM包
- rpm -ivh rocky-release-*.src.rpm
复制代码
编译环境的配置
在开始编译之前,我们需要配置编译环境。这包括设置编译选项、安装必要的依赖和准备构建工具链。
安装mock构建工具
Mock是一个用于构建RPM包的工具,它可以在隔离的环境中构建软件包,确保构建过程的纯净和一致性。
- # 安装mock
- sudo dnf install mock
- # 将用户添加到mock组
- sudo usermod -a -G mock $USER
- # 重新登录以使组更改生效
- newgrp mock
复制代码
配置mock
创建一个自定义的mock配置文件:
- # 创建自定义mock配置
- cp /etc/mock/rocky-8-x86_64.cfg ~/rocky-linux-build/custom-rocky.cfg
- # 编辑配置文件
- nano ~/rocky-linux-build/custom-rocky.cfg
复制代码
在配置文件中,你可以根据需要调整各种选项,例如:
- config_opts['root'] = 'rocky-8-x86_64'
- config_opts['target_arch'] = 'x86_64'
- config_opts['legal_host_arches'] = ('x86_64',)
- config_opts['chroot_setup_cmd'] = 'install @buildsys-build'
- config_opts['dist'] = 'el8' # 对于Rocky Linux 8
- config_opts['releasever'] = '8'
- config_opts['package_manager'] = 'dnf'
- config_opts['use_nspawn'] = False
复制代码
准备构建根文件系统
使用mock初始化构建环境:
- # 初始化构建环境
- mock -r ~/rocky-linux-build/custom-rocky.cfg init
- # 更新构建环境中的软件包
- mock -r ~/rocky-linux-build/custom-rocky.cfg update
复制代码
源码编译过程详解
现在我们开始编译Rocky Linux的源码。这个过程可能需要一些时间,具体取决于你的系统性能。
编译核心系统包
首先,我们需要编译核心系统包,这些包构成了Rocky Linux的基础。
- # 创建构建目录
- mkdir -p ~/rocky-linux-build/rpmbuild/{SOURCES,SPECS,SRPMS,RPMS,BUILD,BUILDROOT}
- # 进入源码目录
- cd ~/rocky-linux-build/rocky
- # 开始编译核心包
- mock -r ~/rocky-linux-build/custom-rocky.cfg --rebuild rocky-release-*.src.rpm
复制代码
编译内核
Linux内核是系统的核心,我们需要单独编译它:
- # 获取内核源码
- cd ~/rocky-linux-build
- git clone https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
- cd linux
- # 检出稳定版本
- git checkout linux-5.15.y # 或者其他稳定版本
- # 配置内核
- make mrproper
- cp /boot/config-$(uname -r) .config # 使用当前内核配置作为起点
- make menuconfig # 可选:手动调整内核选项
- # 编译内核
- make -j$(nproc) # 使用所有可用的CPU核心进行编译
- # 安装内核模块
- sudo make modules_install
- # 安装内核
- sudo make install
复制代码
编译系统工具和库
接下来,我们需要编译系统工具和库:
- # 创建一个脚本来批量编译包
- cat > ~/rocky-linux-build/build-packages.sh << 'EOF'
- #!/bin/bash
- # 定义要编译的包列表
- PACKAGES=(
- "filesystem"
- "setup"
- "glibc"
- "zlib"
- "openssl"
- "systemd"
- "bash"
- "coreutils"
- "rpm"
- "dnf"
- )
- # 创建日志目录
- mkdir -p ~/rocky-linux-build/logs
- # 编译每个包
- for package in "${PACKAGES[@]}"; do
- echo "Building $package..."
- mock -r ~/rocky-linux-build/custom-rocky.cfg --rebuild $package-*.src.rpm > ~/rocky-linux-build/logs/$package.log 2>&1
- if [ $? -eq 0 ]; then
- echo "$package built successfully."
- else
- echo "Error building $package. Check the log file for details."
- fi
- done
- echo "All packages built."
- EOF
- # 使脚本可执行
- chmod +x ~/rocky-linux-build/build-packages.sh
- # 运行脚本
- ./build-packages.sh
复制代码
系统安装步骤
编译完成后,我们需要安装系统。这包括创建分区、复制文件和配置引导加载程序。
准备安装介质
首先,我们需要创建一个可启动的安装介质:
- # 创建一个目录来存放安装文件
- mkdir -p ~/rocky-linux-build/install-media
- cd ~/rocky-linux-build/install-media
- # 复制编译好的RPM包
- cp ~/rocky-linux-build/custom-rocky.cfg/result/*.rpm .
- # 创建一个简单的initramfs
- mkdir -p initramfs/{bin,sbin,etc,proc,sys,usr/bin,usr/sbin}
- # 复制必要的二进制文件
- cp /bin/bash initramfs/bin/
- cp /bin/sh initramfs/bin/
- cp /sbin/init initramfs/sbin/
- cp /usr/bin/dmesg initramfs/usr/bin/
- cp /usr/bin/mount initramfs/usr/bin/
- cp /usr/bin/umount initramfs/usr/bin/
- cp /usr/sbin/chroot initramfs/usr/sbin/
- # 复制库文件
- for bin in $(find initramfs -type f -executable); do
- ldd $bin | grep -o "/lib[^ ]*" | xargs -I {} cp -v {} initramfs$(dirname {})
- done
- # 创建init脚本
- cat > initramfs/init << 'EOF'
- #!/bin/bash
- # 挂载必要的文件系统
- mount -t proc proc /proc
- mount -t sysfs sysfs /sys
- mount -t devtmpfs devtmpfs /dev
- # 找到并挂载根文件系统
- # 这里需要根据实际情况调整
- mkdir /rootfs
- mount /dev/sda2 /rootfs
- # 切换到新系统
- exec chroot /rootfs /sbin/init
- EOF
- chmod +x initramfs/init
- # 创建initramfs镜像
- cd initramfs
- find . | cpio -o -H newc | gzip > ../initramfs.cpio.gz
- cd ..
- # 创建内核和initramfs的ISO镜像
- mkdir -p iso/isolinux
- cp /boot/vmlinuz-* iso/vmlinuz
- cp initramfs.cpio.gz iso/
- cp /usr/share/syslinux/isolinux.bin iso/isolinux/
- cp /usr/share/syslinux/ldlinux.c32 iso/isolinux/
- # 创建isolinux配置文件
- cat > iso/isolinux/isolinux.cfg << 'EOF'
- default rocky
- timeout 100
- label rocky
- linux vmlinuz
- append initrd=initramfs.cpio.gz root=/dev/sda2
- EOF
- # 创建ISO镜像
- mkisofs -o rocky-linux-install.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table iso/
复制代码
分区和格式化磁盘
在安装系统之前,我们需要对磁盘进行分区和格式化:
- # 假设我们要安装到/dev/sda
- # 使用fdisk进行分区
- sudo fdisk /dev/sda << EOF
- o # 创建新的空DOS分区表
- n # 新建分区
- p # 主分区
- 1 # 分区号
- # 默认起始扇区
- +512M # 512MB用于/boot分区
- n # 新建分区
- p # 主分区
- 2 # 分区号
- # 默认起始扇区
- # 默认结束扇区(使用剩余空间)
- w # 写入更改并退出
- EOF
- # 格式化分区
- sudo mkfs.ext4 /dev/sda1 # /boot分区
- sudo mkfs.ext4 /dev/sda2 # 根分区
- # 挂载分区
- sudo mkdir -p /mnt/rocky
- sudo mount /dev/sda2 /mnt/rocky
- sudo mkdir /mnt/rocky/boot
- sudo mount /dev/sda1 /mnt/rocky/boot
复制代码
安装系统文件
现在我们可以安装系统文件了:
- # 创建RPM数据库
- sudo rpm --root /mnt/rocky --initdb
- # 安装RPM包
- cd ~/rocky-linux-build/install-media
- sudo rpm --root /mnt/rocky -ivh *.rpm
- # 安装内核
- sudo cp /boot/vmlinuz-* /mnt/rocky/boot/vmlinuz
- sudo cp ~/rocky-linux-build/initramfs.cpio.gz /mnt/rocky/boot/initramfs.cpio.gz
- # 配置fstab
- cat << EOF | sudo tee /mnt/rocky/etc/fstab
- /dev/sda1 /boot ext4 defaults 0 0
- /dev/sda2 / ext4 defaults 0 0
- EOF
- # 配置网络
- cat << EOF | sudo tee /mnt/rocky/etc/sysconfig/network-scripts/ifcfg-eth0
- DEVICE=eth0
- BOOTPROTO=dhcp
- ONBOOT=yes
- EOF
- # 设置root密码
- sudo chroot /mnt/rocky passwd
复制代码
配置引导加载程序
最后,我们需要配置引导加载程序:
- # 安装GRUB
- sudo chroot /mnt/rocky grub2-install /dev/sda
- # 生成GRUB配置
- sudo chroot /mnt/rocky grub2-mkconfig -o /boot/grub2/grub.cfg
- # 卸载分区
- sudo umount /mnt/rocky/boot
- sudo umount /mnt/rocky
复制代码
个性化配置
现在我们已经完成了基本的系统安装,接下来可以进行个性化配置。
系统服务配置
- # 启用必要的服务
- sudo systemctl enable NetworkManager
- sudo systemctl enable sshd
- # 禁用不必要的服务
- sudo systemctl disable postfix
- sudo systemctl disable avahi-daemon
复制代码
桌面环境安装(可选)
如果你需要图形界面,可以安装一个桌面环境:
- # 安装X Window System
- sudo dnf groupinstall "X Window System"
- # 安装GNOME桌面环境
- sudo dnf groupinstall "GNOME Desktop Environment"
- # 或者安装KDE桌面环境
- sudo dnf groupinstall "KDE Plasma Workspaces"
- # 设置图形界面为默认启动目标
- sudo systemctl set-default graphical.target
复制代码
用户和权限配置
- # 创建新用户
- sudo useradd -m -G wheel your_username
- sudo passwd your_username
- # 配置sudo权限
- echo "%wheel ALL=(ALL) ALL" | sudo tee -a /etc/sudoers
复制代码
软件源配置
- # 备份原有的软件源配置
- sudo cp /etc/yum.repos.d/Rocky-BaseOS.repo /etc/yum.repos.d/Rocky-BaseOS.repo.bak
- # 编辑软件源配置
- sudo nano /etc/yum.repos.d/Rocky-BaseOS.repo
复制代码
在配置文件中,你可以添加或修改软件源,例如:
- [baseos]
- name=Rocky Linux $releasever - BaseOS
- mirrorlist=https://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever
- gpgcheck=1
- enabled=1
- gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
复制代码
内核参数调优
- # 编辑GRUB配置
- sudo nano /etc/default/grub
- # 修改GRUB_CMDLINE_LINUX,添加或调整参数
- GRUB_CMDLINE_LINUX="crashkernel=auto resume=/dev/mapper/rl-swap rd.lvm.lv=rl/root rd.lvm.lv=rl/swap rhgb quiet"
- # 更新GRUB配置
- sudo grub2-mkconfig -o /boot/grub2/grub.cfg
复制代码
系统安全加固
- # 安装防火墙
- sudo dnf install firewalld
- sudo systemctl enable --now firewalld
- # 配置防火墙规则
- sudo firewall-cmd --add-service=ssh --permanent
- sudo firewall-cmd --reload
- # 安装SELinux管理工具
- sudo dnf install setroubleshoot-server
- # 检查SELinux状态
- sestatus
- # 如果需要,可以调整SELinux模式
- sudo setenforce 1
复制代码
常见问题及解决方案
在源码安装过程中,你可能会遇到一些常见问题。以下是一些问题及其解决方案:
编译错误
问题:编译过程中出现错误,提示缺少依赖库。
解决方案:
- # 安装缺失的依赖
- sudo dnf builddep <package_name>
- # 或者手动安装
- sudo dnf install <missing_library>
复制代码
内核启动失败
问题:系统无法启动,出现内核恐慌。
解决方案:
- # 检查内核配置
- make menuconfig
- # 确保必要的驱动程序已编译进内核或作为模块
- # 重新编译内核
- make -j$(nproc)
- make modules_install
- make install
复制代码
包依赖问题
问题:安装RPM包时出现依赖错误。
解决方案:
- # 使用--nodeps选项强制安装(不推荐)
- sudo rpm -ivh --nodeps <package_name>
- # 或者解决依赖问题
- sudo dnf install <missing_dependency>
复制代码
引导加载程序问题
问题:GRUB无法正确安装或配置。
解决方案:
- # 重新安装GRUB
- sudo grub2-install /dev/sda
- # 重新生成GRUB配置
- sudo grub2-mkconfig -o /boot/grub2/grub.cfg
- # 检查/etc/fstab是否正确
- cat /etc/fstab
复制代码
总结
通过本教程,你已经学会了如何从源码安装Rocky Linux,并构建一个个性化的Linux系统环境。源码安装虽然比二进制安装更复杂,但它提供了更高的自定义性和优化空间。
源码安装的主要优势包括:
• 完全控制系统的组件和功能
• 可以针对特定硬件进行优化
• 移除不必要的组件,提高系统效率
• 学习Linux系统内部工作原理的绝佳机会
随着你对Linux系统的深入了解,你可以进一步优化和定制你的系统,例如:
• 编译特定版本的软件以满足你的需求
• 调整内核参数以提高系统性能
• 添加或删除系统服务以满足你的使用场景
希望本教程能帮助你构建一个符合你需求的个性化Rocky Linux系统。如果你有任何问题或需要进一步的帮助,请参考Rocky Linux官方文档或社区论坛。 |
|