How to install Oracle Enterprise 10g R2 in a Debian GNU / Linux Xen guest, domU, into a Debian Xen host, dom0

Why would you do this?

Oracle Enterprise Database 10g R2 is a resource hog and MUST run in an exclusive powerful machine. 
Period.

You must not run any other service at it.

Nothing else.

For installation you will have to tweak kernel parameters and environment variables that impact other apps.
Even stronger security, beyond the database engine policies theirself, should be implemented at an external "heavy armored shield machine".
If you have one GOOD powerful server and storage available, you could setup separated Virtual Machines for your development, other for tests, other for integration, other for customer tests and acceptance, staging before the production with reduced costs. You could also have different VMs for each developer initial phase risky ideas.
You could even disable other VMs and or tweak memory of your VM while running critical performance tests.
Virtualization is very good for development. If you make mistakes, zap your breaked image and restart from a previously saved good image in few minutes.

Using different LVM partitions for engine and data, leaving spare LVM partitions for fast image backup / restores during the development, you will have more flexibility.
For real backups you will have to use DLTs or other reliable method.
Virtualization also allows you tweak memory for impact evaluation.

Debian GNU / Linux has a much smaller memory, disk, active services, security exposure footprints than Red Hat or Unbreakable Linux.
Debian is visibly more fast, tunable and manageable, also.
A bare minimal Debian 4.0 Etch could fit into 24 MB RAM and only NFS port active, while the RH 4.0 could use 196 MB RAM when ready to install Oracle and even loads a graphical interface on the server (a security heresy).

Where is the "less is more" IT motto?

It is not practical to selectively install Red Hat packages for the Oracle installations. Dependency control is weak with rpm and you could break your system. You should have to install pre-defined bloated X-window graphical rpm package selection.
If you want to run into a VM, and for development, these could be significant factors.

When running multiple Virtual Machines in a server, each memory byte and active service counts. Less is more.

Oracle has the Express Edition available as Debian packages, but it has limitations that could not allow your development (or production).
Oracle does not certify its products for Debian, yet, and it is unlikely to do so, as it sells Unbreakable Linux and ready Oracle VM images with preconfigured Unbreakable Linux and Oracle Enterprise Database.

But these are also bloated solutions, and we are back to square one.

An Oracle Enterprise Database installation is so complex (you MUST read the massive Oracle Installation Manual), painful and error prone that we recommend that you purchase ready Oracle VM images for customer tests and acceptance and for the production.

Or carefully backup images of your preconfigured Virtual Machine disk images.

I emphasize: you MUST read the massive Oracle Installation manual.

If you are using Oracle for production, it is so expensive that a few more (tens of) thousand dollars for some more gigabytes of first classs ECC RAM, more gigabytes at your FC SAN, more fastest latest and greatest multicore multicpu blades for your server, beyond the needed Oracle stack licenses, to run these bloated solutions are not of much impact. And you will have a ready binary certified solution.
Because Oracle is a binary closed source solution, you do not have means to guarantee 100% compatibility or look for trouble spots recompiling from sources. Only Oracle could do this.

Plan for a PostgreSQL migration.

Even so, the Oracle Enterprise Database 10g R2 is running on Debian 4.0 Etch guest domU Xen VM on a Debian 4.0 Etch host dom0 Xen server since October 8th 2007 without problems, except incomplete hardware info collection (it is a VM). Debian 4.0 Etch is LSB compliant and this helps a lot for this task.

It is a matter of computing how much cost your time to configure an Unbreakeble Linux Virtual Machine with Oracle Database Engine, against upgrading your hardware, your Oracle Database AND Unbreakable Linux annual licenses fees, cost of blindly using a "black box" that you are unable to control the maintenance and code, and the cost of total vendor lock-in.

Generally speaking, if you are in a hurry, the "easy way" is to pay in advance forever.

In the long term, it will always be effective to take control of your business yourself.

As you can see, using a complete FLOSS stack could give you CHOICES.

In a hurry, you could use a consultancy support contract.

In the long term, you could leverage your staff, by training, and take control yourself, if convenient.

CHOICES.

Acknowledgements

The installation process was performed and debugged with the invaluable help of an experienced Oracle DBA,Gerson Tessler.

How to install Oracle Enterprise Database in a Debian domU?

Preparation: the Debian dom0 server

Hardware

By importance order:

Memory:

Oracle Enterprise Database 10g R2 is a resource hog.
The server hardware should be really GOOD.
You need plenty (GigabyteS) of good (ECC) RAM. 
More is more.
For Oracle Database, it seems that fast RAM is never enough.

Buy more, all you could fit in your server.

We installed into a 1 (one) gigabyte ECC RAM machine for the development with multiple VMs for other apps.
A painful and learning experience, as you will see.

Disks:

The storage subsystem should be the most reliable and fastest that (your) money could buy.
If you could use a first class fastest Fiber Channel SAN device, the better.
Oracle Database performance is heavily impacted by the storage subsystem.
Use, at least, a good fast SCSI big disk or array.
IDE or SATA desktop disks are painfully slow and unreliable.
Oh, yes, newest SATA disks have good BURST transfer speeds. But good fast SCSI disks and controllers have SUSTAINED transfer speeds and lightning burst speeds.
Use LVM for managing partitions, as it works well with Xen.
Do not use RAW partitions for Oracle Database. As of 2007, linux filesystems are so efficient that RAW partitions do not give reasonable performance gains over them and add too much management complexity and inflexibility.

CPU:

If you still have enough remaining money, buy the more multicores and fastest CPU(s) you could with it.
But first, invest at memory, then at storage subsystem purchases.

Software

The bare minimum Debian 4.0r1 Etch GNU / Linux dom0 Xen server.
At your server hardware, select the minimum install during the Debian Installer phase.
If you use a Net Install disk, you will automatically download and install the latest security updates.
If you use a regular CD/DVD install disk, you will have to security update your system as soon as possible.

Installed packages:

After the Debian minimum install, you will use some features of the powerful Debian package system for copying and installing the package selection.
Record copy the system configuration, as per Debian Reference Manual.

Server info:

For comparison if things go wrong, we reproduce some hardware HP ML 370 server info below.

# cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Xeon(TM) CPU 3.20GHz
stepping : 10
cpu MHz : 3192.160
cache size : 2048 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl cid cx16 xtpr lahf_lm
bogomips : 7984.61

processor : 1
vendor_id : GenuineIntel
cpu family : 15
model : 4
model name : Intel(R) Xeon(TM) CPU 3.20GHz
stepping : 10
cpu MHz : 3192.160
cache size : 2048 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 5
wp : yes
flags : fpu tsc msr pae mce cx8 apic mtrr mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc up pni monitor ds_cpl cid cx16 xtpr lahf_lm
bogomips : 7984.61

xen_dom0_host:~# lspci -v
00:00.0 Host bridge: Intel Corporation E7320 Memory Controller Hub (rev 0c)
Subsystem: Intel Corporation E7320 Memory Controller Hub
Flags: bus master, fast devsel, latency 0
Capabilities: [40] Vendor Specific Information

00:02.0 PCI bridge: Intel Corporation E7525/E7520/E7320 PCI Express Port A (rev 0c) (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0
Bus: primary=00, secondary=01, subordinate=01, sec-latency=0
Capabilities: [50] Power Management version 2
Capabilities: [58] Message Signalled Interrupts: Mask- 64bit- Queue=0/1 Enable-
Capabilities: [64] Express Root Port (Slot-) IRQ 0

00:03.0 PCI bridge: Intel Corporation E7525/E7520/E7320 PCI Express Port A1 (rev 0c) (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0
Bus: primary=00, secondary=02, subordinate=02, sec-latency=0
Memory behind bridge: d8100000-d81fffff
Capabilities: [50] Power Management version 2
Capabilities: [58] Message Signalled Interrupts: Mask- 64bit- Queue=0/1 Enable-
Capabilities: [64] Express Root Port (Slot-) IRQ 0

00:1c.0 PCI bridge: Intel Corporation 6300ESB 64-bit PCI-X Bridge (rev 02) (prog-if 00 [Normal decode])
Flags: bus master, 66MHz, fast devsel, latency 48
Bus: primary=00, secondary=03, subordinate=03, sec-latency=48
I/O behind bridge: 00002000-00002fff
Memory behind bridge: d8200000-d82fffff
Prefetchable memory behind bridge: 00000000dc000000-00000000dfffffff
Capabilities: [50] PCI-X bridge device

00:1d.0 USB Controller: Intel Corporation 6300ESB USB Universal Host Controller (rev 02) (prog-if 00 [UHCI])
Subsystem: Hewlett-Packard Company Unknown device 25a1
Flags: bus master, medium devsel, latency 0, IRQ 16
I/O ports at 1400 [size=32]

00:1d.1 USB Controller: Intel Corporation 6300ESB USB Universal Host Controller (rev 02) (prog-if 00 [UHCI])
Subsystem: Hewlett-Packard Company Unknown device 25a1
Flags: bus master, medium devsel, latency 0, IRQ 17
I/O ports at 1420 [size=32]

00:1d.4 System peripheral: Intel Corporation 6300ESB Watchdog Timer (rev 02)
Subsystem: Hewlett-Packard Company Unknown device 0000
Flags: medium devsel
Memory at d8001000 (32-bit, non-prefetchable) [size=16]

00:1d.5 PIC: Intel Corporation 6300ESB I/O Advanced Programmable Interrupt Controller (rev 02) (prog-if 20 [IO(X)-APIC])
Subsystem: Intel Corporation Unknown device 25a1
Flags: bus master, fast devsel, latency 0
Capabilities: [50] PCI-X non-bridge device

00:1d.7 USB Controller: Intel Corporation 6300ESB USB2 Enhanced Host Controller (rev 02) (prog-if 20 [EHCI])
Subsystem: Hewlett-Packard Company Unknown device 24d0
Flags: bus master, medium devsel, latency 0, IRQ 18
Memory at d8001400 (32-bit, non-prefetchable) [size=1K]
Capabilities: [50] Power Management version 2
Capabilities: [58] Debug port

00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev 0a) (prog-if 00 [Normal decode])
Flags: bus master, fast devsel, latency 0
Bus: primary=00, secondary=04, subordinate=04, sec-latency=32
I/O behind bridge: 00003000-00003fff
Memory behind bridge: d8300000-d9ffffff
Prefetchable memory behind bridge: 50000000-500fffff

00:1f.0 ISA bridge: Intel Corporation 6300ESB LPC Interface Controller (rev 02)
Flags: bus master, medium devsel, latency 0

00:1f.1 IDE interface: Intel Corporation 6300ESB PATA Storage Controller (rev 02) (prog-if 8a [Master SecP PriP])
Subsystem: Hewlett-Packard Company Unknown device 25a1
Flags: bus master, medium devsel, latency 0, IRQ 19
I/O ports at <unassigned>
I/O ports at <unassigned>
I/O ports at <unassigned>
I/O ports at <unassigned>
I/O ports at 1440 [size=16]
Memory at 50100000 (32-bit, non-prefetchable) [size=1K]

00:1f.3 SMBus: Intel Corporation 6300ESB SMBus Controller (rev 02)
Subsystem: Hewlett-Packard Company Unknown device 25a1
Flags: medium devsel, IRQ 22
I/O ports at 1100 [size=32]

02:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5721 Gigabit Ethernet PCI Express (rev 11)
Subsystem: Hewlett-Packard Company Unknown device 3260
Flags: bus master, fast devsel, latency 0, IRQ 16
Memory at d8100000 (64-bit, non-prefetchable) [size=64K]
Capabilities: [48] Power Management version 2
Capabilities: [50] Vital Product Data
Capabilities: [58] Message Signalled Interrupts: Mask- 64bit+ Queue=0/3 Enable-
Capabilities: [d0] Express Endpoint IRQ 0

03:01.0 RAID bus controller: Adaptec AAC-RAID (rev 01)
Subsystem: Hewlett-Packard Company AAR-2610SA
Flags: bus master, fast Back2Back, 66MHz, slow devsel, latency 32, IRQ 20
Memory at dc000000 (32-bit, prefetchable) [size=64M]
Capabilities: [80] Power Management version 2

03:04.0 SCSI storage controller: Marvell Technology Group Ltd. MV88SX6041 4-port SATA II PCI-X Controller (rev 09)
Subsystem: Hewlett-Packard Company Unknown device 103c
Flags: bus master, fast Back2Back, 66MHz, medium devsel, latency 32, IRQ 21
Memory at d8200000 (64-bit, non-prefetchable) [size=1M]
I/O ports at 2000 [size=256]
Capabilities: [40] Power Management version 2
Capabilities: [50] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable-
Capabilities: [60] PCI-X non-bridge device

04:04.0 VGA compatible controller: ATI Technologies Inc Rage XL (rev 27) (prog-if 00 [VGA])
Subsystem: ATI Technologies Inc Rage XL
Flags: bus master, stepping, medium devsel, latency 66, IRQ 10
Memory at d9000000 (32-bit, non-prefetchable) [size=16M]
I/O ports at 3000 [size=256]
Memory at d8300000 (32-bit, non-prefetchable) [size=4K]
[virtual] Expansion ROM at 50000000 [disabled] [size=128K]
Capabilities: [5c] Power Management version 2

Debconf configurations:

Read CAREFULLY the debconf saved configuration below. As the configuration was copied from a brazilian portuguese installation for a given hardware (an HP Proliant server), you could adapt or start from scratch yourself, ignoring the file completely.
Actually we recommend you start debconf configuration from scratch yourself, using the file as a GUIDE if things went wrong, for comparisons with another sucessfull but different hardware and language configuration.
You should save YOUR debconf selections file for backup purposes at YOUR hardware and skip to the package selection.
We installed at a HP server, using LVM.

 

Package selection:

Edit /etc/apt/sources.list to enable main, contrib and non-free sections of the repository as well as security repository.

You should use the Debian Reference Manual record/copy configuration topic .

# apt-get update
# dselect update
# dpkg --set-selections < xen_host_server_installed_packages.txt
# apt-get -u dselect-upgrade

The bacula, postgresql, zabbix and bwm packages are not essential, but important for backup and monitoring.
The bind9 is needed by the domU guest running Oracle Enterprise Database if your server is using an intranet dns. The Oracle installer requires a standard dns easily reached, a condition not always met at intranets. 
The selinux, python-semanage and python packages are related.
The kernel images may have been updated and you should edit for your machine architecture.
There are some obviously language dependant packages, like ibrazilian, aspell-pt-br, tz-brasil, wbrazilian, wportuguese.
You should analyze the package selection file BEFORE using it and edit it for your language, hardware and network.

acpid install
adduser install
apt install
apt-file install
apt-utils install
aptitude install
aspell install
aspell-pt-br install
aspell-pt-pt install
at install
bacula-common install
bacula-console install
bacula-director-common install
bacula-director-sqlite3 install
bacula-fd install
bacula-sd install
bacula-sd-pgsql install
bacula-server install
base-files install
base-passwd install
bash install
bc install
bind9-host install
binutils install
bridge-utils install
bsdmainutils install
bsdutils install
busybox install
bwm install
console-common install
console-data install
console-tools install
coreutils install
cpio install
cron install
dc install
debconf install
debconf-i18n install
debconf-utils install
debian-archive-keyring install
debianutils install
debootstrap install
dhcp3-client install
dhcp3-common install
dictionaries-common install
diff install
dmidecode install
dnsutils install
doc-debian install
doc-linux-text install
dpkg install
dselect install
e2fslibs install
e2fsprogs install
ed install
eject install
exim4 install
exim4-base install
exim4-config install
exim4-daemon-light install
file install
findutils install
finger install
fping install
ftp install
gcc-4.1-base install
gettext-base install
gnupg install
gpgv install
grep install
groff-base install
grub install
gzip install
hostname install
iamerican install
ibrazilian install
ibritish install
ifupdown install
info install
initramfs-tools install
initscripts install
installation-report install
iportuguese install
iproute install
iproute-doc install
iptables install
iputils-ping install
ispell install
klibc-utils install
klogd install
laptop-detect install
less install
libacl1 install
libapt-pkg-perl install
libaspell15 install
libatm1 install
libattr1 install
libbeecrypt6 install
libbind9-0 install
libblkid1 install
libbz2-1.0 install
libc6 install
libc6-i686 deinstall
libc6-xen install
libcap1 install
libcomerr2 install
libconfig-file-perl install
libconsole install
libdb4.2 install
libdb4.3 install
libdb4.4 install
libdevmapper1.02 install
libdns22 install
libedit2 install
libevent1 install
libgc1c2 install
libgcc1 install
libgcrypt11 install
libgdbm3 install
libgnutls13 install
libgpg-error0 install
libgpmg1 install
libgssapi2 install
libidn11 install
libisc11 install
libisccc0 install
libisccfg1 install
libklibc install
libkrb53 install
libldap2 install
liblocale-gettext-perl install
liblockfile1 install
liblwres9 install
liblzo1 install
libmagic1 install
libncurses5 install
libncursesw5 install
libneon25 install
libnewt0.52 install
libnfsidmap2 install
libopencdk8 install
libpam-modules install
libpam-runtime install
libpam0g install
libpci2 install
libpcre3 install
libpopt0 install
libpq4 install
libreadline5 install
librpcsecgss3 install
librpm4 install
libsasl2 install
libsasl2-2 install
libselinux1 install
libsemanage1 install
libsepol1 install
libsigc++-2.0-0c2a install
libslang2 install
libsqlite3-0 install
libss2 install
libssl0.9.8 install
libstdc++6 install
libtasn1-3 install
libtasn1-3-bin install
libtext-charwidth-perl install
libtext-iconv-perl install
libtext-template-perl install
libtext-wrapi18n-perl install
libusb-0.1-4 install
libuuid1 install
libvolume-id0 install
libwrap0 install
libxml2 install
linux-image-2.6-686 install
linux-image-2.6.18-4-686 install
linux-image-2.6.18-4-xen-686 install
linux-image-2.6.18-4-xen-vserver-686 install
linux-image-2.6.18-5-686 install
linux-modules-2.6.18-4-xen-686 install
linux-modules-2.6.18-4-xen-vserver-686 install
locales install
login install
logrotate install
lsb-base install
lsof install
lvm-common install
lvm2 install
m4 install
mailx install
makedev install
man-db install
manpages install
manpages-pt install
mawk install
mime-support install
mktemp install
module-init-tools install
mount install
mpack install
mtools install
mtr-tiny install
mtx install
mutt install
myspell-pt-br install
myspell-pt-pt install
nano install
ncurses-base install
ncurses-bin install
ncurses-term install
net-tools install
netbase install
netcat install
nfs-common install
openbsd-inetd install
openssh-client install
openssh-server install
openssl install
passwd install
patch install
pciutils install
perl install
perl-base install
perl-doc install
perl-modules install
pidentd install
policycoreutils install
popularity-contest install
portmap install
postgresql-8.1 install
postgresql-client-8.1 install
postgresql-client-common install
postgresql-common install
procmail install
procps install
python install
python-central install
python-minimal install
python-newt install
python-selinux install
python-semanage install
python-support install
python2.4 install
python2.4-minimal install
readline-common install
reiserfsprogs install
reportbug install
rpm install
rpmstrap install
sed install
selinux-policy-refpolicy-targeted install
sgml-base install
sharutils install
sqlite3 install
ssl-cert install
strace install
sysklogd install
sysv-rc install
sysvinit install
sysvinit-utils install
tar install
tasksel install
tasksel-data install
tcpd install
tcsh install
telnet install
texinfo install
time install
traceroute install
tz-brasil install
tzdata install
ucf install
udev install
update-inetd install
usbutils install
util-linux install
util-linux-locales install
vim-common install
vim-tiny install
w3m install
wamerican install
wbrazilian install
wget install
whiptail install
whois install
wportuguese install
xen-hypervisor-3.0.3-1-i386-pae install
xen-linux-system-2.6.18-4-xen-686 install
xen-linux-system-2.6.18-4-xen-vserver-686 install
xen-tools install
xen-utils-3.0.3-1 install
xen-utils-common install
xfsprogs install
xml-core install
zabbix-agent install
zlib1g install

The Debian GNU / Linux 4.0 Etch Oracle server guest, domU, Xen instance:

You should also perform a basic minimal install.
We used xen-tools, boot-strapping Debian 4.0 Etch inside the virtual machine.

xen_host_server:~# vgcreate -s 4M oracle_host_group /dev/sda5

xen_host_server:~# nano /etc/xen/xend-config.sxp

enable network bridge as described at the file.

xen_host_server:~# invoke-rc.d xend restart

We defined the Virtual Machine memory size considering the other Virtual Machines that must run at the Xen host and crossing with the minimal requirements of the Oracle Database. Use all RAM you could assign to it.
The xen_host_server was left with 280 MB RAM for some headroom for juggling with memory among VMs and this proved to be enough. At this setup with PostgreSQL, Bacula, Zabbix, it uses 256 MB RAM, being 147 MB for buffers. 128 MB could do the job.

xen_host_server:~# xen-create-image --hostname=XenOracleServer --ip=10.200.240.41 --netmask=255.255.252.0 --gateway=10.200.240.1 --passwd --kernel=/boot/vmlinuz-2.6.18-4-xen-686 --initrd=/boot/initrd.img-2.6.18-4-xen-686 --debootstrap --dist=etch --cache --mirror=http://ftp.us.debian.org/debian/ --lvm=oracle_host_group --memory=407MB --swap=1GB --size=8,31GB --force

xen_host_server:~# xm create --console_autoconnect /etc/xen/XenOracleServer.cfg

This will show you the console of the Virtual Machine at your screen.

Then, edit /etc/apt/sources.list to enable main, contrib and non-free sections of the repository as well as security repository and install openssh-client and openssh-server to avoid direct connection to console next time.

The installed packages:

The dnsmasq is a simpler solution to the requirement of a DNS server by the Oracle Installer.
You could include language related packages.

adduser install
alien install
apt install
apt-utils install
aptitude install
auto-apt install
base-files install
base-passwd install
bash install
bind9-host install
binutils install
bsdmainutils install
bsdutils install
bzip2 install
coreutils install
cpio install
cpp install
cpp-4.1 install
cron install
dbus install
dclock install
dctrl-tools install
debconf install
debconf-i18n install
debconf-utils install
debhelper install
debian-archive-keyring install
debianutils install
defoma install
devscripts install
dh-make install
dhcp3-client install
dhcp3-common install
diff install
diffstat install
dmidecode install
dnsmasq install
dnsutils install
dpkg install
dpkg-dev install
dselect install
e2fslibs install
e2fsprogs install
ed install
fakeroot install
file install
findutils install
fontconfig-config install
gawk install
gcc install
gcc-4.1 install
gcc-4.1-base install
gettext install
gettext-base install
gnupg install
gpgv install
grep install
grep-dctrl install
groff-base install
gsfonts install
gsfonts-x11 install
gzip install
hostname install
html2text install
ifupdown install
info install
initscripts install
intltool-debian install
iptables install
iputils-ping install
jablicator install
java-common install
klogd install
ksh install
laptop-detect install
lesstif2 install
lesstif2-dev install
libacl1 install
libaio1 install
libasound2 install
libattr1 install
libbeecrypt6 install
libbind9-0 install
libblkid1 install
libbz2-1.0 install
libc6 install
libc6-dev install
libc6-xen install
libcap1 install
libclass-accessor-perl install
libcomerr2 install
libconsole install
libdb3 install
libdb4.2 install
libdb4.3 install
libdb4.4 install
libdbus-1-3 install
libdevmapper1.02 install
libdns22 install
libdrm2 install
libedit2 install
libexpat1 install
libfontconfig1 install
libfontenc1 install
libfreetype6 install
libfs6 install
libft-perl install
libgcc1 install
libgcrypt11 install
libgdbm3 install
libgl1-mesa-glx install
libgnutls13 install
libgpg-error0 install
libice6 install
libio-string-perl install
libisc11 install
libisccc0 install
libisccfg1 install
libkrb53 install
libldap2 install
liblocale-gettext-perl install
libltdl3 install
liblwres9 install
liblzo1 install
libmagic1 install
libmudflap0 install
libmudflap0-dev install
libncurses5 install
libncursesw5 install
libneon25 install
libnewt0.52 install
libopencdk8 install
libpam-modules install
libpam-runtime install
libpam0g install
libparse-debianchangelog-perl install
libpci2 install
libpng12-0 install
libpopt0 install
libreadline5 install
librpm4 install
libsasl2 install
libsasl2-2 install
libselinux1 install
libsepol1 install
libsigc++-2.0-0c2a install
libslang2 install
libsm6 install
libsqlite3-0 install
libss2 install
libssl0.9.8 install
libssp0 install
libstdc++6 install
libtasn1-3 install
libtext-charwidth-perl install
libtext-iconv-perl install
libtext-wrapi18n-perl install
libtimedate-perl install
libttf2 install
libusb-0.1-4 install
libuuid1 install
libwrap0 install
libx11-6 install
libx11-data install
libxau6 install
libxaw7 install
libxcursor1 install
libxdmcp6 install
libxext6 install
libxfixes3 install
libxfont1 install
libxft2 install
libxi6 install
libxkbfile1 install
libxml2 install
libxmu6 install
libxmuu1 install
libxp6 install
libxpm4 install
libxrandr2 install
libxrender1 install
libxss1 install
libxt6 install
libxtrap6 install
libxtst6 install
libxv1 install
libxxf86dga1 install
libxxf86vm1 install
lintian install
linux-kernel-headers install
locales install
login install
logrotate install
lsb-base install
lsb-rpm install
make install
makedev install
man-db install
manpages install
mawk install
mktemp install
module-init-tools install
mount install
nano install
ncurses-base install
ncurses-bin install
net-tools install
netbase install
netcat install
odbcinst1debian1 install
openbsd-inetd install
openssh-client install
openssh-server install
passwd install
patch install
pciutils install
perl install
perl-base install
perl-doc install
perl-modules install
po-debconf install
procps install
readline-common install
resolvconf install
rpm install
sed install
sgml-base install
ssh install
sun-java5-bin install
sun-java5-demo install
sun-java5-jdk install
sun-java5-jre install
sysklogd install
sysv-rc install
sysvinit install
sysvinit-utils install
tar install
tasksel install
tasksel-data install
tcpd install
traceroute install
tzdata install
ucf install
unixodbc install
unzip install
update-inetd install
util-linux install
util-linux-locales install
vim-common install
vim-tiny install
wget install
whiptail install
x11-common install
xbase-clients install
xfonts-encodings install
xfonts-utils install
xml-core install
xutils install
xutils-dev install
zip install
zlib1g install

The Oracle Database pre-installation tasks:

First, as already said, you MUST read the Oracle Installation Manual.
You can not use simple "cake recipes" for Oracle Installation.
You will have to read the manual and follow it.

We will cover more the obscure hints here and the differences for the Debian Etch installation.
The previously documented tasks are listed at the manual and some sites.
You should read them all, by order of relevance and correctness:

But not actually perform these instructions yet.
First, you must make your Debian Etch "transmorph" to a Red Hat and THEN follow the Oracle Installation Manual.

But did not these sites actually install Oracle at Debian?

Oracle Installer and Oracle Database are like aliens to Linux concepts and culture.
Unfortunately, the Oracle Installer "seems" to install and the Database engine "seems" to work at first look.
You have to put a reasonable workload to spot the problems.
This proved to be the tricky and longer part:
To have an ACTUALLY working installation and running engine.
We have been running the engine at the customer since october 4th 2007 and observed very carefully.
The basic concept is to fool Oracle Installer and the Database Engine in order to it "thinks" is running at a Red Hat Enterprise Linux server, **but not ignoring its prerequisites verifications.**

DNS workaround:

Let's start with name resolution problems ( chapter 2.4 at the intallation manual).
We had to configure the xen domU to work at our intranet using some kind of DNS solution.
For some reason, Oracle Installer requires complete standard access to DNS, not always true for a lab server at an intranet.
It does not honor the /etc/hosts file.
So, we installed dnsmasq as a simple lightweight DNS server to feed the /etc/hostname through a standard DNS query.
The /etc/host.conf file:

#AFM 26set2007 oracle needs nslookup returning right values
#first query /etc/hosts file, then dns servers
order hosts, bind

The modifications at /etc/dnsmasq.conf:

# If you don't want dnsmasq to read /etc/resolv.conf or any other
# file, getting its servers from this file instead (see below), then
# uncomment this
#AFM 26set2007 modifications for dnsmasq at same machine for oracle
no-resolv

# Add other name servers here, with domain specs if they are for
# non-public domains.
#AFM 26set2007 modifications for dnsmasq at same machine for oracle
server=10.200.113.12

Red Hat release

We used the /etc/redhat-release file:

Red Hat Linux release 4.1

PCI

The Oracle Installer and the Database Engine collect hardware info.
Running at a Xen domU guest, it will be tricky.
At least, make a symbolic link from /bin/lspci to /sbin/lspci.
As a Xen domU, the output will be blank, but the command will not fail.

XenOracleServer:~# ln -s /bin/lspci /sbin/lspci

The other symbolic links.

Create the symbolic links cited at the french Linux Identitity article.

#ln -s /usr/bin/awk /bin/awk
#ln -s /usr/bin/rpm /bin/rpm
#ln -s /usr/bin/basename /bin/basename
#ln -s /etc /etc/rc.d
#ln -s /lib/libgcc_s.so.1 /lib/libgcc_s.so

The RPM

Debian uses dpkg for its package management. But it CAN use rpm to install rpm packages. Avoid this at all costs, if you could.
The strong dependency check of dpkg is not present with rpm and you could break your system with a bad rpm package. Alien is a Debian tool to try convert different package formats, but good dependencies lists are up to the original developer. You could use alien to convert a rpm package to a deb package and then use dpkg to install it.
We created the rpm base directories almost as described at the french article:

#mkdir /var/lib/rpm
#touch /var/lib/rpm/Basenames
#rpm --initdb
#rpm --rebuilddb

AFTER the Oracle installation, you should get something similar to this:

oracle@XenOracleServer:~$ ls -la /var/lib/rpm
total 404
drwxr-xr-x 2 root root 4096 2007-09-24 12:07 .
drwxr-xr-x 21 root root 4096 2007-10-15 15:58 ..
-rwxr-xr-x 1 root root 0 2007-09-21 14:43 Basenames
-rwxr-xr-x 1 oracle oinstall 24576 2007-09-24 12:07 __db.001
-rwxr-xr-x 1 oracle oinstall 1318912 2007-09-24 12:07 __db.002
-rwxr-xr-x 1 oracle oinstall 450560 2007-09-24 12:07 __db.003
-rwxr-xr-x 1 oracle oinstall 12288 2007-09-24 12:07 Name
-rwxr-xr-x 1 root root 12288 2007-09-21 14:38 Packages

Create the needed users and groups

Follow the suitable chapter 2.5 at the Oracle Installation Manual to create the needed users and groups and their modifications. Some users must be at more than one group.
Do not forget to verify the special user "nobody".
A special advice. 
The "oracle home" is NOT the home of the oracle Linux user.
The names are confusing, but you must not be mislead by these.
The "oracle home" is the home of the database products, not of the user nor of the engine.
Carefully read the chapter 2.7 of the Oracle 10g R2 Installation Manual.
Pay special attention to directories and files ownership and permissions.
A single mistake and you may have to restart from a previously saved LVM image as the Oracle Installer mess things so badly and blindly that is easier to restart from scratch.
After creating the directories and groups following the Oracle Installation Manual, we modified some user and system files, as some variables were not properly set for some given Oracle daemons . It is an EXCLUSIVEOracle server virtual machine.

oracle@XenOracleServer:~$ cat /home/oracle/.bash_profile

# ~/.bash_profile: executed by bash(1) for login shells.
# see /usr/share/doc/bash/examples/startup-files for examples.
# the files are located in the bash-doc package.

# the default umask is set in /etc/login.defs
#AFM 08Ago2007 uncommented for Oracle
umask 022

# include .bashrc if it exists
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# set PATH so it includes user's private bin if it exists
if [ -d ~/bin ] ; then
PATH=~/bin:"${PATH}"
fi

oracle@XenOracleServer:~$ cat /home/oracle/.bashrc

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

# don't put duplicate lines in the history. See bash(1) for more options
export HISTCONTROL=ignoredups

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(lesspipe)"

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "$debian_chroot" ] && [ -r /etc/debian_chroot ]; then
debian_chroot=$(cat /etc/debian_chroot)
fi

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color)
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
;;
*)
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
;;
esac

# Comment in the above and uncomment this below for a color prompt
#PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
;;
*)
;;
esac

# Alias definitions.
# You may want to put all your additions into a separate file like
# ~/.bash_aliases, instead of adding them here directly.
# See /usr/share/doc/bash-doc/examples in the bash-doc package.

#if [ -f ~/.bash_aliases ]; then
# . ~/.bash_aliases
#fi

# enable color support of ls and also add handy aliases
if [ "$TERM" != "dumb" ]; then
eval "`dircolors -b`"
alias ls='ls --color=auto'
#alias dir='ls --color=auto --format=vertical'
#alias vdir='ls --color=auto --format=long'
fi

# some more ls aliases
#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi

#AFM 08out2007 oracle modifications
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.2.0
ORACLE_SID=customerbase
TNS_ADMIN=$ORACLE_HOME/network/admin
PATH=$HOME/bin:$ORACLE_HOME/bin:$PATH

export ORACLE_BASE
export ORACLE_HOME
export ORACLE_SID
export TNS_ADMIN

export PATH
unset USERNAME

oracle@XenOracleServer:~$ cat /etc/profile
# /etc/profile: system-wide .profile file for the Bourne shell (sh(1))
# and Bourne compatible shells (bash(1), ksh(1), ash(1), ...).

if [ "`id -u`" -eq 0 ]; then
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
else
PATH="/usr/local/bin:/usr/bin:/bin:/usr/games"
fi

if [ "$PS1" ]; then
if [ "$BASH" ]; then
PS1='\u@\h:\w\$ '
else
if [ "`id -u`" -eq 0 ]; then
PS1='# '
else
PS1='$ '
fi
fi
fi

export PATH

umask 022

#AFM 08Ago2007 changes for Oracle
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi

#AFM 08out2007 oracle modifications
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/10.2.0
ORACLE_SID=customerbase
TNS_ADMIN=$ORACLE_HOME/network/admin
PATH=$HOME/bin:$ORACLE_HOME/bin:$PATH

export ORACLE_BASE
export ORACLE_HOME
export ORACLE_SID
export TNS_ADMIN

export PATH
unset USERNAME

Configuring kernel parameters

You must follow the Oracle Installation Manual chapter 2.6 to edit the /etc/sysctl.conf file contents.
The parameters will be read next boot and persist between reboots.

If you want them read without rebooting, you could issue command:

#sysctl -p /etc/sysctl.conf

oracle@XenOracleServer:~$ cat /etc/sysctl.conf

#
# /etc/sysctl.conf - Configuration file for setting system variables
# See sysctl.conf (5) for information.
#

#kernel.domainname = example.com
#net/ipv4/icmp_echo_ignore_broadcasts=1

# Uncomment the following to stop low-level messages on console
#kernel.printk = 4 4 1 7

##############################################################3
# Functions previously found in netbase
#

# Uncomment the next line to enable Spoof protection (reverse-path filter)
#net.ipv4.conf.default.rp_filter=1

# Uncomment the next line to enable TCP/IP SYN cookies
#net.ipv4.tcp_syncookies=1

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.conf.default.forwarding=1

# Uncomment the next line to enable packet forwarding for IPv6
#net.ipv6.conf.default.forwarding=1

#AFM 18Sep2007 changes for oracle
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144

You should edit 2 files instead of the one documented for limits.
Edit /etc/pam.d/su :

oracle@XenOracleServer:~$ cat /etc/pam.d/su
#
# The PAM configuration file for the Shadow `su' service
#

# This allows root to su without passwords (normal operation)
auth sufficient pam_rootok.so

# Uncomment this to force users to be a member of group root
# before they can use `su'. You can also add "group=foo"
# to the end of this line if you want to use a group other
# than the default "root" (but this may have side effect of
# denying "root" user, unless she's a member of "foo" or explicitly
# permitted earlier by e.g. "sufficient pam_rootok.so").
# (Replaces the `SU_WHEEL_ONLY' option from login.defs)
# auth required pam_wheel.so

# Uncomment this if you want wheel members to be able to
# su without a password.
# auth sufficient pam_wheel.so trust

# Uncomment this if you want members of a specific group to not
# be allowed to use su at all.
# auth required pam_wheel.so deny group=nosu

# Uncomment and edit /etc/security/time.conf if you need to set
# time restrainst on su usage.
# (Replaces the `PORTTIME_CHECKS_ENAB' option from login.defs
# as well as /etc/porttime)
# account requisite pam_time.so

# This module parses environment configuration file(s)
# and also allows you to use an extended config
# file /etc/security/pam_env.conf.
#
# parsing /etc/environment needs "readenv=1"
session required pam_env.so readenv=1
# locale variables are also kept into /etc/default/locale in etch
# reading this file *in addition to /etc/environment* does not hurt
session required pam_env.so readenv=1 envfile=/etc/default/locale

# Defines the MAIL environment variable
# However, userdel also needs MAIL_DIR and MAIL_FILE variables
# in /etc/login.defs to make sure that removing a user
# also removes the user's mail spool file.
# See comments in /etc/login.defs
#
# "nopen" stands to avoid reporting new mail when su'ing to another user
session optional pam_mail.so nopen

# Sets up user limits, please uncomment and read /etc/security/limits.conf
# to enable this functionality.
# (Replaces the use of /etc/limits in old login)
#AFM 08Ago2007 uncommented for Oracle
session required pam_limits.so

# The standard Unix authentication modules, used with
# NIS (man nsswitch) as well as normal /etc /passwd and
# /etc/ shadow entries.
@include common-auth
@include common-account
@include common-session

Also edit /etc/pam.d/login :

oracle@XenOracleServer:~$ cat /etc/pam.d/login

#
# The PAM configuration file for the Shadow `login' service
#

# Outputs an issue file prior to each login prompt (Replaces the
# ISSUE_FILE option from login.defs). Uncomment for use
# auth required pam_issue.so issue=/etc/issue

# Disallows root logins except on tty's listed in /etc/securetty
# (Replaces the `CONSOLE' setting from login.defs)
auth requisite pam_securetty.so

# Disallows other than root logins when /etc/nologin exists
# (Replaces the `NOLOGINS_FILE' option from login.defs)
auth requisite pam_nologin.so

# This module parses environment configuration file(s)
# and also allows you to use an extended config
# file /etc/security/pam_env.conf.
#
# parsing /etc/environment needs "readenv=1"
session required pam_env.so readenv=1
# locale variables are also kept into /etc/default/locale in etch
# reading this file *in addition to /etc/environment* does not hurt
session required pam_env.so readenv=1 envfile=/etc/default/locale

# Standard Un*x authentication.
@include common-auth

# This allows certain extra groups to be granted to a user
# based on things like time of day, tty, service, and user.
# Please edit /etc/security/group.conf to fit your needs
# (Replaces the `CONSOLE_GROUPS' option in login.defs)
auth optional pam_group.so

# Uncomment and edit /etc/security/time.conf if you need to set
# time restrainst on logins.
# (Replaces the `PORTTIME_CHECKS_ENAB' option from login.defs
# as well as /etc/porttime)
# account requisite pam_time.so

# Uncomment and edit /etc/security/access.conf if you need to
# set access limits.
# (Replaces /etc/login.access file)
# account required pam_access.so

# Sets up user limits according to /etc/security/limits.conf
# (Replaces the use of /etc/limits in old login)
#AFM 18Sep2007 oracle changes
session required /lib/security/pam_limits.so
session required pam_limits.so

# Prints the last login info upon succesful login
# (Replaces the `LASTLOG_ENAB' option from login.defs)
session optional pam_lastlog.so

# Prints the motd upon succesful login
# (Replaces the `MOTD_FILE' option in login.defs)
session optional pam_motd.so

# Prints the status of the user's mailbox upon succesful login
# (Replaces the `MAIL_CHECK_ENAB' option from login.defs).
#
# This also defines the MAIL environment variable
# However, userdel also needs MAIL_DIR and MAIL_FILE variables
# in /etc/login.defs to make sure that removing a user
# also removes the user's mail spool file.
# See comments in /etc/login.defs
session optional pam_mail.so standard

# SELinux needs to intervene at login time to ensure that the process
# starts in the proper default security context.
# Uncomment the following line to enable SELinux
# session required pam_selinux.so multiple

# Standard Un*x account and session
@include common-account
@include common-session
@include common-password
oracle@XenOracleServer:~$

Also, you should edit /etc/security/limits.conf as documented in the manual.

oracle@XenOracleServer:~$ cat /etc/security/limits.conf

# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain> <type> <item> <value>
#
#Where:
#<domain> can be:
# - an user name
# - a group name, with @group syntax
# - the wildcard *, for default entry
# - the wildcard %, can be also used with %group syntax,
# for maxlogin limit
#
#<type> can have the two values:
# - "soft" for enforcing the soft limits
# - "hard" for enforcing hard limits
#
#<item> can be one of the following:
# - core - limits the core file size (KB)
# - data - max data size (KB)
# - fsize - maximum filesize (KB)
# - memlock - max locked-in-memory address space (KB)
# - nofile - max number of open files
# - rss - max resident set size (KB)
# - stack - max stack size (KB)
# - cpu - max CPU time (MIN)
# - nproc - max number of processes
# - as - address space limit
# - maxlogins - max number of logins for this user
# - maxsyslogins - max number of logins on the system
# - priority - the priority to run user process with
# - locks - max number of file locks the user can hold
# - sigpending - max number of pending signals
# - msgqueue - max memory used by POSIX message queues (bytes)
# - nice - max nice priority allowed to raise to
# - rtprio - max realtime priority
#
#<domain> <type> <item> <value>
#

#* soft core 0
#* hard rss 10000
#@student hard nproc 20
#@faculty soft nproc 20
#@faculty hard nproc 50
#ftp hard nproc 0
#@student - maxlogins 4

#AFM 08Ago2007 changes for Oracle
* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536

# End of file

BEFORE the installation: Configuring the oracle User's Environment and X fowarding

We do not use xhost, and use ssh X11 fowarding instead.
So, you must check your VM sshd configuration.

oracle@XenOracleServer:~$ cat /etc/ssh/sshd_config

# Package generated configuration file
# See the sshd(8) manpage for details

# What ports, IPs and protocols we listen for
Port 22
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::
#ListenAddress 0.0.0.0
Protocol 2
# HostKeys for protocol version 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#Privilege Separation is turned on for security
UsePrivilegeSeparation yes

# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600
ServerKeyBits 768

# Logging
SyslogFacility AUTH
LogLevel INFO

# Authentication:
LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys

# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no
# similar for protocol version 2
HostbasedAuthentication no
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes

# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)
ChallengeResponseAuthentication no

# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes

# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding yes
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

UsePAM yes

Restart sshd daemon.

#invoke-rc.d sshd restart

Now you can open a "ssh -X" connection to your virtual machine.
It is tricky, but you have to perform some oracle user's environment tweaks just before the installer execution to set some variables and UNSET others for the installer, remarkably ORACLE_HOME and TNS_ADMIN.
You must follow the "Configuring the oracle User's Environment" , chapter 2.14, with some differences for us.
Do not disconnect or close the shell session before starting the Oracle Installer or you will have to reconfigure the environment variables valid for the shell session.

Start the Oracle Installer:

To start the installer, do not ignore prerequisites as said elsewhere. If you forgot something obvious, the Oracle Installer will alert you at start.
The installer will guide you.
At some point you will have to pause and open a new simultaneus shell connection, login as root and run 2 shell scripts indicated.
The output of the scripts should be similar to something below:

XenOracleServer:~# cd /u01/app/oracle/oraInventory/
XenOracleServer:/u01/app/oracle/oraInventory# sh /u01/app/oracle/oraInventory/orainstRoot.sh
Alterando permissões de/u01/app/oracle/oraInventory para 770.
Alterando o nome do grupo de /u01/app/oracle/oraInventory para oinstall.
A execução do script foi concluída
XenOracleServer:/u01/app/oracle/oraInventory#

XenOracleServer:/u01/app/oracle/oraInventory# cd /u01/app/oracle/product/10.2.0/XenOracleServer:/u01/app/oracle/product/10.2.0# sh /u01/app/oracle/product/10.2.0/root.sh
Running Oracle10 root.sh script...

The following environment variables are set as:
ORACLE_OWNER= oracle
ORACLE_HOME= /u01/app/oracle/product/10.2.0

Enter the full pathname of the local bin directory: [/usr/local/bin]:
Copying dbhome to /usr/local/bin ...
Copying oraenv to /usr/local/bin ...
Copying coraenv to /usr/local/bin ...

Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.
XenOracleServer:/u01/app/oracle/product/10.2.0#

Automatic engine startup:

At this point, you should have the database engine running.
Access http://XenOracleServer:1158/em
But it will not automatically shutdown cleanly nor start automatically at next boot.
You could use the french article as guidance to create your startup / shutdown scripts.
You could use the http://albatordeb.blogspot.com/2007/04/oracle.html as another example.
You could use the http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=4468&pagina=1 as another good guidance.
In a future article we will present our solution.