第一次接触openEuler时,我和大多数Linux新手一样充满疑问:这个系统到底有什么特别之处?经过实际使用后,我发现它有几个明显的优势。首先,作为国产开源操作系统,它对中文用户非常友好,系统内置的中文输入法和字体支持都很完善。其次,它基于稳定的Linux内核,同时针对企业级应用做了大量优化,在性能和安全性上都有不错的表现。
最让我惊喜的是它的软件生态。通过DNF包管理器,可以轻松安装各种开发工具和环境。比如Python、GCC、Git这些常用工具都能一键安装。而且openEuler的社区非常活跃,遇到问题在论坛提问通常都能得到快速响应。这对于像我这样的新手来说特别重要。
刚开始我犯了个错误,直接下载了最新版的openEuler 21.09。结果发现这个版本还在测试阶段,遇到了不少兼容性问题。后来改用长期支持版(LTS)的20.03,稳定性立刻提升不少。建议新手都从LTS版本开始,虽然功能可能不是最新,但bug少、文档全,学习成本低很多。
镜像下载地址建议直接访问openEuler官网。第三方镜像站虽然下载速度快,但有时会出现文件损坏的情况。我第一次安装失败就是因为从非官方渠道下载的镜像有问题。
我尝试过VMware和VirtualBox两种虚拟机平台。VMware性能更好,但VirtualBox对新手更友好。特别是网络配置部分,VirtualBox的NAT模式基本开箱即用,而VMware需要额外设置桥接网络。
虚拟机配置有几个关键点:
安装界面是英文的,但别担心,进入系统后可以改成中文。分区方案建议选择自动分区,除非你有特殊需求。设置root密码时要记牢,这是系统的最高权限账户。
安装完成后首次启动,你会发现只有命令行界面。这是openEuler的默认配置,因为服务器版本通常不需要图形界面。但作为开发环境,图形界面还是很有必要的。
系统刚装好时,直接运行yum update很可能会失败。这是因为默认的软件源可能访问不稳定。我推荐使用清华大学的镜像源,速度又快又稳定。
配置方法很简单:
bash复制sudo vim /etc/yum.repos.d/openEuler.repo
把内容替换为:
code复制[base]
name=openEuler
baseurl=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-20.03-LTS/OS/x86_64/
enabled=1
gpgcheck=1
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/openeuler/openEuler-20.03-LTS/OS/x86_64/RPM-GPG-KEY-openEuler
保存后运行sudo dnf makecache更新缓存,之后就能正常安装软件了。
openEuler支持多种桌面环境,我选择了最熟悉的GNOME。安装命令如下:
bash复制sudo dnf install gnome-shell gdm gnome-session gnome-terminal
安装完成后还需要设置自动启动图形界面:
bash复制sudo systemctl enable gdm
sudo systemctl set-default graphical.target
重启后就能看到熟悉的图形界面了。如果遇到登录循环的问题,可能是缺少Xsession文件,可以从GitHub上找一个合适的版本放到/etc/gdm/目录下。
编译内核前一定要先备份!我吃过没备份的亏,系统崩溃后只能重装。备份命令很简单:
bash复制tar czvf /root/boot_backup.tar.gz /boot
还需要安装编译工具链:
bash复制sudo dnf install gcc make ncurses-devel elfutils-libelf-devel openssl-devel bc
openEuler的内核源码可以在Gitee上找到。下载后解压到/usr/src目录:
bash复制sudo tar -xvf kernel.tar.gz -C /usr/src/
cd /usr/src/linux-5.10.0
复制当前内核的配置作为基础:
bash复制cp /boot/config-$(uname -r) .config
然后运行配置界面:
bash复制make menuconfig
这个界面可能有点吓人,但新手保持默认配置就行。记得保存后再退出。
使用多核编译可以大幅节省时间:
bash复制make -j$(nproc)
这个步骤很耗时,在我的笔记本上花了近3小时。期间CPU温度会很高,建议做好散热。
编译完成后安装模块和新内核:
bash复制sudo make modules_install
sudo make install
我遇到了"未知类型名'time_t'"的错误。这是因为某些头文件没包含完整。解决方法是在相关文件开头添加:
c复制#include <linux/time.h>
另一个常见问题是磁盘空间不足。编译过程中会产生大量临时文件,确保至少有20GB的剩余空间。
创建一个简单的测试模块helloworld.c:
c复制#include <linux/module.h>
#include <linux/kernel.h>
MODULE_LICENSE("GPL");
static int __init hello_init(void)
{
printk(KERN_INFO "Hello world!\n");
return 0;
}
static void __exit hello_exit(void)
{
printk(KERN_INFO "Goodbye world!\n");
}
module_init(hello_init);
module_exit(hello_exit);
对应的Makefile:
makefile复制obj-m := helloworld.o
KDIR := /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KDIR) M=$(PWD) clean
编译模块:
bash复制make
加载模块:
bash复制sudo insmod helloworld.ko
查看输出:
bash复制dmesg | tail -n 5
应该能看到"Hello world!"的输出。卸载模块:
bash复制sudo rmmod helloworld
再用dmesg查看,会显示"Goodbye world!"。
每次修改后重新编译整个内核太耗时。如果只是修改了某个驱动模块,可以只编译该模块:
bash复制make drivers/char/mydriver.ko
内核崩溃时会有oops信息。要获取更详细的调试信息,可以开启内核调试选项:
bash复制echo 8 > /proc/sys/kernel/printk
默认内核配置包含了很多用不到的功能。可以通过menuconfig去掉不需要的模块,这样能减少内核体积,提高启动速度。特别是嵌入式开发时,精简内核很有必要。
经过几个月的使用,我总结了一些实用技巧:
sudo dnf updateopenEuler作为开发环境相当可靠。我现在的日常工作都在上面完成,从Web开发到系统编程都能胜任。特别是对Linux内核感兴趣的同学,openEuler提供了很好的学习平台。