Red Hat Enterprise Linux 7.0 是 Red Hat 的下一代操作系统完整套件,旨在用于关键任务企业级计算以及顶级企业级软件和硬件零售商认证。
基于内核的虚拟化
使用 virtio-blk-data-plane 提高快 I/O性能
在 Red Hat Enterprise Linux 7.0 中,virtio-blk-data-plane I/O 虚拟化功能是作为技术预览使用。这个功能将 QEMU 扩展至在为 I/O 性能优化的专用线程中执行磁盘 I/O。
PCI 桥接
之前 QEMU 最多可支持 32 个 PCI 插槽。Red Hat Enterprise Linux 7.0 采用 PCI 桥接技术,可让用户配置 32 个以上的 PCI 设备。注:不支持桥接后的设备热插拔。
QEMU 沙箱
Red Hat Enterprise Linux 7.0 使用内核系统调用过滤加强 KVM 虚拟化安全性,这提高了主机系统与虚拟机之间的独立性。
支持 QEMU 虚拟 CPU 热添加
Red Hat Enterprise Linux 7.0 中的 QEMU 提供虚拟 CPU(vCPU)热添加支持。可在运行的虚拟机中添加虚拟 CPU(vCPUS)以满足与负载关联的负载要求或者保持服务等级协议(SLA)。注:只在使用 pc-i440fx-rhel7.0.0 机器类型的虚拟机中支持 vCPU 热插拔,这是 Red Hat Enterprise Linux 7.0 中的默认机器类型。
多队列 NIC
多队列 virtio_net 提供更好的可延伸性。每个虚拟 CPU 都有独立的传输或者接收队列以及可在不影响其他虚拟 CPU 的情况下使用的独立中断。
多队列 virtio_scsi
多队列 virtio_net 提供更好的可延伸性。每个虚拟 CPU 都有独立的队列以及可在不影响其他虚拟 CPU 的情况下使用的独立中断。
Q35 机型需要 KVM 虚拟机中的 PCI 快速总线支持,它是作为技术预览在 Red Hat Enterprise Linux 7.0 中提供。包含 AHCI 总线也只能在 Q35 机型中使用,同样也是技术预览。
基于 VFIO 的 PCI 设备分配
虚拟功能 I/O(VFIO)用户空间驱动程序界面为 KVM 虚拟机提供改进的 PCI 设备分配解决方案。VFIO 提供内核级设备分离强化,提高设备访问的安全性,并与安全引导等功能兼容。VFIO 替换了 Red Hat Enterprise Linux 6 中使用的 KVM 设备分配机制。
Intel VT-d 大页面
在 Red Hat Enterprise Linux 7.0 的 KVM 虚拟机中使用虚拟功能 I/O(VFIO)设备分配时,使用 2MB 页面作为输入/输出内存管理单位(IOMMU),因此可减少 I/O 操作的转译后备缓存(translation lookaside buffer ,TLB)的消耗。计划在 Red Hat Enterprise Linux 7.0 中提供 1GB 页面支持。VT-d 大页面功能支持目前仅限于 Intel 的平台。
KVM 时钟获取时间性能
在 Red Hat Enterprise Linux 7.0 中加强了 vsyscall 机制以支持 KVM 虚拟机更迅速地从用户控件读取时钟。Red Hat Enterprise Linux 7.0 主机中运行的 Red Hat Enterprise Linux 7.0 虚拟机可体验到经常读取时间的应用程序的性能提高。
图像格式的 QCOW2 版本 3
Red Hat Enterprise Linux 7.0 添加对图像格式的 QCOW2 版本 3 的支持
改进的实时迁移统计
现在可使用实时迁移的有关信息分析和调试性能。改进的统计包括预期关机、关机或者脏页面比例。
实时迁移线程
已将 KVM 实时迁移功能改进为支持线程处理。
字符设备和串行端口的热插拔
目前 Red Hat Enterprise Linux 7.0 支持为新字符设备热插拔新串行端口。
模拟 AMD Opteron G5
KVM 现在可以模拟 AMD Opteron G5 处理器。
在 KVM 虚拟机中支持新的 Intel 指令
KVM 虚拟机可以使用 Intel 22nm 处理器支持的新指令。这些包括:
浮点乘加器,
256 位整数向量,
大端移动指令(MOVBE)支持,
或者 HLE/HLE+。
VPC 和 VHDX 文件格式
Red Hat Enterprise Linux 7.0 中的 KVM 包括对微软虚拟 PC(VPC)和微软 Hyper-V 虚拟硬盘(VHDX)文件格式的支持。
libguestfs 新功能
libguestfs 是一组访问和修改虚拟机磁盘映像的工具。Red Hat Enterprise Linux 7.0 中的libguestfs 包括大量改进,最主要的包括:
使用 SELinux 或者 sVirt 包含的安全虚拟化,保证加强针对恶意和畸形磁盘映像的安全性。
可检查和修改远程磁盘,最开始是使用网络块设备(NBD)。
在某些程序中可进行磁盘热插拔以便获得更好的性能。
WHQL 认证的 virtio-win 驱动程序
Red Hat Enterprise Linux 7.0 包括用于最新微软 Windows 虚拟机,即 Microsoft Window 8, 8.1, 2012 和 2012 R2 的 Windows 硬件质量实验室(WHQL)认证的 virtio-win 驱动程序。
Xen
Red Hat Enterprise Linux 7.0 Xen HVM 虚拟机
用户现在可以在广受欢迎的 Xen 环境中使用 Red Hat Enterprise Linux 7.0 作为虚拟机。
Hyper-V
Red Hat Enterprise Linux 7.0 托管的第二代虚拟机
Red Hat Enterprise Linux 7.0 可作为 Microsoft Hyper-V Server 2012 R2 主机中的第二代虚拟机。除上一代虚拟机支持的功能外,第二代提供了虚拟机中的新功能,例如:安全引导,使用 SCSI 虚拟硬盘引导或者 UEFI 固件支持。
Red Hat Enterprise Linux 7.0 是 Red Hat 的下一代操作系统完整套件,旨在用于关键任务企业级计算以及顶级企业级软件和硬件零售商认证。
集群是多台计算机(节点)一同工作以便提高重要产品服务的可靠性、可扩展性和可用性。可将使用 Red Hat Enterprise Linux 7.0 的高可用性根据性能、高可用性、负载平衡以及文件共享的不同需要采用各种不同的配置进行部署。注:Red Hat Enterprise Linux 7.0 负载平衡现在是基础 Red Hat Enterprise Linux 的一部分。
Pacemaker 集群管理器
Red Hat Enterprise Linux 7.0 使用 Pacemaker 替换 rgmanager 进行集群资源管理以及从节点失败中恢复。Pacemaker 的优点包括:
资源配置的自动同步和版本管理。
灵活的资源和 fencing 模式可与用户环境更紧密地对应。
可使用 fencing 恢复资源层失败。
基于时间的配置选项。
在多节点中运行同一资源的能力。例如:网页服务器或者集群文件系统。
在两个不同模式之一的多个节点中运行同一资源的能力。例如:同步资源和目标。
Pacemaker 不需要分布式锁管理程序。
仲裁丢失或者形成多个分区时的可配置行为。
使用 keepalived 和 HAProxy 替换 Piranha
Red Hat Enterprise Linux 7.0 使用 keepalived 和 HAProxy 替换了负载平衡程序 Piranha。keepalived 软件包提供简单且强大的负载平衡和高可用功能。负载平衡框架依赖大家熟知且广泛使用的 Linux 虚拟服务器内核模块,提供四级网络负载平衡。keepalived 守护进程在负载平衡的服务器池中根据其状态采用一组状态检查程序。keepalived 守护进程还采用虚拟路由器冗余协议(VRRP),允许路由器或者管理器故障切换以便提供高可用性。HAProxy 为 TCP 和 HTTP 应用程序提供一个可靠的高性能网络负载平衡程序。它特别适用于在需要持久性或者 Layer7 处理时有非常高负载的网页。
点对点隧道协议 (PPTP) 是由包括微软和3Com等公司组成的PPTP论坛开发的一种点对点隧道协,基于拨号使用的PPP协议使用PAP或CHAP之类的加密算法,或者使用Microsoft的点对点加密算法MPPE。其通过跨越基于 TCP/IP 的数据网络创建 VPN 实现了从远程客户端到专用企业服务器之间数据的安全传输。PPTP 支持通过公共网络(例如 Internet)建立按需的、多协议的、虚拟专用网络。PPTP 允许加密 IP 通讯,然后在要跨越公司 IP 网络或公共 IP 网络(如 Internet)发送的 IP 头中对其进行封装。
OpenVPN使用通用网络协议(TCP与UDP)的特点使它成为IPsec等协议的理想替代,尤其是在ISP(Internet service provider)过滤某些特定VPN协议的情况下。在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择 TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。
Checking your system to see if IPsec got installed and started correctly:
Version check and ipsec on-path [OK]
Linux Openswan U2.6.28/K2.6.32-32-generic-pae (netkey)
Checking for IPsec support in kernel [OK]
NETKEY detected, testing for disabled ICMP send_redirects [OK]
NETKEY detected, testing for disabled ICMP accept_redirects [OK]
Checking that pluto is running [OK]
Pluto listening for IKE on udp 500 [OK]
Pluto listening for NAT-T on udp 4500 [OK]
Checking for 'ip' command [OK]
Checking for 'iptables' command [OK]
Opportunistic Encryption Support [DISABLED]
在 /etc/init.d 下创建一个名为 ipsec.vpn 的文件,内容如下:
case "$1" in
start)
echo "Starting my Ipsec VPN"
iptables -t nat -A POSTROUTING -o eth0 -s 10.152.2.0/24 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/ipsec start
/etc/init.d/xl2tpd start
;;
stop)
echo "Stopping my Ipsec VPN"
iptables --table nat --flush
echo 0 > /proc/sys/net/ipv4/ip_forward
/etc/init.d/ipsec stop
/etc/init.d/xl2tpd stop
;;
restart)
echo "Restarting my Ipsec VPN"
iptables -t nat -A POSTROUTING -o eth0 -s 10.152.2.0/24 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
for each in /proc/sys/net/ipv4/conf/*
do
echo 0 > $each/accept_redirects
echo 0 > $each/send_redirects
done
/etc/init.d/ipsec restart
/etc/init.d/xl2tpd restart
;;
*)
echo "Usage: /etc/init.d/ipsec.vpn {start|stop|restart}"
exit 1
;;
esac
这会配置防火墙转发。记得修改上面文件的本地IP地址池10.152.2.0/24为你自己的。
然后给这个文件设置可执行权限:
sudo chmod 755 ipsec.vpn
禁止默认的 ipsec 服务脚本运行:
sudo update-rc.d -f ipsec remove
然后,启用我们刚才定制的这个:
sudo update-rc.d ipsec.vpn defaults
L2TP
修改 /etc/xl2tpd/xl2tpd.conf :
[global]
ipsec saref = no
[lns default]
ip range = 10.152.2.2-10.152.2.254
local ip = 10.152.2.1
require chap = yes
refuse pap = yes
require authentication = yes
ppp debug = yes
pppoptfile = /etc/ppp/options.xl2tpd
length bit = yes
Red Hat Enterprise Linux 7.0 是 Red Hat 的下一代操作系统完整套件,旨在用于关键任务企业级计算以及顶级企业级软件和硬件零售商认证。
GCC 工具链
在 Red Hat Enterprise Linux 7.0 中,gcc 工具链是根据 gcc-4.8.x 发行系列开发,并包含大量针对 Red Hat Enterprise Linux 6 的改进和 bug 修复。同样,Red Hat Enterprise Linux 7 也包含binutils-2.23.52.x。这些版本与 Red Hat Developer Toolset 2.0 中的等效工具对应。Red Hat Enterprise Linux 6 和 Red Hat Enterprise Linux 7 gcc 的 binutils 版本对比请查看:
Red Hat Enterprise Linux 7.0 包含一个检测框架 Valgrind,该框架附带大量工具用于配置应用程序。这个版本是基于 Valgrind 3.9.0 发行本,且包含针对 Red Hat Enterprise Linux 6 和 Red Hat Developer Toolset 2.0 副本的大量改进,后者是在 Valgrind 3.8.1 的基础上开发的。
Red Hat Enterprise Linux 7.0 中包含的 Valgrind 的主要新功能如下:
使用更好的试探法减少泄露检查程序中的 possible leak 报告。可用的试探法为std::stdstring、带有析构函数元素的新[ ]分配的阵列以及指向使用多个继承的 C++ 项目内置部分提供有效内部指针探测。可使用 –leak-check-heuristics=heur1,heur2,… 选项进行选择。
对于堆上分配块更好的 stacktrace 捕获控制。使用 –keep-stacktraces 选项有可能独立控制是否为每个分配和取消分配进行栈跟踪。可使用这个选项生成更好的 “use after free”出错信息,或者通过记录更少的信息减少 Valgrind 的资源消耗。
Red Hat Enterprise Linux 7.0 提供动态防火墙守护进程 firewalld,它可提供一个动态管理的防火墙,并支持网络“区域”以便为网络及其相关链接和接口分配可信度。它还支持 IPv4 和 IPv6 防火墙设置。它支持以太网桥接并有独立的运行时和持久配置选项。它还有一个可直接添加防火墙规则的服务或者应用程序接口。
DNSSEC
DNSSEC 是一组域名系统安全扩展(DNSSEC),允许 DNS 客户端认证和检查来自 DNS 名称服务器响应的完整性以便确认其起始点,并确定在中转过程中是否受到影响。
OpenLMI
Red Hat Enterprise Linux 7.0 中附带 OpenLMI 项目,它为管理 Linux 系统提供常用的基础设施。它还可让用户配置、管理并监控硬件、操作系统及系统服务。OpenLMI 旨在简化任务配置及产品服务器管理。OpenLMI 旨在为 Red Hat Enterprise Linux 的多个版本提供常用管理接口。它是构建在现有工具的顶层,提供一个提取层,为系统管理员过滤了很多底层系统的复杂性。OpenLMI 由安装在要管理的系统中的一组系统管理代理、可管理这些代理并为其提供界面 OpenLMI 控制程序以及使用 OpenLMI 控制程序调用系统管理代理的客户端应用程序或者脚本。OpenLMI 可让用户执行以下操作:
Red Hat Enterprise Linux 7.0 引进了可信网络连接功能作为技术预览。可信网络连接可用于现有网络访问控制(NAC)解决方案,比如 TLS、802.1x 或者 IPSec 整合端点态势评估,即收集端点系统信息(比如操作系统配置设置,安装的软件包及其他,总称为完整性测量)。在允许该端点访问该网络前使用可信网络连接根据网络访问策略确认这些测量。
认证和互操作性
新的信任实施
目前在 Red Hat Enterprise Linux 5.9 客户端以及之后的 Red Hat Enterprise Linux 6.3 客户端中支持使用在 Active Directory 中定义的用户 ID 或者组 ID,而不是由用户安全标识符生成的用户 ID 或者组 ID。如果在 Active Directory 中定义了 POSIX 属性,这个信任实施就很有用。
已更新 slapi-nis 插件
Red Hat Enterprise Linux 7.0 拥有更新后的目录服务器插件 slapi-nis,该插件允许 Active Directory 用户在原有客户端中进行认证。注:这个功能时技术预览。
IPA 的备份和恢复机制
IPA 组件的备份和恢复机制在 Red Hat Enterprise Linux 7.0 中是作为技术预览提供。
Samba 4.1.0
Red Hat Enterprise Linux 7.0 中包括升级到最新 upstream 版本的 samba 软件包,该软件包引进了一些 bug 修复和改进,最主要的是支持服务器和客户端工具中的 SMB3 协议。
另外,SMB3 传输可启用对支持 SMB3 的 Windows 服务器以及 Samba 服务器的加密传输连接。同时,Samba 4.1.0 添加了对服务器端复制操作的支持。采用支持服务器端复制操作的客户端,比如最新的 Windows 发行本应体验到明显的文件复制操作性能提高。
AD 提供程序是一个用来连接 Active Directory 服务器的后端程序。在 Red Hat Enterprise Linux 7.0 中,支持将 AD sudo 提供程序与 LDAP 提供持续一同使用是最为一项技术预览提供的。要启用 AD sudo 提供程序,请在 sssd.conf 文件的 domain 部分添加 sudo_provider=ad 设置。
Red Hat Enterprise Linux 7.0 中 MySQL 的默认实施是 MariaDB。MariaDB 是由社区人员开发的 MySQL 数据库项目,并提供 MySQL 的替代品。MariaDB 保留了与 MySQL 的 API 和 ABI 兼容性,并添加了一些新功能。例如:未阻断的客户端 API 库,有加强性能的 Aria 和 XtraDB 存储引擎,更优的服务器状态变量或者改进的复制功能。
提示:其实制作LFS所有用到的工具链接,就是在ubuntu或centos下编译出一个新的交叉编译器(就是/tools目录下的所有工具),而这个新的交叉编译器在编译出来后,就不会依赖于现有操作系统编译器和库文件(ubuntu or centos),此时我们就可以利用这个全新的交叉编译工具(/tools目录下的所有工具)制造属于我们自己的Linux了,利用这个新的工具,从源码开始编译出所有我们需要的软件和库,最后编译Linux内核,设置bash脚本,启动脚本,tmpfs文件系统需要的配置文件,整个LFS的过程就结束了。
A: Linux发行版本的选择
CentOS 6.3 (虚拟机双硬盘)
Ubuntu 14.04 with GCC4.4(64bit) (笔记本电脑+双硬盘+LFS系统构建在SSD硬盘上)
cd /mnt/lfs/sources
tar xvf perl-5.16.2
cd perl-5.16.2/hints
cp linux.sh linux.sh.org
cd ..
patch -Np1 -i ../perl-5.16.2-libc-1.patch
cd hints
diff linux.sh linux.sh.org #输出打补丁情况,则为正常打补丁,编译过程参考手册
if has('vim_starting')
set nocompatible
set runtimepath+=~/.vim/bundle/neobundle.vim/
call neobundle#begin(expand('~/.vim/bundle/'))
NeoBundleFetch 'Shougo/neobundle.vim'
call neobundle#end()
filetype plugin indent on
真的好酷,是不是?Betty理解我输入的“whats my username”短语,然后运行“whoami”命令,最后输出结果。
让我们也来看其他命令。
如果你的输入不够准确,Betty也能以多种方式回应你。例如,我们运行下面的命令:
betty whats my name
Betty不确定她应该查找系统用户名还是用户全名。这种情况下,她会询问你多个问题来找到准确的结果。如你下面所见,Betty问我想要运行哪一条命令(whoami 还是 finger $(whoami) | sed ‘s/.://;q’)[LCTT译注,需要你的系统已经安装finger]。我只想知道我的用户名,所以我选择数字1。
Betty: Okay, I have multiple ways to respond.
Betty: Enter the number of the command you want me to run, or N (no) if you don't want me to run any.
[1] whoami
Gets your system username.
[2] finger $(whoami) | sed 's/.*: *//;q'
Gets your full name.
1
Betty: Running whoami
sk
Betty: Running mkdir test && tar -zxvf test.tar.gz -C test
test/
test/home/
test/home/sk/
test/home/sk/test/
test/home/sk/test/sample
完整的Betty命令行列表
Betty工具有一些命令格式。如果你输入“what is my user name”而不是“whats my username”,它是不能识别的。所以,你只能输入Betty支持的英语短语。
下面给出一个Betty支持的完整的命令行列表。
Count:
betty how many words are in this directory
betty how many characters are in myfile.py
betty count lines in this folder
(Note that there's many ways to say more or less the same thing.)
Config:
betty change your name to Joe
betty speak to me
betty stop speaking to me
Datetime:
betty what time is it
betty what is todays date
betty what month is it
betty whats today
Find:
betty find me all files that contain california
Internet:
betty download http://www.mysite.com/something.tar.gz to something.tar.gz
betty uncompress something.tar.gz
betty unarchive something.tar.gz to somedir
(You can use unzip, unarchive, untar, uncompress, and expand interchangeably.)
betty compress /path/to/dir
iTunes:
betty mute itunes
betty unmute itunes
betty pause the music
betty resume itunes
betty stop my music
betty next song
betty prev track
betty what song is playing
(Note that the words song, track, music, etc. are interchangeable)
Fun:
betty go crazy
betty whats the meaning of life
...and more that are left for you to discover!
Map:
betty show me a map of mountain view
Meta:
betty what version are you (or just betty version)
betty whats your github again
Permissions:
betty give me permission to this directory
betty give anotheruser ownership of myfile.txt
Process:
betty show me all processes by root containing grep
betty show me all my processes containing netbio
Sizes:
betty show size for myfile.txt
Spotify:
betty play spotify
betty pause spotify
betty next spotify
betty previous spotify
User:
betty whats my username
betty whats my real name
betty whats my ip address
betty who else is logged in
betty whats my version of ruby
Web queries:
betty turn web on
betty please tell me what is the weather like in London
grub rescue> set prefix=(hd0,1)/boot/grub
grub rescue> set root=(hd0,1)
grub rescue> insmod normal
grub rescue> normal
grub rescue> insmod linux
grub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub rescue> initrd /boot/initrd.img-3.13.0-29-generic
grub rescue> boot
在你加载了这两个模块之后tab补完的功能就可以用了。
永久性的修复
当你成功地启动你的系统,运行这些命令来永久修复GRUB:
# update-grub
Generating grub configuration file ...
Found background: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tga
Found background image: /usr/share/images/grub/Apollo_17_The_Last_Moon_Shot_Edit1.tga
Found linux image: /boot/vmlinuz-3.13.0-29-generic
Found initrd image: /boot/initrd.img-3.13.0-29-generic
Found linux image: /boot/vmlinuz-3.13.0-27-generic
Found initrd image: /boot/initrd.img-3.13.0-27-generic
Found linux image: /boot/vmlinuz-3.13.0-24-generic
Found initrd image: /boot/initrd.img-3.13.0-24-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
done
# grub-install /dev/sda
Installing for i386-pc platform.
Installation finished. No error reported.
(1)首先,看看这段堆栈信息是在内核中那个文件中打印出来的,在fault.c文件中,__do_kernel_fault函数,在上面的打印中Unable to handle kernel paging request at virtual address 45685516,该地址是内核空间不可访问的地址。
static void __do_kernel_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr, struct pt_regs *regs)
{
/*
* Are we prepared to handle this kernel fault?
*/
if (fixup_exception(regs))
return;
/*
* No handler, we'll have to terminate things with extreme prejudice.
*/
bust_spinlocks(1);
printk(KERN_ALERT
"Unable to handle kernel %s at virtual address %08lxn",
(addr < PAGE_SIZE) ? "NULL pointer dereference" :"paging request", addr);
show_pte(mm, addr);
die("Oops", regs, fsr);
bust_spinlocks(0);
do_exit(SIGKILL);
}