Posts Tagged redhat

RedhatAS 和 CentOS的Update

前一段时间几乎都在关注FC5的信息,忘记了其实redhat的企业版也在近期推出了最新的AS4update3。这个版本是在原先FC4的基础上升级而来的——FC的真正用意可见一斑。

CentOS这帮家伙们也是效率高的可以,仅在几天之后就将CentOS的4.3版本释放了出来,呵呵,我现在正在更新中,估计今天晚些时候就可以提供下载了。

No Comments

Redhat9下升级Linux内核(Vmware)

首先说下我的环境win2kpro+Vmware(虚拟scsi的Redhat9)能联网
然后说说需要的文件和要素:
1.Linux-2.6.0.tar.gz
2.module-init-tools-3.2-pre9.tar.gz
3.mkinitrd-3.5.14-1-i386.rpm
4.不怕失败的心
 
下面说说详细的步骤和作法:
#wget http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/module-init-tools-3.2.tar.gz
 
#wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.0.tar.gz
 
# wget ftp://ftp.mbl.is/pub/fedora/1/i386/os/Fedora/RPMS/mkinitrd-3.5.14-1.i386.rpm
 
现在软件具备了,下一步就是开始具体的做了:
#cp module-init-tools-3.2.tar.gz    /usr/src
#cp linux-2.6.0.tar.gz /usr/src
#cp mkinitrd-3.5.14-1.i386.rpm  /usr/src
#cd /usr/src
#tar zxvf module-init-tools-3.2.tar.gz
#tar zxvf linux-2.6.0.tar.gz
#rpm -Uvh mkinitrd-3.5.14-1.i386.rpm
#rpm -qa|grep initrd
mkinitrd-3.5.14-1-i386
#cd module-init-tools-3.2
#./configure –prefix=/
#make moveold
#make
#make install
#cd ..
#tar zxvf linux-2.6.0.tar.gz
#cd linux-2.6.0
#make mrproper
#make menuconfig
其实可以根据自己的需要进行选择!

下面着重讲几个重要的配置:

* 关于"Loadable Module support"动态挂装内核模块选项, 一定要选上"Module unloading"和"Automatic kernel module loading"这两个选项.
* 关于"Processor type and features"选项, 一定要选上"Preemptible Kernel"抢占式内核选项, 这是2.6.x内核优于2.4.x内核的重要原因之一.
* 关于"Block Devices"的配置, 一定要选上对loopback和ramdisk的支持.
* 关于"Multi-device support(RAID and LVM)", 要选上"device mapper".
* 关于"Input device support", 记得要选上"Keyboards"和"Mice"的支持.
* 关于"Graphics support", 要选上对frame buffer的支持.
* 关于ALSA, 要选上"OSS API emulation"选项. OSS可以不用了.
* 关于USB, 能选的都选上吧
* 文件系统 ,请务必要选中ext3文件系统,
File systems—>
[*] Ext3 journalling file system support
[*] Ext3 Security Labels
[*] JBD (ext3) debugging support
以上三项一定要选上,而且要内建(即标*). 这个非常重要,在配置完后一定要检查一下.config文件有没有"CONFIG_EXT3_FS=y"这一项. 如果不是"CONFIG_EXT3_FS=y"而是"CONFIG_EXT3_FS=m",你在运行内核时就会遇上以下错误: pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed

* 网卡驱动
请务必把自己网卡对应的驱动编译进内核,比较普遍的网卡是realtek 8139,以下就是这种网卡的配置,以供参考
Device Drivers—>
Networking support—>
Ethernet (10 or 100Mbit) —>
<*> RealTek RTL-8139 C+ PCI Fast Ethernet Adapter support (EXPERIMENTAL)
<*> RealTek RTL-8139 PCI Fast Ethernet Adapter support

* 声卡驱动
也要选择自己声卡对应的驱动编译进内核,比较普遍的声卡是i810_audio,以下就是这种声卡的配置,以供参考
Device Drivers —>
Sound —>
<*> Sound card support
Advanced Linux Sound Architecture —>
<*> Advanced Linux Sound Architecture
<*> Sequencer support
< > Sequencer dummy client
<*> OSS Mixer API
<*> OSS PCM (digital audio) API[*] OSS Sequencer API
<*> RTC Timer support
PCI devices —>
<*> Intel i8x0/MX440, SiS 7012; Ali 5455; NForce Audio; AMD768/8111
Open Sound System —>
< > Open Sound System (DEPRECATED)

注意,如果用vmware进行编译,那么需要注意一些地方:
如果你在vmware下重新编译内核,硬盘用的是scsi的,以下选项必选:
Device Drivers  —>SCSI device support  —><*>   SCSI disk support
Device Drivers  —>SCSI device support  —>SCSI low-level drivers  —> <*> BusLogic SCSI support
可以
#make bzImage
可以
#make modules
#make modules_install
最后
#make install
最后:
我使用的grub启动系统,那么将 /boot/grub/grub.conf 中 linux2.6域中
kernel /vmlinux-2.6.14.2 项后面的 ro root=LABEL=/ 这个参数去掉,然后就可以用了
#cd /boor/grub
#vi grub.conf
然后进行相应的修改。
#reboot
之后选择升级后的2.6内核的启动。
 
接着就成功了!
 
再补充几句:
    升级到2.6.15.6的时候,步骤和上面差不多,但是mkinitrd要mkinitrd-4.1.18-2.i386.rpm
 
当然,还需要lvm2-2.00.25-1.01.i386.rpm
不相信的话可以安装mkinitrd试试,不会成功的,会提示需要lvm2-2.00.25-1.01.i386.rpm这时就需要下载一个lvm2-2.00.25-1.01.i386.rpm了,在www.pbone.net能找到。
安装命令如下:
#rpm -Uvh –nodeps lvm2-2.00.25-1.01.i386.rpm
否则会提示需要2.6的内核,这个是RedHat9内核是2.4.20-8的!
 
到这里,安装就完成了,如果有什么不妥的话,可以自己进行修改。我说的不妥是某些服务,比如iptables,这些都可以自己去解决了,但是系统是绝对能进去的。
还有,一般来说,编译内核成功后,写到grub.conf文件里的都不用改的,make install的时候就帮改了!我的是这样的!

,

No Comments

Fedora Core 5

RedHat履行了自己的承诺——其负责维护的免费Linux桌面版本Fedora按照日程表的计划于昨天(2006/03/20)推出了第5个版本,即FC5。与前一段时间沸沸扬扬的所谓“正式版”相比,这次是真正的release版本,代号“Bordeaux"——波尔多,盛产美酒的地方。大家如有需要,本站已经实现 本地下载 。

FROM  TO 

由于我还没有安装这个版本,所以只能从官方的文档中看看新版本有了哪些修改:

  1. 每一个版本都必不可少,也反映”最平淡“的新硬件支持
  2. 桌面系统
    • 全面更新的外观,新的泡泡主题,以及首次使用的 Fedora 新标识。

    • Fedora 渲染项目的早期工作被集成到桌面中。这个新的项目将为高级的,基于 OpenGL 的桌面接口提供技术基础。

    • 流行的桌面环境 GNOME 和 KDE 的创新版本。 GNOME 桌面基于 2.14 发布 , 而 KDE 桌面是 3.5 的一般版本。

    • 最新版的GNOME 电源管理程序GNOME 屏幕保护程序提供了新的集成的电源管理选项。

    • 新的GNOME 用户共享工具提供了简单而有效的文件共享。

    • 挂起到内存(Suspend to RAM)得到改进,它基于休眠支持的基础性工作。

    • 过去的图形化软件管理工具被替换为新一代工具的第一版。本次发布包含Pup, 系统升级的简单界面,以及Pirut, 一个新的软件包管理器,替换了system-config-packages。它们基于yum工具,为整个系统提供了一致的软件安装和升级功能。

    • 这一版本的 Fedora 首次包含 Mono 支持,以及众多 Mono 应用程序,例如Beagle, 桌面搜索工具;F-Spot, 相片管理工具; 以及Tomboy, 记事程序。

    • 您可以体验 0.10 版本的Gstreamer媒体框架带来的震撼的多媒体支持。本次发布在稳定性和功能上啾裙グ姹径加刑岣摺?lt;span>Totem电影播放器以及其他媒体软件都已更新为支持新的框架。

    • 国际化支持有极大进步,在 Fedora Core 5 中包含了SCIMSCIM语言输入框架提供了简单易用的界面,可以输入多种非英文语言。SCIM替换了过去使用的IIIMF系统。

    • 默认网页浏览器是Firefox1.5,它有大量新特性,更快,更安全,更有效。

    • OpenOffice.org2.0 最终版也包含在内。OpenOffice.org 使用系统中很多软件包,使得性能和效率得以提升。

    • 大量的GTKGNOME程序利用了Cairo2D 图形库, 包含在此次发布中,提供了高效而迷人的图形界面。

    • 对广泛使用的 Broadcom 43xx 无线芯片组的测试驱动包含其中。

    • 本次发布包括libnotify, 这个软件库为桌面带来了简单而吸引人的通知消息。

    • Fedora Core 5 使用gnome-mount, 更有效的机制,替换了fstab-sync,使用 HAL 来处理挂载。

    • 打印支持得到改进,包含了hplip工具,替换了hpijs

  3. 管理系统
    • Xen虚拟化得到加强。在 Fedora Core 5 系统中配置Xen虚拟机的工具现在使用标准的图形化安装过程,在桌面上运行为一个窗口程序。Fedora 开发者还创建了gnome-applet-vm, 它是简单的虚拟主机监控小程序,还有libvirt, 一个软件库,提供 API 来使用 Xen 虚拟化的能力。

    • 行业领先的anaconda安装系统进一步发展。新的特性包括远程登录,以及对回溯的增强支持。安装系统中的软件包管理由yum实现。这一增强是将 Fedora Extras 集成到安装过程中的第一步。

    • 版本 2.2 的ApacheHTTP 服务器包含其中。这一版本提供了认证、数据库支持、代理和内容过滤的功能增强。

    • 最新版的数据库服务器包含其中,包括MySQL5.0 和PostgreSQL8.1。

    • 几个 Java 程序以GCJ编译成了本地代码,例如GeronimoJ2EE 服务器以及Apache Jakarta项目,相比过去版本的 Java 开发能力又有提高。

    • 系统监测和性能分析的新工具包含其中。本次发布包含了systap, 一个调试和分析系统瓶颈的工具,以及Frysk, 一种执行分析技术,可以监测运行中的进程或线程。

    • 本次发布包含了system-config-cluster, 一个使您在图形界面管理集群配置的工具。

    • KexecKdump工具组合提供了新的崩溃转储功能,以及加快启动的可能,通过跳过引导时的固件。Kexec在一个内核运行的同时加载新的内核,而Kdump可以提供前一个内核的内存转储以调试。

    • 本次发布包含了iscsi-initiator-utils, iSCSI 守护进程及工具程序,提供对 iSCSI 接口的硬件的支持。

  4. 系统层次的改变
    • X.org X11R7.0 包含在本次发布中。R7.0 新的模块化结构使得驱动升级和开发更加简单,使 Linux 图形界面走上快速改进的道路。

    • gcc 4.1 编译器包含其中,所有 Fedora 软件包都使用新的编译器进行构建,安全和性能都有提高。

    • 本次发布的内核基于 Linux 2.6.16. 请参考发行注记中有关内核的其他段落。

    • 用于笔记本电脑和移动设备的 PCMCIA 框架发生了改变。过去的pcmcia-cs软件包使用 cardmgr/pcmcia 服务,在此次 Fedora 发布中,它们被替换为新的pcmciautils软件包, PCMCIA 设备直接由 hotplug 系统处理,使用动态的 udev 子系统。这样,系统效率和性能都有提高。

    • SELinux 的实现经历了巨大变化。参照策略支持二进制策略模块。将 SELinux 策略移动到单独的软件包中成为可能,用户可以更简单地定制专用的策略。这个版本还支持 SELinux 框架的 MCS (Multi Category Security, 多类别安全,默认启用) 和 MLS (Multi Level Security, 多层次安全) 子系统。SELinux 继续支持 TE (Type Enforcement, 类型强制,默认启用),以及 RBAC (Role-Based Access Control, 基于角色的访问控制)。请查看其他章节中有关链接。

     

个人评价:
根据这一段时间网友的呼声看来,大家最为期待的其实是新的3D桌面技术,这个自然不在话下,同样类似的还有对于部分打印机的更新支持和openoffice的更新,表现了Linux要占据桌面应用的野心。

从这次对于桌面的更新看来,对于电源的更新、”挂起到磁盘“、无线网卡、PCMCIA 框架等一系列笔记本电脑标志技术的更新修改,说明Fedora将把工作重点放在对于笔记本电脑的支持,欲摆脱传统上Linux对于笔记本电脑支持不佳的软肋。

对于软件系统的更新、共享工具、mono支持、新的流媒体等的更新说明了将来的趋势是”基于网络“而非”基于单机“的操作系统,这和Google传说中的网络操作系统有着些许异曲同工之妙。

更强的支持Xen以及更好的系统管理工具乃至于Redhat的看家本事Se-linux的更新,个人觉得这并非是给一般用户准备的,毕竟Redhat开发维护FC的真实价值在于给自己的企业版本Linux提供一个拥有广泛测试的”实验平台“。

Java,又见Java——Redhat对于Java的支持可谓是一代比一代强了,从2.0根本没有任何对于Java的引入,到3.0对于Java几乎只停留在Kdevolop上的一种文件,到4.0提供了一整套的Java开发环境(虽然版本很低),终于到了5代的”Java开发的完整平台“,似乎其最终目标是提供一个可供企业级系统部署的Java平台。可以看得出,自Solaris宣布开源以后,Redhat在企业级场合受到了严重的挑战,不得不加强修补对于自身Java支持不完善的软肋,争取在Sun之外建立自己的Java平台并与其一争高下。

当然要数最为”引人注目“的更新自然是对于Logo的修改,新的logo采用了蓝色的基调,留意一下:"TM"小标志,注册商标了!新的logo再也不见了那顶挥之不去的”小红帽“,虽然“Fedora”的意思还是“帽子”,看来经历了3年,redhat终于要放手了,让自己的Fedora逐渐变为“Fedoraproject.org"。

1 Comment

给Fedora 4安装Fcitx 3.x

注:应别人要求转贴了FC4下安装fcitx(为了使用五笔输入)的文档,并作了部分文字、格式修改,不涉及技术。由于未经测试,希望大家见谅。
原著为LinuxSir.Org的北南南北。


一、下载;

源码包:fcitx-3.2-050827.tar.bz2

RPM 包:fcitx-3.2.050827-fc4.noarch.rpm

二、安装 fcitx,二选其一;

1、RPM包的安装;

[root@localhost beinan]# rpm -ivh fcitx-3.2.050827-fc4.noarch.rpm

配置请看第三点;

2、源码包的安装;

[root@localhost beinan]# tar jxvf fcitx-3.2-050827.tar.bz2
[root@localhost beinan]# cd fcitx
[root@localhost fcitx-3.1.1]# ./configure
[root@localhost fcitx-3.1.1]# make
[root@localhost fcitx-3.1.1]# make install

三、Fcitx 3.x的配置;

让fcitx 进入桌面自动运行;方法有二;

方法一:

请在 /etc/X11/xinit/xinput.d/ 目录中查看文件zh_CN ,如果没有就建一个;把里面的内容改为如下的;

XIM=fcitx
XIM_PROGRAM=fcitx
GTK_IM_MODULE=fcitx
gnome-im-settings-daemon >/dev/null

方法二:

在$HOME/.xinput.d/里建立文件zh_CN,包含下面内容, 就可以了;

XIM=fcitx
XIM_PROGRAM=fcitx
GTK_IM_MODULE=fcitx
XMODIFIERS="@im=fcitx"
gnome-im-settings-daemon >/dev/null

如果当前用户目录下没有 .xinput.d目录,就建一个。然后再建一个zh_CN的文件,内容就是上面的那段。

[root@localhost beinan]# mkdir ~/.xinput.d

这样就差不多能用起来了。直接运行一下命令;

[root@localhost beinan]# fcitx

如果不能使用fcitx ,可能得设置设置一下变量;

还得设置一下当前用户的环境变量,也就是在你想用的那个用户的家目录下的 .bashrc 文件。

.bashrc这个文件是隐藏的,你可以用 vi 或者gedit编辑都行。看你习惯吧。

在里面加两行,如下:

export LC_CTYPE="zh_CN"
export XMODIFIERS="@im=fcitx"

注意保存一下,否则不起做用;

我是刚安装好的系统,一切都是新的,看一下我的beinan这个用户下的 .bashrc的配置吧。

# .bashrc
# User specific aliases and functions
export LC_CTYPE="zh_CN"
export XMODIFIERS="@im=fcitx"
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

存在的问题;

如果您用中文桌面环境,能启动fcitx ,但不能输入,大多是控制台的locale和桌面的locale不一致所引起的。

请在用户家目录下的.bashrc 中加入一行;

export LANG="zh_CN.UTF-8"

另外还在建一个 .i18n的文件;内容如下:

LANG="zh_CN.UTF-8"

重启X就好了,按CTRL+ALT+BACKSPACE;就重新启动系统;litrin注:其实直接在终端下输入init 3回到文本方式,再init 5 回来就成了。

,

No Comments

Redhat中Selinux的用法

RedHat Enterprise Linux AS 4.0中安全方面的最大变化在于集成SELinux的支持。

SELinux的全称是Security Enhanced Linux,是由美国国家安全局NSA开发的访问控制体制。

SELinux可以最大限度地保证Linux系统的安全。至于它的作用到底有多大,举一个简单的例子可以证明:没有SELinux保护的Linux的安全级别和Windows一样,是C2级,但经过保护SELinux保护的Linux,安全级别则可以达到B1级。

下 面在举一个例子来说明。如果我们把/tmp目录下的所有文件和目录权限设置为0777,这样在没有SELinux保护的情况下,任何人都可以访问/tmp 下的内容。而在SELinux环境下,尽管目录权限允许你访问/tmp下的内容,但SELinux的安全策略会继续检查你是否可以访问。

  1. 启用SELinux
    我们在安装RedHat Enterprise Linux AS 4.0的过程中,可以选择“激活”、“警告”或者“关闭”SELinux。默认设置为“激活”。
  2. 配置SELinux策略
    RedHat Enterprise Linux AS 4.0安装之后,我们可以执行“应用程序”–>“系统设置”–>“安全级别”,或者直接在控制台窗口输入“system-config- securitylevel”来打开“安全级别”设置窗口。在“SELinux”选项页中,我们不但可以设置“启用”或者“禁用”SELinux,而且还 可以对已经内置的SELinux策略进行修改.
  3. 主要的Selinux操作
    ls -Z
    ps -Z
    id -Z
    这三个命令的-Z参数专为SELinux而增加的,可以看到文件,进程和用户的SELinux属性情况.
    重要命令:
    chcon 改变文件的SELinux属性!

No Comments

什么是Selinux

介绍:
当今世界,无处不在高速互联网连接、如备有无线接入点的咖啡馆和在网上到处传播的各种黑客工具使得出于对计算机安全的考虑成为老生常谈。出于解决安全问题,NSA在Linux社区的帮助下开发了一种访问控制体系,在这种访问控制体系的限制下,进程只能访问那些在他的任务中所需要文件。这种体系叫做 Security-Enhanced Linux或简化为SELinux。

SELinux概览:

SELinux是一种基于 域-类型 模型(domain-type)的强制访问控制(MAC)安全系统,它由NSA编写并设计成内核模块包含到内核中,相应的某些安全相关的应用也被打了SELinux的补丁,最后还有一个相应的安全策略。

众所周知,标准的UNIX安全模型是"任意的访问控制"DAC。就是说,任何程序对其资源享有完全的控制权。假设某个程序打算把含有潜在重要信息的文件仍到/tmp目录下,那么在DAC情况下没人能阻止他!

而MAC情况下的安全策略完全控制着对所有资源的访问。这是MAC和DAC本质的区别。

SELinux里实现的MAC允许程序在/tmp目录下建立文件,也允许这个文件按照UNIX权限字的要求对全世界可读,但是当UNIX许可检查应用后, SELinux许可检查还要进一步判断对资源的访问是否被许可。
换句话说,尽管某些UNIX文件的权限被设定为0777但是你也许仍然会被禁止读,写和执行该UNIX文件。在只有DAC的情况下,用户可以查看或更改属于他的任何文件。SELinux则可以限制每一个进程对各种资源的访问,和访问的权级。就是说当一个程序在使用含有敏感数据时,这些数据会被禁止写入那些低权级进程可读的文件中。

SELinux提供了比传统的UNIX权限更好的访问控制。

例如,管理员可以只允许一个应用程序添加记录到一个日志文件但不允许其重写或者删除该日志文件的内容。虽然ext2和ext3文件系统有一个append-only标签(使用chattr设置),但是这属性不区分某一个进程(不能在为一个访问 append-only的同时,又允许另一个进程据有完全可写的权利);另一方面,一个应用程序可以被允许在一个文件夹中建立文件和向其写入数据,但不能删除文件:这种特性是没有SELinux的普通的Linux内核所不能做到的。还有,网络应用程序可以绑定到其需要的端口上(如BIND的53端口),但不能绑定其它端口。

域-类型模型意味着在安全域中运行着的每一个进程和每一个资源(一般文件、目录文件和套接字等)都有一个与之相联系的"类型"(type)。

在这基础之上建立了一系列规则,这些规则列出了某个域可以在每一个类型上执行的所有动作。 域-类型模型的一个优点就是我们可以对策略进行分析,从而判断出哪些信息有可能外溢。在标准的UNIX环境中,用户一般可以使用ps命令来互相查看彼此的进程列表,然而这也会为攻击者提供有价值的信息。甚至就算完全阻止用户使用ps命令,信息还是会意外的或故意的泄露,其实在一个给定的UNIX环境中,哪些信息会发生泄露是无法判断的。

而在SELinux情况下,我们会有很多工具用来分析SELinux策略并判断哪些信息泄露是可能的。举个例子,假如有两个应用程序被允许向一个日志文件添加数据,且他们互相不能直接通信。那么如果一个其中进程又获得了对该日志的读权限的话,那么一个单方通信就有可能形成。

对访问/etc/shadow文件做访问限制是个很好的例子,通过该例子我们可以看出策略分析的好处。
如果你装了Fedora Core 3,并且选择了严格的SElinux策略配置,那么将会有17个域被允许访问shadow_t(/etc/shadow的type),其中有9个域据有写权利。这17个域中有2个可以从用户域(user domain)进入,他们是/usr/bin/passwd和 /sbin/unix_chkpwd(一个为无特权应用程序提供密码检查的辅助程序,比如向锁屏程序就需要使用到unix_chkpwd)。这17个域中的某些域是为一些不常见的应用程序准备的(如radius_t域就是为RADIUS服务器准备的),所以,也就是说,就算除去这个不常用的域,一般的系统中还有16个可访问的域能够访问/etc/shadow呢!

值得注意的是,Fedora发型版的SELinux策略已经变得越来越灵活;未来版本的策略也许会使何以访问/etc/shadow的域超过17个,这取决于可调节选项的实际配置。还要注意的是,17这个数字是基于严格的策略设定之后而得出的,实际上一个默认的安装会大于这个数字。

在一个没有SE的机器上,任何以root身份运行的进程都可以访问/etc/shadow文件。这意味着任何被"SETUID root"的二进制代码或以root身份运行的网络服务守护进程,它们所产生的任何安全问题都将会是灾难性的。

SELinux允许我们限制这些守护进程只访问其所需:
BIND只能在53端口提供服务、DHCP服务器可以使用原始套接字(raw network access)、DHCP客户端也可以使用原始套接字并可以改变网络接口,但是它们谁都别想访问/etc/shadow,/home,/root等等这些重要的资源。
所以,在SElinux的情况下,如果BIND受到了危害,它最多也就是发送一些伪造的报文罢了。如果DHCPD受到了危害,最坏的可能就是你的ip地址分配被搞乱。这比root权力被远程滥用好多了!

大家很清楚,一个进程可以援引另一个进程。

在这种情况下,拿DHCPD为例,DHCPD也许会尝试援引 /sbin/unix_chkpwd对密码进行强力攻击。(But even that potential vulnerability is closed):SELinux能够提供"过渡"规则,这种规则可以用来判断各种域间过渡是否合法。有了"过渡"规则以后,由用户执行的屏幕保护程序可以顺利过渡到/sbin/unix_chkpwd这样一个特权域,然而DHCPD就别想了。

上述这些限制功能可以使你对系统的状态了如指掌。如果你发现你的DHCP服务器有BUG,那你只要简单的升级DHCP服务器到新版本并且确定每一个客户端都能正常获得IP地址就可以了。可是如果没有SE的话,你还要考虑你的新服务器是否已被黑客入侵并擦除了痕迹。

SElinux 对不同的域做了严格的隔离。我以前运行一个Debian系统有两年时间,在这期间我开放了他的root密码。最近两个月我在一个Fedora系统上做同样的事情。但这两个系统已经抵抗住了很多次以root身份的攻击(见httphttp://www.coker.com.au/selinux/play.html)。(译者注:这里有一些作者对其playmachine的介绍被忽略了)

为了给RHEL4做代码测试,Fedora core 2已经尝试集成了SELinux,但是默认是关闭的。而且将来RHEL和Fedora Core的SE还会有非常大的差别的。我们计划在RHEL中,将把SELinux的策略设置的比Fedora Core要严格,我们相信这样做也符合用户的要求。未来的Fedora版本的SELinux策略将会越来越严格,但再严格也不会超过RHEL。

SELinux深入研究:

SELinux的策略数据库控制着SELinux的方方面面。它可以判断一个程序可能会运行在哪个域中,还可以说明某个域可以访问哪些资源。这种规定被叫做规则,一个典型的策略往往拥有100,000条规则。别被这数字吓坏,我们根本不必去关心它,因为当我们撰写策略时,我们可以使用高级宏,这些高级宏的一行就能生成10,000条规则。除了宏以外,还有一些工具,使用他们可以分析这些生成的规则是否能达到你对安全的要求。其实再和设置每个文件的UNIX 权限位这样的工作比起来,这100,000个规则也是相当小的工作量了。

Fedora Core 2安全策略的目标是满足大多数用户无需改动就可以工作的要求,但也有一些普通的简单的选项可以调节策略,一般都是简简单单的一行选项。比如是否允许用户通过dmesg阅读内核的日志,是否允许管理员(sysadm_r)直接通过SSH登陆或登陆图形会话,还有是否允许用户绑定TCP套接字。
那100,000个左右的规则存储在一个大约2.6MB的文件中,当系统启动时随内核一起装入内存并占用同样大小(大约2.6MB)的内核空间。 Fedora Core 3默认的strict策略有着多余290,000条规则,占用7MB的内核空间。Fedora Core 3默认的target策略有大约5,000条规则,占用150K的内核空间。

目前,SELinux并没有在内存使用方面进行优化;但现在对这些优化工作已经有了计划和一些降低内存使用的方法。如果你不打算使用某些守护进程,你可以简单的将其对应的策略文件删除以便获得占用空间更少的策略。2003年,在Ottawa举办的一次Linux讨论会上,我提交过一篇文章,那是关于我在把 SELinux移植到HP iPAQ PDA上所做的工作的文章(在http //archive.linuxsymposium.org/ols2003/Proceedings/可以获得)。

证明我可以使SELinux(且选择 strict策略)很好的工作在一台只有 64 MBs的RAM 和32 MBs 存储空间的小平台上,并且我相信我还可以使它运行在更小的平台上。针对Fedora Core2系统,我们只把目光定位在目前最常见的硬件平台,从而得出了默认的策略配置。但那些使用老机器的用户们也许会希望配置出最小限度的策略以便减少内存使用和提高性能。

在使用了SELinux的系统中,每一个进程的上下文都包含三个组成部分:一个ID(identity),一个角色(role)和一个域(domain)

ID是指这个进程的所有者,就是UNIX账户,但前提是这个账户必须被预先编译到SELinux策略中去使SELinux认识这个账户,不然的话SELinux默认地将那些未知的系统进程ID记为 system_u ,将那些未知的用户进程ID记为 user_u;角色用来判断某个处于此角色的ID可以进入哪些域,还用来防止某个处于此角色的ID进入其它不该进入的域。比如, user_r角色就不允许进入 sysadm_t (重要的系统管理域)。

换句话说就是,那些只有 user_u ID的进程只能扮演 user_r 这个角色,而 user_r 这个角色 永远不能被许可进入 sysadm_t 域。从而,那些只有 user_u 这个ID的人是别想进入 sysadm_t 域的。这些特色在缺省的Fedora Core2策略中并没有完全使用,当前我们只是把努力花在制定守护进程上,而对用户域的策略限制的很少(targeted策略没有对用户登陆做任何限制)。

一个安全上下文可以像 identity:role:domain 这样一种描述符的方式简明的表现出来。

比如,典型的系统管理上下文可以表示成 root:sysadm_r:sysadm_t 。任何可以被访问的对象都可以这样来表示。值得注意的是,"域"其实也是和一个进程相对应的一个"类型"。所以当检查某个进程是否有权向另一个进程发送信号(比如为ps命令检阅/proc文件系统)时,接受信号的进程的"域"就会充当"域-类型"模型中的"类型"的角色,从而完成"域-类型"的规则检查。即完成了进程间通信权限的检查。由于对于文件还没有使用角色这个机制,所以目前每个文件都被规定为object_r 角色(这个角色只是占个位置罢了,对策略没有任何影响)。

文件的ID就是文件创建者的ID。constraints 策略源文件中使用这个方式来判断一个访问是否有权改变某个文件的上下文描述符。除非被访问的文件的描述符中的ID字段和访问该文件的进程的所有者ID字段相同,无论是改变前还是改变后,否则进程无权改变一个文件的上下文描述符。

例如,一个拥有 rjc:user_r:user_t 描述符的进程可以将一个拥有 rjc:object_r:user_games_rw_t 描述符的文件的描述符改为rjc:object_r:user_games_ro_t ,但是它无权改变一个拥有 john:object_r:user_games_rw_t 描述符的文件的任何属性。

要想查看当前运行的进程的上下文描述符,可以使用ps命令并加入 "-Z"选项,如例一:"ps ax -Z的输出":
PID CONTEXT COMMAND
1634 root:user_r:user_t -bash
1662 root:user_r:user_t ps ax -Z

Example 1. Example Output of ps ax -Z

要想查看目录下的文件的上下文描述符,可以使用ls命令并加入 "-Z"选项,如例一:"ls -Z的输出":
drwxr-xr-x root root system_u:object_r:bin_t bin
drwxr-xr-x root root system_u:object_r:boot_t boot
drwxr-xr-x root root system_u:object_r:device_t dev
drwxr-xr-x root root system_u:object_r:etc_t etc
drwxr-xr-x root root system_u:object_r:home_root_t home
drwxr-xr-x root root system_u:object_r:root_t initrd
drwxr-xr-x root root system_u:object_r:lib_t lib
drwx—— root root system_u:object_r:lost_found_t lost+found
drwxr-xr-x root root system_u:object_r:default_t misc
drwxr-xr-x root root system_u:object_r:mnt_t mnt
drwxr-xr-x root root system_u:object_r:usr_t opt
?——— ? ? oracle
dr-xr-xr-x root root proc
drwxr-x— root root system_u:object_r:user_home_dir_t root
drwxr-xr-x root root system_u:object_r:sbin_t sbin
drwxr-xr-x root root selinux
drwxr-xr-x root root system_u:object_r:default_t srv
drwxr-xr-x root root sys
drwxrwxrwt root root system_u:object_r:tmp_t tmp
drwxr-xr-x root root system_u:object_r:usr_t usr
drwxr-xr-x root root system_u:object_r:var_t var

Example 2. Example Output of ls -Z

值得注意的是:对于那些没有指定上下文的文件(一般是指那些不支持rwx标签的文件系统,如/sys、/proc、/selinux),ls命令就不会显示其上下文。对于不能用stat命令查看当前状态的那些文件系统。ls命令返回"?———",其所有者和所有组也被标记为"?",同样的,他的上下文也不会显示。
如例三所示,id命令将返回当前shell的上下文
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:user_r:user_t
Example 3. Example Output of the id Command

如果你的SELinux系统使用了strict 策略,你会发现应用程序做一些不正常的事情是很容易发生的。你经常会发现某些程序中会有些bug,这些bug使程序做那些你的SELinux策略不允许其做的其它事情。
SELinux要求进程的上下文只有在被执行的"那一刻"才允许改变。新进程的域和角色信息可以从exec系统函数的上下文和文件类型中自动获得。进程也可以在执行exec之前被指明上下文。这些过程自然受SELinux策略的控制,因为ID,角色和域都受SELinux策略的控制。

Fedora中策略的实现:

从 Fedora Core 3 开始,SELinux的策略数据存储于/etc/security/selinux/X/src/policy/目录下(X指你选则的策略,可以是 "strict" 或者 "targeted")。在这个目录中,你可以使用"make load"来编译并装在策略。也就是用那个命令将策略编译成二进制格式并装在到内核中,并立即生效。除了装如内核,该命令还将策略的二进制格式存储到 /etc/selinux/X/policy/policy.YY文件中,这里X指你选则的策略,可以是"strict" 或者 "targeted",YY是策略的版本号(Fedora Core 3支持最新的版本是18)。这是为了在系统开机的第一时间,init可以迅速装载策略到内核。/etc/selinux/config这个配置文件用来告诉init那些策略需要装载。

当你启动一个SELinux时,init所做的第一件事就是挂载/proc文件系统,并判断SELinux是否被激活。init通过selinuxfs文件系统类型来判断内核中是否有SELinux,如果内核中没有SELinux或者内核参数中 selinux=0 这一项,那么系统就会以一种叫做 non-SE的状态被继续引导启动。如果发现了SELinux,那么/selinux虚拟文件系统将被创建,然后,init通过 /selinux/policyvers来检查内核所支持的SELinux版本。最后,相应的策略数据 /etc/selinux/X/policy/policy.YY就会被装在到内核中去了。

当策略被装载完之后,所有正在运行着的进程(指的就是init和内核的所有线程)都将被指定 system_u:system_r:kernel_t 这样一种上下文(内核线程其实无论在什么时间被创建,其上下文都是system_u:system_r:kernel_t )。当init装载完策略之后,它还要重新执行自己。策略中有一个规则叫domain_auto_trans(kernel_t, init_exec_t, init_t)。他的意思就是当 kernel_t 域执行了一个据有 init_exec_t 类型的可执行文件(如/sbin/init),那么该执行文件对应的进程的域就会自动过渡到 init_t 域(这是/sbin/init正确的所在域)。当这些都完成之后,init就继续完成那些通常的任务来完成机器的启动。内核线程自始至终都以 kernel_t 这个类型运行。

文件和目录的上下文存储于扩展属性当中 (XATTRs)。更多关于XATTRs的信息请参考attr(5), getfattr(1) 和 setfattr(1)的manpage。

简单的说,一个XATTR就是硬盘上某个文件的所有权,它由文件名和其它一些信息组成。对于每个 persistent 文件系统来说,它的每个文件或目录的SELinux上下文就存储在 security.selinux属性当中。虽然/proc文件系统不是persistent 文件系统,但SELinux还是在幕后为其文件和目录做了上下文标记,只是不能用getxattr获得罢了。和它对比,devpts文件系统(应用于/dev/pts Unix98伪终端)中各个文件(各个伪终端)的上下文是可以通过getxattr来获得的,并可以通过 setxattr 来更改每个设备的上下文(以便sshd等类似程序可以更改tty设备的上下文)。对于那些拥有固定存储的文件系统(ext2, ext3, Reiserfs, XFS, vfat, 等等) 有两种选择用于设定文件上下文:
第一种:文件系统的类型就规定了其内部每一个文件英据有统一的上下文;
第二种:使用 XATTRs 为每个文件标记不同上下文。例如,在iso9660(CD-ROM)文件系统中的每一个文件的上下文都是system_u:object_r:iso9660_t ,这被称做 genfs标记。

Ext2, ext3 和XFS支持 XATTRs 而且 Fedora 系统也支持安全标记名字空间,所以Fedora默认使用 XATTRs 来标记文件的上下文,但这也是可选方法之一。因为 直到 Reiser4发布之前 ,Hans Reiser对 支持XATTR没多大兴趣,所以Fedora的 ReiserFS 文件系统不能很好的支持SELinux标记操作。也就是说,使用 ReiserFS 文件系统作为SELinux的根文件系统是不可能的事情。

XFS有一个与XATTRs相关的重要的问题:如果XATTRs不能被装入超级块(inode),那么它们就会被装入数据块,每一个超级块就要使用一个数据块用来装 SELinux XATTR 。建立XFS时,mkfs.xfs在默认情况下创建的数据块大小为4096,超级块大小为256(要是用于安装 SELinux XATTR ,大约缺少30字节)。这就是说,默认的XFS文件系统中,每一个超级块要占用4096字节用来装载 SELinux XATTR ,这对于磁盘空间来说是严重的浪费!当你使用"-i size=512"选项创建一个XFS文件系统时,超级块的大小就变成了512字节,这样就可以将SELinux XATTR 装入超级块,即节省了空间,又提高的性能。512字节的超级块也有可能给其它操作带来好处。所以,如果你使用XFS并且打算将来使用 SELinux 的话,将超级块的大小规定为512字节肯定是个好主意。

如果你使用的是较新的内核(如最新的Fedora内核或标准2.6.8.1内核)并且使用最新的mount工具,那么当你挂载一个文件系统时,有一个选项可以用来为整个文件系统指定上下文标签。比如你要挂载的文件系统是一个邮件池(mail spool),你可以使用"-o context=system_u:object_r:mail_spool_t"选项来挂载他,这样会将其内部的全部文件的上下文标记为 system_u:object_r:mail_spool_t。如果你的这个邮件池很大,而且还是XFS文件系统,这个方法还可以避免上一段所讨论的 inode大小的问题。甚至对于ext3那样的对XATTRs 开销较小的文件系统来说,使用context=选项挂载文件系统也会进一步减少开销,也可以避免为已经建立的文件系统重新设置 SElinux上下文(如果文件系统中文件较多的话,会浪费很长的时间)。

Fedora的缺省SELinux策略:

在Fedora Core 3系统中,缺省的策略是"targeted "策略。对于此种选择人们议论纷纷,问题在于我们希望能使尽可能多得人使用SELinux。如果人们觉得这玩意太可怕并且妨碍了人们做他们想做的事,那么人们会把它关掉。所以我们在这个时候宁愿为大多数人提供适量的保护策略,也不会为了少部分人而提供严格的保护策略。缺省的Fedora Core 3安装会激活 SELinux 并使用"targeted "策略,你也可以通过运行 system-config-securitylevel 这个程序将策略改为更加严格的 "strict "策略。

如果你安装了策略的源文件包,那么策略的源文件就在/etc/selinux/X/src/policy/目录里面(X指你选则的策略,可以是 "strict" 或者 "targeted")在这个目录下有一个叫作domains/program/的子目录,里面为每一个守护进程对应了一个.te文件。你可以删去那些你不使用也不打算使用的守护进程所对应的.te文件,从而减少内核内存空间的使用,并提高性能。比如,你的系统没有BIND服务,你完全可以删掉 named.te 文件。然后如果你使用"make load"命令重新装载策略到内核的话,内核对内存的使用量就会减少。然而也要小心,如果你误删了其它文件,那么你的系统将不能正常启动进入 enforcing模式。所以目前,这种调节最好还是由内行来做。

刚开始接触SElinux的你,要注意一个内核参数,它用来决定你系统的内核运行于 强制(enforcing )模式还是自由(permissive)模式,那就是"enforcing"参数。在自由模式下SELinux只是记录他该做什么,而事实上并不做任何动作。在强制模式下SElinux会来真格的。如果你的策略有错误,在强制模式下系统可能会阻止你登陆!所以正常情况下你应改在启动时传 enforcing=1 给内核,当你的SELinux策略有问题时,你可以临时传enforcing=0给内核来查错。在/etc/selinux/config这个init的配置文件中相应的有一个选项,通过设置它,也可以使系统进入自由模式。

如果你打算中止使用SELinux,你可以使用 selinux=0 这个内核参数。这会关闭SELinux的全部功能,就好像你的内核并没有把SElinux机制编译进去一样。所以当系统出了问题时,比如系统崩溃,有些人就用此方法进行理事的恢复工作,但是我并不赞成这种做法。当你临时使用 selinux=0 进入系统后,你所建立的任何文件将不会拥有SELinux上下文标记。这就意味着,如果你替换了诸如/etc/passwd 或/etc/shadow等重要文件,那么下一次进入SELinux时,系统就不会正常的工作。这不是严重的问题,当你从CD引导时,做系统恢复时,或使用一个不支持 XATTRs备份软件恢复系统时,同样的问题也会发生。这个问题虽然可以通过为受到影响的文件系统重新标记上下文来解决,但是使用 enforcing=0 来代替 selinux=0 不是更好吗?
你可以编辑/etc/selinux/config来临时关闭SELinux。

Fedora Core 2的释放是SELinux一次重要的发展。他是第一套提供对SELinux完整支持的主流Linux发行版本。Fedora Core 3 也是一个重要的里程碑,因为他是第一套将SELinux作为默认安装选项的Linux发行版本。
Red Hat Enterprise Linux 4 见会跟随 Fedora Core 的开发步伐,其对SELinux的支持也会得到进一步的发展。当 RHEL 4 发布时,她将会从 Fedora Core 系统和在Fedora 上学习SELinux的用户那里获得非常大的益处。

你可以在 irc.freenode.net的 IRC服务器上的#fedora-selinux频道找到对SELinux的支持。还有 Fedora SELinux邮件列表 http://www.redhat.com/mailman/listinfo/fedora-selinux-list 。我经常挂在#fedora-selinux上面,并也订阅了邮件列表,我期望着在那里回答您提出的任何问题。

更多关于SELinux的资料:

NSA site for Security-Enhanced Linux: http://www.nsa.gov/selinux/
Fedora Core SELinux FAQ: http://people.redhat.com/kwade/fedora-docs/selinux-faq/
IRC channel for SELinux in Fedora Core: irc.freenode.net, #fedora-selinux
Mailing list for SELinux in Fedora Core: http://www.redhat.com/mailman/listinfo/fedora-selinux-list
SELinux play machine: http://www.coker.com.au/selinux/play.html

No Comments

为什么XMMS不支持mp3播放?

上次才说道XMMS是一个linux桌面系统下比较出色的播放器,模仿winamp的界面,可对于不少linux的用户会有无法播放mp3文件的毛病,这其实是linux发行版对于mp3版权问题的一种避规态度,在发行包中没有附加mp3的插件,解决方案就是——自己编译一个。

对于Redhat FedoraCore的用户有现成的RPM包

,

1 Comment

利用现成的RPM让Fedora支持NTFS

FC包括前身的Redhat桌面版,服务器版都不提供对于NTFS文件系统的支持,利用重新编译内核的方式可加载该模块,但对于FC来说,重边内核也许意味着你要丧失SElinux的特性,同时也无法再次利用yum升级内核。

正巧我的移动硬盘是NTFS格式的,由于经常用来拷贝数十G的文件,80G的容量就分为一个分区——只能是NTFS格式的了。于是,为了在我的机器上读取这个硬盘,我找到了这个网站http://www.linux-ntfs.org  简单的RPM包,实现NTFS支持,何乐而不为呢?

No Comments

CentOS 与 RHEL 的关系

其实为什么有 CentOS? CentOS 与 RHEL 有什么关系?

RHEL 在发行的时候,有两种方式。一种是二进制的发行方式,另外一种是源代码的发行方式。

无论是哪一种发行方式,你都可以免费获得(例如从网上下载),并再次发布。但如果你使用了他们的在线升级(包括补丁)或咨询服务,就必须要付费。

RHEL 一直都提供源代码的发行方式,CentOS 就是将 RHEL 发行的源代码从新编译一次,形成一个可使用的二进制版本。由于 LINUX 的源代码是 GNU,所以从获得 RHEL 的源代码到编译成新的二进制,都是合法。只是 REDHAT 是商标,所以必须在新的发行版里将 REDHAT 的商标去掉。

REDHAT 对这种发行版的态度是:“我们其实并不反对这种发行版,真正向我们付费的用户,他们重视的并不是系统本身,而是我们所提供的商业服务。”

所以,CentOS 可以得到 RHEL 的所有功能,甚至是更好的软件。但 CentOS 并不向用户提供商业支持,当然也不负上任何商业责任。

我正逐步将我的 RHEL 转到 CentOS 上,因为我不希望为 RHEL 升级而付费。当然,这是因为我已经有多年的 UNIX 使用经验,因此 RHEL 的商业技术支持对我来说并不重要。

但如果你是单纯的业务型企业,那么我还是建议你选购 RHEL 软件并购买相应服务(按:RH在中国只有开发中心而没有支持中心,换而言之,买了支持也得不到)。这样可以节省你的 IT 管理费用,并可得到专业服务。

一句话,选用 CentOS 还是 RHEL,取决于你所在公司是否拥有相应的技术力量。

,

2 Comments

自己如何制作RPM包

制作自己的RPM包[转贴]

我最早使用redhat就是冲着Rpm包来的,可是不久我就发现Rpm的缺点并非所有的软件都有Rpm包,而且各个版本的Linux之间的Rpm不能通用,于是便有将部分软件制作rpm的念头。几天前看到一篇东西,转贴过来,有空再试。

随 着RedHat Linux的风靡全球,其软件包管理工具及格式RPM也得到推广。基于RPM源代码开放、安装卸载简单、升级维护方便及查询功能强大的特点,越来越多的开 发者喜欢采用RPM格式来发布自己的软件包,更多的用户从中受益。那么,RPM软件包是怎样制作的呢?

其实,制作RPM软件包并不是一件复杂的工作,其中的关键在于编写SPEC软件包描述文件。下面以我制作小赵编辑器LZE的软件包(lze-6.0-1.i386.rpm)为例,详细说明一下软件包的制作过程。

1.mkdir -p /usr/src/dist/{BUILD,RPMS/i386}

上 述命令用于创建两个目录/usr/src/dist/BUILD与/usr/src/dist/RPMS/i386,前一个目录是RPM建立软件包时用的 目录,后一个是RPM输出软件包的目录,我的LZE软件包lze-6.0-1.i386.rpm就是在此目录下存放的。这两个目录不创建,运行rpm命令 建包时将报错退出。

注意:输出目录名i386,意味着这是台X86的机器。如果你的机器与此体系不同,则目录名也要相应更换。

2.编写软件包描述文件lze-6.0-1.spec

要想制作一个软件包,就必须写一个软件包描述文件(SPEC)。这个文件中包含了软件包的诸多信息,如软件包的名字,版本,类别,说明摘要,创建时要执行什么指令,安装时要执行什么操作,以及软件包所要包含的文件列表等等。

LZE软件包描述文件lze-6.0-1.spec比较简单,仅用于创建二进制程序包。其描述文件内容如下:(每行开头的数字为所在行在文件中的行号)

1 Summary:小赵全屏幕中英文多窗口多功能编辑器(Linux/UNIX系统适用)
2 Name:lze
3 Version:6.0
4 Release:1
5 Vendor:纵横软件制作中心(Email:zhsoft@etang.com)
6 Copyright:Share
7 Group:Applications/Editors
8 Source:http://zhsoft.myetang.com/lze-6.0.tar.gz
9 %description
10 小赵编辑器,是为使用SCO UNIX,Linux多用户系统的广大用户专门设计的全屏幕多窗
11 口中英文多功能编辑器。
12 它主要有以下十大特点:1.全屏幕菜单操作。2.显示方式多样。3.块操作丰富。4.十
13 字制表功能强大。5.多窗口操作灵活自如。6.文件操作功能齐全。7.解释输出功能独具特
14 色。8.自带中文输入法(增强五笔和增强拼音),实用方便。9.十六进制编辑功能,如虎
15 添翼。10.即时翻译,按到即译。
16 总之,小赵编辑器会成为您在UNIX,Linux系统上编制程序和书写一般性文稿的好帮手。
17 它将在工作中助您一臂之力,轻松上阵,游刃有余!
18
19 %prep
20 # prep start.
21
22 %build
23 # build start.
24 cp /root/{读我,版权声明} .
25
26 %install
27 # install start.
28
29 %files
30 %defattr (-,root,root)
31 %doc 读我
32 %doc 版权声明
33 %config /etc/funkey.def
34 %config /etc/inputme.def
35
36 /usr/bin/lze
37 /usr/bin/lzeime.py
38 /usr/bin/lzeime.wb
39
40 %changelog
41
42 * Fri May 1 1998 雨亦奇
43 – 增加多窗口操作
44
45 * Mon Mar 24 1997 雨亦奇
46 – 增加块操作命令
47

描述文件说明如下:

(1)文件头

它包含以下几个域:

* Summary:
软件包一句话说明,一行有效。
* Name:
软件包的名字,RPM用该名字与版本号,释出号及体系号来命名软件包。如,本例输出的软件包名为lze-6.0-1.i386.rpm。
* Version:
软件版本号。仅当软件较以前有较大改变时才增加版本号。
* Release:
软件释出号。若软件较以前改变较小,则仅增加释出号,不改变版本号。
* Vendor:
软件开发者的名字。
* Copyright:
软件包所采用的版权规则。具体有: GPL(自由软件),BSD,MIT,Public Domain(公共域),Distributable(贡献),commercial(商业),Share(共享)等。
* Group:
软件包所属类别,具体类别有:
Amusements/Games (娱乐/游戏)
Amusements/Graphics(娱乐/图形)
Applications/Archiving (应用/档案)
Applications/Communications(应用/通讯)
Applications/Databases (应用/数据库)
Applications/Editors (应用/编辑器)
Applications/Emulators (应用/仿真器)
Applications/Engineering (应用/工程)
Applications/File (应用/文件)
Applications/Internet (应用/因特网)
Applications/Multimedia(应用/多媒体)
Applications/Productivity (应用/产品)
Applications/Publishing(应用/印刷)
Applications/System(应用/系统)
Applications/Text (应用/文本)
Development/Debuggers (开发/调试器)
Development/Languages (开发/语言)
Development/Libraries (开发/函数库)
Development/System (开发/系统)
Development/Tools (开发/工具)
Documentation (文档)
System Environment/Base(系统环境/基础)
System Environment/Daemons (系统环境/守护)
System Environment/Kernel (系统环境/内核)
System Environment/Libraries (系统环境/函数库)
System Environment/Shells (系统环境/接口)
User Interface/Desktops(用户界面/桌面)
User Interface/X (用户界面/X窗口)
User Interface/X Hardware Support (用户界面/X硬件支持)
* Source:
源程序软件包的名字。
* %description:
软件包具体说明,可写在多个行上。示例中第10-18行均为说明。

(2)%prep段

这 个段是预处理段,通常用来执行一些解开源程序包的命令,为下一步的编译安装作准备。%prep和下面%build,%install段一样,除了可以执行 RPM所定义的宏命令(以%开头)以外,还可以执行SHELL命令,命令可以有很多行。示例中,本段只有第20行一行注释语句(以#开头),不执行任何操 作。

(3)build段

本段是建立段,所执行的命令为生成软件包服务。

本段第23行是注释行,第24行执行的是拷贝命令,将/root目录下的两个文件(读我,版权声明)拷贝到软件包建立目录(/usr/src/dist/BUILD)。

(4)%install段

本段是安装段,其中的命令在安装软件包时将执行。示例中,本段只有第27行一行注释语句(以#开头),不执行任何操作。

(5)%files段

本段是文件段,用于定义软件包所包含的文件,分为三类–说明文档(doc),配置文件(config)及执行程序,还可定义文件存取权限,拥有者及组别。本段中:

第30行-%defattr宏:定义文件存取权限为默认值(用-表示默认值,也可选择八进制数值,如0777等),定义拥有者为root,定义组别为root。

第31,32行-%doc宏:用该宏定义软件包所含的说明文档,若没有指定目录,则目录为/usr/src/dist/BUILD。每个宏只能定义一个说明文档。说明文档一般安装在"/usr/doc/软件包名-版本号-释出号"目录下。

第33, 34行-%config宏:定义软件包应用的配置文件,象sendmail.cf,passwd等。当卸载含有配置文件的软件包时,任何未作改动的配置文 件将被删除,改动过的配置文件将自动改名,后缀加上.rpmsave,以便再度安装这个软件包时可以迅速恢复使用。

第36-38行-为软件包所包含的文件名列表,可以写许多行。如果文件名指示的是一个目录,则该目录下的所有文件将被包含在软件包中,注意不要弄错了。

(6)%changelog段

本段是修改日志段。你可以将软件的每次修改记录到这里,保存到发布的软件包中,以便查询之用。

每一个修改日志都有这样一种格式:第一行是:* 星期 月 日 年 修改人 电子信箱。

其中:星期、月份均用英文形式,用中文会出错。

接下来的行写的应是修改了什么地方,可写多行。一般以减号起始,便于查阅。

3.rpm -bb lze-6.0-1.spec

用此命令生成软件包,执行后屏幕将显示如下信息:(每行开头为行号)

1 Executing: %prep
2 + umask 022
3 + cd /usr/src/dist/BUILD
4 + exit 0
5 Executing: %build
6 + umask 022
7 + cd /usr/src/dist/BUILD
8 + cp /root/读我 /root/版权声明.
9 + exit 0
10 Executing: %install
11 + umask 022
12 + cd /usr/src/dist/BUILD
13 + exit 0
14 Processing files: lze
15 Executing: %doc
16 + umask 022
17 + cd /usr/src/dist/BUILD
18 + DOCDIR=/usr/doc/lze-6.0
19 + export DOCDIR
20 + rm -rf /usr/doc/lze-6.0
21 + /bin/mkdir -p /usr/doc/lze-6.0
22 + cp -pr 读我 /usr/doc/lze-6.0
23 + cp -pr 版权声明 /usr/doc/lze-6.0
24 + exit 0
25 Finding Provides: (using /usr/lib/rpm/find-provides)…
26 Finding Requires: (using /usr/lib/rpm/find-requires)…
27 Requires: ld-Linux.so.2 libc.so.6 libc.so.6(GLIBC_2.0) libc.so.6(GLIBC_2.1)
28 Wrote: /usr/src/dist/RPMS/i386/lze-6.0-1.i386.rpm

第28行显示: 制作完成软件包,名字为lze-6.0-1.i386.rpm,在/usr/src/dist/RPMS/i386目录下。

4.软件包制作完成后,可用以下命令查询一下,看看效果。如果不满意的话,可以再次修改软件包描述文件,重新运行上一步命令,产生新的RPM软件包。

转到/usr/src/dist/RPMS/i386目录,执行以下命令:

(1)rpm -qpi lze-6.0-1.i386.rpm

此命令用于查询指定软件包的头部信息,结果如下:(以行号开头)

1 Name: lze Relocations: (not relocateable)
2 Version : 6.0 Vendor: 纵横软件制作中心(Email:zhsoft@etang.com)
3 Release : 1 Build Date: 2001年07月12日 星期四 13时33分21秒
4 Install date: (not installed) Build Host: 纵横软件制作中心
5 Group : Applications/Editors Source RPM: lze-6.0-1.src.rpm
6 Size: 532081 License: Share
7 Summary : 小赵全屏幕中英文多窗口多功能编辑器(Linux/UNIX系统适用)
8 Description :
9 小赵编辑器,是为使用SCO UNIX,Linux多用户系统的广大用户专门设计的全屏幕多窗
10 口中英文多功能编辑器。
11 它主要有以下十大特点:1.全屏幕菜单操作。2.显示方式多样。3.块操作丰富。4.十
12 字制表功能强大。5.多窗口操作灵活自如。6.文件操作功能齐全。7.解释输出功能独具特
13 色。8.自带中文输入法(增强五笔和增强拼音),实用方便。9.十六进制编辑功能,如虎
14 添翼。10.即时翻译,按到即译。
15 总之,小赵编辑器会成为您在UNIX,Linux系统上编制程序和书写一般性文稿的好帮手。
16 它将在工作中助您一臂之力,轻松上阵,游刃有余!

(2)rpm -qpl lze-6.0-1.i386.rpm

此命令用于查询指定软件包的全部文件列表,将命令中的-qpl换作-qpd,将显示文档文件列表,换作-qpc将显示配置文件列表。

命令执行结果如下:(行号开头)

1 /etc/funkey.def
2 /etc/inputme.def
3 /usr/bin/lze
4 /usr/bin/lzeime.py
5 /usr/bin/lzeime.wb
6 /usr/doc/lze-6.0
7 /usr/doc/lze-6.0/版权声明
8 /usr/doc/lze-6.0/读我

查询结果一切正常,软件包制作到此结束。

小结

在Linux下制作RPM软件包关键在描述文件,写起来着实简单,根据上述步骤生成软件包后,就可以对外发布了。在其它机器上用安装命令(rpm -i 包名)可安装这个软件包,若想卸载,可用命令(rpm -e 包名)来卸载这个包,非常方便。

No Comments