• sever端

    一、linux系统
    我下载的是VNC和VNC-server两个rpm包,也有tar包下载,但为了方便还是用了rpm包。
    安装完两个包后:
    1、运行“vncpasswd”命令设置VNC的登陆密码;
    2、运行“vncserver”命令正式将一个xdm作为VNC服务器,这时会出现“New "x" desktop is

    hostname"1”之类的话,其中最后的“1”表示这是第一个VNC的图形界面,其listen端口为3901。如果再

    运行一次“vncserver”命令,则会出现“New "x" desktop is hostname"2"”,最后的2表示这是第二个

    图形界面,其listen端口为3902。如此类推,再运行再增加......
    3、server端的设置就是这么简单,但如果你不想用xdm而想用更漂亮的gdm或kdm的话,就要作一些修改了

    :编辑~/.vnc/xstartup文件,该文件在第一次运行“vncserver”命令的时候自动产生。将xstartup文件

    中的行用“#”全部注释掉(主要是要将“twm”行注释掉),在最后加上startkde或gnome-session即可。

    4、可以在/usr/local/bin/vncserver中更改分辨率和色度。(也可能是/usr/bin/vncserver中,可用“

    whick vncserver”看看哪个才是你真正在用的“vncserver”。

    二、windows系统
    windows版本的VNC更简单,下载VNC的exe文件,双击安装,安装过程和其它windows的软件没有什么不同

    ,一路next。最后选择是否产生快捷方式和开机自动运行等即可。
    在桌面双击VNC SERVER图标,填入密码,按确定即可。其默认的listen端口是3900。


    cleint端

    一般来说,我们会使用windows作客户端(因为linux的xwindow其实已经是一个能共享桌面的服务器)。
    一、windows:双击桌面的VNC VEIWER图标。
    linux:在Xwindow中运行vnccleint命令。

    二、以下对windows和linux来说都是一样的:
    在弹出的对话框中填入server的ip,
    1、server端是windows的话,直接填IP即可;
    2、server端是linux的话,必须填上“IP:数字”,其中的“数字”是第几个图形界面。(在上面linux

    server端的第二点有谈过这问题)。
    比如:192.168.0.99:1或192.168.0.99:2

    3、输入在server端设置的密码即可。
  • 一、拨号设置。

    1、运行adsl-setup输入你的拨号信息和dns等。

    2、将默认网关改为无。
    即将/etc/sysconfig/network中的gatewat项清空。

    3、保持adsl的连接,不然会隔几十秒就会自动停掉:
    vi /etc/sysconfig/network-scripts/ifcfg-ppp0
    把PPPOE-TIMEOUT=*和CONNECT-TIMEOUT=*的值都改成0。

    二、拨号
    拨号有两个命令可以实现
    1、adsl-start 如果设置了多个adsl账号,可以在后面加上其名字。
    如adsl-start ifcfg-ppp0

    2、ifup ppp0
    个人感觉第二种的拨号速度快点。

    三、防火墙设置
    主要是两个地方
    1、开放ip转发:
    echo 1 > /proc/sys/net/ipv4/ip_forward

    2、开放nat:
    iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.255.0 -j MASQUERADE

    四、检查配置
    1、使用ifup ppp0拨号,然后ifconfig看看是否有ppp0。

    2、route或netstat -r看看默认路由是否有错,ping dns server看看能否出去外网。

    3、在client端设置默认网关为eth0或eth1的ip。ping dns server看看能否出去外网。

    如果上述一切正常即可!
    [face01]
  • 今天在帮某事业单位在redhat9中安装oracle9i,发现原来与在redhat7.3中安装有所不同,折腾了一整天终于装好。

    在redhat9中安装oracle9i有几个地方要注意:

    1、默认下使用oracle用户不能打开oracle的安装界面。即是说运行“runInstall”时会有“java。。。。”之类的错误出现。
    这个错误搞了我很久,一直想不明白。后来用oracle用户运行xhost命令,发现出现“connect :0.0 refuse”等错误信息才明白是xhost不能连接的关系。
    解决方法:
    使用root用户,运行“xhost +主机名”(注意:要有加号),再su - oracle后运行“runInstall”即可弹出安装界面。

    2、出现"Error in invoking target install of make file /opt/oracle/product/9.2.0/network/lib/ins_oemagent.mk"错误。

    这是由于glibc库不兼容。
    使用
    $ rpm -q glibc-2.3.2-5 glibc-common-2.3.2-5 glibc-devel-2.3.2-5检测是否安装的glibc。
    返回
    package glibc-2.3.2-5 is not installed
    package glibc-common-2.3.2-5 is not installed
    package glibc-devel-2.3.2-5 is not installed
    表明没有安装。
    一般redhat9安装的是2.3.2-11.9的版本,我们要先把他们卸载了:
    # rpm -e glibc-debug glibc-utils nptl-devel

    然后安装2.3.2-5的版本:
    # rpm -Uvh --oldpackage glibc-2.3.2-5.i686.rpm glibc-common-2.3.2-5.i386.rpm glibc-devel-2.3.2-5.i386.rpm

    2.3.2-5的版本可以在此下载:
    glibc-2.3.2-5版本

    这样就可以解决该错误,但记得装完oracle后把2.3.2-11.9的版本再装回来。[face21]

    其它的安装过程可以参照我的另一篇安装文档:
    oracle 9i 安装for linux[face10]
  • 家里有一台主机打算用来作网关,但又不想为其配显示器,使用ssh又有很大局限,于是便想到了用serial口控制该网关。
    使用串口管理比起ssh来说有几个好处:
    第一,不需ip,即网络断掉或服务停了也可以进行管理。
    第二,可以显示linux开机时的信息,让我们可以知道能力出了错。
    第三,一个串口只能登陆一个用户,可以在无干扰下进行工作。

    当然,我并不是说ssh不好,只不过对于一台就在身旁的机器来说,使用串口是方便一点的!

    好了,闲话少说:
    第一步:让串口可以登陆。
    在/etc/inittab中的
    "# Run gettys in standard runlevels"项加上
    "co:2345:respawn:/sbin/agetty ttyS0 9600 vt100"一行。
    目的是能开放一个ttyS0,让其能登陆本机。

    第二步:让root可以在串口登陆。
    在/etc/securetty的末尾加上"ttyS0"。
    这样就可以让root通过串口登陆。

    第三步:让串口显示开机信息。
    如果是用lilo的话,在/etc/lilo.conf中加入:
    serial=1,9600n8
    append="console=ttyS0,9600"
    两句。这样,在开机的时候,开机的信息就会定向到串口中来。
    如果是用grub,那我这里有一个示例:

  • 1、finding module denpendeneies

    就是检测模块依赖关系之意,一般在第一次运行系统中有用。但在开机的时候发现就是这个检测占用的时间最多,为了让开机速度更快,我们可以将其停用:

    在命令窗口输入以下命令:
    代码:
  • 我们在安装新内核的时候,通常都会编辑lilo.conf 和grub.conf 文件。里面有一段“initrd=/boot/initrd-***.img”(其中的***表示内核的版本号)的我们都很少会注意到,有时候还会发现这一行不要也可以正常开机。那这个initrd***.img究竟是用来干什么的呢?

    其实initrd***.img是一个镜像文件,类似ramdisk,把一段程序打包到img里,然后在开机的时候在内存里开辟一段区域,一般是2m,释放到那里运行,都是一些初始化的程序,比如sisc_mod、ext3、sd_mod等模块和insmod、nash等命令。不同内核,初始化的img可以相同,也可以不同,如果没有,可以在grub.conf里加上no initrd,它就跳过initrd的检测和执行了,以前好像就没有,后来才有的。

    它的作用是在没有mount /分区以前,系统要执行一些操作,比如挂载scsi驱动,它就把initrd释放到内存里,作一个虚拟的/,然后执行其根目录下的一个脚本"linuxrc",运行insmod和nash命令挂装模块。为什么有的时候我们在lilo或grub的配置文件中不加入该行都可以正常开机呢?这是因为我们一般的PC机都没有使用scsi硬盘等需要先加载其驱动的设备,所以就算没有initrd***.img也可以正常开机。但是如果我们要在服务器上为其编译新内核那就一定不要忘记也为其新建一个initrd文件呀!

    好,下面来看看如何查看initrd***.img里面的内容和如何为你的新内核创建一个新的initrd.img文件。

    查看initrd.img:
    initrd***.img虽然后缀是“img”,但其实它是一个gz格式的文件,我们可以先把它解压,然后载挂装到目录下:

    1、cp initrd.img initrd.gz
    2、guzip initrd.gz
    3、mount -o loop initrd /mnt/floppy

    进入/mnt/floppy目录,我们就可以看到initrd***.img文件的庐山真面目了。



    制作initrd文件

    当我们编译了一个新的内核,也不要忘了为我们的scsi设备做一个新的initrd镜像:

    语法:
    mkinitrd 文件名 内核的目录名

    示例:
    mkinitrd initrd-2.4.19.img 2.4.19

    initrd-2.4.19.img文件是自己任意取的,但最好对应自己的内核版本号。
    2.4.19是在/lib/modules中的目录名,对应内核的版本。

    当然,我们也可以在挂装了initrd***.img文件后直接添加模块到/lib目录中,然后修改linuxrc脚本让其开机进行挂装。但必须具备一定的shell脚本的能力才行。
  • 每天都在公司使用putty来运行ssh client连接linux,今天记得好像在windows中也可以安装openssh server,那么就不用再开一个软件,而且还可以使用sftp和scp了。于是决定试试。

    1、下载openssh。
    可以在此下载。

    2、安装。
    安装很简单,就像其它windows下的软件一样,双击即可。安装到大半,会有提示框弹出,说“必须要设置../etc/passwd文件才可以正常运作openssh,详情可以参阅readme.txt或quickstart.txt文件。”不用管它,按确定继续完成安装。安装完后可以看到quickstart.txt文件的内容。


    3、配置。

    第一、打开一个ms-dos终端,进入openssh/bin目录。(安装完openssh后,发现多了几个在linux中常用的命令,如:ls、mkdir、rm、chmod、chown等,很有亲切感![face01])

    第二、将计算机上的组导入group文件中。这里分两种情况,第一种是本地,第二种是在域中。分别运行-l和-d参数。如果想将两种组都导入,可以先运行-l的参数再运行-d参数的命令。
    下面是原文:
    Use mkgroup to create a group permissions file. For local groups, use the "-l" switch. For domain groups, use the "-d" switch.
    For both domain and local, it is best to run the command twice (remember to use >>, not >). If you use both, make sure to edit the file to remove any duplicate entires.

    mkgroup -l >> ..\etc\group 这是加入本地组的命令。
    mkgroup -d >> ..\etc\group 这是加入域组的命令。

    第三、 将计算机的用户与其密码导入passwd文件中。与上面的组一样,也是分本地和域两种情况。如果没有该文件或没有导入用户的信息。作为server的话,将不能被登陆,因为没有用户嘛!
    下面是原文:
    Use mkpasswd to add authorized users into the passwd file. For local users, use the "-l" switch. For domain users, use the "-d" switch.
    For both domain and local, it is best to run the command twice (remember to use >>, not >). If you use both, make sure to edit the file to remove any duplicate entires.

    mkpasswd -l [-u <username>] >> ..\etc\passwd 这是加入本地用户的命令。
    mkpasswd -d [-u <username>] >> ..\etc\passwd 这是加入域用户的命令。

    NOTE: To add users from a domain that is not the primary domain of the machine, add the domain name after the user name.
    NOTE: Ommitting the username switch adds ALL users from the machine or domain, including service accounts and the Guest account.


    由于我的计算机在家里,不关域的事,所以我只要运行两条命令就可以了。(注意我是在openssh/bin目录下运行的。)
  • 有时候就会出现这个怪问题。找了一下解决的方法:

    当使用/etc/inittab里面的某个程序,例如mgetty来接受modem拨入,同时系统又重新启动或者几个拨入都不成功;又或者登录提示数次被取消(例如用ctrl+D),都会出现这种提示。


    原因在于,当init通过/etc/inittab来启动某个程序的时候,如果这个程序连续几次被很快地终止,那么在/etc/inittab里面对应的条目就会被禁用并不再启动。正常情况下程序应该在被结束后两分钟后重新启动,这个问题不应该归咎于init的bug。
    解决方法是:
    首先,很多程序有自己的日志或者把他们的syslog写到/var/log/messages或者这个目录下面类似的日志里面,所以可以查看这些日志来得到错误信息。你也可以手动在shell下面启动这些程序来得到错误信息,但是记得不要改动/etc/inittab里面的项目。你可以以root身份使用init q命令使得这些无效的命令重新可以使用。


    解决方法:先看/var/log/messages中的条目,或查找“respawning”。看到上一行的提示,我这里是“Sep 4 10:27:14 rism /sbin/mingetty[1094]: /dev/tty1: cannot open tty: No such d
    evice”。然后我到/etc/inittab中用“#”把"1:2345:respawn:/sbin/mingetty tty1"注销了就可以了。
  • 这两天在给客户安装服务器时也顺便给他们使用iptables,不用不知道,一用才发现iptables还有很多东西可以学的,比如开放ftp。
    iptables 的filter表的INPUT链的默认策略设为了DROP,其余的链均为ACCEPT。 该服务器即要作ftp服务器,也要连上别的ftp服务器。即是说要把源端口和目的端口都开放21才行:
  • 2004-05-09

    dd 命令的用法 - [谈技术]

    dd命令是将从标准输入中读取的数据按参数指定的方法进变换后送到标准输出。除了数据变换外,还可以利用一些参数修改一些数据的物理属性。如块的大小等。
    dd命令的选项及含义:
    ds=blocksize 指定输 入输出块的大小,该选项使ibs和obs 选项无效。
    if=filename 指定将要拷贝输入的文件名
    ibs=blocksize 指定输入文件的块大小。
    ifskip=numberofeof 指定前跳过的eof标志的个数
    files=numberofblocks 在拷贝前,在输入文件上跳过指定数目的块。
    of=filename 指定创建的输出文件名
    obs=blocaksize 指定输出块大小
    seek=recordnumber 拷贝文件时,指定输入文件的开始记录号。
    conv=conversionparameter 指定数据转换的类型,描述数据转换类型的参数有ASCII,EBCDIC,block,unblock.lcase,,ucase.
    示例:将file.dd 输出到磁盘文件。
    dd if=file.dd of=/dev/rfd0135ds18
    将EBCDIC格式存放的文件转换为ASCII文件
    dd if=file1 of =file2 conv=ascii
    将磁带上的三个文件拷贝到文件file1
    dd if=/dev/mnt0 fskip=2 of =file1
  • iptables简介与基础
    防火墙系统可分为包过滤型、应用级网关(也叫代理服务器型防火墙)和电路级防火墙三种基本类型。Linux提供的防火墙软件包内置于Linux内核中,是一种基于包过滤型的防火墙实现技术。其中心思想是根据网络层IP包头中的源地址、目的地址及包类型等信息来控制包的流向。更彻底的过滤则是检查包的源端口、目的端口以及连接状态等信息。

    iptables
    iptables是一个管理内核包过滤的工具,可以加入、插入或删除核心包过滤表格中的规则。实际上真正来执行这些过滤规则的是Netfilter。Netfiler是Linux核心中一个通用架构,它提供一系列的表(tables),每个表由若干链(chains)组成,而每条链中可以由一条或数条规则(rule)组成,如下:



    |---......
    |---ipchains1 |---rule1
    |---table1---| |
    | |---ipchains2 --- |---rule2
    netfilter--|---table2 |
    | |---......
    |---......




    相对于2.4内核提供的IP链来说,iptables实现的不仅仅是包过滤功能,而是通过Netfilter实现一整套框架结构,在这个框架之上实现包过滤、NAT等模块功能,从而提供更好的可扩展性和灵活性。

    系统缺省的表为filter表,该表包含了INPUT链、OUTPUT链和FORWORD链。每一条链中可以定义一条和数条规则,每一条规则都以如下格式定义:条件/处理方式。

    当一个数据包到达一个链时,系统就会从第一条规则开始检查,看是否符合该规则所定义的条件。如果满足,系统将规则该条规则所定义的方法处理该数据包;如果不满足,则会继续检查下一条规则。如果该数据包不符合该链中任一条规则,系统则会根据该链预先定义的策略(policy)来处理该数据包。(一般时deny)。

    Netfilter框架能够在内核2.3.5及以上版本中实现。编译内核的时候,应该将Netfilter相关的项目编译进去。这些项目一般在“Networking options”子项下。在“IP:Netfilter Configuration ---->”选中所有选项。
    编译成功后,这些模块文件都位于目录/lib/modules/2.4.0/kernel/net/ipv4/netfilter中。成功安装iptables后,必须先载入相关模块:#modprobe iptables_tables
    iptable_filter模块会在运行时自动载入。

  • 2004-05-03

    关于子网掩码 - [谈技术]

    我们知道,使用变长子网掩码可以将一个网段划分成为多个子网,比如我将192.168.0.0/24这个网段划分为4个子网。那么就变成了192.168.0.0/26了。
    即子网掩码由 11111111.11111111.11111111.00000000
    变成了 11111111.11111111.11111111.11000000

    这时192.168.0.0~63; 网段为192.168.0.0,广播地址为192.168.0.63
    192.168.0.64~127; 网段为192.168.0.64,广播地址为192.168.0.127
    192.168.0.128~191; 网段为192.168.0.128,广播地址为192.168.0.191
    192.168.0.192~255 网段为192.168.0.192,广播地址为192.168.0.255
    为四个子网。

    前两天去南昌就吃了子网掩码的亏。
    我是去几间高校去升级我们公司的系统。其实升级也就是换个硬盘,然后改一下ip能连出外网就行了。不过在设置其中两间学校时出现问题。

    第一间设了ip以后发现有的ip可以ping得通有的ip不能ping通。我们觉得很奇怪,就算不是一样的系统(我们的设备使用的是linux系统),也不会影响ping的呀。尝试使用telnet来连接外网,还是不行!我仔细看了一下ip,原来ip是192.168.0.63/26,刚好是该网段的广播ip。于是更换ip,成功了!
    教训:要熟悉变成子网掩码的计算,最好可以做到一拿到一个ip以后就能算出该ip是不是一个可以正常使用的ip地址。

    第二间高校使用的是sun的服务器做mail server。ip是一个外网ip,我的设备也要设一个外网ip。管理员mm告诉我子网掩码是24,于是我就设了24。接好线以后奇怪的事情出现了:我的设备可以ping通mail server,但接上我们的设备后不能收发信!于是telnet mail server的25端口,不能连通!在mail server上查看:netstat -na |grep 25 ,发现25端口是listen的。奇怪了!为什么可以ping通但却telnet不了呢?!!于是重启mail server ,重启我们的设备,更换网线。。。。还是一样!把我们的设备移开,用其它的机器telnet mail server的25端口却成功了!??[face11]为什么会这样呢?!
    一定有些东西不对!于是我把注意力放到了mail server上。虽然我不太熟悉solaries,但我linux还可以,于是查了一下/etc下的netmask文件,发现子网掩码是255.255.255.148!太奇怪了,我还没有看到过后面是148的子网掩码呢?究竟是哪个××设的![face12]我想将其改为128,但不知道为什么管理员mm竟然要我改为140。改就改呗。改完重启network服务,再使用telnet,果然成了!
    教训:调试机器前一定要确定周围机器的所有信息。

    看来对于子网掩码,我还是要多加小心才行!呵呵。。。[face01]
  • 是看着一篇经典的oracle9i安装文档(英文)装上的。
    那篇文档写得太详尽了,我这里只整理了在linux安装时要注意的东西。

    因为偷懒,所以就不翻译了。[face10]


    一、检测是否安装了需要的rpm包:
    RH 7.1, 7.2, and RH AS 2.1:
    #rpm -q gcc cpp compat-libstdc++ glibc-devel kernel-headers binutils

    RH 7.3, 8.0, and 9:
    #rpm -q gcc cpp compat-libstdc++ glibc-devel glibc-kernheaders binutils

    RHEL AS 3:
    rpm -q gcc cpp compat-libstdc++ glibc-devel glibc-headers glibc-kernheaders binutils



    二、检查内存和swap

    To check the memory, run:
    grep MemTotal /proc/meminfo
    To check the swap space, run:
    cat /proc/swaps

    You can also add temporary swap space by creating a temporary swap file instead of using a raw device. Here is the procedure:
    su - root
    dd if=/dev/zero of=tmpswap bs=1k count=900000
    chmod 600 tmpswap
    mkswap tmpswap
    swapon tmpswap
    To disable the temporary swap space execute the following commands:
    su - root
    swapoff tmpswap
    rm tmpswap

    三、增加share memory

    I temporarely increased the shmmax setting for the kernel by executing the following command:
    $ su - root
    # cat /proc/sys/kernel/shmmax
    33554432
    # echo `expr 1024 \* 1024 \* 1024` > /proc/sys/kernel/shmmax
    # cat /proc/sys/kernel/shmmax
    1073741824
    It is recommended to increase the shmmax setting permanently for Oracle. For more information, see Setting Shared Memory.

    For more information on optimizing shared memory settings for Oracle databases on Linux, see Setting Shared Memory. These parameters apply to all Red Hat Linux versions. But note that except for the shmmax parameter, these parameter do not need to be changed for installing Oracle on Linux. But you might want to adjust all shared memory settings later to optimize the server for Oracle.


    四、检查tmp的容量
    (tmp目录大概需要1G左右的空间)
    To check the space in /tmp, run:
    $ df /tmp
    If you do not have enough space in the /tmp directory, you can temporarily create a tmp directory in another filesystem. Here is how you can do this:
    su - root
    mkdir /<AnotherFilesystem>/tmp
    chown root.root /<AnotherFilesystem>/tmp
    chmod 1777 /<AnotherFilesystem>/tmp
    export TEMP=/<AnotherFilesystem> # used by Oracle
    export TMPDIR=/<AnotherFilesystem> # used by Linux programs like the linker "ld"
    When you are done with your Oracle installation, shutdown Oracle and remove the temporary directory:
    su - root
    rmdir /<AnotherFilesystem>/tmp
    unset TEMP
    unset TMPDIR



    五、配置环境变量
    # Set the LD_ASSUME_KERNEL environment variable only for Red Hat 9 and
    # for Red Hat Enterprise Linux Advanced Server 3 (RHEL AS 3) !!
    # Use the "Linuxthreads with floating stacks" implementation instead of NPTL:
    export LD_ASSUME_KERNEL=2.4.1

    # Oracle Environment
    export ORACLE_BASE=/opt/oracle
    export ORACLE_HOME=/opt/oracle/product/9.2.0
    export ORACLE_SID=test
    export ORACLE_TERM=xterm
    # export TNS_ADMIN= Set if sqlnet.ora, tnsnames.ora, etc. are not in $ORACLE_HOME/network/admin
    export NLS_LANG=AMERICAN;
    export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
    LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
    LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
    export LD_LIBRARY_PATH
    # Set shell search paths
    export PATH=$PATH:$ORACLE_HOME/bin


    (使用 soure .bash_profile 可以让.bash_profile立即生效。)



    六、远程安装
    1、xwin32
    用gdm。修改/etc/X11/gdm/gdm.conf,把"[xdmcp]"下面的部分改成代码:
    Enable=true
    然后在文本模式下执行“gdm”命令。成功的话会在linux上出现一个登陆画面。


    2、用vmware

    准备一个在vmware安装的redhat,我们叫它“yourdesk”,安装oracle的机器叫“oracleserver”。
    首先:
    oracleserver:$ su - oracle
    oracleserver:oracle$ export DISPLAY=yourdesktop:0.0(或不要“.0") (最好用IP而不用主机名)

    然后:
    yourdesktop:# startx
    在图形界面的终端下:
    #xhost +oracleserver
    #ssh oracleserver
    #su - oracle
    #export DISPLAY=yourdesktop:0.0
    # DISK1/runInstall
    即可弹出oracle的安装界面。


    (可能要先安装x-window,可能要在ssh到oracleserver之前,先运行).



    七、遇到ins_ctx.mk错误
    安装到后面的时候,会有提示:
    "Error in invoking targe
  • 接触Oracle的时候,9i已经出来好久了。对着网上的教程,我竟然第一次安装9i就成功了!于是我对于8i也就有了一份莫名的轻视,总觉得9i我也装上了,8i肯定也不过如事。谁知道,今天我安装8i竟然吃尽了苦头,由于种种原因,用了2天,装了n次才成功。这我才知道,oracle还是老的难装!

    一、安装配置:cpu:赛扬1G,内存:HY256M,系统:redhat7.2(上面已经安装了Oracle9i)
    二、安装前的准备:
    1、系统要有一个X系统,我用的是gnome;

    2、系统要安装了gcc,一般安装的时候选择Develop tools的话也就会有了。

    3、检查下面的rpm包是否已经安装:
    compat-libstdc++-6.2-2.9.0.16
    compat-glibc-6.2-2.1.3.2
    compat-egcs-c++-6.2-1.1.2.16
    compat-libs-6.2-3
    compat-egcs-6.2-1.1.2.16
    compat-egcs-objc-6.2-1.1.2.1

    4、降级binutils:
    rpm -Uvh --force --nodeps binutils-2.10.91.0.2-3.i386.rpm

    5、安装JDK:
    rpm –ivh IBMJava2-SDK-1.3.1-2.0.i386.rpm
    然后更改/etc/profile,在后面加上:
    export JAVA_HOME=/opt/IBMJava2-131
    export PATH=$PATH:$JAVA_HOME/bin

    6、下载补丁glibc-2.1.3-stubs.tar.gz。

    7、编辑/etc/sysconfig/i18n文件,改成:
    LANG=”en_US”
    SUPPORTED=”en_US:en”

    8、swap要大,最好是内存的两倍。我设了512M。
    增加临时swap的方法:
    You can also add temporary swap space by creating a temporary swap file instead of using a raw device. Here is the procedure:
    su - root
    dd if=/dev/zero of=tmpswap bs=1k count=900000
    chmod 600 tmpswap
    mkswap tmpswap
    swapon tmpswap
    To disable the temporary swap space execute the following commands:
    su - root
    swapoff tmpswap
    rm tmpswap

    注:上述要下载的补丁等可以在这里下载:
    http://pawprint.net/linux/

    二、安装
    1、建立用户:
    groupadd dba
    useradd oracle –g dba
    更改密码:
    Passwd oracle
    2、设置oracle用户的环境变量:
    编辑/home/oracle/.bash_profile文件,在后面增加下面几行:

    /usr/i386-glibc21-linux/bin/i386-glibc21-linux-env.sh
    export LD_ASSUME_KERNEL=2.2.5
    export ORACLE_BASE=/opt/oracle
    export ORACLE_HOME=$ORACLE_BASE/product/8.1.7
    export NLS_LANG=American_america.zhs16gbk
    export PATH=$PATH:$ORACLE_HOME/bin
    (下面的其实可以不设,但设了更好。)
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
    export ORACLE_SID=data
    export ORACLE_TERM=vt100
    export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data
    umask 022

    3、重新用oracle用户login,看看有没有错误提示出现,如果没有就开始安装了。


    进入Xwindow:
    startx
    打开一个终端,解压linux81701.tar:
    tar xvf linux81701.tar
    cd Disk1
    安装:./runInstaller
    (如果安装界面迟迟不出来,LD_ASSUME_KERNEL=2.2.5这个变量或没有安装gcc。)
    提示要输入group名,填入dba,然后再开一个终端窗口,用root权限执行/opt/oracle/product/8.1.7/orainstRoot.sh
    选一路next,然后选择你的java的安装路径,我这里是/opt/IBMJava2-131。下一步填SID,随便填就好了。最后按install,安装正式开始了。


    在安装的到97%时,会出现ins_ctx.mk的错误,
    修改/opt/oracle/product/8.1.7/ctx/lib/env_ctx.mk文件,在 "INSO_LINK =" 行加入 "$(LDLIBFLAG)dl"
    如下:
    INSO_LINK=-L$(CTXLIB)$(LDLIBFLAG)m$(LDLIBFLAG)dl $(LDLIBFLAG)sc_ca$(LDLIBFLAG)sc_fa$(LDLIBFLAG)sc_ex $(LDLIBFLAG)sc_da$(LDLIBFLAG)sc_ut$(LDLIBFLAG)sc_ch $(LDLIBFLAG)sc_fi$(LLIBCTXHX)$(LDLIBFLAG)c-Wl,-rpath,$(CTXHOME)    lib $(CORELIBS) $(COMPEOBJS)
    然后点击 重试(retry)

    安装补丁(如果在前面出现prom等错误,可以在出现错误的时候安装该补丁!)
    在另一个窗口中,把glibc-2.1.3-stubs.tar.gz拷到$ORACLE_HOME下,解压:
    tar xzvf glibc-2.1.3-stubs.tar.gz
    然后执行./setup_stubs.sh
    在安装补丁的时候,oracle安装的窗口也会弹出窗口,要你用root权限运行root.sh文件(与是否在安装补丁无关)。该文件有两个错误的地方,记住一定两个地方都要改,不然会死得很惨的!
    第一,
    RMF=/bin/rm -f
    修改为
    RMF="/bin/rm -f"
    注意,共有两个“RMF=/bin/rm –f“,我们两个都要改![face43]

    第二,
    RUID=`/usr/bin/id|$AWK -F( ’{print $2}’|$AWK -F) ’{print $1}`
    修改为
    RUID=`/usr/bin/id|$AWK -F( ’{print $2}’|$AWK -F) ’{print $1}’`
    注意:是在那个不知道怎么叫的符号前面加一个单引号,而不是在最后加!
    修改完后,补丁安装完后,就可以用root权限运行$ORACLE_HOME/root.sh文件。
    最后系统自动配置net8和创建数据库等,就完成安装了!

    后记:
    在遇到了ins_prom错误,怎么都搞不好。我怀疑是因为先装了9i的原因,但是当我更换了用户来安装以后(即不用oracle用户来安装),就可以了。后来发现原来