Ubuntu系统安装配置参考
2010-03-06 16:18:57 阿炯

本站赞助商链接,请多关照。 服务器管理入门

Ubuntu 服务器指南包括了在您的 Ubuntu 系统中如何安装和配置满足您需要的不同服务器的相关信息。它是一个循序渐进、面向任务的配置和定制您系统的指南。本手册主要分为以下几块:
o安装
o包管理
o联网

本指南假定您已经对您的 Ubuntu 系统有个基本的了解,如果您需要安装 Ubuntu 的详细帮助,将参考 Ubuntu 安装指南。

一、安装
本章提供了安装 Ubuntu 6.06 LTS Server Edition(服务器版)的快速入门。

准备安装
准备安装,本部分内容说明在开始安装之前要考虑的各个方面。

系统要求
Ubuntu 6.06 LTS Server Edition (服务器版)支持三种主要的体系架构:Intel x86、AMD64 和 PowerPC。下表列出了被推荐硬件明细表,您可以根据需要使用比这更少的(硬件)进行管理。然而,大多数用户不应当忽略这些建议,否则风险自负,最小建议配置。

安装类型    RAM    硬盘空间
服务器    64 MB    500 MB

Ubuntu 6.06 LTS Server Edition (服务器版)的默认自述文档已经在下面列出了。当然,安装的尺寸大小极大程序上取决于您在安装过程中安装服务的多少。对于大多数管理员来说,默认的服务对于服务器一般的使用已经足够了。这是一个小型服务器服务列表,它为各种服务器应用程序提供了一个通用基础。它是最低限度的并被设计成可以在其上添加想要的服务,如文件/打印服务、web 主机、邮件主机等。要满足这些服务至少需要 500 MB 的磁盘空间,但考虑添加更多的空间是要取决于在您服务器上您想要提供的服务。记住这些尺寸并不包括其他的素材如用户文件、邮件、日志和数据,当为您自己的文件和数据考虑空间时最好能留足。

备份
在您开始之前,请确保备份了您现在系统上的每个文件。如果第一次时已经有一个操作系统安装在您的计算机上,那么最合适的办法就是把您的磁盘重新分区,为 Ubuntu 留出空间。无论哪次对您的磁盘进行分区您都应该做好丢失磁盘上所有东西的准备,因为您可能会误操作或者在分区过程中出错,如系统掉电等。在安装中所使用的程序是相当可靠的,大多数已经用了几年,但它们执行的也是破坏性的操作,一个操作出错可能会把您有价值的数据丢失掉。

如果您是想把电脑做成多重引导的系统,请先确定您手头上有电脑里已经存在的这些操作系统的安装介质。特别是当您把启动盘重新分区以后,您可能会发现必须重新安装原有操作系统的启动引导程序,某些情况下,还得重新安装该操作系统并恢复受影响分区上的文件。

从 CD 安装
将您的安装 CD 插入 您的 CD-ROM 设备并重启计算机。当从 CD-ROM 重启时安装系统将立即开始。一旦初始化之后,您的第一个安装屏幕将出现。 此时,阅读屏幕上的文字。您也许想看看安装程序提供的帮助屏。如果您想这么做的话,请按 F1 键。 要执行缺省的服务器安装程序,选择 "安装到硬盘" 并按回车键。安装过程将开始。简单地根据屏幕上的指示,您的 Ubuntu 系统将被安装。或者,您要安装一个 LAMP 服务器 (Linux, Apache, MySQL, PHP/Perl/Python),选择 "安装 LAMP 服务器",并根据指示进行安装。

二、包管理
Ubuntu 提供一套全面的包管理系统用于软件的安装、升级、配置和卸载。除了让您 Ubuntu 计算机可以访问组织好的超过 17,000 个软件包的软件库之外,包管理工具还可以解决依赖关系并提供软件更新检查。一些工具可以和 Ubuntu 包管理系统进行交互,从便于系统管理员做自动化处理的简单命令行工具到便于 Ubuntu 新手使用的简单图形界面。

介绍
Ubuntu的包管理系统是从Debian GNU/Linux 发行版中洐生出来的。包文件包括在您 Ubuntu 系统中实现特定功能或软件所必需的文件、元数据和指令。Debian 包文件一般用 '.deb' 作后缀,而且位于建立在不同介质上由包组成的软件库中,这些介质包括 CD-ROM 光盘和网站。包通常是预编译的二进制形式,因此安装速度快而且软件也无需编译。许多复杂的包使用依赖包这一概念,依赖包是主包为实现完整功能而要求的附加包。例如,语音合成包 Festival 依赖 festvox-kalpc16k 包,该依赖包提供被应用程序使用的众多声音之一。为了能使 Festival 正常运行,所有依赖包都必须与 Festival 主包同时安装。Ubuntu 软件管理工具将会自动完成这一切。

Apt-Get
apt-get 命令是一个强大的命令行工具,用于同 Ubuntu 的 Advanced Packaging Tool (APT) 一起执行诸如安装新软件包、升级已有软件包、更新包列表索引,甚至是升级整个 Ubuntu 系统等功能。作为一个简单的命令行工具,apt-get 对于服务器管理员来说比 Ubuntu 中的其他软件包管理工具有着相当多的优点。这些优点包括便于在简单终端连接 (SSH) 中使用,同时能够用于系统管理脚本中,以便能被cron 动作计划工具自动运行。apt-get 工具的一些常见用法示例:关于 APT 用法的更多信息,可阅读全面的Debian APT 用户手册或输入:# apt-get help 

Aptitude
Aptitude 是一个菜单驱动,基于文本的 Advanced Packaging Tool (APT) 系统前端。包管理的许多常用功能,如安装、卸载和升级,可以在Aptitude 中单键执行命令,它通常是小写字母。Aptitude 最适用于非图形的终端环境,确保命令关键字的适当功能。您可以作为一个普遍用户在终端提示符后用以下命令开始运行Aptitude:sudo aptitude 当 Aptitude 开始之后,你将看在屏幕顶部的一个菜单条,其下有两个窗,顶窗包含包的类别,如新软件包和未安装软件包 。底窗包含包和包类别的相关信息。 使用 Aptitude 作包管理相对直观,用户界面便于执行常用任务。下面是在 Aptitude 中进行包管理时常见用法如下:

1).安装软件包:要安装包,通过未安装软件包包类别找到该软件包,如通过键盘箭头键和 ENTER 键定位并高亮你想安装的软件包。在高亮你要安装的软件包之后,将其标示为安装。现在按 g 键显示软件包的操作提示。再按 g 键,您将被提示要成为 root 用户以完成安装。按 ENTER 键将显示 Password: 提示。输入您的用户密码成为 root 用户。最后,再一次按 g 键,您将被提示下载软件包。在Continue 提示上按 ENTER 键,开始下载和安装软件包。

2).卸载软件包:要卸载软件包,通过已安装软件包包类别找到该软件包,如通过键盘箭头键和 ENTER 键定位并高亮你想卸载的软件包。在高亮你要卸载的软件包之后,按 - 键,文件包条目将变成 pink,标示其为卸载。现在按 g 键显示软件包的操作提示。再按 g 键,您将被提示要成为 root 用户以完成卸载。按 ENTER 键将显示 Password: 提示。输入您的用户密码成为 root 用户。最后,再一次按 g 键,您将被提示下载软件包。在Continue 提示上按 ENTER 键,开始卸载软件包。

3).更新软件包索引:要更 新软件包索引,简单按 u 您将被提示要成为 root 用户以完成更新。按 ENTER 键将显示 Password: 提示,输入您的用户密码成为 root 用户。开始更新软件包索引,当出现下载对话框时在 OK 提示上按 ENTER 键以结束更新过程。

4).升级软件包:要升级软件包,如上所述更新软件包索引,然后按U 键标示所有能升级的软件包。现在按 g 键显示软件包的操作提示。再按 g 键,您将被提示要成为 root 用户以完成安装。按 ENTER 键将显示 Password: 提示。输入您的用户密码成为 root 用户。最后,再一次按 g 键,您将被提示下载软件包。在Continue 提示上按 ENTER 键,开始升级软件包。

当实际查看软件时列出软件包当前状态,在顶窗软件包列表中显示信息的第一列使用下列关键字来描述软件包状态:
i: 安装软件包
c: 软件包没有安装,但在系统中有软件包的残留配置
p: 从系统彻底删除
v: 虚拟软件包
B: 已损坏的软件包
u: 解压文件,但尚未配置软件包
C: 半配置 - 配置失败需要修复
H: 半安装 - 卸载失败需要修复

要退出 Aptitude,只需简单按 q 键并确认您想退出即可,在Aptitude 菜单中按 F10 键可以列出其他许多功能。

配置
Advanced Packaging Tool (APT) 系统软件库的配置被保存在 /etc/apt/sources.list 文件中。这儿有个该文件的示例,这里是一个典型的 /etc/apt/sources.list 文件范例。您可以编辑该文件来使软件库生效或失效。举个例子,要不想无论何时在发生文件包操作都会引起要求插入 Ubuntu CD-ROM ,只需要简单地将在文件顶部的 CD-ROM 相应行注释掉即可:
# no more prompting for CD-ROM please
# deb cdrom:[Ubuntu 6.06 _Dapper Drake_ - Release i386
(20060329.1)]/ dapper main restricted

其他软件库
除了可以使用官方支持的 Ubuntu 软件包库之外,还存在拥有几千个潜在软件包的由其它社区维护的软件库。这些软件库中最流行的两个是 Universe 和 Multiverse 软件库。这些软件库并不被 Ubuntu 官方支持,这就是它们为什么在缺省时不能的原因,但它们提供的包通常是可以在您的 Ubuntu 计算机上安全使用的。 在Multiverse 软件库中的包通常有许可证的问题,这使得它们不能和自由操作系统一起分发,它们在您所在的地区可能是违法的。建议不要在 Universe 或 Multiverse 软件库中包含官方支持的软件包。尤其是在升级这些包时可能会不安全。许多其他软件包源也是可用的,有时甚至只提供一个软件包,这种情况主要发生在由单个应用程序的开发人员所提供软件包源上。然而当您在使用非标准软件包源时您应该非常小心谨慎,在执行任何安装之前仔细考查源和软件包,因为有些软件包源和其中的软件包可能会使您的系统在某些方面运行不稳定或不正常。要使 Universe 和 Multiverse 库可用,编辑/etc/apt/sources.list 文件并将去掉相关行的注释:
# We want Multiverse and Universe repositories, please
deb http://archive.ubuntu.com/ubuntu dapper universe multiverse
deb-src http://archive.ubuntu.com/ubuntu dapper universe multiverse

三、联网
网络是由两个或两个以上的设备通过物理线缆或无线连接而成并在连接设备之间共享和分发信息。这些设备包括计算机系统、打印机或用有线或无线连接起来的其它相关设备。Ubuntu 服务器指南的这部分提供与联网相关的一般和特定信息,包括网络概念的简介以及对常用网络协议及服务器应用程序的详细讨论。

网络配置
Ubuntu 提供了许多图形化工具来配制您的网络设备。本文适用于服务器管理员并聚焦在命令行中管理您的网络。

以太网
大多数以太网配置都集中在单个文件 /etc/network/interfaces 中。如果您没有以太网设备,那么在该文件中将只出现环回口,该文件看上去类似这样:
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback
address 127.0.0.1
netmask 255.0.0.0

如果您只有一个以太网设备 eth0,被配置成从 DHCP 服务器得到设置,并且在引导时自动激活,那么只需要再添加两行:
auto eth1
iface eth1 inet dhcp

第一行说明 eth1 将会在您启动时自动激活。第二行说明该接口 (“iface”) eth1 将有得到一个 IPv4 地址空间 (如果是一个 IPv6 的设备将须将 “inet” 用 “inet6” 代替) 并且它将自动从 DHCP 中自动获得它的配置。假定您的网络和 DHCP 服务都已经被正确配置,该机的网络将不需要更多的配置。DHCP 服务器将提供默认网关 (通过 route 命令来实现) 、设备的 IP 地址 (通过 ifconfig 命令来实现)以及网络使用的 DNS 服务器 (在 /etc/resolv.conf 文件中实现)。 要把您的以太网设备配置成静态 IP 地址和自定义配置的话,则要求更多的信息。假设您想指定 IP 地址 192.168.0.2 给设备 eth1,其掩码是 255.255.255.0。您的默认网关的 IP 地址是 192.168.0.1。您可以在 /etc/network/interfaces 中输入类似下面的语句:
iface eth1 inet static        address 192.168.0.2        netmask 255.255.255.0        gateway 192.168.0.1

在这个例子中,您将需要在 /etc/resolv.conf 中手工指定您的DNS服务器,看起来如下:search mydomain.comnameserver 192.168.0.1nameserver 4.2.2.2

search 语句在试图解析网络名时把 mydomain.com 添到主机名查询中。举个例子,如果您的网络域名是 mydomain.com 并且您试图去 ping 主机 “mybox”,DNS 查询将在解析时改为“mybox.mydomain.com”。nameserver 语句指定用于将主机名解析成 IP 地址的的 DNS 服务器。如果您使用自己的名称服务器,在这里输入它。否则询问您的 Internet 服务供应商要使用的主、辅 DNS 服务器,并把它们如上所示输入到 /etc/resolv.conf 中。 配置更多的接口是可能的,包括拨号的 PPP 接口、IPv6 网络、VPN 设备等。更多信息和支持选项请参考 man 5 interfaces。记住 ifup/ifdown 脚本使用的/etc/network/interfaces 是比其他一些 Linux 发行版更高级的配置模式。传统的低级工具如ifconfig、route 和 dhclient 也为了 ad hoc 配置对您来说也是可用的。

管理 DNS 记录
本部分说明如何配置用来将IP地址解析成主机名或相反功能的名称服务,而不是说如何将整个系统配置成一个名称服务器。 要管理 DNS 条目,您可以在 /etc/resolv.conf 文件中添加、编辑或删除 DNS 名称服务器。一个范例文件 在下面给出:
search comnameserver 204.11.126.131nameserver 64.125.134.133nameserver 64.125.134.132nameserver 208.185.179.218

search 关键字指字为未完成主机名添加的字符串,在这里我们使用com。因此当我们运行:ping ubuntu 时它被理解成 ping ubuntu.com。nameserver 关键字指定名称服务器的 IP 地址,它将被用来解析 IP 地址或主机名。该文件可以有多个名称服务器记录。名称服务器将按相同顺序进行网络查询。 如果 DNS 服务器名称是通过 DHCP 或 PPPOE 动态取回的(从您 ISP 取回),那么不要在该文件中添加名称服务器记录。它将被自动更新。
管理主机
要管理主机,您可以在 /etc/hosts 文件中添加、编辑或删除主机。该文件包括 IP 地址和相对应的主机名。当您的系统要解析一个主机到 IP 地址或从一个 IP 地址获取主机名时,它将在使用名称服务器之前参考 /etc/hosts 文件。如果该 IP 地址已经在 /etc/hosts 文件中被列出,那么将不再使用名称服务器。这一动作可以通过编辑 /etc/nsswitch.conf 来改变,不过后果自负。如果您网络所包含计算机的 IP 地址没有在 DNS 中列出,建议您将它们加入到 /etc/hosts 文件中。

TCP/IP
传输控制协议和网际协议 (TCP/IP) 是在 20世纪70年代被美国国防部高级研究规划局 (DARPA)作为在不同类型计算机及计算机网络之间的通信手段而被开发的一个标准协议簇。TCP/IP 是 Internet 的驱动力,因此它是全球最流行的网络协议簇。

1.TCP/IP 介绍
TCP/IP 的两个协议组件处理计算机网络的不同方面。网际协议,TCP/IP 中的 "IP" 是一个连接协议,只处理使用 IP 数据报作为网络信息基本单元的网络包路由。IP 数据报由报头和其后的消息组成。传输控制协议 是 TCP/IP 中的 "TCP",可以使网络主机之间建立用于交换数据流的连接。TCP 也保证连接之间的数据传送以及其在网络主机上的接收顺序与其从另一台网络主机上的发送顺序一致。

2.TCP/IP 配置
TCP/IP 协议配置由必须设置的几个元素组成,可以通过编辑相应的配置文件或配置方案如动态主机配置协议 (DHCP) 来设置,它可以配置成提供适当的 TCP/IP 配置来自动设置网络客户机。这些配置值必须正确设置,以便于您的 Ubuntu 系统进行相应网络操作。TCP/IP 常用配置元素及其作用如下所示:

1).IP 地址 IP 地址是唯一标识字符串,它由四部分由点号分隔的,范围从 0 到 255 的十进制数组成。每部分由8个比特表示,整个地址总长为32个比特。这种格式被称为 dotted quad notation。

2).掩码 子网掩码(或简称掩码) 是一个局部位掩码,或用指定的子网掩码来将IP 地址中的网络分隔出来的一组标识。举个例子,在 C 类网络中,标准的掩码是 255.255.255.0 屏蔽了 IP 地址的前三个字节,并允许 IP 地址的最后一个字节指定子网中的主机。

3).网络地址 网络地址表示包括IP 地址网络部分的字节。 例如, 一个 A 类网络的主机 12.128.1.2 将使用 12.0.0.0 作为网络地址,使用12来表示 IP 地址的第一个字节 (网络部分),余下的三个为 0 的字节表示可能的主机值的。网络主机使用象 192.168.1.100 这样非常普遍的不可路由的私有 IP 地址将使用192.168.1.0网络地址,用前三个字节来指定 C 类192.168.1网络,而用一个 0 来表示网络上所有可能的主机。

4).广播地址 广播地址是一个允许向给定子网中的所有主机而不是一台特定的网络主机同时发送网络数据的 IP 地址。一般标准 IP 网络的地址是 255.255.255.255,但这个广播地址不能用来为 Internet 网上的每台主机发送一个广播消息,因为路由器会阻止它。更适当的广播地址设置是匹配特定子网的。例如,在流行的私有 C 类 IP 网 192.168.1.0 中,广播地址应该设为 192.168.1.255。广播消息一般都是由网络协议产生的,如地址识别协议 (ARP) 和路由信息协议 (RIP)。

5).网关地址 网关地址是一个通过该地址可能会到达指定网络或网络主机的 IP 地址。如果一台网络主机希望与另一台网络主机通讯,而该机并不在同一网络中,而是要传输到另一个网络或主机上,如 Internet 主机。网关地址设置必须正确,否则您的系统将不能到达不在同一网络中的任何主机。

6).名称服务器地址 名称服务器地址表示域名服务 (DNS) 系统的 IP 地址。该系统将网络主机名解析成 IP 地址。可以按顺序来指定三个不同优先级的名称服务器地址:主名称服务器,次名称服务器,和第三名称服务器。按顺序为您系统将网络主机名解析成相应的 IP 地址,你必须指定合法的名称服务器地址,该地址应该在您系统的 TCP/IP 配置中被授权使用。在许多情况下这些地址可以也应该被您的网络服务供应商提供,但也可以使用许多免费的、可供公众访问的名称服务器,如 IP 从 4.2.2.1 到 4.2.2.6 的 Level3 (Verizon) 服务器。

IP 地址、掩码、网络地址、广播地址以及网关地址一般都是在文件 /etc/network/interfaces 中通过相应的语句来指定的。名称服务器地址一般是在文件 /etc/resolv.conf 中通过 nameserver 语句来指定的。更多详情,请分别查阅 interfaces 或 resolv.conf 的系统手册页。查阅 interfaces 系统手册页,可用以下命令:
man interfaces 查阅 resolv.conf 系统手册页,用以下命令:
man resolv.conf

3.I.P 路由
IP 路由是在 TCP/IP 网络上为可能发送的网络数据指明或发现路径。路由使用一组路由表来指示网络数据包从源地址转发到目的地,经常是通过许多叫做路由器的网络节点做中转。IP 路由是 Internet 上路径发现的主要方式。IP 路由分为两种形式:静态路由和 动态路由。静态路由包含向系统路由表中手工添加的 IP 路由,一般是通过 route 命令来向路由表手工添加的。静态路由与动态路由相比有许多优点,如在小网络中实施简单,有可预测性 (路由表总是事先算好,因此路由在每次使用时都相当一致),在其它路由器和网络链路处理上比动态路由协议开销小。然而,静态路由也有一些缺点。如静态路由只限于小网络而且不能很好地进行调整。静态路由由于路由固定的特性,因此根本无法根据路由来适应网络中断和故障。 动态路由有赖于从一个源到目的有多条可用 IP 路由的大型网络,利用特定的路由协议,如路由信息协议 (RIP),可以自动调整路由表以生成可能的动态路由。动态路由相对静态路由有几个优点,如拥有较大的伸缩性和能根据网络路由来适应网络中断和故障。另外,几乎无须手工配置路由表,因为路由器可以相互学到其他已有并且可用的路由器。这一特性也消除了由于人为错误而在路由表中引入错误的可能。然而,动态路由也并不完美,其表现出来的缺点如相当复杂以及由于路由器通讯所带来的额外的网络开销,并不能使最终用户由此获益,并却一直消耗着网络带宽。

4.TCP 和 UDP
TCP 是一个基于连接的协议,提供纠错并通过流量控制来传输数据。流量控制决定什么时间一个数据流需要停止,例如在出现诸如冲突等问题时重发先前发送的数据包,以确保完整和准确的数据传输。TCP 常用于重要信息的交换,如数据库传输。 另一方面,用户数据报协议 (UDP) 是一个无连接协议,很少用于重要数据的传输,因为缺乏流量控制或其他一些确保可靠数据传输的方法。UDP 常用在如音视频流这样的应用程序,由于它缺少纠错和流控,因此相对于 TCP 来说更快,而且丢失少量包通常也不会造成灾难性的后果。

5.ICMP
Internet 控制消息协议是在Request For Comments (RFC) #792 中定义的,是对网际协议 (IP) 的一个扩充。支持的网络包包括控制、错误和信息的消息。ICMP 常被用在诸如判断一台网络主机或设备可用性的 ping 工具这样的网络应用程序。在网络主机和设备如路由器之间使用 ICMP 所返回的错误消息示例包括 Destination Unreachable 和 Time Exceeded。

6.守护程序
守护程序是特殊的系统应用程序,一般常驻在后台并等待来自其他应用程序请求其所提供的功能。许多守护程序都是网络中心;在 Ubuntu 系统后台执行的许多守护程序都可以提供网络的相关功能。这些网络守护程序包括 超文本传输协议守护程序 (httpd),用于提供网站服务器功能;Secure SHell 守护程序 (sshd),用于提供安全远程登录 shell 和文件传输功能;Internet Message Access Protocol 守护程序 (imapd),用于提供 E-Mail 服务。

防火墙配置
Linux 内核包括 Netfilter 子系统,用来处理或决定网络传输头部进入或穿过你的服务器,目前所有的 Linux 防火墙都用该系统来做包过滤。

1.防火墙介绍
内核的包过滤系统如果没有一个用户态 (userspace) 界面来管理它的话对管理员来说几乎没有用。这正是 iptables 的目的。当一个包到达您的服务器,它从用户态 (userspace) 通过 iptables 传给 Netfilter 子系统,然后基于提供的规则去接受、操作或拒绝。因此,如果你能熟悉它的话,那么 iptables 就是您管理您防火墙所需的全部。

2.IP 伪装
IP 伪装的目的是为了允许您网络上那些有着私有的、不可路由的 IP 地址的机器可以通过做伪装的机器访问 Internet。来自您私有网络并要访问 Internet 的传输必须是可以操作的,也就是说回复要可以被路由回来以送到发出请求的机器上。要做到这一点,内核必须修改每个包源 IP 地址以便回复能被路由回它这里,而不是发出请求的私有 IP 地址,因为它们对于Internet 来说是不存在的。Linux使用 Connection Tracking (conntrack) 来保持那个连接是属于哪个机器的,并相应地对每个返回包重新做路由。发自您私有网络的流量就这样被伪装成源于您的网关机器。这一过程在 Microsoft 文档中被称为 Internet 连接共享。 这可以用单条 iptables 规则来完成,也许基于您网络配置来说会有一些小的差异:
sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -o ppp0 -j MASQUERADE

上述命令假设您的私有地址空间是192.168.0.0/16,您与 Internet 相连的设备是 ppp0。语法分解如下所示:
-t nat -- 该规则将进入 nat 表
-A POSTROUTING -- 该规则将被追加 (-A) 到 POSTROUTING 链
-s 192.168.0.0/16 -- 该规则将被应用在源自指定地址空间的流量上
-o ppp0 -- 该规则应用于计划通过指定网络设备的流量。
-j MASQUERADE -- 匹配该规则的流量将如上所述 "跳转" (-j) 到 MASQUERADE (伪装) 目标。

在过滤表 (缺省表,在那里有着大多数或全部包过滤指令) 中的每条链 (chain) 都有一个默认的 ACCEPT 策略,但如果您还在网关设备上设置防火墙,那么您也许还要设置 DROP 或 REJECT 策略,这时您被伪装过的流量还需要被 FORWARD 链 (chain) 中的规则允许才能正常工作:
sudo iptables -A FORWARD -s 192.168.0.0/16 -o ppp0 -j ACCEPTsudo iptables -A FORWARD -d 192.168.0.0/16 -m state --state ESTABLISHED,RELATED -i ppp0 -j ACCEPT

上述命令将允许通过从您局域网到 Internet 的所有连接,这些连接所有的相关流量也都返回到发起它们的机器。

3.工具
有很多工具可以帮助您构建一个完整的防火墙,而不需要 iptables 的专业知识。偏好图形界面的,Firestarter 非常流行也易于使用,fwbuilder 则非常强大而且其界面对于用过诸如 Checkpoint FireWall-1 商业防火墙工具的管理员来说相当熟悉。如果您偏好有着纯文本配置文档的命令行工具,Shorewall 是个非常强大的解决方案,可以帮您为任何网络配置一个高级防火墙。如果您的网络相对简单,或如果您没有网络,那么 ipkungfu 将给您一个无需配置就可以工作的防火墙,也允许您通过编辑简单友好的配置文件来轻松设置更高级的防火墙。另一个感兴趣的工具就是fireflier,被设计成桌面防火墙应用程序。它由一个服务器 (fireflier-server) 和可选的 GUI 客户端 (GTK 或 QT) 组成,操作就象 Windows 中许多流行的交互式防火墙应用程序一样。

4.日志
防火墙日志主要是为了确认攻击、找出并解决您防火墙规则的问题以及注意您网络中不正常的活动。您必须在您防火墙中包含这些日志规则以便生成相应日志,虽然,日志规则必须优先于任何可应用的最终规则 (那些决定其目的包命运的规则,如ACCEPT、DROP 或 REJECT) 。
sudo iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j LOG --log-prefix "NEW_HTTP_CONN: "

一个从本机发起的对 80 端口的请求将会在 dmesg 中生成一条日志,如下所示:
[4304885.870000] NEW_HTTP_CONN: IN=lo oUT= MAC=00:00:00:00:00:00:00:00:00:00:00:00:08:00 SRC=127.0.0.1 DST=127.0.0.1 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=58288 DF PROTO=TCP SPT=53981 DPT=80 WINDOW=32767 RES=0x00 SYN URGP=0

上面的日志也会出现在/var/log/messages、/var/log/syslog 和 /var/log/kern.log 中。这一过程可以通过适当编辑 /etc/syslog.conf 或安装配置 ulogd 并用 ULOG 代替 LOG 来进行改变。ulogd 守护程序是一种用户态服务器可以监听来自内核的防火墙日志指令,并且能够将其写到任何您希望的文件中,甚至是 PostgreSQL 或 MySQL 数据库。使用诸如 fwanalog、fwlogwatch 或 lire 日志分析工具将会很轻松地弄懂您的防火墙日志。

OpenSSH

1.介绍
Ubuntu 服务器指南的这部分内容介绍一个强大的远程控制网络计算机和在它们之间传输数据的工具集 OpenSSH。您也可以学到一些 OpenSSH 服务器应用程序的配置以及如何在您 Ubuntu 系统修改它们。OpenSSH 是Secure Shell (SSH) 协议工具集中的一个自由可用的版本,用以远程控制一台计算机或在计算机之间传输文件。完成这些功能的传统工具,如 telnet 或 rcp 等,是不安全的,它们在使用时用明文来传输用户的密码。OpenSSH 提供一个服务器守护程序和客户端工具来保障安全、加密的远程控制和文件传输操作,以有效地取代传统的工具。 OpenSSH 服务器组组件 sshd 持续监听来自任何客户端工具的连接请求。当一个连接请求发生时,sshd 根据客户端连接的类型来设置当前连接。例如,如果远程计算机是通过 ssh 客户端应用程序来连接的话,OpenSSH 服务器将在认证之后设置一个远程控制会话。如果一个远程用户通过 scp 来连接 OpenSSH 服务器,OpenSSH 服务器将在认证之后开始服务器和客户机之间的安全文件拷贝。OpenSSH 可以支持多种认证模式,包括纯密码、公钥以及Kerberos 票据。

2.安装
OpenSSH 客户端及服务器应用程序的安装是简单的。要在您 Ubuntu 系统中安装 OpenSSH 客户端应用程序,可以在终端提示符后使用以下命令:
sudo apt-get install openssh-client

要安装 OpenSSH 服务器应用程序及相关的支持文件,可以在终端提示符后使用以下命令: sudo apt-get install openssh-server

3.配置
您可以通过编辑 /etc/ssh/sshd_config 文件来配置 OpenSSH 服务器应用程序的缺省过程。关于该文件中使用的配置语句信息,您可以在终端提示符后运行下列命令来查阅相应的手册页: man sshd_config

在 sshd 配置文件中有许多语句来控制那些诸如通信设置和认证模式。下面是一个通过编辑 /etc/ssh/ssh_config 文件来改变配置语句的例子。 在编辑配置文件之前,您应该生成一个原始文件的拷贝并对其写保护,以便您可以参考原始文件并在必要时重用它。 拷贝 /etc/ssh/sshd_config 文件并对其写保护可以通过在终端提示符后运行下列命令:
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.originalsudo
chmod a-w /etc/ssh/sshd_config.original

以下是您可能更改配置语句的范例:
要设置您 OpenSSH 在 TCP 2222 端口而不是缺省的 TCP 20 端口监听,可以如下使用改变 Port 语句:
Port 2222

要让 sshd 允许基于公钥登录证书,可以简单添加或修改该行语句:
PubkeyAuthentication yes 到 /etc/ssh/sshd_config 文件中。如果已经存在,确保该行语句没有被注释。

要使您的 OpenSSH 服务器显示 /etc/issue.net 文件的内容以作为预登录 Banner,只需简单地将下行添加或修改:
Banner /etc/issue.net 到 /etc/ssh/sshd_config 文件中即可。

在修改 /etc/ssh/sshd_config 文件之后,保存该文件并重启 sshd 服务器应用程序以使之生效。可以在终端提示符后使用下列命令:
sudo /etc/init.d/ssh restart

许多其他的 sshd 配置语句可以使服务器应用程序按您的要求运行。然而,给您一个忠告,如果您访问服务器的唯一方法就是使用 ssh,而且您在通过 /etc/ssh/sshd_config 文件来配置 sshd 时犯了一个错误,那么在重启该服务之后您可能会发现您被锁在服务器外面了,或者是 sshd 服务在处理一个不正确的配置语句时拒绝启用。因此当在远程服务器上编辑该文件时要格外的小心。

FTP 服务器
文件传输协议 (FTP) 是一个 TCP 协议,用于在计算机之间上传和下载文件。FTP 工作在客户端/服务器模式下。服务器组件被称为 FTP 守护程序。它持续不断地临听来自远程客户端的 FTP 请求。当一个请求到达时,它管理登录和建立连接。在整个会话期间它执行 FTP 客户端发送来的任何命令。 可以通过两种方式来管理 FTP 服务器的访问:
匿名
授权

在匿名模式中,远程客户端可以使用 "anonymous" 或 "ftp" 缺省用户帐号并通过发送一个邮件地址做为密码来访问 FTP 服务器。在授权模式下一个用户必须拥有帐号和密码。用户所访问 FTP 服务器中目录和文件的权限是根据登录时所用帐号来定义的。一般来说,FTP 守护程序将隐藏在 FTP 服务器的根目录中并将其改到 FTP 家目录,这样就可以向远程传话隐藏文件系统的其他部分。

1.vsftpd - FTP 服务器安装
vsftpd 是可在 Ubuntu 中使用的 FTP 守护程序之一。它在安装、设置和维护方面十分方便。要安装 vsftpd 您可以使用下列命令:sudo apt-get install vsftpd

2.vsftpd - FTP 服务器配置
你可以编辑 vsftpd 配置文件,/etc/vsftpd.conf,来配置缺省设置。缺省状态下只允许匿名 FTP。如果您希望禁用该选项,您可以将下面这行:
anonymous_enable=YES
改为
anonymous_enable=NO

缺省状态下,本地系统用户是不允许登录 FTP 服务器的。要改变该设置,您可以将下面这行反注释:
#local_enable=YES
缺省状态下,允许用户从 FTP 下载文件,但不允许他们上传文件到 FTP 服务器。为了能够上传文件到 FTP 服务器,需要改变该设置,您可以将下面这行反注释掉:
#anon_upload_enable=YES
配置文件包括许多配置参数。关于配置文件中的每个参数的信息都可以得到,或者您可以参考手册页,man 5 vsftpd.conf 说明每个参数的细节。 一旦您配置好了 vsftpd 您就可以运行该守护程序了。您可以执行下列命令来运行vsftpd 守护进程:
sudo /etc/init.d/vsftpd start

注意:在配置文件中缺省的设置主要是出于安全考虑。上面每一个改变都会使系统的安全性更小,所以请只在您需要时才改变他们。

网络文件系统 (NFS)
NFS 允许系统将其目录和文件共享给网络上的其他系统,通过 NFS,用户和应用程序可以访问远程系统上的文件,就象它们是本地文件一样。 NFS 最值得注意的优点有:
本地工作站可以使用更少的磁盘空间,因为常用数据可以被保存在一台机器上,并让网络上的其他机器可以访问它。

不需要为用户在每台网络机器上放一个用户目录。用户目录可以在 NFS 服务器上设置并使其在整个网络上可用。

存储设备如软盘、光驱及 USB 设备可以被网络上其它机器使用。这可能可以减少网络上移动设备的数量。

1.安装
在终端提示符后键入以下命令安装 NFS 服务器:
sudo apt-get install nfs-kernel-server

2.配置
您可以配置要输出的目录,您可以在 /etc/exports 文件中添加该目录。例如:
/ubuntu *(ro,sync,no_root_squash)/home *(rw,sync,no_root_squash)

您可以用主机名来代替 *。尽量指定主机名以便使那些不想其访问的系统访问 NFS 挂载的资源。 您可以在终端提示符后运行以下命令来启动 NFS 服务器:
sudo /etc/init.d/nfs-kernel-server start

3.NFS 客户端配置
使用 mount 命令来挂载其他机器共享的 NFS 目录。可以在终端提示符后输入以下类似的命令:
sudo mount example.hostname.com:/ubuntu /local/ubuntu

挂载点 /local/ubuntu 目录必须已经存在。而且在 /local/ubuntu 目录中没有文件或子目录。另一个挂载其他机器的 NFS 共享的方式就是在 /etc/fstab 文件中添加一行。该行必须指明 NFS 服务器的主机名、服务器输出的目录名以及挂载 NFS 共享的本机目录。 以下是在 /etc/fstab 中的常用语法:
example.hostname.com:/ubuntu /local/ubuntu nfs rsize=8192,wsize=8192,timeo=14,intr

动态主机配置协议 (DHCP)
动态主机配置协议 (DHCP) 是一种网络服务,相对于手工为每台网络主机配置,它使网络主机可能自动被服务器指定设置。被配置成 DHCP 客户端的计算机并不能控制其从 DHCP 服务器得到的设置,且该配置对于计算机用户来说是透明的。 由 DHCP 服务器提供给 DHCP 客户端最常用的设置包括:
IP 地址和掩码
DNS
WINS
然而,一个 DHCP 服务器也支持配置如下属性,如:
主机名
域名
默认网关
时间服务器
打印服务器

使用DHCP 的好处在于当网络发生改变如 DNS 服务器地址改变时,只需要在 DHCP 服务器中改变即可,所有网络主机将在其 DHCP 客户端下一次轮询 DHCP 服务器时被重新配置。另一个好处就是,它在将新计算机整合到网络时也更容易,因为不需要再检查 IP 地址的有效性。同时也减少 IP 地址的冲突。 一个 DHCP 服务器可以用两个模式来提供配置设置。

MAC 地址
该模式需要用 DHCP 去标明连接到网上的每块网卡唯一的硬件地址,然后在 DHCP 客户端每次使用该网络设备发送给 DHCP 服务器请求时提供给它一个固定的配置。

地址池
该模式需要定义一个 IP 地址池 (有时也叫范围或作用域) ,以便 DHCP 客户端可以被动态提供它们的配置from which DHCP clients are supplied their configuration properties dynamically and on a fist come first serve basis。当一个 DHCP 客户端有段时间不再在网络上时,该配置将过期并释放回地址池以便为其他 DHCP 客户端使用。

ubuntu 提供 DHCP 服务器及其客户端。服务器叫 dhcpd (动态主机配置协议守护程序)。Ubuntu 提供的客户端叫 dhclient,应该安装在所有自动配置的计算机上。这两个程序很容易安装和配置,并可在系统引导时自动启用。

1.安装
要安装 dhcpd,可以在终端提示符后输入以下命令:
sudo apt-get install dhcpd
您将看到下面的输出,说明接下来做什么:
Please note that if you are installing the DHCP server for the firsttime you need to configure. Please stop (/etc/init.d/dhcpstop) the DHCP server daemon, edit /etc/dhcpd.conf to suit your needsand particular configuration, and restart the DHCP server daemon(/etc/init.d/dhcp start).You also need to edit /etc/default/dhcp to specify the interfaces dhcpdshould listen to. By default it listens to eth0.NOTE: dhcpd's messages are being sent to syslog. Look there fordiagnostics messages.Starting DHCP server: dhcpd failed to start - check syslog for diagnostics.

2.配置
安装结束后的错误消息可能会带来小小的困惑,不过下面几步将帮助您配置服务: 通常,您想做的是随机指定一个IP地址。这可以通过以下设置来实现:
# Sample /etc/dhcpd.conf# (add your comments here) default-lease-time 600;max-lease-time 7200;option subnet-mask 255.255.255.0;option broadcast-address 192.168.1.255;option routers 192.168.1.254;option domain-name-servers 192.168.1.1, 192.168.1.2;option domain-name "mydomain.org";subnet 192.168.1.0 netmask 255.255.255.0 {range 192.168.1.10 192.168.1.100;range 192.168.1.150 192.168.1.200;}

这将导致 DHCP 服务器从 192.168.1.10-192.168.1.100 或 192.168.1.150-192.168.1.200 范围中分配客户端一个 IP 地址。如果客户端没有要求一个特定的时间帧的话它将租用 600秒的 IP 地址。否则最大 (允许) 租用时间为 7200 秒。服务器也 "建议" 客户端使用 255.255.255.0 做为它的子网掩码,192.168.1.255 作为它的广播地址,192.168.1.254 作为路由器/网关,同时将 192.168.1.1 和 192.168.1.2 作为它的 DNS 服务器。 如果您需要为您的Windows 客户机指定一个WINS服务器,您需要包含 netbios-name-servers 选项,如:
option netbios-name-servers 192.168.1.1;

Dhcpd 配置设置可以从 DHCP 快速指南中得到。

域名解析服务(DNS)
域名解析服务(DNS) 是一个 Internet 服务,相互映射 IP 地址和完全限定域名 (FQDN) 。通过这种方式,使用 DNS 将不再需要记住 IP 地址。运行 DNS 的计算机称为名称服务器。Ubuntu 提供 BIND (伯克利 Internet 名称守护程序),一个在 GNU/Linux 上最常用的维护名称服务器的程序。

1.安装
在终端提示符后输入以下命令来安装 dns:
sudo apt-get install bind

2.配置
DNS 配置文件被保存在 /etc/bind 目录中,主配置文件叫 /etc/bind/named.conf。


小内存系统安装指南

1、基本系统
获得Ubuntu CD-ROM,把CD-ROM塞到驱动器后,当被提示按Enter,键入server(不是linux中的custom!)
微型系统会占用不到300 MB的硬盘空间,但只有文字界面(没有图形界面)。
2、后续安装流程
我是按以下步骤做的,但顺序并不重要:
$ sudo su - 这让你获得一个root的shell(#),sudo是必须要安装的
# vi /etc/apt/sources.list
(如果你不熟悉vi,你可以尝试nano或其他文本编辑器)删除#标志,打开系统软件仓库(universe-repository)
# apt-get update
# apt-get install icewm
# apt-get install xserver-xfree86
# apt-get install x-window-system-core
# apt-get install xdm
# apt-get install numlockx
# apt-get install xterm
安装X系统和iceWM窗口管理器。然后以普通身份登录:
$ startx
启动GUI图形界面。(第一次重启以后,xdm就会自动启动,直接把你带入图形环境中)以上配置需要468 MB的硬盘空间
3、基本应用程序
我们认为一个邮件收发器,一个网页浏览器,一个PDF阅读器和一个Office套件是最基本的了:
PDF阅读器
# apt-get install acroread
这需要额外的26 MB硬盘空间(相比之下,gPDF只需要3.2 MB空间,但它没有搜索和拷贝文本的重要特性),Mozilla 我们把Flashplayer和Acrobat插件包括在内,这是为了能于当今的网络更好地兼容。(插件仅需要2.5 MB空间)
# apt-get install mozilla flashplayer-mozilla acroread-plugin
以上一共占用了555 MB的硬盘空间
Office套件
直到写这个Howto时,你有两个选择,可以任选其一(不能全选)。OpenOffic会经常更新,但核心是不变的(只是更换版本号而已)。从软件仓库中获得:
# apt-get install openoffice.org
这会安装Openoffice 1.1.2
或者:通过OpenOffice.org安装OpenOffice 1.1.3:
我下载了官方网站提供的OpenOffice 1.1.3的tar包。解包以后进入tar树,然后键入: # ./install

小结:最后有了一个大小是770 MB的基本系统了,还需要一个128 MB的swap空间,这样运用Ubuntu桌面就只需要一个1 GB到1.5 GB大小的硬盘了。

4、额外的应用程序
程序名称            安装方式             所需空间
openssh-server    (sshd) apt-get install openssh-server    594 kB
gthumb    apt-get install gthumb    60.2 MB
Acrobat Reader     apt-get install acroread    26 MB
gpdf    apt-get install gpdf    3.2 MB
OOo, German Language Pack    apt-get install openoffice.org-l10n-de    18.6 MB
OOo, German Help    apt-get install openoffice.org-help-de    23.5 MB
CUPS Daemon    apt-get install cupsys    23.6 MB
CUPS-Manager    apt-get install gnome-cups-manager    1.6 kB
Printerdrivers    apt-get install cupsomatic-ppd    22 MB
The Gimp    apt-get install gimp    40.5 MB
cdrecord    apt-get install cdrecord    1.2 MB
mkisofs    apt-get install mkisofs    860 kB
nedit (编辑器)     apt-get install nedit    3.3 MB
alicq (ICQ客户端)    apt-get install alicq    7.8 kB
gaim (ICQ客户端)    apt-get install gaim    18.4 MB
guitar (Dateikomprimierer)    apt-get install guitar    3.3 MB
vzip und unzip    apt-get install zip/apt-get install unzip    550 kB
rdesktop    apt-get install rdesktop    320 kB
tsclient (VNC客户端)    apt-get install tsclient    940 kB
cdrtoaster    apt-get install cdrtoaster    106 kB
Simple cdrx    apt-get install simplecdrx    5.1 MB
gtoaster    apt-get install gtoaster    6 MB
xine-ui (多媒体播放器)    apt-get install xine-ui    12 MB
w32codecs    apt-get install w32codecs    28.4 MB
MPlayer    apt-get install mozilla-mplayer    18.3 MB
MPlayer字体    apt-get install mplayer-fonts    7.3 MB
gstreamer插件    apt-get install gstreamer0.8-plugins    11 MB
mc (Midnightcommander, 文件管理器)    apt-get install mc    5 MB
emelfm (文件管理器)    apt-get install emelfm    582 kB

Todos(备份)在CD-ROM中着一个能工作的前台找一个能工作的Mplayer包

4、将来的打算
如果只有64 MB或32 MB内存,就不要安装OpenOffice了。推荐Abiword或Gnumeric。Mozilla浏览器似乎也不太合适,推荐Firefox或Thunderbird/Pine。

5、比较
如果把Ubuntu和Fedora相对低内存的支持做个比较,会惊奇的发现:
Installation-Type Fedora Core 3 [MB] Ubuntu 4.10 [MB]
Minimal standard 571 298
Minimal trimmed 430 ??
w/ X, iceWM ?? 450
w/ Mozilla ?? add. 58
w/ OpenOffice 1.1.3 ?? add. 184

6、更多帮助
安装和配置Ubuntu:http://ubuntuguide.org/
安装低内存系统:http://www.rule-project.org

7、反馈


8、与Debian Sarge选择安装
作者 Thomas HINTERBERGER
安装之后发现Debian iceWM于Ubuntu系统有些冲突(tar包不能正常工作,Acroread和OpenOffice也是如此--路径似乎不对)。因为不太了解 iceWM,打算用网络安装Debian(软盘安装也可以,可以在www.debian.org下载)。这非常小,包括X和iceWM才298 MB。iceWM在原始Debian中iceWM工作地很好,安装完以后所有程序都能立即工作(但可能是因为这是最新版的iceWM 2.20,当然也应该安装Firefox 1.0, Mozilla 1.7.5和gimp 2.2)。可以根据Ingo那样做,我只是在必要出添加注解。安装以后不要用"sudo su",应该键入“su”来获取根用户权限,把下列内容加到/etc/apt/sources.list中
deb ftp://ftp.debian.org/debian/ sarge main
deb ftp://ftp.debian.org/debian-non-US/ sarge/non-US main
deb-src ftp://ftp.debian.org/debian/ sarge main
deb-src ftp://ftp.debian.org/debian-non-US/ sarge/non-US main
# netselect-apt
找到最快的Debian镜像
# apt-get install xterm
# apt-get install sudo
# apt-get install emelfm
当第一次用iceWM,应该存在/etc/sudoers文件,如果没有,请重启后再进行下一步:
# shutdown -r now
# echo "[username] ALL = NOPASSWD: /sbin/shutdown, /sbin/poweroff,/sbin/halt, /sbin/reboot, /bin/cdrecord" >> /etc/sudoers
# shutdown -r now
重启之后,当你按下strg+alt+del,你就可以使用所有命令了。如果不起作用,你必须以root身份正确重启机器。除此以外,你可以编辑/etc/sudoers文件,但只能用命令
# visudo
不要用其他编辑器,visudo命令:o = 保存, x = 退出
输入以下内容::
root ALL=(ALL) ALL
[username] ALL = NOPASSWD: /sbin/shutdown, /sbin/poweroff, /sbin/halt, /sbin/reboot, /bin/cdrecord
剩下的纠合Ingo描述的一样了,只有一件事:我没有用nedit,而是bluefish,它有4 MB多,但你能获得一个漂亮HTML编辑环境。
Ubuntu中,X的配置不那么容易。我又一个小技巧:使用Ubuntu live CD或Knoppix (如果你只有64 MB,你必须先做一个swap分区。我没有在Ubuntu中做测试,但Knoppix是能在64 MB下启动的),设置让屏幕和字体看起来漂亮一些,拷贝live CD或磁盘上的/etc/X11/XF86Config-4(发邮件也可以)到/home目录中保存,然后复制到/etc/X11/XF86Config -4覆盖它。
# cp XF86Config-4 /etc/X11/XF86Config-4
在所用的系统中,它能完全正常的工作(无论使用Knoppix配置还是Ubuntu配置),另外一个技巧:emelfm是一个文件管理器,就象Nautilus或Konqueror那样,启动可能有些慢而且又难以配置,但它真的可以工作。

加速Ubuntu开机过程

此文档适合抱怨ubuntu启动速度相当慢但不愿意安装任何可选择工具提速的人群。我在这里使用的方式不是最终解决方案,但是无论如何它确实有所改变并且它确实起作用了。下面的做的一切是通过调整Ubuntu开机进程,因为每人的计算机有所不同,存在一些风险——下面的一些东西可能损坏你的系统。在你更改之前,做出你的判断并为/etc目录作一个备份总是好的。**此文档主要适合笔记本和台式机,不适合服务器。**

此HowTo的建议:
1. 我希望你能从中学到东西而不是仅仅简单的拷贝。因此请,**不要** 完全地按照我所作的并复制到你的计算机,阅读服务的描述并自己判断去决定是否需要保留他们。例如,在我的电脑上我关闭GDM用终端引导,但是如果你看到终端感到一点都不舒服,你应该保留GDM或KDM直接引导到用户图形界面。

2.如果你对开机服务有疑问并且确实对该服务是什么不是很确定,在此张贴问题并且看看是否有人能帮助你,在你行动之前如果你不知道。保持系统安全的底线是让一种服务开着而不是关闭它,如果你不理解的该服务的话。

3.如果你在你机器上见过一个开机服务但不在这里,告知我们它是什么?正如我在这里做的一样-给一些说明和建议关于是否它应该在一台正常的笔记本或者桌面环境上开或关。

I. 安装一个工具-sysv-rc-conf。它是一款基于perl的开机进程调整工具。
sudo apt-get update
sudo apt-get install sysv-rc-conf
它提供一种配置开机进程和运行等级的简单方法,但是如果你想要通过链接/解除链接文件来手工操作的话,这不是必需的... 这由你决定

II. Ok,一切就绪。现在通过以下代码来运行它
sudo sysv-rc-conf
并一个一个的分析每种服务。**注意** 我有的一些服务或许你没有,完全可以。如果一些服务你有但是我没有,你将需要独自研究或者在这里提问... 但是此HowTo 涵盖它们中的大多数...

在我们开始搞乱它们之前,我要在这里引入一些运行等级知识....全部开机进程执行顺序如下:
运行等级 S:开机进程中的第一个运行等级。/etc/init.d/rcS脚本将被调用到开启并且/etc/rcS.d目录下的所有进程将被执行。
运行等级 1:单用户模式。/etc/rc1.d目录下的所有进程将被执行。
运行等级 2,3,4,5:在debian系统里是多用户环境,可能不包含图形用户界面。同样的,在相应目录下的进程将被运行。

**注意** 这和RedHat,SuSE,以及其它基于RPM的系统不同。
运行等级 0:关闭计算机
运行等级 6:重起计算机

好,回到sysv-rc-conf:

1. acpi-support – 你最好使其在S运行等级处于“X”状态。

2. acpid - acpi守护程序.这两个用于电源管理,对于笔记本和台式电脑很重要,所以让它们开启。

3. alsa - 如果你使用alsa声音子系统,是的,开启它。

4. alsa-utils -在我系统里,此服务取代了alsa,所以我关闭了alsa并在S运行等级将此服务开启。**注意**,我所说的“关闭”是指在所有运行等级里面去除所有“X”。如果在你系统里没有它,没问题,让我们继续。

5. anacron - 一个cron子系统,当时间到达时用于执行任何没有被执行的cron作业。当某种cron 作业时间准备好时,很可能你或许已经关闭了你的计算机。打个比方,updatedb被计划在每天2点执行,但是在那个时候,你的计算机是关闭的,然后如果 ananron服务如果是开启的话,它将设法抓起那个updatedb cron… 我将它关闭是因为我不经常关闭我的笔记本,但是否开启此服务完全取决于你。

6. apmd - 这是十分困惑我的一个服务。我已经开启了acpid服务,那同时开启apmd有啥好处呢?如果你的计算机不是那么老,甚至不能支持acpi,然后你可以设法关闭它。无论如何,我是关闭它的。

7. atd - 就像cron,一个作业调度程序。我把它关了。

8. binfmt-support - 核心支持其他二进制的文件格式。

9. bluez-utiles - 我把它关了因为我没有任何蓝牙设备。

10. bootlogd - 开启它。

11. cron – 开启它。

12. cupsys – 管理打印机的子系统。我没有打印机所以我关闭它了,如果你有打印机,开启他。

13. dbus – 消息总线系统(message bus system)。非常重要,开启它。

14. dns-clean – 当使用拨号连接,主要用于清除dns信息。我不用拨号,所以我关闭了它。

15. evms – 企业卷管理系统(Enterprise Volumn Management system). 我关闭了它。

16. fetchmail – 一个邮件接受守护进程,我关闭了它。

17. gdm – gnome桌面管理器。 无论如何我关闭它了,因为我将系统用终端引导。如果你想直接引导到图形用户界面,这取决于你。

18. gdomap – 事实上我也不知道为什么此服务必需开启。我没有在其他系统见过这个守护程序,所以我将其关闭并且我没觉得我失去了什么。开启它对笔记本或者台式机有任何好处吗?


19. gpm – 终端鼠标支持。如果你觉得你在终端使用鼠标更好,那么在运行等级 1 和2 开启它。

20. halt - 别更改它。

21. hdparm – 调整硬盘的脚本。我在运行等级 2,3,4,5去除了它但是在S 运行等级添加了它。我觉得早点打开DMA,32bit I/O等等将对其余过程有益。我自己也将原来的脚本精简了一下。如果我知道我正做什么,我觉得做过多的检查没用。相应配置文件是 /etc/hdparm.conf。

22. hibernate – 如果你的系统支持休眠,把它打开,否则它对你没用。

23. hotkey-setup – 此守护进程为你的笔记本建立一些热键映射。支持的制造商包括: HP, Acer, ASUS, Sony, Dell, 和IBM。如果你有那些品牌的笔记本,你可以打开它,否则它或许对你没有任何好处。

24. hotplug and hotplug-net #激活热插拔系统是费时的。我将考虑关掉它们。我在的/etc/network/interfaces文件作了很多修改,并将其设置为自动运行,而不是在热插拔进程期间映射我的无线网卡。所以我可以将它们关掉。我已经测试过了,甚至我将它们关闭,ubuntu仍旧可以检测到我的usb驱动器,我的数码相机,等等。所以我认为关掉它们是很安全的**注意**如果在关闭热插拔服务以后发现你的声卡部工作了,你可以将服务打开,或者编辑 /etc/modules文件并添加声卡驱动模块。经测试,后者比较快。

25. hplip – HP打印机和图形子系统,我将其关闭了。

26. ifrename – 网络接口重命名(network interface rename)脚本。听上去很酷但是我把它关掉了。主要用于管理多网络接口名称。虽然我有无线网卡和以太网卡,两者被内核标识为eth0和ath0,所以此服务对我不是很有用。

27. ifupdown and ifupdown-clean – 打开它,它们是开机时网络及口激活脚本。

28. inetd or inetd.real – 查看文件/etc/inetd.conf 注释掉所有你不需要的服务。如果该文件不包含任何服务,那关闭它是很安全的。

29. klogd – 打开它。

30. linux-restricted-modules-common – 你应该去查看下是否你的系统装载有任何受限制的模块。既然我需要madwifi ath_pci 模块,所以我将其开启。受限制的模块可以从/lib/linux-restricted-modules查看到。如果你发现你没有使用任何受限制的模块,那关掉这个服务没事。

31. lvm – 我没有使用逻辑卷所以我将此服务关闭。让它开启如果你 *确实* 有lvm(lvm是逻辑卷管理器在此不再扩充)。

32. makedev – 打开它。

33. mdamd – Raid管理工具。不使用Raid所以我将此服务关闭。

34. module-init-tools – 从/etc/modules加载扩展模块。你可以研究/etc/modules文件查看是否有一些你不需要的模块。通常我们将此服务开启。

35. networking – 在启动期间通过扫描/etc/network/interfaces文件增加网络接口和配置dns信息。让它开着。

36. ntpdate – 通过ubuntu时间服务器同步时间 。在开机的时候我不需要它,故我关掉了此服务。

37. nvidia-kernel – 我自己编译了nvidia驱动,所以此服务对我没用。如果你从受限制模块中使用nvidia驱动,那打开此服务。

38. pcmcia – 激活pcmica设备。我将此服务打开在S运行等级而不是分别在2,3,4,5运行等级打开此服务,因为我觉得起先让硬件设备准备更好。如果你在使用没有pcmica卡的台式机的话,请关闭此服务。

39. portmap – 管理像nis,nfs等等之类服务的守护程序。如果你的笔记本或台式机是纯粹的客户端,那么关闭此服务。

40. powernowd – 管理CPU频率的客户端程序。主要用于支持CPU speed stepping技术的笔记本。通常如果你在配置一台笔记本,你应该开启此服务。如果是台式机,那此服务应该没有用。

41. ppp and ppp-dns - 对我没用,我不使用拨号。

42. readahead - **感谢 mr_pouit!** readahead似乎是一种“预加载程序”。在开机时它将一些库文件加载到内存,以便一些程序启动的更快。但是它给启动时间增加了3-4秒。所以,你可以留着它…或者不。**更新**,经我测试我觉得加载程序没有什么不同。所以我决定关闭此服务。如果你有打开此服务的理由,那就打开它 。

43. reboot - 别更改它。

44. resolvconf – 按照你的网络状态自动配置DSN信息,我将它打开着。

45. rmnologin – 如果发现nologin,那么去除它。此情况不会在笔记本上面发生,所以我摆脱它。

46. rsync – rsync守护程序. 我不打算在我的笔记本上使用rsync协议,所以我将其关闭。

47. sendsigs – 在重启和关机期间发送信号。

48. single – 激活单用户模式。

49. ssh – ssh守护程序。 我需要ssh,所以我将此服务打开。

50. stop-bootlogd – 从2,3,4,5运行等级停止bootlogd。

51. sudo – 检查sudo 状态。我没在一台笔记本或者台式机客户端上看到任何使用sudo的好处,因此我关闭了它。

52. sysklogd - 顺其自然。

53. udev and udev-mab – 用户空间dev文件系统(userspace dev filesystem)。好东西,我将它们打开。

54. umountfs - 顺其自然。

55. urandom – 随机数生成器。可能没什么用处,但是我留着它。

56. usplash - 嗯,如果你想看到漂亮的开机画面,顺其自然。无论如何沃关闭此服务了。如果你想关闭它,你也可以编辑/boot/grub/menu.lst文件注释掉splashimage行,除去开机splash核心选项。

57. vbesave – 显卡BIOS配置工具。它能保存你显卡的状态。我将其开启。

58. xorg-common – 设置X服务ICE socket。我将其从在S运行等级开启移动到2,3,4,5,运行等级。如果我引导到单用户模式,那我不需要此服务。在最初引导期间这种方法将不占用时间。

59. adjtimex – 这也是调整核心hw时钟的工具。通常你不会在开机列表中看见它。在非常少有的情况如果你确实在开机进程中看见它了,事出有因,因此最好顺其自然。在我的情况里,它是关闭的。

60. dirmngr – 证书列表管理工具(certification lists management tool)。和gnupg一起工作。你必须看看你是否需要它。在我的情况里,我是关掉它的。

61. hwtools – 一个优化irqs的工具。不确定打开它的好处。在我的情况里,我是关掉它的。

62. libpam-devperm - 在系统崩溃之后用于修理设备文件许可的一个守护程序。听起来不错,因此我打开它了。

63. lm-sensors – 如果你的主板内建一些传感芯片,通过用户空间(userspace)查看hw状态可能是有帮助的。我运行了它,但是它提示“没有发现传感器”,因此我关闭了此服务。64. mdadm-raid – 作用和mdadm服务相同。用来管RAID设备。如果你没有此类设备,那尽管关掉它好了。

65. screen-cleanup – 一个用来清除开机屏幕的脚本。嗯,是否关闭它有你决定。在我的情况里,我打开它了。

66. xinetd – 用来管理其他守护进程的一个inetd超级守护程序。在我的系统里,xinetd管理chargen, daytime, echo和time (在 /etc/xinetd.d 目录找到的),我不关系任何一个,因此我关掉了此服务。如果在xinetd下你确实有一些重要的服务,那打开它。

III.修改 /etc/inittab 文件
vi /etc/inittab
然后注释掉tty4,tty5, 和tty6。只留下tty1, tty2,和 tty3.。对于笔记本或台式机用户3个终端应该足够了。保存文件。

IV. Ok,我们可以重启计算机并看看它变的如何了。从我测试来看:在我停止大量服务之前,引导到终端整个过程大约花费了85到90秒。 (在那时,我也打开了我不需要的samba和nfs服务。我也将它们关闭了)。之后,整个过程花费了50秒。我有一台 P4M 1.8G CPU的笔记本。一些高档台式机或者笔记本应该花费更少时间。

**更新**: 加速/打扫系统重启或关机进程
1. 通过以下代码运行sysv-rc-conf:

sudo sysv-rc-conf
2. OK,睁开你的眼睛并仔细寻找那些在所有运行等级都没有“X”的服务。(所有运行等级包括 1,2,3,4,5,6, 和S), 一个一个的把它们写下来。在这里千万别出错。再你搞定以后再来一遍。

3. 退出sysv-rc-conf。

4.cd /etc/rc0.d
- 此目录关于系统关机进程。

5. OK, 现在开始

ls K*
将列出所有以大写K开头的链接。比较你的列表,将你列表中每个包含服务名的文件名改为小写k开头。例如,在你列表中你有一个ppp服务(意思是说ppp将在所有运行等级关闭),然后你可以这样做:

sudo mv K00ppp k00ppp
你只要将大写K改成小写k就好了,保留其余的。将此举应用到你列表中存在的所有服务 。

6.cd ../rc6.d
- 此目录关于系统重启进程。

7. ok,你应该也看到了相似的东西了吧,因此在此做和rc0.d中同样的修改。

8. 现在,你的重启和关机进程被清理了,你的重启和关机过程将变的更快。

关于什么是你要做的已经相当明了了。在每个运行等级/etc/rc和/etc/rcS脚本通过扫描每个链接是否以大写S开头来决定开启与否,通过扫描每个链接是否它是以大写K开头来决定停止与否。因此对于重启和关机运行等级,我们更关心的是大写K开头的链接,因为那写服务不运行在所有运行等级,不必停止他们。它们更本没有运行。如果有一天你想重新开启其中的一些服务,只要将小写的k改为大写的K即可。

原文地址

将php5.3升级为5.2版

Ubuntu 10.04的PHP版本是5.3,兼容性问题一堆,要换回稳定的5.2,这里的方法是安装9.10的PHP 5.2。

一、修改当前源为ubuntu 9.10的源(版本越近越好)
# cd /etc/apt/
# cp sources.list sources.list.lucid    将当前使用的源文件备份
# wget http://mirrors.163.com/.help/sources.list.karmic -O /etc/apt/sources.list
如果你对源码包不感兴趣的话可将源文件中的'deb-src'行去掉,觉得在更新源慢的话也可以将'archive.ubuntu.com'的源去掉。
# apt-get update

二、查看并卸载相关的php包
1、查看已安装的php包
# dpkg -l | grep php| awk '{print $2}'>instd.pak

将上面所输出的软件包全部卸载(注意)
# for i in `dpkg -l | grep php| awk '{print $2}'`; do echo $i && aptitude purge -y $i; done

安装5.2版本的软件包
# for i in `more instd.pak`; do echo $i && apt-get install -y $i; done

# php -v
PHP 5.2.10-2ubuntu6.5 with Suhosin-Patch 0.9.7 (cli) (built: Sep 16 2010 19:48:40)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

已经将php5.2安装好了。
现可以切换回 lucid源,但在更新软件时注意不要升级php,或将php锁定版本在5.2。

锁定php软件包:
--------------------------------------
echo -e "Package: php5\nPin: release a=karmic\nPin-Priority: 991\n" | sudo tee /etc/apt/preferences.d/php > /dev/null

apt-cache search php5-|grep php5-|awk '{print "Package:", $1,"\nPin: release a=karmic\nPin-Priority: 991\n"}'|sudo tee -a /etc/apt/preferences.d/php > /dev/null

apt-cache search -n libapache2-mod-php5 |awk '{print "Package:", $1,"\nPin: release a=karmic\nPin-Priority: 991\n"}'| sudo tee -a /etc/apt/preferences.d/php > /dev/null

echo -e "Package: php-pear\nPin: release a=karmic\nPin-Priority: 991\n" | sudo tee -a /etc/apt/preferences.d/php > /dev/null

--------------------------------------
apt-get update
aptitude install -t karmic php5-cli php5-cgi
aptitude hold `dpkg -l | grep php5| awk '{print $2}' |tr"\n" " "`


安装nginx-fastcgi-php参考

停止apache2

# invoke-rc.d apache2 stop
移除基启动连接,以免下次开机时其自动启动
# update-rc.d -f apache2 remove

安装nginx
#apt-get install nginx

安装 Linghttpd's spawn-fcgi
root@ubuntu:~# apt-get install spawn-fcgi
正在读取软件包列表... 完成
正在分析软件包的依赖关系树      
正在读取状态信息... 完成      
下列【新】软件包将被安装:
spawn-fcgi
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 64 个软件包未被升级。
需要下载 14.0kB 的软件包。
解压缩后会消耗掉 102kB 的额外空间。
获取:1 http://mirrors.163.com/ubuntu/ lucid/universe spawn-fcgi 1.6.3-1 [14.0kB]
下载 14.0kB,耗时 0秒 (16.8kB/s)
选中了曾被取消选择的软件包 spawn-fcgi。
(正在读取数据库 ... 系统当前总共安装有 50085 个文件和目录。)
正在解压缩 spawn-fcgi (从 .../spawn-fcgi_1.6.3-1_amd64.deb) ...
正在处理用于 man-db 的触发器...
正在设置 spawn-fcgi (1.6.3-1) ...
update-alternatives: 使用 /usr/bin/spawn-fcgi.standalone 来提供 /usr/bin/spawn-fcgi (spawn-fcgi),于 自动模式 中。
update-alternatives: 警告: 未将 /usr/share/man/man1/spawn-fcgi.1.gz 替换为链接。

接下配置nginx,调整其相关参数,以提供性能。
安装之后的文件结构大致为:
* 所有的配置文件都在/etc/nginx下,并且每个虚拟主机已经安排在了/etc/nginx/sites-available下
* 程序文件在/usr/sbin/nginx
* 日志放在了/var/log/nginx中
* 并已经在/etc/init.d/下创建了启动脚本nginx
* 默认的虚拟主机的目录设置在了/var/www/nginx-default

开启ssi支持:
在nginx中加入如下配置项:
#To suport SSI
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;

堵上那个漏洞
if ( $fastcgi_script_name ~ \..*\/.*php ) {return 403;}
error_page 404 /404.html;

标准服务器配置:
-----------------------------------------
user www-data;
worker_processes  16;
error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;

#Specifies the value for maximum file descriptors that can be opened by this process.
#worker_rlimit_nofile 65535;

events {
use epoll;
worker_connections 5200;
}

http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;
access_log  /var/log/nginx/access.log;
sendfile        on;
tcp_nopush     on;
#keepalive_timeout  0;
keepalive_timeout  60;
tcp_nodelay        on;
client_max_body_size 100m;
gzip  on;
gzip_min_length  1000;
gzip_buffers     4 16k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss t
ext/javascript;
gzip_vary on;

#To suport SSI
ssi on;
ssi_silent_errors on;
ssi_types text/shtml;

include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;

fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
}

标准主机配置:
-----------------------------------------
server {
listen 80;
server_name mysite      renai.cn;
access_log  /var/log/nginx/mysite-access.log;
error_log  /var/log/nginx/mysite-error.log;

location / {
root /var/www/mysite;
index  index.php index.html index.htm index.shtml;
}

location ~ ^/office_adminx/.+\.php$ {
root   /var/www/cms/;
rewrite /office_adminx/(.*\.php?) /$1 break;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index index.php,index.shtml;
fastcgi_param  SCRIPT_FILENAME /var/www/cms$fastcgi_script_name;
include fastcgi_params;
}
#虚拟目录的设置,注意与上面的位置顺序
location /office_adminx/ {
alias   /var/www/cms/;
index   index.php index.html index.htm index.shtml;
}

location ~ .*\.(shtml|php)?$ {
fastcgi_pass   127.0.0.1:9000;
fastcgi_index index.php,index.shtml;
fastcgi_param  SCRIPT_FILENAME /var/www/mysite$fastcgi_script_name;
include fastcgi_params;
}
#这个一定要写在最后。
}
-----------------------------------------
支持其解析php和shtml文件:
location ~ .*\.(shtml|php)?$ {
fastcgi_pass   127.0.0.1:9000;
fastcgi_index index.php,index.shtml;
fastcgi_param  SCRIPT_FILENAME /var/www/site$fastcgi_script_name;
include fastcgi_params;
}

注意
fastcgi_param SCRIPT_FILENAME /var/www/site$fastcgi_script_name;
/var/www/site 改为你的网站根目录,一般就是改成这个。

PHP5
安装php5.2
首先更改相关为karmic源。
#apt-get update
之后的php版本即为5.2.10了。
#apt-get install php5 php5-cli php5-cgi php5-gd php5-mcrypt php5-mysql php5-curl php5-xmlrpc php5-xsl php5-memcache php5-imap
具体参考:《ubuntu10将php5.3改为5.2版》
root@ubuntu:/etc/apt# php -v
PHP 5.2.10-2ubuntu6.5 with Suhosin-Patch 0.9.7 (cli) (built: Sep 16 2010 19:48:40)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies

修改相关配置:
这里是采用的php的cgi工作方式,其配置文件在:/etc/php5/cgi/php.ini,所要更更改的选项有:
memory_limit = 512M
display_errors = Off
auto_prepend_file = "/var/www/cms/core.php"    #为每一网站增加一个共享库,指向实际的绝对路径
cgi.fix_pathinfo=1    #这个目前还有争议
upload_max_filesize = 16M
magic_quotes_gpc=off    #关闭此选项

FastCGI
编写控制spawn-fcgi的脚本。
/etc/init.d/spawn-fcgi
#!/bin/bash
### BEGIN INIT INFO
# Provides:          hto
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts the fastcgi server
# Description:       starts fastcgi using start-stop-daemon
### END INIT INFO
set -e

PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="spawn-fcgi daemon"
NAME=spawn-fcgi.standalone
DAEMON=/usr/bin/$NAME

# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0

d_start() {
$DAEMON -a 127.0.0.1 -p 9000 -C 32 -u www-data -g www-data -f /usr/bin/php-cgi > /dev/null 2>&1
$DAEMON -a 127.0.0.1 -p 9001 -C 32 -u www-data -g www-data -f /usr/bin/php-cgi > /dev/null 2>&1 || echo -n " already ru
nning"
}

d_stop() {
/usr/bin/killall -9 php-cgi > /dev/null 2>&1 || echo -n " not running"
}

case "$1" in
start)
echo -n "Starting $DESC: $NAME"
d_start
echo "."
;;
stop)
echo -n "Stopping $DESC: $NAME"
d_stop
echo "."
;;
restart)
echo -n "Restarting $DESC: $NAME"
d_stop
sleep 1
d_start
echo "."
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 3
;;
esac

exit 0

将其作成开机自动启动:# update-rc.d spawn-fcgi defaults

优化php执行环境:
一、Zend Optimizer
tar zxvf ZendOptimizer-3.3.9-linux-glibc23-i386.tar.gz

cd ZendOptimizer-3.3.9-linux-glibc23-i386/data/5_2_x_comp
sudo mkdir /usr/local/zend
sudo cp ZendOptimizer.so /usr/local/zend

编辑php.ini
sudo gedit /etc/php5/cgi/php.ini

开头加入,注意标点符号要英文。
[Zend Optimizer]
zend_optimizer.optimization_level=1 
zend_extension="/usr/local/zend/ZendOptimizer.so"

重置spawn-fcgi脚本后,通过phpinfo函数,能看到如下信息:
This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
with Zend Optimizer v3.3.9, Copyright (c) 1998-2009, by Zend Technologies

二、XCache
apt-get install php5-xcache
root@ubuntu:/home/qii# dpkg -l | grep xcach
ii  php5-xcache                          1.2.2-5                                         Fast, stable PHP opcode cacher

xcache配置文件路径是
/etc/php5/conf.d/xcache.ini

编辑php.ini
vim /etc/php5/cgi/php.ini

把xcache.ini的内容加入到php.ini。

重置spawn-fcgi脚本后,通过:
# php -v
PHP 5.2.10-2ubuntu6 with Suhosin-Patch 0.9.7 (cli) (built: Oct 23 2009 16:30:10)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
with XCache v1.2.2, Copyright (c) 2005-2007, by mOo

三、eAccelerator

apt-get install php5-dev

下载 eAccelerator
wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2

tar jxvf eaccelerator-0.9.6.1.tar.bz2

cd eaccelerator-0.9.6.1

phpize
sudo ./configure -enable-eaccelerator=shared
sudo make

qii@ubuntu:~/tmp/eaccelerator-0.9.6.1$ sudo make install
Installing shared extensions:     /usr/lib/php5/20060613+lfs/

修改php.ini文件,安装为Zend扩展,最好放在开头,放到[zend]之前,免的出莫名其妙的问题:

sudo vi /etc/php5/cgi/php.ini
[eaccelerator]
zend_extension="/usr/lib/php5/20060613+lfs/eaccelerator.so"
eaccelerator.shm_size="16"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"
eaccelerator.allowed_admin_path="/var/www/nginx-default/control.php"

创建cache缓存目录
eaccelerator.cache_dir="/var/cache/eaccelerator"   这里定义cache路径

默认值是/tmp/eaccelerator,这非常简单因为任何人都对该目录可写,但是并不明智,因为重启后系统会自动清理该目录。一个更好的地方是/var/cache/eaccelerator。创建该目录并确保它对eAccelerator的使用者可写(通常该用户是你的网络服务器运行者,可能是www-data)。使用默认值的话这样继续:

mkdir /tmp/eaccelerator
chmod 777 /tmp/eaccelerator

改成 /var/cache/eaccelerator的话这样继续,先改php.ini
eaccelerator.cache_dir="/var/cache/eaccelerator"

sudo mkdir /var/cache/eaccelerator
sudo chown root:www-data /var/cache/eaccelerator
sudo chmod u=rwx,g=rwx,o= /var/cache/eaccelerator

复制控制文件control.php到网站根目录
sudo cp control.php /var/www/nginx-default/

修改control.php的$user和$pw,默认是admin和eAccelerator
sudo vi /var/www/nginx-default/control.php

重置spawn-fcgi脚本后,通过查看phpinfo的输出,有下列字段:

This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
with eAccelerator v0.9.6.1, Copyright (c) 2004-2010 eAccelerator, by eAccelerator

-------------------------------------------------
问题集
一)、"nginx could not build the server_names_hash"
在重启nginx时候,提示:
could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32

解决方法:
在配置文件的http{}段增加一行配置
server_names_hash_bucket_size 64;

如果64还不够,那么就按32的倍数往上加。

在中文wiki上有对该问题的说明:

保存服务器名字的hash表是由指令 server_names_hash_max_size 和 server_names_hash_bucket_size所控制的。参数hash bucket size总是等于hash表的大小,并且是一路处理器缓存大小的倍数。在减少了在内存中的存取次数后,使在处理器中加速查找hash表键值成为可能。如果 hash bucket size等于一路处理器缓存的大小,那么在查找键的时候,最坏的情况下在内存中查找的次数为2。第一次是确定存储单元的地址,第二次是在存储单元中查找键值。因此,如果Nginx给出需要增大 hash max size 或 hash bucket size的提示,那么首要的是增大前一个参数的大小。

二)、"No input file specified."

首先php.ini的配置中
cgi.fix_pathinfo=1
doc_root=

nginx中的配置有些麻烦

fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;

每个虚机要根据自己不同的虚机设置不能的目录,要保证这个路径正确。
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
这句不能在fastcgi_pass 127.0.0.1:9000;的前面。

在使用变量'$document_root'来替代站点的真实绝对路径后(/var/www/html),也会有可能出现此类问题。

在修改了php.ini文件后要重启fastcgi服务。

三)、unknown directive "try_files"
2011/02/17 13:57:32 [emerg] 17600#0: unknown directive "try_files" in /etc/nginx/sites-enabled/en.freeoa.net:13
2011/02/17 13:57:32 [emerg] 17600#0: the configuration file /etc/nginx/nginx.conf test failed

try_files 是 Nginx 自0.6.36 新增的 directive,通常对 try_files 的理解是:
if (!-e $request_filename) {
rewrite .* /index.php;
}

的更简洁的表达。但我发现它们之间还是略有区别,主要表现在两点:

1. 如使用 rewrite,Nginx 要求 document_root 下必须有一个 index 文件,即使我把另一个目录别名整个 document_root,但因为 Nginx 先校验 document_root 下是否有一个 index 文件,所以得放置一个空 index 文件。try_files 则没有 index 文件校验,直接去第二、第三...document_root 找对应的文件。

2. 如使用 try_files $uri $uri/ /index.php,index.php 不能取得 get 变量,例如在 Magento 下,对 http://freeoa.net/catalogname?mode=list 的访问不能起效,Nginx 交付的页面是 http://freeoa.net/catalogname。这时必须使用 rewrite,这或许是 try_files 的一个 bug。

Debian5  中自带的nginx版本刚好为0.6.32,不支持该指令,需要安装更高版本的nginx,需要在debian源中加入backports源。

# apt-get -t lenny-backports install nginx
正在读取软件包列表... 完成
正在分析软件包的依赖关系树      
正在读取状态信息... 完成      
将会安装下列额外的软件包:
geoip-database libgeoip1
建议安装的软件包:
geoip-bin
下列【新】软件包将被安装:
geoip-database libgeoip1
下列的软件包将被升级:
nginx
共升级了 1 个软件包,新安装了 2 个软件包,要卸载 0 个软件包,有 90 个软件未被升级。
需要下载 3323kB 的软件包。
解压缩后会消耗掉 6427kB 的额外空间。
您希望继续执行吗?[Y/n]y
获取:1 http://mirrors.163.com lenny-backports/main geoip-database 1.4.7~beta6+dfsg-1~bpo50+1 [2847kB]
获取:2 http://mirrors.163.com lenny-backports/main libgeoip1 1.4.7~beta6+dfsg-1~bpo50+1 [120kB]                                            
获取:3 http://mirrors.163.com lenny-backports/main nginx 0.7.67-3~bpo50+1 [356kB]                                                          
下载 3323kB,耗时 6s (493kB/s)                                                                                                              
选中了曾被取消选择的软件包 geoip-database。
(正在读取数据库 ... 系统当前总共安装有 50451 个文件和目录。)
正在解压缩 geoip-database (从 .../geoip-database_1.4.7~beta6+dfsg-1~bpo50+1_all.deb) ...
选中了曾被取消选择的软件包 libgeoip1。
正在解压缩 libgeoip1 (从 .../libgeoip1_1.4.7~beta6+dfsg-1~bpo50+1_amd64.deb) ...
正预备替换 nginx 0.6.32-3+lenny3 (使用 .../nginx_0.7.67-3~bpo50+1_amd64.deb) ...
正在解压缩将用于更替的包文件 nginx ...
dpkg:警告 - 无法删除原有的目录“/var/www/nginx-default”:目录非空
正在处理用于 man-db 的触发器...
正在设置 geoip-database (1.4.7~beta6+dfsg-1~bpo50+1) ...
正在设置 libgeoip1 (1.4.7~beta6+dfsg-1~bpo50+1) ...
正在设置 nginx (0.7.67-3~bpo50+1) ...
正在安装新版本的配置文件 /etc/nginx/sites-available/default ...
正在安装新版本的配置文件 /etc/nginx/nginx.conf ...
正在安装新版本的配置文件 /etc/nginx/mime.types ...
正在安装新版本的配置文件 /etc/init.d/nginx ...


Ubuntu 正在处理 22.04 版本频繁杀死应用的问题

Ubuntu 22.04 LTS 版本带来一项新功能:默认启用 systemd-oomd 作为内存不足时的守护进程,它可以在内存高压的情况下干掉一部分进程。然而该 OOMD 功能似乎有些失控,有时候即使用户没有感到任何内存压力,它也会莫名其妙地终止正在运行的程序,比如 Firefox、Chrome 或 Visual Studio Code,体验极差的用户在 Ubuntu 社区邮件列表中大量留言吐槽。一位沮丧的用户写道:在杀死应用程序之前应该有一个警告,以便有机会保存应用程序数据。杀死应用程序后至少应该有道歉和解释。当前的行为给人的印象是 Ubuntu 22.04 使用起来不可靠且不安全,这对于 LTS 版本来说是个大问题。

随后,Canonical 工程师 Nick Rosbrook 在邮件中解释了 OOMD 杀死进程的条件:
条件1:当总系统的内存使用量和交换使用量都超过 SwapUsedLimit(在 Ubuntu 上默认为 90%), cgoups 中超过 5% 的交换就会成为 OOM 的终结对象。
条件2:当一个单元的 cgroup 内存压力超过 MemoryPressureLimit ,则监控后代 cgroups 将从具有最多回收率的进程开始执行终止。

在实践中,大部分应用被杀死都是因为条件 1,很大程度上是因为 Ubuntu 只提供了 1GB 的交换空间, SwapUsedLimit 太容易达到 90%。基于进程的终止条件,Nick 提出了一些改动的思路,比如改变 systemd-oomd 计算 / 触发内存值的方式,又或是增加 SwapUsedLimit 的值,因为 1 GB 实在太少了。社区现已针对该问题启动了一个 Ubuntu 开发话题,征求更广泛的 Ubuntu 社区反馈,该问题应该会在 22.04.1 更新中得到解决。