Thursday, May 31, 2012

Converting PeopleSoft OVM Templates to VirtualBox Guests

I have seen several comments, blogs, questions, OTN forum posts, etc from people like me wanting to know how to run Oracle's PeopleSoft VM templates without OVM. If I had the hardware, I would love to run OVM templates directly, but I don't think it would be wise to reformat my Dell laptop as an OVM host. This post contains the steps I used to convert the FSCM FP2 PeopleTools 8.52.03 OVM template into a VirtualBox guest (currently running on my Dell XPS laptop). I started with the PeopleSoft Oracle Virtual Machine Templates Development and Customization Guide, which gave me some clues about the design of these OVM's. I'm typing all of this from memory, so let me know if I forget anything.

PeopleSoft's OVM templates are split into two tiers (instances): A database tier and a generic tools tier. If you were to boot these images in OVM, the database tier would ask you a series of questions (SID, etc), and then configure the database based on your answers. The tools tier will perform a similar initialization to acquire database information and then will mount the database's PS_APP_HOME as well as create a PS_CFG_HOME, with app, batch, and web server instances. The "pairing" process includes updating Integration Broker and other host specific database settings.

The steps

  1. Download and install VirtualBox.
  2. Download an OS. I chose OEL 5.2. You can download it from the Oracle Linux Software Delivery Cloud. In the Media Pack Search, select the Product Pack Oracle Linux and the Platform x86 64 bit. Select the DVD download.
  3. Download both a PeopleSoft DB and PeopleTools OVM template. These are also available on the Oracle Linux Software Delivery Cloud. In the Media Pack Search, select the Product Pack Oracle VM Templates and the Platform x86 64 bit. While constructing this example, I used PeopleSoft VM Templates for FSCM 9.1 Release Media Pack v3 for x86 (64 bit), which requires 5 total downloads.
  4. After the templates finish downloading, extract all the zip files. Each one is a tgz fragment and will need to be concatenated into a single, large .tgz file. For example, on Windows I concatenated the 3 DB files into a single tgz file using the command:
    copy /b OVM_EL5U2_X86_64_FSCMDB_9_1_2_PVM.tgz.1of3+OVM_EL5U2_X86_64_FSCMDB_9_1_2_PVM.tgz.2of3+OVM_EL5U2_X86_64_FSCMDB_9_1_2_PVM.tgz.3of3 OVM_EL5U2_X86_64_FSCMDB_9_1_2_PVM.tgz
    In the end, you should have one tgz file for the DB image, and one tgz file for the PeoleTools image.
  5. Untar and unzip the two tgz file (On Windows I use 7-Zip).
  6. You should now have 2 main directories: One containing .img files for the DB (mine is named OVM_EL5U2_X86_64_FSCMDB_9_1_2_PVM) and one for the PeopleTools .img files (mine is named OVM_EL5U7_X86_64_TOOLS8_52_03_PVM). These .img files are raw disk images. If we were using OVM, OVM would pretend they were physical disk drives and make them available to the OS for mounting. Using losetup, it would be possible for us to mount these .img files directly, but I find it is a LOT easier to convert them to VirtualBox images (.vdi files). When you installed VirtualBox, you received a command called VBoxManage. If your host OS is windows, then add the VirtualBox installation directory (C:\Program Files\Oracle\VirtualBox) to your PATH environment variable (right-click on "My Computer", select Properties, then Advanced Properties, then Advanced, then Environment Variables). Once you have VBoxManage on your path, open a command prompt and CD to one of the folders containing your .img files. For example, inside your database folder, you will find oracle11g_x86_64_asm.img, System.img, and XXXXDB.img. For each of these files, execute VBoxManage convertfromraw xxx.img xxx.vdi (replace xxx with the .img file name)
  7. Launch VirtualBox and create a new Guest OS with an OS type of Linux and a version of Oracle (64 bit). Set the memory to 2048 MB (2 GB of RAM). For the Virtual Hard Disk, choose "Create new hard disk." Walk through the new hard disk wizard. I chose a dynamically allocated disk of 20 GB, but the OS only required 8 GB. When the wizards finish, you will have a Guest definition. Open the guest's settings to insert a virtual DVD into the drive. Click on the Storage setting on the left. In the storage tree, select the CD icon to show the CD drive attributes. Click the little CD icon to the right of the "IDE Secondary Master" drop-down to select your OS's install media. In my case, this is the Enterprise-R5-U2-Server-x86_64-dvd.iso DVD image.
  8. Network adapters: if you know what you are doing, configure your network adapters. For the initial install, I kept one adapter with the default NAT. After install, I reconfigured my network adapters and I'll tell how I configured them in a few steps.
  9. Start your new guest and install OEL. You can accept most of the defaults. I turned off the firewall and set selinux to permissive. No, I don't recommend anyone do this, it was just the fastest way to get the image working. What you do about firewalls, etc is your responsibility.
  10. Configure sudo if you would rather use sudo instead of becoming root for later steps. I did, and I recommend you do as well, but it is not required. As root, I think I ran visudo and added this line to the end of the file:
    %admin      ALL=(ALL)      ALL
    I then added myself to the admin group.
  11. Configure Yum to use the Oracle Public Yum server. Instructions are on the Oracle Public Yum site (Look for Oracle Linux 5).
  12. In your guest, open a terminal, become root (or use sudo) to run yum update. Install all available updates to get your system current.
  13. From the VirtualBox menu at the top of your guest window, select Devices > Install Guest Additions. This will mount the guest additions CD. From a terminal as root (or sudo), cd to /media/VBOXADDITIONS_4.1.16_78094 and run ./ Expect it to fail the first time it runs. When I ran it, I saw this:
    Building the VirtualBox Guest Additions kernel modules
    The headers for the current running kernel were not found. If the following
    module compilation fails then this could be the reason.
    The missing package can be probably installed with
    yum install kernel-uek-devel-2.6.32-300.25.1.el5uek
    Building the main Guest Additions module                   [FAILED]
    To resolve the issue, I copied the line from the VBox install output, yum install kernel-uek-devel-2.6.32-300.25.1.el5uek, and ran it. I then I re-ran ./ to success.
  14. Shutdown your guest to configure more network adapters.
  15. In the VM's network settings, set Network Interface 1 to Host Only. This is probably the easiest way to get your host and guest communicating over the network. Unfortunately, Host Only network adapters can't access the internet. To get internet access, add a second Network Interface for NAT. This will allow your VM to download updates, etc, over the internet.
  16. Start your VM and ensure that mouse capture, shared folders, etc are working.
  17. Later we will run the delivered OVM configuration scripts, but since we aren't running OVM, we will have to fake some of the OVM infrastructure. As root (or sudo), create the directory /usr/lib/oraclevm-template (mkdir -p /usr/lib/oraclevm-template). Create and edit the file /usr/lib/oraclevm-template/functions (vim /usr/lib/oraclevm-template/functions). Paste in the following contents:
    ovm_info() {
        echo "INFO: $1"
    ovm_log() {
        echo $1
    ovm_warn() {
        echo "WARN: $1"
    ovm_error() {
        echo "ERROR: $1"
    The oraclevm templates will call these functions to log/report information about the process. Note: we waited until now to create this file so we would have Guest Additions copy/paste. We are doing this prior to cloning so we will have this file in both the tools and db images.
  18. Create the following users and groups. Please pay careful attention to the uid and gid parameters below. I found these values in the /etc/passwd and /etc/group files from the OVM system image. You can use whatever uid and gid values you prefer, but changing them will require you to chown files. It is also important that psadm3 and appinst match between your database and tools image. Your tools image will nfs mount files owned by psadm3 and appinst.
    groupadd oinstall
    groupadd dba
    groupadd -g 505 oracle
    groupadd -g 506 appinst
    useradd -g oinstall -G dba oracle
    useradd -u 505 -g oracle -G appinst psadm1
    useradd -u 506 -g oracle psadm2
    useradd -u 507 -g appinst psadm3
    Please note that I did not configure any passwords for these users. If you want, you can set passwords. I just use sudo -u oracle -i.
  19. Create a temporary directory under /media for mounting the original OVM OS disk and then mount it. We will use this to copy a few files. While you are at it, create the destination folder for the files to copy:
    mkdir -p /media/tmp
    mkdir -p /opt/oracle/psft/
    mount /dev/sdd2 /media/tmp
    cp -R --preserve=all /media/tmp/opt/oracle/psft/vm /opt/oracle/psft/
  20. Shutdown your guest and clone it. You want a clone for two reasons: #1 in case you mess up and #2 to use as a base for the later tools image. To clone, select the machine in the VirtualBox Manager list, and then choose Clone from the Machine menu. I suggest keeping the original as a base image in case you want to create more instances (or need to start over). If you keep the original for a backup, create two clones: one for the DB, and one for the middle/PeopleTools tier. I named my clones FSCM912_DB and FSCM912_PT
  21. After creating your clones, move the vdi files you created earlier into the appropriate VM folder. For example, move oracle11g_x86_64_asm.vdi, System.vdi, and FSCMDB.vdi into the folder containing your Virtual Box DB guest files.
  22. Switch back to the VirtualBox Manager and open the settings for each of your 2 VM's. Add each of the vdi files to the appropriate guest's Storage SATA Controller. For example, in the DB Guest, add FSCMDB.vdi, oracle11g_x86_64_asm.vdi, System.vdi. System.vdi represents the boot/OS disk image used by OVM. We will use it to copy a few files, and then drop it.

The Database Image

  1. Boot the database image and log in.
  2. For a static IP on the host-only network do this: (Note: the benefit of having a static IP is that you don't have to update your hosts file every time your db IP address changes) Open a terminal and become root to execute the command (or sudo, which is what I do) ifconfig. Look for the IP address for eth0. In my configuration it is Copy all but the 101 part (the first 3 segments). In the OEL menu bar, select System | Administration | Network. Highlight eth0 and click the Edit button in the toolbar. On the general tab, select the Statically set radio button and enter an IP address and subnet mask. For my network configuration, I chose for my IP address and a subnet of Click OK to close the edit dialog, and then choose File | Save from the menu bar. Using the buttons on the right, deactivate eth0 and then activate eth0. This will activate your static IP. Note: It will also mess up resolv.conf, so don't expect to get internet access until reboot (or reactivate eth1, etc).

  3. This new guest needs a host name. Set the host name by editing /etc/sysconfig/network. Change the HOSTNAME line to something new (fscm912db?). In /etc/hosts, make sure you have an IP address mapping that matches the HOSTNAME line (add it to the localhost line if using DHCP and have no IP address reservations). Here is my /etc/hosts file:               localhost.localdomain localhost
    ::1             localhost6.localdomain6 localhost6           fscm912db           fscm912pt
  4. Create the following directories (as root or sudo).
    mkdir /opt/oracle/psft/ptdb
    mkdir /u01
  5. Run fsdisk -l to see the disks and partitions attached to the guest. Each hard disk should be /dev/sdx where x represents letters a through d. For example, /dev/sda is the primary disk associated with the guest. /dev/sdb should be the database disk and should have the largest reported size. Here is the output from my guest:
    [root@fscm912db ~]# fdisk -l
    Disk /dev/sda: 21.4 GB, 21474836480 bytes
    255 heads, 63 sectors/track, 2610 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *           1          13      104391   83  Linux
    /dev/sda2              14        2610    20860402+  8e  Linux LVM
    Disk /dev/sdb: 53.6 GB, 53695479808 bytes
    255 heads, 63 sectors/track, 6528 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1        6528    52436128+  83  Linux
    Disk /dev/sdc: 26.2 GB, 26214400000 bytes
    255 heads, 63 sectors/track, 3187 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1               1        1246    10008463+  83  Linux
    /dev/sdc2            1247        2213     7767427+  83  Linux
    /dev/sdc3            2214        3187     7823655   83  Linux
    Disk /dev/sdd: 6622 MB, 6622806016 bytes
    255 heads, 63 sectors/track, 805 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdd1   *           1           4       32098+  83  Linux
    /dev/sdd2               5         413     3285292+  83  Linux
    /dev/sdd3             414         805     3148740   82  Linux swap / Solaris
    Disk /dev/dm-0: 19.2 GB, 19260243968 bytes
    255 heads, 63 sectors/track, 2341 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Disk /dev/dm-0 doesn't contain a valid partition table
    Disk /dev/dm-1: 2080 MB, 2080374784 bytes
    255 heads, 63 sectors/track, 252 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    Disk /dev/dm-1 doesn't contain a valid partition table
    /dev/sda has 3 partitions, /dev/sdb has one partition, /dev/sdc has 3 partitions, and /dev/sdd has 3 partitions. To recap: /dev/sda is the primary OS/boot disk, /dev/sdb should be the database disk, /dev/sdc will have the $ORACLE_HOME, /dev/sdd is the original OVM OS disk. It is fine if yours are in a slightly different order. Just remember the order and change your mount points accordingly (or shutdown and reorder your SATA devices).
  6. Add the following entries to /etc/fstab to mount the database disk and the oracle home disk:
    /dev/sdb1               /opt/oracle/psft/ptdb   ext3    defaults        1 3
    /dev/sdc1               /u01                    ext3    defaults        1 4
  7. Next time you reboot, these partitions will mount automatically. So that we can use them now, mount the new partitions with these commands:
    mount /u01
    mount /opt/oracle/psft/ptdb
  8. Since we are discussing disks, now might be a good time to check how much swap you allocated to make sure you allocated enough. I didn't. I ran through an install on one of these base tools images and Oracle told me I should have roughly 3 GB of swap. I only had 2 GB, so I created some more. Check your swap by executing
    [root@fscm912db psft]# swapon -s
    Filename                                Type            Size    Used    Priority
    /dev/mapper/VolGroup00-LogVol01         partition       2031608 0       -1
    /root/swapfile                          file            2097144 0       -2
    The sizes are in kilobytes, so copy your number and paste it into google like so: 2031608 kilobytes in gigabytes. Google will do the conversion for you and return something like 2 031 608 kilobytes = 1.93749237 gigabytes. If you need to add more swap, an easy way is to use a swap file (or create a swap partition -- not sure if it matters since they are all virtual disk files anyway):
    dd if=/dev/zero of=/root/swapfile bs=1024 count=2097152
    mkswap /root/swapfile
    chown root:root /root/swapfile
    chmod 0600 /root/swapfile
    swapon /root/swapfile
    Add the following to your /etc/fstab so the swap file will load on boot:
    /root/swapfile           swap                    swap    defaults        0 0
    See this handy tutorial for more information on adding swap.
  9. Check your mounted partitions:
    [root@fscm912db /]# ls /opt/oracle/psft/ptdb/
    apptools  lost+found  oradata  orapatch  scripts  templates
    [root@fscm912db /]# ls /u01/
    app  config  db-config  dbstart  lost+found
  10. The script expects to find oracleasmlib and oracleasm-`uname -r`. I was not able to find an oracleasmlib for my kernel (2.6.32-300.25.1.el5uek), and the test for oracleasm-`uname -r` seems a bit unnecessary since a different kernel version seems to be running just fine on my kernel (perhaps a test for the command oracleasm would have been more appropriate?). We will install as many of the dependencies as possible, and then comment out the rest. In fact, you could probably comment out the entire oracleasm section and skip these dependencies (I didn't try that, just went with the path of least resistance). Note: in steps 10 - 12, don't actually run The template script will call this script. We just need to make sure we take care of all the prerequisites.
  11. Install the following packages as root (or execute as sudo).
    yum install oracle-validated # required (or you can do the manual kernel config)
    yum install oracleasm
    Note, we won't really mount an ASM device, but the OVM scripts think one should exist. The template scripts will configure oracleasm, so you won't need to do that. If you are interested, though there is a nice tutorial here. Basically, you just need to run oracleasm configure and use the values specified in the tutorial.
  12. Open /u01/ and search for fail "oracleasm-`uname -r` not installed. It should be around line 400. Comment out that line by adding a # in front of it. Do the same a few lines later for fail "oracleasmlib not installed." And then further down, comment out the network configuration section (VBox takes care of network configuration for us).
    # check if required packages have been installed
    if ! rpm -q oracleasm-`uname -r` >/dev/null 2>&1; then
    #    fail "oracleasm-`uname -r` not installed."
        ovm_info "oracleasm-`uname -r` not installed."
    if ! rpm -q oracleasmlib >/dev/null 2>&1; then
    #    fail "oracleasmlib not installed."
        ovm_info "oracleasmlib not installed"
    # Somewhere around line 430?
    # configure network DHCP/static IP
    # ovm_configure_network
    Note: I used the ovm_info macro we created earlier to print what the template intended to print, but without halting the script.
  13. The template scripts will attempt to relink the Oracle database binaries. Right now, they probably aren't owned by user oracle. Unless they are owned by user oracle, the relinking script will fail with permission denied errors. Run the following command to change the ownership on all of these files:
    chown -R oracle:oinstall /u01/app/oracle
  14. Now for the big moment... As root (or run with sudo), cd into /opt/oracle/psft/vm and run ./ The script will ask you if you want to relink the binaries. Say yes. The next prompt will be for an Oracle SID (database name). Come up with one that is only 8 ASCII characters long. But if you see error messages before the prompt, type Ctrl-C now. This will end the script. First, resolve the errors, then rerun the script.
  15. When all is said and done, become user oracle. If you are root now, just type su - oracle. This will put you in your home directory. Type ll to see a long listing. You will see two new symbolic links: scripts and templates. Templates links back to the scripts we just ran. Scripts contains start/stop scripts, etc for the database. While here, review your .bash_profile (vim .bash_profile). You will notice that the script inserted entries for ORACLE_BASE, ORACLE_HOME, etc.
  16. Edit the initXXX.ora script. I found the default db_domain property unsatisfactory for my configuration. If you don't want the db_domain, or it doesn't work for you, comment out the db_domain property.
    vim $ORACLE_HOME/dbs/initFSCM912.ora
    # Database Identification
    # db_name=
  17. Edit the tnsnames to make the host, SID, and SERVICE_NAME match the initXXX.ora and host name. Here is my tnsnames.ora file. Notice that I removed all the qualified names:
    vim $ORACLE_HOME/network/admin/tnsnames.ora
    # tnsnames.ora Network Configuration File:
    ORCL =
        (ADDRESS = (PROTOCOL = TCP)(HOST = fscm912db )(PORT = 1521))
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = orcl)
    FSCM912 =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = fscm912db)(PORT = 1521))
        (CONNECT_DATA =
          (SERVICE_NAME = FSCM912 )
          (SID = FSCM912 )
  18. Open lsnrctl and check the status. If it isn't started, start it:
    [oracle@fscm912db ~]$ lsnrctl
    LSNRCTL for Linux: Version - Production on 31-MAY-2012 21:58:12
    Copyright (c) 1991, 2008, Oracle.  All rights reserved.
    Welcome to LSNRCTL, type "help" for information.
    LSNRCTL> status
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=fscm912db)(PORT=1521)))
    TNS-12541: TNS:no listener
     TNS-12560: TNS:protocol adapter error
      TNS-00511: No listener
       Linux Error: 111: Connection refused
    TNS-12541: TNS:no listener
     TNS-12560: TNS:protocol adapter error
      TNS-00511: No listener
       Linux Error: 2: No such file or directory
    # If you saw errors like above, then it isn't started. Start it:
    LSNRCTL> start
    Starting /u01/app/oracle/product/11.1.0/db_1/bin/tnslsnr: please wait...
    TNSLSNR for Linux: Version - Production
    System parameter file is /u01/app/oracle/product/11.1.0/db_1/network/admin/listener.ora
    Log messages written to /u01/app/oracle/diag/tnslsnr/fscm912db/listener/alert/log.xml
    Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=fscm912db)(PORT=1521)))
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version - Production
    Start Date                31-MAY-2012 22:00:30
    Uptime                    0 days 0 hr. 0 min. 0 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /u01/app/oracle/product/11.1.0/db_1/network/admin/listener.ora
    Listener Log File         /u01/app/oracle/diag/tnslsnr/fscm912db/listener/alert/log.xml
    Listening Endpoints Summary...
    The listener supports no services
    The command completed successfully
    Quit lsnrctl by typing quit.
  19. As user oracle, start your database:
    ~/scripts/ FSCM912
    If it is already running, you will see a note to that affect. In a matter of time, the database will register itself with the listener. If it doesn't, log into sqlplus / as sysdba and run alter system register;
    sqlplus / as sysdba
    SQL> alter system register;
    System altered.
    SQL> quit
    Now type lsnrctl status. If you still don't see your database registered, run ~/scripts/ FSCM912 (your SID) and then ~/scripts/ Once registered, you should see:
    Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=fscm912db)(PORT=1521)))
    Alias                     LISTENER
    Version                   TNSLSNR for Linux: Version - Production
    Start Date                31-MAY-2012 15:27:43
    Uptime                    0 days 6 hr. 30 min. 31 sec
    Trace Level               off
    Security                  ON: Local OS Authentication
    SNMP                      OFF
    Listener Parameter File   /u01/app/oracle/product/11.1.0/db_1/network/admin/listener.ora
    Listener Log File         /u01/app/oracle/product/11.1.0/db_1/log/diag/tnslsnr/fscm912db/listener/alert/log.xml
    Listening Endpoints Summary...
    Services Summary...
    Service "FSCM912" has 1 instance(s).
      Instance "FSCM912", status READY, has 1 handler(s) for this service...
    Service "FSCM912_XPT" has 1 instance(s).
      Instance "FSCM912", status READY, has 1 handler(s) for this service...
    Service "XDB" has 1 instance(s).
      Instance "FSCM912", status READY, has 1 handler(s) for this service...
    The command completed successfully
  20. Test it out by trying to connect to SQLPlus as SYSADM:
    [oracle@fscm912db ~]$ sqlplus SYSADM@FSCM912
    SQL*Plus: Release - Production on Thu May 31 22:10:08 2012
    Copyright (c) 1982, 2008, Oracle.  All rights reserved.
    Enter password: 
    Connected to:
    Oracle Database 11g Enterprise Edition Release - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    SQL> quit
  21. The database tier contains application specific files that the tools tier will require (PS_APP_HOME). There are a handful of ways to make these files available. The way I chose was to use nfs. At a minimum, you have to share out a file. You can also configure hosts.allow and hosts.deny, but I just did the minimum. Make sure you take the appropriate security precautions when sharing out nfs folders.
    [root@fscm912db vm]# vim /etc/exports 
    /opt/oracle/psft/ptdb/apptools FSCM912PT(ro)
    [root@fscm912db vm]# chkconfig nfs on
    [root@fscm912db vm]# chkconfig nfs --list
    nfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off
    Since we defined a host here in the exports file, we should also map it to an IP address in the /etc/hosts file. Update your hosts file accordingly.
  22. If all is good here, you can move onto configuring your Windows workstation to connect to this guest. For the workstation, install PT 8.52.03 (download PT 8.52 and then the 03 patch). You will also need to install an Oracle client. I don't know if it is possible to still find an client, but works just fine. Add an entry to your Windows hosts file (c:\windows\system32\drivers\etc\hosts) to point to your VBox guest, and add a TNS entry for the VBox guest. The TNS entry will look very similar to the one on the guest. Here is mine:
    FSCM912 =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = FSCM912DB)(PORT = 1521))
        (CONNECT_DATA =
          (SERVICE_NAME = FSCM912)
    You should now be able to use App Designer, Data Mover, and all other two-tier PeopleTools client tools.
  23. After configuring a client, run setspace.sqr to populate the list of Table spaces for App Designer:
    c:\PT8.52\bin\sqr\ora\BINW>sqrw.exe -ZIFC:\PT8.52\sqr\pssqr.ini -iC:\PT8.52\sqr\ c:\pt8.52\sqr\setspace.sqr
  24. The next time you shutdown your database guest, you can remove the system.vdi SATA device from the list of storage devices.

You can find the steps for configuring the App, Batch, and Web server here.