RedHat 服务器离线安装不匹配软件引起的故障及修复

这里简述一起在 RedHat 6.5 服务器上错误强制离线安装 CentOS 7 (或者 RedHat 7,这里假设为 CentOS 7)软件包后导致的服务器 rpm 命令失效,ssh 不能连接的情况。并给出相应的修复方法。
先说一下结论:rpm 命令失效和 ssh 不能连接是强制新安装的包依赖的基础库在 RedHat 6 的系统上版本不匹配。修复方式是卸载或用原系统包强制覆盖错误安装的软件包。下面在 VirtualBox 虚拟机上显示一下破坏和修复的过程。视频演示地址:https://www.bilibili.com/video/BV1wL4y1G72b?share_source=copy_web

Continue reading "RedHat 服务器离线安装不匹配软件引起的故障及修复"

开源文化实验室正式运行,下一步做什么?

从决定弄个开源文化实验室玩玩的2009年9月29日开始,到今天的12月23日,弄了近三个月时间,中间也走了一些弯路(是误入岐途还是勇于探索?),耽误了一些时间,但总算把原来想像中的开源文化实验室的框架基本搭起了。开源文化实验室也可以算是正式运行了。 Continue reading "开源文化实验室正式运行,下一步做什么?"

局域网内Linux网络设置小结

在实现为我的486装一个可用的linux with X Windows的目标的过程中,我试过Redhat Linux 9.0Minix3Damn Small Linux 3.4.4(简称DSL-3.4.4)Slackware Linux 10.2。除了Minix3的网络设置没有完成外,这里针对上面另3种linux发行版在我的486机器所在局域网环境中的网络设置作一个比较和小结。主要涉及:升级内核更新驱动程序,手动加载网卡,网络配置,用iptables实现简单NAT服务提供共享上网。

1、我的网络环境
在一个小的局域网中,机器不超过10台,网关路由器IP:192.168.1.1,路由器通过ADSL接入因特网。客户机可用dhcp上网(在网上听说这样的网络任意一台机子都不能设置为静态IP,否则会出问题,不过,我的机子恰恰就是设置的静态IP,至今有大半年了吧,也没有问题,可能是机子少的原因吧?)。

2、我的486机器的网络环境
操作系统:如上述3种;两块10M的ISA网卡(大概是如此,准确名称或有出入),一块是DLINK-220的,一块是INTEL Eexpress 16的;因为路由器插口数目不够,另一台机子和我共用一条网线,所以在机器上用iptables实现简单的NAT服务提供共享上网。

3、关于与此文网络设置相关的内核编译
因为原来使用redhat linux 9.0的自带内核版本是2.4.20-8,我的Eexpress网卡在上面竟然不能正常工作(能识别,但不能上网),于是,新下了一个2.4.35.3的内核,把Eexpress 16的驱动编译成模块;另外,如果要使用iptables,内核中相关编译选项也要选上。关于这两个问题的内核编译,详见日记:为486上的Linux编译一个2.4.35.3的内核
Slackware-10.2中自带的几个内核2.4.26和DSL-3.4.4自带的2.4.26都能正确的驱动Express 16网卡。

4、手动加载网卡
如果你的网卡由于某种原因不能被系统自动识别,你可以手动加载网卡。

5、设置网络
上面三个版本的linux都有自动设置网络的命令,redhat linux 9.0 和 slackware-10.2是netconfig,如设置第2块网卡在redhat linux 9.0中为 netconfig --device=eth1,slackware的netconfig命令好像不大相同,后面会讲。DSL-3.4.4在管理菜单中也有网络设置选项。你也可以手动修改配置文件。

6、各个操作系统的相应配置文件:
1)Redhat Linux 9.0

网卡加载:/etc/modules.conf
内容:

alias eth0 ne
options ne io=0x240

alias eth1 eexpress
options eexpress io=0x300 irq=3

或者写在/etc/rc或其它什么系统启动脚本中,如:

/sbin/modprobe eexpress io=0x300 irq=3

IP设置:
文件1(对eth0的设置,这里是DLINK-220那块网块):/etc/sysconfig/network-scripts/ifcfg-eth0
内容:

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.106
NETMASK=255.255.255.0
GATEWAY=192.168.1.1

文件2(对eth1的设置,这里是INTEL Eexpress 16那块网块):/etc/sysconfig/network-scripts/ifcfg-eth1
内容:

DEVICE=eth1
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.1
NETMASK=255.255.255.0

注意:eth1网卡没有设置网关,它用来在两台电脑之间为另一台电脑提供共享上网作网关用。后同。

与我这台机器相连的另一台电脑需要把他的网卡和我的这块eth1网卡相连,通过后面介绍的设置,他的电脑就可以通过我的电脑共享上网。

域名解析设置:/etc/resolv.conf
我的机器上的内容:

nameserver 192.168.1.1
search mdx

关于与我的电脑相连的另一台机子的网络设置和在我的机子上启用iptables提供nat服务是几个操作系统都相同的,放在最后说。

2)、Slackware-10.2
网卡加载:在文件/etc/rc.d/rc.modules中手工添加在后面(至于slackware怎样自动检测网卡,我不知道);
内容:

/sbin/modprobe ne io=0x240
/sbin/modprobe eexpress io=0x300

尽管我没有指定上面网卡的名称,系统还是自动的把ne的网卡(DLINK-220)认作eth0,eexpress的网卡认作eth1,或许跟写命令的顺序有关?我没有验证。

IP设置:在文件/etc/rc.d/rc.inet1.conf中设置(可以用netconfig命令设置,也可手工添加,slackware中的我试了一下netconfig命令,暂时还没找到单独为第二块网块设置的参数,所以在slackware中的第二块网卡的设置是手工加的);
相关的内容(非全部):

# Config information for eth0:
IPADDR[0]="192.168.1.106"
NETMASK[0]="255.255.255.0"
USE_DHCP[0]=""
DHCP_HOSTNAME[0]=""

# Config information for eth1:
IPADDR[1]="192.168.0.1"
NETMASK[1]="255.255.255.0"
USE_DHCP[1]=""
DHCP_HOSTNAME[1]=""

# Default gateway IP address:
GATEWAY="192.168.1.1"

域名解析设置,与上一样,同样在文件/etc/resolv.conf中设置;
我的机器上的内容:

search localdomain
nameserver 192.168.1.1

3)、DSL-3.4.4

Damn Small Linux 的网络设置有点特别,不管你是在网络设置菜单设置或手工添加都写在下面几个脚本里的:/opt/bootlocal.sh,/opt/eth0.sh,/opt/eth1.sh。
对照上面两个系统的设置,我就不详细说了,把几个文件贴出来:
/opt/bootlocal.sh内容(里面不只是网络设置):

#!/bin/bash
# put other system startup command here
/sbin/syslogd
/sbin/modprobe ne io=0x240 irq=5
/sbin/modprobe eexpress io=0x300 irq=3
/sbin/modprobe sb io=0x220
/opt/nat.sh &
/opt/eth0.sh &
/opt/eth1.sh &
loadkeys us

/opt/eth0.sh内容:

#!/bin/bash
pkill pump
ifconfig eth0 192.168.1.106 netmask 255.255.255.0 broadcast 192.168.1.255 up
route add default gw 192.168.1.1

/opt/eth1.sh内容:

#!/bin/bash
pkill pump
ifconfig eth1 192.168.0.1 netmask 255.255.255.0 broadcast 192.168.0.255 up

注意,在上面的/opt/bootlocal.sh文件中执行了一个文件/opt/nat.sh,这个文件就是启动iptables的nat服务的,我把它手工添加进了上面的那个自动启动脚本里。也可以不添加,需要时手动执行一下就是了。

这里是/opt/nat.sh的内容:

echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -A POSTROUTING -t nat -s 192.168.0.0/24 -j SNAT --to 192.168.1.106

4)、手动使用iptables的nat服务的脚本,像上面Redhat Linux 9.0 和 Slackware-10.2中我就使用下面的脚本nat来开启和关闭nat服务(slackware-10.2的iptables命令默认是装在/usr/sbin/下面的,所以下面的“/sbin/iptables”要改成“/usr/sbin/iptables”):

#!/bin/sh
# Name: nat
# Author: littlebat
# Date: 2007/10/30

echo "You use the iptables firewall.";
ETH="eth0" #有外网IP的网卡
src="192.168.0.0/24" # 内网地址段
TARGET="192.168.1.106" # 网关地址

case $1 in
start)
echo 1 > /proc/sys/net/ipv4/ip_forward
/sbin/iptables -A POSTROUTING -t nat -s $SRC -j SNAT --to $TARGET
echo "Nat starting ...... [ OK ]"
;;
stop)
echo 0 > /proc/sys/net/ipv4/ip_forward
echo "Nat closing ...... [ OK ]"
;;
*)
echo $"Usage: $0 {start|stop}";
esac

要开启nat时输入:nat start,关闭时输入:nat stop
当然,我只是简单的为另一台机器提供共享上网。实际上,用iptables可以设置非常复杂的防火墙。我暂时用不着,也就不研究它了。

5)、需要借助我的机子共享上网的那台机子的网络设置:
另一台机子需要设置成静态IP,参数如下:
IP:192.168.0.2
netmask:255.255.255.0
网关:192.168.0.1
域名解析:192.168.1.1

因为我的机子性能太差,所以既没有使用DHCP客户端程序获取静态IP,也没有使用DHCP服务器程序为另一台机器提供DHCP上网服务,都是静态的。

上面几种网络设置的形式,我最喜欢DSL中用脚本设置,我觉得这样的通用性和灵活性是最好的。
6)、疑问:
(1)、在DHCP的局域网中使用静态IP有什么问题?
(2)、Slackware中的netconfig命令怎样配置多块网卡?
(3)、Slackware中/etc/rc.d/rc.inet1.conf中,配置的网关在这个文件中是不是多块网卡共享的?为什么不像redhat linux 9.0和DSL那样每块网卡在分别的文件中配置?配置的这个网关对我配置的第二块网卡有什么影响没有?

至此,我的机子中3个Linux操作系统的网络设置作了一个小结,供备忘和有需要的朋友参考。水平实在有限,错漏之处和针对我的疑问还望提示一二。谢谢。

为486上的Linux编译一个2.4.35.3的内核

在实现为我的486装一个可用的linux with X Windows的目标中,为了让486机器运行得更快一点,加之Redhat linux 9.0原来自带的2.4.20-8的内核竟然不能驱动我的另一块ISA Express 16位网卡。所以决定为它定制一个内核。

因为我原来曾试过在redhat linux9.0上升级到2.6的内核,没有成功,而且看到网上的文章Linux 2.4->2.6内核升级指南(转帖),觉得太麻烦,以够用就行的原则,就没继续尝试。这次使用了定制的内核后,使启动后内存占用少了近2M,系统速度有明显的加快。下面是一些相关的心得。

1、为了让系统支持Framebuffer,把“Code maturity level options”中的“prompt for development and/or incomplete code/drivers”编译进核心(选择Y),否则后面“Framebuffer”支持的选项是灰化的。即在内核编译配置文件.config中这一项是这样的:

#
# Code maturity level options
#
CONFIG_EXPERIMENTAL=y

2、Processor type and features,选的是486,即在内核编译配置文件.config的选项是这样的:

# Processor type and features
#
# CONFIG_M386 is not set
CONFIG_M486=y

3、由于486处理器没有TSC计数器,所以有关TSC的选项一定要选为禁止。具体作法就是:[*] Unsynced TSC support(选为Y)。否则机器会无法启动,报告”这是为Pentium+编译的内核”之类的错误信息: "Kernel panic: Kernel compiled for Pentium+, requires TSC feature!"。即在内核编译配置文件.config中有关项是这样的:

# CONFIG_M586TSC is not set
...
# CONFIG_X86_TSC is not set
...
CONFIG_X86_TSC_DISABLE=y

这个问题还让我耽误了不短的时间,从Erik Mouw: "2.4.26 doesn't boot on a 386 without "Unsynced TSC support""处得到提示,从而解决这个问题。

4、把Character Devices中的Enhanced RealTime Clock选为Y(大概是这样的,好像选成M也行),否则会出现“could not locate char-major-10-135”的问题。

5、把486主板没有的PCI, AGP, SCSI, USB之类的东西统统去掉;

6、选项486的sound blaster兼容ISA声卡,要先把OSS SOUND的选项打开才能看见。即:

#
# Sound
#
CONFIG_SOUND=y
...
CONFIG_SOUND_OSS=m
...
CONFIG_SOUND_SB=m

7、选择10M的ISA网卡,首先在前要开启网络设置的选项,然后要先选择ISA网卡的选项,才能选择下面的具体ISA网卡型号,如下的配置文件内容:

CONFIG_NET=y
...
# Ethernet (10 or 100Mbit)
#
CONFIG_NET_ETHERNET=y
...
CONFIG_NET_ISA=y
...
CONFIG_EEXPRESS=m
...
CONFIG_NE2000=m

8、为了能为另一台机器提供nat共享上网,查了一下资料, 使Networking options中的相应选项“CONFIG_PACKET=y”和“CONFIG_NETFILTER=y”等。
我的具体作法大概是(也许记错了一些项目):
[*] Network packet filtering (replaces ipchains)
[*] Network packet filtering debugging (NEW)
即上面两项选为Y。
然后后面的“IP: Netfilter Configuration ---> ”下面除了最后面老版本内核里使用的两个项目不选,其它选项包括选项里面任一层次的子项全部编译为模块(即选为M)。最后面老版本内核里使用的两个项目如下:
ipchains (2.2-style) support (NEW)
ipfwadm (2.0-style) support (NEW)
,这两项不选。
关于Networking options内核编译中原来默认了的其它那些选项我没动。

9、一个小失误,造成挂载windows分区无法指定字符集(即mount /dev/hdb1 -o iocharset=gb2312,codepage=936之类的选项会出错),我想应该是内核编译时“Native Language Support”(本地语言支持)的选项没选上相应的语言,在.config配置文件的内容大概如下:

#
# Native Language Support
#
CONFIG_NLS_DEFAULT="iso8859-1"
...
# CONFIG_NLS_CODEPAGE_936 is not set

我想,如果配置了内核中的本地语言的“codepage 936”的支持,即上面的“CONFIG_NLS_CODEPAGE_936=Y(或M)”,上面的错误就不会出现了。

还有,也许正是没有在内核编译时配置这个NLS,启动系统后用/sbin/lsmod查看,原来的系统(自带的2.4.20-8内核)中自动加载了nls_iso8859-1和nsl_cp437两个模块,而我编译后的系统(2.4.35.3内核)却没有加载这两个模块。

有关这个codepage相关的知识见:CodePage简介(转)

另外,控制台下的zhcon原来可以正常使用,而在新内核下的系统中,只有root用户可以正常使用,一般的用户可以输入汉字,但不能用CTRL+SPACE切换输入法,也不能用CTRL+ALT+H调出帮助菜单,一般 的用户必须先用root用户登录开启zhcon后再切换到一般用户才能完全正常使用。但还没有证实zhcon出现的异常是否跟NLS的内核编译有关。或许是其它什么相关的内核编译选项弄错了。而且, 这个问题我以前在ubuntu6.0.6+AMDK6-2的机器上碰到过, 到现在也没有找到原因。在ubuntu上并没有重新编译内核。详见: [问题]非root用户不能切换zhcon的输入法,也不能用ctrl+alt+h

总之,由于机器太老,内存太少,这次的内核编译是能去掉就去掉,能编译成模块的就不编译进核心。最后的内核是814338字节。

但是,按照一些网友的意见,内核没必要时最好不好自己编译,就用发行版自带的。我也感觉应该是这样的,因为发行版的内核是专家精心编译的,它的性能和适用性应该是比较好的。对内核的选项,我想不少选项对不少人都是一知半解的(我就是),如果这样的状态编译出来的内核作为正式的作业系统肯定是不保险的。正如一位网友的看法:自己编译内核,玩玩还可以。所以,上面的文字仅供参考! 如果上面的文字有任何错漏之处还望指点一二,谢谢。

为我的486装一个可用的linux with X Windows之总结

从我在饭否上发一则我的近期目标:为我的486装一个可用的linux with X Windows的前几天Minix3 FAQ 和中英文安装手册(links for 2007-10-11),到现在大概3周时间了。以满足应用为主、学习知识为辅,已经基本上达成了这个目标,这个事情也基本上应该结束了,在这里记一下这3周时间的心得和总结。供自己备忘和朋友参考。

原来这台486DX100+24M内存+4G硬盘的古董机器装了redhat linux9.0 without X和盗版windows97双系统,后者主要是来看html格式的电子书,其它没有什么用(也根本用不了,如上网,在windows97上用这台机器上网会把没有耐性的人急病的)。详细情况见我的日记:Windows操作系统减肥;难舍我的linux操作系统呵呵,微软也开始打windows广告了,百度广告;我和linux,里面详细讲了这台老机器因为有了linux操作系统而成为我用机器时间最多的机器。

因为我要看html的电子书,而没有X的redhat linux9.0不能完全满足这个要求,所以另外单独装了一个盗版windows97来用。为了能尽量多用正版,也因为切换操作系统的麻烦,我决定 为我的486装一个可用的linux with X Windows。现在,这个事情基本完成了,我把盗版windows97请出了这台老机器,在原来的redhat linux9.0上装了X和opera浏览器,看html的电子书就没有问题了。我还为486上的Linux编译一个2.4.35.3的内核(原来是2.4.20-8,现在是2.4.35.3,因为我原来曾试过在redhat linux9.0上升级到2.6的内核,没有成功,而且看到网上的文章Linux 2.4->2.6内核升级指南(转帖),觉得太麻烦,以够用就行的原则,就没继续尝试),使启动后内存占用少了近2M,系统速度有明显的加快,并且原来不能用的另一块eexpress 16位的ISA网卡能用了,还能和双网卡做一个简单的网关,用linux的iptables做nat,为另一台电脑提供共享上网。

我会在后续日记中详细总结为redhat linux9.0添加X的过程。

为了找到速度快,又满足要求的操作系统,我还试过Minix3,但没有成功,详见初试Minix3操作系统

还试过Damn Small Linux(简称DSL),详情参见我的日记:在486上初试Damn Small Linux ( DSL )。我估计因为这个操作系统已经定制、压缩到了极点(放在U盘上50M,安到硬盘上大概100M),而且还有一套完整的X应用程序!如果仅是作为英文操作系统使用的话,这个操作系统算是我这个机器上的首选了。但是,我试着升级它的中文支持,也参考了一些网上的文章 ,见网摘DSL、Slackware linux相关网摘(links for 2007-10-14),网摘中的DSL版本是1.2.1,那篇文章DSL + xfont-intl-chinese + FCITX 定制成功!(已加入文泉驿字体)至近写于2006年3月;而我用的是3.4.4版,时隔近两年,各方面的情况发生变化,应该是这个原因导致终于没能成功添加它的中文支持。不过,道是增加了控制台的中文支持(用zhcon)。当然,如果我花时间去研究复原文章中的各种操作环境(各dsl的版本,apt源的版本等等),应该是可以的。但我在这个操作系统上花了一周时间了,就没有去尝试了。况且,我有另外的选择,那就是当时已经搞定的Redhat Linux 9.0 with X和传说中的Slackware Linux

初步试了一下slackware(先用的是最新slackware-12.0,下载下来的a系列基本系统用软盘引导没有安装成功,另外下载了slackware-10.2的a系列基本系统用软盘引导安装成功),感觉它的定制比较容易,定制安装后的系统比较干净,启动速度比我机器里的其它几个Linux都快,占用磁盘空间少。

所以,在我的机器上,现在装了3个发行版,如果不删除windows97的话,就4个操作系统。两块硬盘,主盘1.6G,后面有坏道,隐藏不用,实际使用1个G,64M公用Swap分区,234M安装DSL-3.4.4,700M安装Slackware-10.2;从盘大概4个G,700M的Windows FAT分区存放下载下来的slackware安装文件和Linux Grub for Dos引导文件和几个linux的内核文件,1个G的ext2分区备份文件,2.3G安装的是庞然大物Redhat Linux 9.0。

在我的后续日记中,我可能会对上面的3个linux的安装设置分别作一下总结,然后对一些有共性的应用(如网络相关设置,nat网关,构建X的基本步骤)作一下总结,目的是自己备忘和供有类似需要的朋友的参考。

Linux下用iptables共享上网、Redhat Linux 启动服务和系统文件及目录相关问题(links for 2007-10-24)