After installing the basic installation of Solaris there are certain requirements which need to be fulfilled for successful installation of RAC 11g.
Hardware Requirements
-Physical memory (at least 1.5 gigabyte (GB) of RAM)
# /usr/sbin/prtconf | grep "Memory size"
-An amount of swap space equal the amount of RAM
# /usr/sbin/swap -s
-Temporary space (at least 1 GB) available in /tmp
# df -h /tmp
-A processor type (CPU) that is certified with the version of the Oracle software being installed
-At minimum of 1024 x 786 display resolution, so that Oracle Universal Installer (OUI) displays correctly
-All servers that will be used in the cluster have the same chip architecture, for example, all SPARC
processors or all x86 64-bit processors
-Disk space for software installation locations
You will need at least 4.5 GB of available disk space for the Grid home directory, which includes both the
binary files for Oracle Clusterware and Oracle Automatic Storage Management (Oracle ASM) and their
associated log files, and at least 4 GB of available disk space for the Oracle Database home directory.
Network Hardware Requirements
-Each node has at least two network interface cards (NIC), or network adapters.
-Public interface names must be the same for all nodes. If the public interface on one node uses the network
adapter e1000g0, then you must configure e1000g0 as the public interface on all nodes.
-You should configure the same private interface names for all nodes as well. If e1000g1 is the private
interface name for the first node, then e1000g1 should be the private interface name for your second node.
-The network adapter for the public interface must support TCP/IP.
-The network adapter for the private interface must support the user datagram protocol (UDP) using
high-speed network adapters and a network switch that supports TCP/IP (Gigabit Ethernet or better).
IP Address Requirements
-A public IP address for each node
-A virtual IP address for each node
-Three single client access name (SCAN) addresses for the cluster.
Configuring Shared Storage (OVM Level)
As we need to have shared storage for the 11gRAC, we need to add the disks to OS. We will use the OVM utilities to do this activity.
Add and Configure ASM Shared Disks For VMBox
D:\SharedASM>path=C:\Program Files\Oracle\VirtualBox;%path;
Shutdown virtual machine and create folder for ASM storage (D:\SharedASM> in my case).
Open windows command prompt and navigate to ASM folder and issue following commands.
-- following for OCR and VOTE (with high redundancy)
VBoxManage createhd --filename asmdisk1.vdi --size 1024 --format VDI --variant Fixed
VBoxManage createhd --filename asmdisk2.vdi --size 1024 --format VDI --variant Fixed
VBoxManage createhd --filename asmdisk3.vdi --size 1024 --format VDI --variant Fixed
VBoxManage createhd --filename asmdisk4.vdi --size 1024 --format VDI --variant Fixed
VBoxManage createhd --filename asmdisk5.vdi --size 1024 --format VDI --variant Fixed
--- following for DATA and FLASH
VBoxManage createhd --filename asmdiskDATA.vdi --size 10240 --format VDI --variant Fixed
VBoxManage createhd --filename asmdiskFLASH.vdi --size 5120 --format VDI --variant Fixed
After creating the disk create a SCSI Controller to attach these disks with it.
Attach Disks to SCSI storage controller
VBoxManage storageattach RACSOL1 --storagectl "SCSI Controller" --port 1 --device 0 --type hdd --medium asmdisk1.vdi --mtype shareable
VBoxManage storageattach RACSOL1 --storagectl "SCSI Controller" --port 2 --device 0 --type hdd --medium asmdisk2.vdi --mtype shareable
VBoxManage storageattach RACSOL1 --storagectl "SCSI Controller" --port 3 --device 0 --type hdd --medium asmdisk3.vdi --mtype shareable
VBoxManage storageattach RACSOL1 --storagectl "SCSI Controller" --port 4 --device 0 --type hdd --medium asmdisk4.vdi --mtype shareable
VBoxManage storageattach RACSOL1 --storagectl "SCSI Controller" --port 5 --device 0 --type hdd --medium asmdisk5.vdi --mtype shareable
VBoxManage storageattach RACSOL1 --storagectl "SCSI Controller" --port 6 --device 0 --type hdd --medium asmdiskDATA.vdi --mtype shareable
VBoxManage storageattach RACSOL1 --storagectl "SCSI Controller" --port 7 --device 0 --type hdd --medium asmdiskFLASH.vdi --mtype shareable
Make Disks Shareable
VBoxManage modifyhd asmdisk1.vdi --type shareable
VBoxManage modifyhd asmdisk2.vdi --type shareable
VBoxManage modifyhd asmdisk3.vdi --type shareable
VBoxManage modifyhd asmdisk4.vdi --type shareable
VBoxManage modifyhd asmdisk5.vdi --type shareable
VBoxManage modifyhd asmdiskDATA.vdi --type shareable
VBoxManage modifyhd asmdiskFLASH.vdi --type shareable
Pre-requsite on OS Level
Required packages availability
bash-3.2# pkginfo -i SUNWarc SUNWbtool SUNWcsl SUNWhea SUNWlibC SUNWlibm SUNWlibms SUNWsprot SUNWtoo SUNWi1of SUNWi1cs SUNWi15cs
SUNWi1cs SUNWi15cs SUNWxwfnt
system SUNWarc Lint Libraries (usr)
system SUNWbtool CCS tools bundled with SunOS
system SUNWcsl Core Solaris, (Shared Libs)
system SUNWhea SunOS Header Files
system SUNWi1of ISO-8859-1 (Latin-1) Optional Fonts
system SUNWlibC Sun Workshop Compilers Bundled libC
system SUNWlibm Math & Microtasking Library Headers & Lint Files (Usr)
system SUNWlibms Math & Microtasking Libraries (Usr)
system SUNWsprot Solaris Bundled tools
system SUNWtoo Programming Tools
system SUNWxwfnt X Window System platform required fonts
ERROR: information for "SUNWi1cs" was not found
ERROR: information for "SUNWi15cs" was not found
Install Missing Packages
bash-3.2# pkgadd -d /cdrom/sol_10_811_x86/Solaris_10/Product SUNWi1cs SUNWi15cs
Edit /etc/hosts file
bash-3.2# gedit /etc/hosts
#
# Internet host table
#
::1 localhost
127.0.0.1 localhost
#Public
192.168.1.1 racsol1 racsol1.localdomain loghost
192.168.1.2 racsol2 racsol2.localdomain loghost
#
#
#Private
10.10.10.1 racsol1-priv racsol1-priv.localdomain
10.10.10.2 racsol2-priv racsol2-priv.localdomain
#
#
#Virtual
192.168.1.11 racsol1-vip racsol1-vip.localdomain
192.168.1.12 racsol2-vip racsol1-vip.localdomain
#
#
#Scan
192.168.1.21 racsol-scan racsol-scan.localdomain
Add required groups (minimum 2 oinstall and dba ) bash-3.2# groupadd oinstall
bash-3.2# groupadd dba
bash-3.2# groupadd asmadmin
bash-3.2# groupadd asmdba
bash-3.2# groupadd asmoper
Add grid and Oracle User (oraclepw=>oracle134, gridpw=>grdi123)
bash-3.2# useradd -g oinstall -G asmadmin,asmdba,asmoper -d /export/home/grid -s /bin/bash grid
bash-3.2# useradd -g oinstall -G asmdba,dba -d /export/home/oracle -s /bin/bash oracle
bash-3.2# passwd oracle
New Password:
Re-enter new Password:
passwd: password successfully changed for oracle
bash-3.2# passwd grid
New Password:
Re-enter new Password:
passwd: password successfully changed for grid
Create home directories for Oracle and Grid User
bash-3.2# mkdir /export/home/oracle
bash-3.2# mkdir /export/home/grid
bash-3.2# chown -R oracle:oinstall /export/home/oracle
bash-3.2# chown -R grid:oinstall /export/home/grid
Check users setting
Open a new prompt window and test login with both users grid and oracle
bash-3.2# su - oracle
Oracle Corporation SunOS 5.10 Generic Patch January 2005
bash-3.2# exit
logout
bash-3.2# su - grid
Oracle Corporation SunOS 5.10 Generic Patch January 2005
Disable autofs
bash-3.2# svcadm disable autofs
Note: you might have to disable aufotfs temporary to be able to create the home folders.
Create required directories for installation
--Inventory
bash-3.2# mkdir -p /u01/app/oraInventory
bash-3.2# chown -R grid:oinstall /u01/app/oraInventory
bash-3.2# chmod -R 775 /u01/app/oraInventory
--Grid
bash-3.2# mkdir -p /u01/11.2.0/grid
bash-3.2# chown -R grid:oinstall /u01/11.2.0/grid
bash-3.2# chmod -R 775 /u01/11.2.0/grid
--Database
bash-3.2# mkdir -p /u01/app/oracle
bash-3.2# mkdir /u01/app/oracle/cfgtoollogs
bash-3.2# chown -R oracle:oinstall /u01/app/oracle
bash-3.2# chmod -R 775 /u01/app/oracle
bash-3.2# mkdir -p /u01/app/oracle/product/11.2.0/db_1
bash-3.2# chown -R oracle:oinstall /u01/app/oracle/product/11.2.0/db_1
bash-3.2# chmod -R 775 /u01/app/oracle/product/11.2.0/db_1
Disable Firewall
bash-3.2# svcadm disable ipfilter
Add project for oracle and grid User
bash-3.2# projadd -U oracle oracle
bash-3.2# projadd -U grid grid
append following line in /etc/user_attr file
oracle::::project=oracle
grid::::project=grid
Add/Update project and processes setting for oracle and grid User using these commands
bash-3.2# projmod -s -K "project.max-sem-ids=(priv,100,deny)" oracle
bash-3.2# projmod -s -K "process.max-sem-nsems=(priv,256,deny)" oracle
bash-3.2# projmod -s -K "project.max-shm-memory=(priv,4g,deny)" oracle
bash-3.2# projmod -s -K "project.max-shm-ids=(priv,100,deny)" oracle
bash-3.2# projmod -s -K "process.max-file-descriptor=(basic,1024,deny)" oracle
bash-3.2# projmod -s -K "project.max-sem-ids=(priv,100,deny)" grid
bash-3.2# projmod -s -K "process.max-sem-nsems=(priv,256,deny)" grid
bash-3.2# projmod -s -K "project.max-shm-memory=(priv,4g,deny)" grid
bash-3.2# projmod -s -K "project.max-shm-ids=(priv,100,deny)" grid
bash-3.2# projmod -s -K "process.max-file-descriptor=(basic,1024,deny)" grid
-- to see what added in project
bash-3.2# gedit /etc/project
Note: above changes will take place after reboot
Configuring Kernel Parameters
We need to set the following kernel parameters to values greater than or equal to the recommended valuesshown below. Update these values in /etc/system by running these commands in terminal.
bash-3.2# echo "set max_nprocs = 30000" >> /etc/system
bash-3.2# echo "set maxuprc = 16384" >> /etc/system
bash-3.2# echo "set noexec_user_stack=1" >> /etc/system
bash-3.2# echo "set semsys:seminfo_semmni=100" >> /etc/system
bash-3.2# echo "set semsys:seminfo_semmns=1024" >> /etc/system
bash-3.2# echo "set semsys:seminfo_semmsl=256" >> /etc/system
bash-3.2# echo "set semsys:seminfo_semvmx=32767" >> /etc/system
bash-3.2# echo "set shmsys:shminfo_shmmax=4294967296" >> /etc/system
bash-3.2# echo "set shmsys:shminfo_shmmni =100" >> /etc/system
NOTE: You may skip to change the parameter if the default setting in your system is higher than Oracle requirement.
TCP and UDP parameters setting
Run these commands to change tcp and udp parameters
bash-3.2# /usr/sbin/ndd -set /dev/tcp tcp_smallest_anon_port 9000
bash-3.2# /usr/sbin/ndd -set /dev/tcp tcp_largest_anon_port 65500
bash-3.2# /usr/sbin/ndd -set /dev/udp udp_smallest_anon_port 9000
bash-3.2# /usr/sbin/ndd -set /dev/udp udp_largest_anon_port 65500
Add these lines in /etc/inittab the following lines for the TCP and UDP parameters to persist across reboot.
tm::sysinit:/usr/sbin/ndd -set /dev/tcp tcp_smallest_anon_port 9000 > /dev/console
tm::sysinit:/usr/sbin/ndd -set /dev/tcp tcp_largest_anon_port 65500 > /dev/console
tm::sysinit:/usr/sbin/ndd -set /dev/udp udp_smallest_anon_port 9000 > /dev/console
tm::sysinit:/usr/sbin/ndd -set /dev/udp udp_largest_anon_port 65500 > /dev/console
Automatic SSH configuration
Oracle recommends using OUI to setup ssh user equivalence where users can connect across the node of the cluster without a password.
To avoid errors while attaching $OH when the remote node closes a connection prematurely make following changes
in /etc/ssh/sshd_config file
LoginGraceTime 0
After changing the file restart ssh service.
bash-3.2# svcadm restart ssh
Enable Core Dumps
Make sure that Core Dumps are enabled. To check if core dumps are enabled use coreadm command as follows.
bash-3.2# coreadm
global core file pattern:
global core file content: default
init core file pattern: core
init core file content: default
global core dumps: disabled
per-process core dumps: enabled
global setid core dumps: disabled
per-process setid core dumps: disabled
global core dump logging: disabled
As root user make the following directory. And enable core dumps as show below.
bash-3.2# mkdir -p /var/cores
bash-3.2# coreadm -g /var/cores/%f.%n.%p.%t.core -e global -e global-setid -e log -d process -d proc-setid
Network Time protocol Settings
There are two options for time synchronization:
An operating system configured network time protocol (NTP)
or
Oracle Cluster Time Synchronization Service.
Oracle Cluster Time Synchronization Service is designed for organizations whose cluster servers are unable to access NTP services. If you use NTP, then the Oracle Cluster Time Synchronization daemon (ctssd) starts up in observer mode. If you do not have NTP daemons, then ctssd starts up in active mode and synchronizes time among cluster members without contacting an external time server.
So there are two options
Disable NTP and rely entirely on CTSS:
I am not using NTP so i disabled it
As root execute the command below:
bash-3.2# svcadm disable ntp
If you don't disable it , you can get error during installation due to the search for the NTP server.
-- Optional Step
If you want to use ntp and can access a ntp server then follow these steps
Add these parameter in file /etc/inet/ntp.conf
“slewalways yes”
“disable pll”
Restart xntpd using the command
bash-3.2# svcadm restart ntp
bash-3.2# reboot
Check project settings for user oracle
bash-3.2# prctl -n project.max-shm-memory -i project oracle
project: 100: oracle
NAME PRIVILEGE VALUE FLAG ACTION RECIPIENT
project.max-shm-memory
privileged 4.00GB - deny -
system 16.0EB max deny -
bash-3.2#
NOTE: Open terminal and login with oracle user (At lease one session for oracle user should be opened ) otherwise you will get this error
prctl: oracle: No controllable process found in task, project, or zone.
Configure Network Interfaces
# ifconfig -a
lo0: flags=2001000849
inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000803
inet 192.168.1.1 netmask ffffff00 broadcast 192.168.1.255
ether 8:0:27:55:b8:13
# bash
-- Plumb all interfaces
bash-3.2# ifconfig -a plumb
ifconfig: SIOCSLIFNAME for ip: e1000g0: already exists
bash-3.2# ifconfig -a
lo0: flags=2001000849
inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000803
inet 192.168.1.1 netmask ffffff00 broadcast 192.168.1.255
ether 8:0:27:55:b8:13
e1000g1: flags=1000802
inet 0.0.0.0 netmask 0
ether 8:0:27:6a:65:b1
bash-3.2#
-- Configure new interface (private)
bash-3.2# ifconfig e1000g1 10.10.10.1 netmask 255.255.255.0 up
Query again and you will see newly added network interface
bash-3.2# ifconfig -a
lo0: flags=2001000849
inet 127.0.0.1 netmask ff000000
e1000g0: flags=1000803
inet 192.168.1.1 netmask ffffff00 broadcast 192.168.1.255
ether 8:0:27:55:b8:13
e1000g1: flags=1000803
inet 10.10.10.1 netmask ffffff00 broadcast 10.10.10.255
ether 8:0:27:6a:65:b1
bash-3.2#
-- Make changes permanent
bash-3.2# ls -ltr /etc/hostname*
-rw-r--r-- 1 root root 8 Feb 6 15:14 /etc/hostname.e1000g0
-- Create file for new interface e1000g1
bash-3.2# gedit /etc/hostname.e1000g1
Add hostname in newly created file hostname.e1000g1 for new private interface
racsol1-priv
bash-3.2# ls -ltr /etc/hostname*
-rw-r--r-- 1 root root 8 Feb 6 15:14 /etc/hostname.e1000g0
-rw-r--r-- 1 root root 13 Feb 16 14:49 /etc/hostname.e1000g1~
-rw-r--r-- 1 root root 13 Feb 16 14:49 /etc/hostname.e1000g1
bash-3.2#
-- Reboot machine
bash-3.2# reboot
Configuring Shared Storage (OS Level)
-- Format Hard Disks
bash-3.2# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0t0d0
/pci@0,0/pci8086,2829@d/disk@0,0
1. c1t1d0
/pci@0,0/pci1000,8000@14/sd@1,0
2. c1t2d0
/pci@0,0/pci1000,8000@14/sd@2,0
3. c1t3d0
/pci@0,0/pci1000,8000@14/sd@3,0
4. c1t4d0
/pci@0,0/pci1000,8000@14/sd@4,0
5. c1t5d0
/pci@0,0/pci1000,8000@14/sd@5,0
6. c1t6d0
/pci@0,0/pci1000,8000@14/sd@6,0
Specify disk (enter its number): 1
selecting c1t1d0
[disk formatted]
FORMAT MENU:
disk - select a disk
type - select (define) a disk type
partition - select (define) a partition table
current - describe the current disk
format - format and analyze the disk
fdisk - run the fdisk program
repair - repair a defective sector
label - write label to the disk
analyze - surface analysis
defect - defect list management
backup - search for backup labels
verify - read and display labels
save - save new disk/partition definitions
inquiry - show vendor, product and revision
volname - set 8-character volume name
!
quit
format> p
WARNING - This disk may be in use by an application that has
modified the fdisk table. Ensure that this disk is
not currently in use before proceeding to use fdisk.
format> fdisk
No fdisk table exists. The default partition for the disk is:
a 100% "SOLARIS System" partition
Type "y" to accept the default partition, otherwise type "n" to edit the
partition table.
y
format> p
PARTITION MENU:
0 - change `0' partition
1 - change `1' partition
2 - change `2' partition
3 - change `3' partition
4 - change `4' partition
5 - change `5' partition
6 - change `6' partition
7 - change `7' partition
select - select a predefined table
modify - modify a predefined partition table
name - name the current table
print - display the current table
label - write partition map and label to the disk
!
quit
partition> p
Current partition table (original):
Total disk cylinders available: 1020 + 2 (reserved cylinders)
Part Tag Flag Cylinders Size Blocks
0 unassigned wm 0 0 (0/0/0) 0
1 unassigned wm 0 0 (0/0/0) 0
2 backup wu 0 - 1019 1020.00MB (1020/0/0) 2088960
3 unassigned wm 0 0 (0/0/0) 0
4 unassigned wm 0 0 (0/0/0) 0
5 unassigned wm 0 0 (0/0/0) 0
6 unassigned wm 0 0 (0/0/0) 0
7 unassigned wm 0 0 (0/0/0) 0
8 boot wu 0 - 0 1.00MB (1/0/0) 2048
9 unassigned wm 0 0 (0/0/0) 0
partition> 0
Part Tag Flag Cylinders Size Blocks
0 unassigned wm 0 0 (0/0/0) 0
Enter partition id tag[unassigned]:
Enter partition permission flags[wm]:
Enter new starting cyl[0]: 1
Enter partition size[0b, 0c, 1e, 0.00mb, 0.00gb]: 1015c
partition> label
Ready to label disk, continue? yes
partition> quit
FORMAT MENU:
disk - select a disk
type - select (define) a disk type
partition - select (define) a partition table
current - describe the current disk
format - format and analyze the disk
fdisk - run the fdisk program
repair - repair a defective sector
label - write label to the disk
analyze - surface analysis
defect - defect list management
backup - search for backup labels
verify - read and display labels
save - save new disk/partition definitions
inquiry - show vendor, product and revision
volname - set 8-character volume name
!
quit
format>
Format all other (6) disks using same method
-- owner ship
bash-3.2$ su -
Password:
Oracle Corporation SunOS 5.10 Generic Patch January 2005
# format
Searching for disks...done
AVAILABLE DISK SELECTIONS:
0. c0t0d0
/pci@0,0/pci8086,2829@d/disk@0,0
1. c1t0d0
/pci@0,0/pci1000,8000@14/sd@0,0
2. c1t1d0
/pci@0,0/pci1000,8000@14/sd@1,0
3. c1t2d0
/pci@0,0/pci1000,8000@14/sd@2,0
4. c1t3d0
/pci@0,0/pci1000,8000@14/sd@3,0
5. c1t4d0
/pci@0,0/pci1000,8000@14/sd@4,0
6. c1t5d0
/pci@0,0/pci1000,8000@14/sd@5,0
7. c1t6d0
/pci@0,0/pci1000,8000@14/sd@6,0
Specify disk (enter its number): ^C
#
bash-3.2# pwd
/dev/rdsk
bash-3.2#
bash-3.2# ls c1t0d0*
c1t0d0p0 c1t0d0p3 c1t0d0s1 c1t0d0s12 c1t0d0s15 c1t0d0s4 c1t0d0s7
c1t0d0p1 c1t0d0p4 c1t0d0s10 c1t0d0s13 c1t0d0s2 c1t0d0s5 c1t0d0s8
c1t0d0p2 c1t0d0s0 c1t0d0s11 c1t0d0s14 c1t0d0s3 c1t0d0s6 c1t0d0s9
bash-3.2#
Our slice is "c1t0d0s0" so select it while chaining ownership
bash-3.2# chown grid:oinstall /dev/rdsk/c1t0d0s0
bash-3.2# chown grid:oinstall /dev/rdsk/c1t1d0s0
bash-3.2# chown grid:oinstall /dev/rdsk/c1t2d0s0
bash-3.2# chown grid:oinstall /dev/rdsk/c1t3d0s0
bash-3.2# chown grid:oinstall /dev/rdsk/c1t4d0s0
bash-3.2# chown grid:oinstall /dev/rdsk/c1t5d0s0
bash-3.2# chown grid:oinstall /dev/rdsk/c1t6d0s0
bash-3.2# chmod 660 /dev/rdsk/c1t0d0s0
bash-3.2# chmod 660 /dev/rdsk/c1t1d0s0
bash-3.2# chmod 660 /dev/rdsk/c1t2d0s0
bash-3.2# chmod 660 /dev/rdsk/c1t3d0s0
bash-3.2# chmod 660 /dev/rdsk/c1t4d0s0
bash-3.2# chmod 660 /dev/rdsk/c1t5d0s0
bash-3.2# chmod 660 /dev/rdsk/c1t6d0s0
Clone to RACSOL2
Shutdown RACSOL1 Virtual Machine and in VMBox main window
Machines > Clone
Add name for new machine (RACSOL2 in my case)
On Prompt click on Full clone
When cloning is finished remove ASM Disks from VMBox Sorage and re attach ASM disks in D:\SharedASM(asmdisk1.vdi asmdisk2.vdi asmdisk3.vdi, asmdisk4.vdi,asmdisk5.vdi,asmdiskDATA.vdi,asmdiskFLASH.vdi )
Change Network information for RACSOL2
Turn on RACSOL2 and change network IPs and Hostname
update following files to change nodenames
# gedit /etc/nodename
change racsol1 to racsol2
# gedit /etc/hostname.e1000g0
change racsol1 to racsol2
# gedit /etc/hostname.e1000g1
change racsol1-priv to racsol2-priv
UnPlumb and Plumb again both interfaces
# ifconfig -a unplumb
# ifconfig -a plumb
Add ips and netmask information for both network interfaces e1000g0 and e1000g1
bash-3.2# ifconfig e1000g0 192.168.1.2 netmask 255.255.255.0 up
bash-3.2# ifconfig e1000g1 10.10.10.2 netmask 255.255.255.0 up
Check that new IPs are assigned to both interfaces
bash-3.2# ifconfig -a
e1000g0: flags=1000843
inet 192.168.1.2 netmask ffffff00 broadcast 192.168.1.255
ether 8:0:27:6d:ea:54
e1000g1: flags=1000843
inet 10.10.10.2 netmask ffffff00 broadcast 10.10.10.255
ether 8:0:27:fb:d:71
Ping Tests
Now run the ping test to see both VMs are accessible by each other.
After ping test attach the ISO image to the CD of VM (RACSOL1) and start installing GI
No comments:
Post a Comment