在EC2上的Ubuntu中编译内核(没有错误,但没有图像,重启后没有变化)

时间:2011-11-11 02:12:54

标签: compilation amazon-ec2 linux-kernel ubuntu-10.04

我需要在EC2(带EBS)的Ubuntu Lucid(10.04)服务器上将内核计时器从250HZ更新为1000HZ,以提高voip通话质量。

根据我的阅读,这样做的方法是下载内核源代码,配置它,然后安装它。

我找到了几个不错的教程,这些教程非常适合我的设置,其中最好的是:

这导致我使用了以下几组命令,这些命令运行良好,使.deb文件没有明显的错误。但是当我重新启动服务器时,定时器频率尚未更新。

sudo apt-get build-dep linux-image-$(uname -r)
sudo apt-get build-dep linux
sudo apt-get install fakeroot build-essential
sudo apt-get install crash kexec-tools makedumpfile kernel-wedge
sudo apt-get install libncurses5 libncurses5-dev
sudo apt-get install libelf-dev asciidoc binutils-dev kernel-package

cd /usr/src
sudo apt-get source linux-image-$(uname -r)

cd linux-*
sudo make menuconfig
# Processor type and features -> Timer frequency -> change to 1000HZ -> Exit -> Exit -> Yes (Save)

fakeroot debian/rules clean
fakeroot debian/rules binary-headers
fakeroot debian/rules binary-indep   #This does the headers, docs, and source

#check deb 2-3 files were created
cd ..
ls *.deb

sudo dpkg -i linux-*.deb
#reboot

修改

花了一些时间与jjohansen在irc#ubuntu-kernel上,并且能够在他的帮助下找到我的错误 - 看起来我应该在clean和build之间完成配置步骤。另外,他建议总是使用git中的源而不是包,所以这些是我在上面所做的新命令:

cd /usr/src
# This is 700mb so it takes a while to download and set up
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-lucid.git
cd ubuntu*
git checkout --track -b ec2 origin/ec2

fakeroot debian/rules clean
fakeroot debian/rules editconfigs
fakeroot debian/rules binary
#Takes about 40min

4 个答案:

答案 0 :(得分:2)

John Johansen(Canonical的内核黑客)认为你应该能够在使用Ubuntu的EC2实例上构建和运行自己的内核。

请参阅我在2009年提交的1000Hz EC2内核请求中的jjohansen的注释:

https://bugs.launchpad.net/ubuntu-on-ec2/+bug/365233

您需要确保从最近使用pvgrub的Ubuntu AMI开始。

答案 1 :(得分:1)

感谢Eric Hammond先生,

您将需要哪个内核取决于您使用的是哪个版本的Ubuntu。对于Lucid - Maverick,您需要使用-ec2内核源代码。所需的支持被移动到常规内核树中,用于natty和oneric。

所以你需要做

 sudo apt-get source linux-ec2

git clone git://kernel.ubuntu.com/ubuntu/ubuntu-lucid.git

cd into the source directory

fakeroot debian/rules clean
fakeroot debian/rules binary

对于Lucid,您还必须确保已完成更新或使用当前图像,因为在Lucid发布后,对pv-grub的支持已添加。

答案 2 :(得分:1)

引用Redzarf的终端命令,包括他的编辑以及一些小的必要补充,继承人在亚马逊ec2 vanilla安装的Ubuntu Server Cloud Guest 10.04 LTS(Lucid Lynx)64x

# Make yourself root
sudo su

# Update source list:
aptitude update

# Upgrade everything:
aptitude upgrade 

# Install dependencies:
apt-get build-dep linux-image-$(uname -r)
apt-get build-dep linux
apt-get install fakeroot build-essential
apt-get install crash kexec-tools makedumpfile kernel-wedge
apt-get install libncurses5 libncurses5-dev
apt-get install libelf-dev asciidoc binutils-dev kernel-package
apt-get install git-core

cd /usr/src
git clone git://kernel.ubuntu.com/ubuntu/ubuntu-lucid.git 
cd ubuntu*
git checkout --track -b ec2 origin/ec2
fakeroot debian/rules clean
fakeroot debian/rules editconfigs

# Configuration window should now appear, do the following:

Select YES

# Navigate to:
Processor type and features -> Timer frequency
# Select the 1000HZ frequency 
Exit 
Exit 
Yes (Save)

#After saving and returning to prompt it may ask you to do it again for i386, select yes and repeat!

# Recompile:
fakeroot debian/rules binary 

#Check if your deb 2-3 files were created
cd ..
ls *.deb
sudo dpkg -i linux-*.deb

#reboot
reboot

#Check your new Kernel version
uname -r

#Check if Kernel HZ value change persisted:
cat /boot/config-`uname -r` | grep HZ

#If value 1000HZ=yes:

Done!;)

- ===<快速提示> === -

如果您运行的是“按需微实例”,则编译时间约为 7小时,成本约为 $ 0.14! 另一方面,如果你想节省一些时间并在 $ 0.21 12min 下重新编译,你可以这样做:

  • 预留高CPU额外大型竞价型实例(20x ec2计算单元,7GB内存)
  • 使用上述命令(12分钟)重新编译内核
  • 重新编译完成后,拍摄现场实例的ebs卷
  • 的快照
  • 等待快照完成(几分钟)
  • 终止专案实例
  • 从快照创建新卷(nichname:Volume X),同时注意卷ID!
  • 转到实例>创建新的EBS实例
    • 这将是您的Asterisk服务器将在
    • 上运行的新实例
    • 必须来自相同的Base AMI,并且与X卷相同的区域) - 现在将创建新实例以及相应的EBS卷
  • 停止新实例
  • 转到卷>分离新实例的相应EBS卷
  • 分离后,删除该卷
  • 选择卷X>附加到新EBS实例(设备ID必须为:/ dev / sda1)
  • 转到实例>启动新实例
  • 如果您有弹性IP,请重新关联。
  • 检查一切是否正常
  • 如果所有内容都已检出,请创建另一个快照进行备份!

完成! ;)

大声喊叫,感谢Redzarf,Eric Hammond和John Johansen!

答案 3 :(得分:0)

你的第二个最佳猜测是正​​确的。亚马逊启动Linux内核的方式对于他们的域来说是特殊的,它确实如你所提到的 - 基于特殊版本的grub。他们已就此问题发布了资源,请阅读Enabling Your Own Linux Kernels