在 ArchLinux VPS 上编译内核
2010年07月20日 | 标签: archlinux, kernel, vps, xen | 作者:vpsee
昨天我们有位 ArchLinux 用户遇到一个 OpenVPN 的问题,在他的 VPS 上安装和配置好 OpenVPN 后可以从自己电脑连上 VPN,但是不能用 VPN 出去(访问外部网站),VPSee 和用户一起排错发现配置 OpenVPN 时候忘了用 iptable 做 SNAT 或 MASQUERADE,进一步运行 iptables 报错,内核缺少 iptables 模块:
# iptables -t nat -A POSTROUTING -s 1.1.1.1 -j SNAT --to-source 2.2.2.2 can't initialize iptables table `nat': Table does not exist (do you need to insmod?) Perhaps iptables or your kernel needs to be upgraded.
找到问题就好办了,解决的办法也很容易,下载内核代码、配置 iptable 内核选项、重新编译内核。(本文已经发给客户,我们的客户可以按照这里的步骤自己编译和替换内核,如果怕麻烦的话也可以找我们要已经编译好的内核。我们争取对我们的客户遇到的问题都能写出文章和流程来帮助理解和解决,这样不但我们自己客户受益,对其他 VPS 用户也有所帮助。)
安装必要工具
编译内核需要一些工具,比如 gcc 编译器什么的:
# pacman -S make gcc patch xmlto docbook-xsl
有一点要注意的就是不是每个内核都可以在 Xen 上运行的,因为是半虚拟化所以必须使用针对 Xen 的 Linux 内核版本,还好,ArchLinux 已经为我们准备好了官方的 Xen 版本内核:
# wget http://aur.archlinux.org/packages/kernel26-xen/kernel26-xen.tar.gz # tar -xf kernel26-xen.tar.gz # cd kernel26-xen
修改 kernel26-xen/PKGBUILD 文件,去掉下面这行的注释:
# vi PKGBUILD pkgname=('kernel26-xen' 'kernel26-xen-headers') # Build kernel with a different name
编译和安装内核
如果打开 kernel26-xen/config 文件就会发现内核已经是为 Xen 配置好的,并且 iptable 相关选项已经是 m 状态(以内核模块的方式运行),如果不放心的话可以再次检查 CONFIG_IP_NF_IPTABLES=m 和 CONFIG_NF_NAT=m 等选项看看是否已经是 m 或 y 状态。在 ArchLinux 下编译和安装内核:
# makepkg --asroot ... ==> Creating package... -> Generating .PKGINFO file... -> Compressing package... ==> Finished making: kernel26-xen 2.6.34.1-1 (Mon Jul 19 15:15:05 EDT 2010) # pacman -U kernel26-xen-2.6.34.1-1-i686.pkg.tar.xz # pacman -U kernel26-xen-headers-2.6.34.1-1-i686.pkg.tar.xz
配置 grub 以启动新内核:
# vi /boot/grub/menu.lst ... timeout 5 default 0 title Xen for ArchLinux (VPSee) root (hd0,0) kernel /boot/vmlinuz26-xen root=/dev/xvda1 ro console=/dev/xvc0 initrd /boot/kernel26-xen.img ...
测试
重启系统后检查和测试新装的 Linux 内核是否有了 iptables 内核模块并安装 iptables 用户端工具:
# uname -r 2.6.34-xen # modprobe ip_tables # lsmod Module Size Used by ip_tables 9099 0 x_tables 10364 1 ip_tables evdev 6810 0 pcspkr 1383 0 rtc_core 11631 0 rtc_lib 1454 1 rtc_core ext3 108916 1 jbd 35426 1 ext3 mbcache 4250 1 ext3 # pacman -Syy iptables
你们的VPS还可以自己编译内核啊
这个好
嗯,Xen VPS 一般都可以自己编译内核。
archliunx 的 AUR 真是强啊。