From ad07606de04f39dabf3bcf38dfe5b0a3aff6f55c Mon Sep 17 00:00:00 2001 From: Marius Date: Tue, 30 Sep 2025 01:27:33 +0300 Subject: [PATCH] oracle install LXC docker --- .../oracle/deploy-oracle-xe-in-docker-lxc.sh | 261 ++++++++++++ .../oracle/oracle-xe-complete-setup.sh | 316 ++++++++++++++ .../oracle/oracle-xe-lxc-install-guide.md | 401 ++++++++++++++++++ 3 files changed, 978 insertions(+) create mode 100644 system_instructions/oracle/deploy-oracle-xe-in-docker-lxc.sh create mode 100644 system_instructions/oracle/oracle-xe-complete-setup.sh create mode 100644 system_instructions/oracle/oracle-xe-lxc-install-guide.md diff --git a/system_instructions/oracle/deploy-oracle-xe-in-docker-lxc.sh b/system_instructions/oracle/deploy-oracle-xe-in-docker-lxc.sh new file mode 100644 index 0000000..2efd0a7 --- /dev/null +++ b/system_instructions/oracle/deploy-oracle-xe-in-docker-lxc.sh @@ -0,0 +1,261 @@ +#!/bin/bash +# +# Script pentru instalare Oracle XE 21c în Docker LXC (Proxmox) +# Rulează DUPĂ crearea containerului Docker LXC cu scriptul comunității +# +# Utilizare: +# 1. Creează mai întâi Docker LXC cu: bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/docker.sh)" +# - Alege: Privileged (Yes) +# - RAM: minim 4096 MB (recomandat 6144 MB) +# - Disk: minim 20 GB +# - Cores: minim 2 +# 2. Copiază acest script în container și rulează-l +# + +set -e + +# Configurări +ORACLE_PASSWORD="${ORACLE_PASSWORD:-OraclePass123}" +ORACLE_PORT="${ORACLE_PORT:-1521}" +ORACLE_EM_PORT="${ORACLE_EM_PORT:-5500}" +CONTAINER_NAME="oracle-xe" +APP_USER="appuser" +APP_PASSWORD="${APP_PASSWORD:-AppPass123}" + +echo "==========================================" +echo "Oracle XE 21c Docker Deployment Script" +echo "==========================================" +echo "" +echo "Configurări:" +echo " - Container Name: $CONTAINER_NAME" +echo " - Oracle SYS Password: $ORACLE_PASSWORD" +echo " - Oracle Port: $ORACLE_PORT" +echo " - Enterprise Manager Port: $ORACLE_EM_PORT" +echo " - App User: $APP_USER" +echo " - App Password: $APP_PASSWORD" +echo "" + +# Verificare Docker +if ! command -v docker &> /dev/null; then + echo "❌ Docker nu este instalat! Asigură-te că ai creat containerul cu scriptul Docker LXC." + exit 1 +fi + +echo "✅ Docker este instalat: $(docker --version)" + +# Verificare dacă containerul Oracle XE există deja +if docker ps -a --format '{{.Names}}' | grep -q "^${CONTAINER_NAME}$"; then + echo "⚠️ Containerul $CONTAINER_NAME există deja." + read -p "Dorești să-l ștergi și să creezi unul nou? (y/n): " -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + echo "Ștergere container existent..." + docker stop $CONTAINER_NAME 2>/dev/null || true + docker rm $CONTAINER_NAME 2>/dev/null || true + echo "✅ Container șters" + else + echo "Script anulat." + exit 0 + fi +fi + +# Creare directoare pentru persistență +echo "" +echo "📁 Creare directoare pentru persistență..." +mkdir -p /opt/oracle/oradata +mkdir -p /opt/oracle/scripts/setup +mkdir -p /opt/oracle/scripts/startup +chmod -R 777 /opt/oracle +echo "✅ Directoare create" + +# Download imagine Oracle XE +echo "" +echo "📥 Download imagine Oracle XE 21c (poate dura câteva minute)..." +if docker pull container-registry.oracle.com/database/express:21.3.0-xe; then + echo "✅ Imagine descărcată cu succes" +else + echo "❌ Eroare la descărcare imagine. Verifică conexiunea la internet." + exit 1 +fi + +# Creare script de inițializare pentru user-ul aplicației +echo "" +echo "📝 Creare script de inițializare..." +cat > /opt/oracle/scripts/startup/01_create_app_user.sql <&1 | grep -q "DATABASE IS READY TO USE!" && return 0 || return 1 +} + +# Monitorizare logs cu timeout +TIMEOUT=600 # 10 minute +ELAPSED=0 +INTERVAL=10 + +while [ $ELAPSED -lt $TIMEOUT ]; do + if check_db_ready; then + echo "" + echo "✅ Baza de date este gata!" + break + fi + echo -ne "\r⏳ Așteptare... ${ELAPSED}s / ${TIMEOUT}s" + sleep $INTERVAL + ELAPSED=$((ELAPSED + INTERVAL)) +done + +if [ $ELAPSED -ge $TIMEOUT ]; then + echo "" + echo "❌ Timeout la inițializare. Verifică logs cu: docker logs $CONTAINER_NAME" + exit 1 +fi + +# Test conexiune +echo "" +echo "🔍 Verificare conexiune la baza de date..." +sleep 5 # Extra timp pentru stabilizare + +# Test conexiune SYS +if docker exec $CONTAINER_NAME sqlplus -s sys/$ORACLE_PASSWORD@localhost:1521/XE as sysdba <<< "SELECT 'Connected' FROM dual;" | grep -q "Connected"; then + echo "✅ Conexiune SYS funcțională" +else + echo "❌ Nu se poate conecta ca SYS" + exit 1 +fi + +# Test conexiune APP USER +if docker exec $CONTAINER_NAME sqlplus -s $APP_USER/$APP_PASSWORD@localhost:1521/XE <<< "SELECT 'Connected' FROM dual;" 2>/dev/null | grep -q "Connected"; then + echo "✅ User $APP_USER funcțional" +else + echo "⚠️ User $APP_USER nu există încă (normal la prima rulare)" +fi + +# Obținere IP container +echo "" +echo "📊 Informații de conexiune:" +echo "==========================================" +IP_ADDRESS=$(hostname -I | awk '{print $1}') +echo "IP Container LXC: $IP_ADDRESS" +echo "Port Oracle: $ORACLE_PORT" +echo "Port Enterprise Manager: $ORACLE_EM_PORT" +echo "" +echo "String-uri de conexiune:" +echo " SQL*Plus (SYS): sqlplus sys/$ORACLE_PASSWORD@$IP_ADDRESS:$ORACLE_PORT/XE as sysdba" +echo " SQL*Plus (App): sqlplus $APP_USER/$APP_PASSWORD@$IP_ADDRESS:$ORACLE_PORT/XE" +echo " JDBC URL: jdbc:oracle:thin:@$IP_ADDRESS:$ORACLE_PORT:XE" +echo " Enterprise Manager: http://$IP_ADDRESS:$ORACLE_EM_PORT/em" +echo " User/Pass EM: sys/$ORACLE_PASSWORD (connect as SYSDBA)" +echo "" +echo "Conexiune din WSL/Windows:" +echo " Folosește IP-ul: $IP_ADDRESS în loc de localhost" +echo "==========================================" + +# Creare script helper pentru management +echo "" +echo "📝 Creare scripturi helper..." + +# Script status +cat > /usr/local/bin/oracle-status <<'EOF' +#!/bin/bash +echo "=== Oracle XE Status ===" +docker ps --filter "name=oracle-xe" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" +echo "" +echo "=== Database Status ===" +docker exec oracle-xe lsnrctl status 2>/dev/null | grep -E "Instance|Service|Listening" || echo "Listener not ready" +EOF +chmod +x /usr/local/bin/oracle-status + +# Script SQL*Plus +cat > /usr/local/bin/oracle-sqlplus < /usr/local/bin/oracle-logs <<'EOF' +#!/bin/bash +docker logs -f oracle-xe +EOF +chmod +x /usr/local/bin/oracle-logs + +# Script restart +cat > /usr/local/bin/oracle-restart <<'EOF' +#!/bin/bash +echo "Restarting Oracle XE..." +docker restart oracle-xe +echo "Done. Check status with: oracle-status" +EOF +chmod +x /usr/local/bin/oracle-restart + +echo "✅ Scripturi helper create:" +echo " - oracle-status : Verifică status-ul Oracle XE" +echo " - oracle-sqlplus : Conectare rapidă SQL*Plus ca SYS" +echo " - oracle-logs : Vizualizare logs în timp real" +echo " - oracle-restart : Restart container Oracle XE" + +echo "" +echo "==========================================" +echo "✅ INSTALARE COMPLETĂ!" +echo "==========================================" +echo "" +echo "Pentru a verifica status-ul: oracle-status" +echo "Pentru SQL*Plus rapid: oracle-sqlplus" +echo "" +echo "IMPORTANT: Salvează parolele în siguranță!" +echo " - SYS Password: $ORACLE_PASSWORD" +echo " - App Password: $APP_PASSWORD" +echo "" \ No newline at end of file diff --git a/system_instructions/oracle/oracle-xe-complete-setup.sh b/system_instructions/oracle/oracle-xe-complete-setup.sh new file mode 100644 index 0000000..ead24d3 --- /dev/null +++ b/system_instructions/oracle/oracle-xe-complete-setup.sh @@ -0,0 +1,316 @@ +#!/bin/bash +# +# Oracle XE 21c Complete Setup Script for Docker LXC on Proxmox +# This script creates a Docker LXC container and installs Oracle XE with custom PDBs (ROA and ROA2) +# +# Prerequisites: +# - Proxmox VE server with IP 10.0.20.201 +# - SSH access to Proxmox as root +# - At least 20GB storage and 4GB RAM available +# +# Usage: +# ./oracle-xe-complete-setup.sh +# + +set -e + +# Configuration +PROXMOX_IP="10.0.20.201" +CONTAINER_ID="108" +CONTAINER_NAME="central-oracle" +CONTAINER_IP="" # Will be obtained after creation +ORACLE_PASSWORD="OraclePass123" +PDB_ADMIN_PASSWORD="AdminPass123" +ROA_USER_PASSWORD="RoaPass123" +ROA2_USER_PASSWORD="Roa2Pass123" + +echo "==========================================" +echo "Oracle XE 21c Complete Setup Script" +echo "==========================================" +echo "" + +# Step 1: Create Docker LXC Container using community script +echo "📦 Step 1: Creating Docker LXC Container..." +echo "This will open an interactive menu. Please select:" +echo " - Operating System: debian" +echo " - Version: 12" +echo " - Container Type: Unprivileged" +echo " - Container ID: $CONTAINER_ID" +echo " - Hostname: $CONTAINER_NAME" +echo " - Disk Size: 50 GB" +echo " - CPU Cores: 2" +echo " - RAM: 4096 MB" +echo " - Install Docker Compose: Yes" +echo " - Install Portainer: Yes (optional)" +echo "" +read -p "Press Enter to continue with container creation..." + +ssh root@$PROXMOX_IP << 'EOF' +bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/docker.sh)" +EOF + +echo "✅ Docker LXC container created" +echo "" + +# Wait for container to be ready +echo "⏳ Waiting for container to be ready..." +sleep 10 + +# Get container IP +CONTAINER_IP=$(ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- hostname -I | awk '{print \$1}'") +echo "✅ Container IP: $CONTAINER_IP" +echo "" + +# Step 2: Create Oracle XE deployment script +echo "📝 Step 2: Creating Oracle XE deployment script..." + +cat > /tmp/deploy-oracle-xe.sh << 'DEPLOY_SCRIPT' +#!/bin/bash +set -e + +# Oracle Configuration +ORACLE_PASSWORD="OraclePass123" +ORACLE_PORT="1521" +ORACLE_EM_PORT="5500" +CONTAINER_NAME="oracle-xe" + +echo "🚀 Starting Oracle XE 21c Deployment..." + +# Create directories for persistence +echo "📁 Creating directories for persistence..." +mkdir -p /opt/oracle/oradata +mkdir -p /opt/oracle/scripts/setup +mkdir -p /opt/oracle/scripts/startup +chmod -R 777 /opt/oracle +echo "✅ Directories created" + +# Download Oracle XE image +echo "📥 Downloading Oracle XE 21c image (this may take several minutes)..." +docker pull container-registry.oracle.com/database/express:21.3.0-xe +echo "✅ Image downloaded" + +# Run Oracle XE container +echo "🚀 Starting Oracle XE container..." +docker run -d \ + --name $CONTAINER_NAME \ + -p $ORACLE_PORT:1521 \ + -p $ORACLE_EM_PORT:5500 \ + -e ORACLE_PWD=$ORACLE_PASSWORD \ + -e ORACLE_CHARACTERSET=AL32UTF8 \ + -v /opt/oracle/oradata:/opt/oracle/oradata \ + -v /opt/oracle/scripts/setup:/opt/oracle/scripts/setup \ + -v /opt/oracle/scripts/startup:/opt/oracle/scripts/startup \ + --restart unless-stopped \ + --shm-size=1g \ + container-registry.oracle.com/database/express:21.3.0-xe + +echo "✅ Container started" + +# Wait for database to be ready +echo "⏳ Waiting for database initialization (5-10 minutes)..." +until docker logs $CONTAINER_NAME 2>&1 | grep -q "DATABASE IS READY TO USE!"; do + sleep 10 + echo -n "." +done +echo "" +echo "✅ Database is ready!" + +# Extra wait for stabilization +sleep 10 + +echo "✅ Oracle XE deployment completed!" +DEPLOY_SCRIPT + +# Copy and execute deployment script +echo "🚀 Deploying Oracle XE..." +scp /tmp/deploy-oracle-xe.sh root@$PROXMOX_IP:/tmp/ +ssh root@$PROXMOX_IP "sed -i 's/\r$//' /tmp/deploy-oracle-xe.sh" +ssh root@$PROXMOX_IP "pct push $CONTAINER_ID /tmp/deploy-oracle-xe.sh /root/deploy-oracle-xe.sh" +ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- chmod +x /root/deploy-oracle-xe.sh" +ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- bash /root/deploy-oracle-xe.sh" + +echo "✅ Oracle XE deployed successfully" +echo "" + +# Step 3: Configure PDBs (Remove XEPDB1, Create ROA and ROA2) +echo "🔧 Step 3: Configuring Pluggable Databases..." + +cat > /tmp/configure_pdbs.sql << EOF +-- Close and drop default XEPDB1 +ALTER PLUGGABLE DATABASE XEPDB1 CLOSE IMMEDIATE; +DROP PLUGGABLE DATABASE XEPDB1 INCLUDING DATAFILES; + +-- Create ROA PDB +CREATE PLUGGABLE DATABASE ROA + ADMIN USER pdbadmin IDENTIFIED BY $PDB_ADMIN_PASSWORD + STORAGE (MAXSIZE 5G) + DEFAULT TABLESPACE USERS + DATAFILE '/opt/oracle/oradata/XE/ROA/users01.dbf' SIZE 250M AUTOEXTEND ON + FILE_NAME_CONVERT = ('/opt/oracle/oradata/XE/pdbseed/', '/opt/oracle/oradata/XE/ROA/'); + +-- Create ROA2 PDB +CREATE PLUGGABLE DATABASE ROA2 + ADMIN USER pdbadmin IDENTIFIED BY $PDB_ADMIN_PASSWORD + STORAGE (MAXSIZE 5G) + DEFAULT TABLESPACE USERS + DATAFILE '/opt/oracle/oradata/XE/ROA2/users01.dbf' SIZE 250M AUTOEXTEND ON + FILE_NAME_CONVERT = ('/opt/oracle/oradata/XE/pdbseed/', '/opt/oracle/oradata/XE/ROA2/'); + +-- Open the new PDBs +ALTER PLUGGABLE DATABASE ROA OPEN; +ALTER PLUGGABLE DATABASE ROA2 OPEN; + +-- Save state for auto-open on restart +ALTER PLUGGABLE DATABASE ROA SAVE STATE; +ALTER PLUGGABLE DATABASE ROA2 SAVE STATE; + +-- Show results +SELECT con_id, name, open_mode FROM v\$pdbs ORDER BY con_id; +exit; +EOF + +# Execute PDB configuration +scp /tmp/configure_pdbs.sql root@$PROXMOX_IP:/tmp/ +ssh root@$PROXMOX_IP "pct push $CONTAINER_ID /tmp/configure_pdbs.sql /tmp/configure_pdbs.sql" +ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- docker exec -i oracle-xe sqlplus -s sys/$ORACLE_PASSWORD@localhost:1521/XE as sysdba < /tmp/configure_pdbs.sql" + +echo "✅ PDBs configured (XEPDB1 removed, ROA and ROA2 created)" +echo "" + +# Step 4: Create users in PDBs +echo "👤 Step 4: Creating users in PDBs..." + +cat > /tmp/create_users.sql << EOF +-- Create user in ROA PDB +ALTER SESSION SET CONTAINER = ROA; +CREATE USER app_roa IDENTIFIED BY $ROA_USER_PASSWORD; +GRANT CONNECT, RESOURCE TO app_roa; +GRANT CREATE SESSION TO app_roa; +GRANT CREATE TABLE TO app_roa; +GRANT CREATE VIEW TO app_roa; +GRANT CREATE PROCEDURE TO app_roa; +GRANT CREATE SEQUENCE TO app_roa; +GRANT UNLIMITED TABLESPACE TO app_roa; + +-- Create user in ROA2 PDB +ALTER SESSION SET CONTAINER = ROA2; +CREATE USER app_roa2 IDENTIFIED BY $ROA2_USER_PASSWORD; +GRANT CONNECT, RESOURCE TO app_roa2; +GRANT CREATE SESSION TO app_roa2; +GRANT CREATE TABLE TO app_roa2; +GRANT CREATE VIEW TO app_roa2; +GRANT CREATE PROCEDURE TO app_roa2; +GRANT CREATE SEQUENCE TO app_roa2; +GRANT UNLIMITED TABLESPACE TO app_roa2; + +-- Verify users +ALTER SESSION SET CONTAINER = CDB\$ROOT; +SELECT name, network_name FROM v\$active_services WHERE con_id > 1 ORDER BY con_id; +exit; +EOF + +# Execute user creation +scp /tmp/create_users.sql root@$PROXMOX_IP:/tmp/ +ssh root@$PROXMOX_IP "pct push $CONTAINER_ID /tmp/create_users.sql /tmp/create_users.sql" +ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- docker exec -i oracle-xe sqlplus -s sys/$ORACLE_PASSWORD@localhost:1521/XE as sysdba < /tmp/create_users.sql" + +echo "✅ Users created in PDBs" +echo "" + +# Step 5: Create helper scripts +echo "📝 Step 5: Creating helper scripts..." + +ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- bash -c 'cat > /usr/local/bin/oracle-status << \"HELPER_EOF\" +#!/bin/bash +echo \"=== Oracle XE Status ===\" +docker ps --filter \"name=oracle-xe\" --format \"table {{.Names}}\t{{.Status}}\t{{.Ports}}\" +echo \"\" +echo \"=== Database Status ===\" +docker exec oracle-xe lsnrctl status 2>/dev/null | grep -E \"Instance|Service|Listening\" || echo \"Listener not ready\" +HELPER_EOF +chmod +x /usr/local/bin/oracle-status'" + +ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- bash -c 'cat > /usr/local/bin/oracle-sqlplus << \"HELPER_EOF\" +#!/bin/bash +docker exec -it oracle-xe sqlplus sys/$ORACLE_PASSWORD@localhost:1521/XE as sysdba +HELPER_EOF +chmod +x /usr/local/bin/oracle-sqlplus'" + +ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- bash -c 'cat > /usr/local/bin/oracle-logs << \"HELPER_EOF\" +#!/bin/bash +docker logs -f oracle-xe +HELPER_EOF +chmod +x /usr/local/bin/oracle-logs'" + +echo "✅ Helper scripts created" +echo "" + +# Step 6: Test connections +echo "🔍 Step 6: Testing connections..." + +echo "Testing ROA connection..." +ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- docker exec oracle-xe bash -c 'echo exit | sqlplus app_roa/$ROA_USER_PASSWORD@localhost:1521/ROA'" > /dev/null 2>&1 +if [ $? -eq 0 ]; then + echo "✅ ROA connection successful" +else + echo "❌ ROA connection failed" +fi + +echo "Testing ROA2 connection..." +ssh root@$PROXMOX_IP "pct exec $CONTAINER_ID -- docker exec oracle-xe bash -c 'echo exit | sqlplus app_roa2/$ROA2_USER_PASSWORD@localhost:1521/ROA2'" > /dev/null 2>&1 +if [ $? -eq 0 ]; then + echo "✅ ROA2 connection successful" +else + echo "❌ ROA2 connection failed" +fi + +echo "" + +# Final information +echo "==========================================" +echo "✅ ORACLE XE SETUP COMPLETE!" +echo "==========================================" +echo "" +echo "Container Information:" +echo " - Container ID: $CONTAINER_ID" +echo " - Container Name: $CONTAINER_NAME" +echo " - Container IP: $CONTAINER_IP" +echo " - Portainer UI: https://$CONTAINER_IP:9443" +echo "" +echo "Oracle XE Information:" +echo " - Oracle Port: 1521" +echo " - Enterprise Manager: https://$CONTAINER_IP:5500/em" +echo " - SYS Password: $ORACLE_PASSWORD" +echo "" +echo "Pluggable Databases (PDBs):" +echo " 1. ROA" +echo " - User: app_roa" +echo " - Password: $ROA_USER_PASSWORD" +echo " - Connection: sqlplus app_roa/$ROA_USER_PASSWORD@$CONTAINER_IP:1521/ROA" +echo " - JDBC: jdbc:oracle:thin:@$CONTAINER_IP:1521/ROA" +echo "" +echo " 2. ROA2" +echo " - User: app_roa2" +echo " - Password: $ROA2_USER_PASSWORD" +echo " - Connection: sqlplus app_roa2/$ROA2_USER_PASSWORD@$CONTAINER_IP:1521/ROA2" +echo " - JDBC: jdbc:oracle:thin:@$CONTAINER_IP:1521/ROA2" +echo "" +echo " PDB Admin (both): pdbadmin / $PDB_ADMIN_PASSWORD" +echo "" +echo "Helper Commands (run inside container):" +echo " - oracle-status : Check Oracle status" +echo " - oracle-sqlplus : Connect as SYS" +echo " - oracle-logs : View Oracle logs" +echo "" +echo "To enter the container:" +echo " ssh root@$PROXMOX_IP" +echo " pct enter $CONTAINER_ID" +echo "" +echo "==========================================" + +# Cleanup temporary files +rm -f /tmp/deploy-oracle-xe.sh +rm -f /tmp/configure_pdbs.sql +rm -f /tmp/create_users.sql + +echo "🎉 Setup completed successfully!" \ No newline at end of file diff --git a/system_instructions/oracle/oracle-xe-lxc-install-guide.md b/system_instructions/oracle/oracle-xe-lxc-install-guide.md new file mode 100644 index 0000000..fe737dc --- /dev/null +++ b/system_instructions/oracle/oracle-xe-lxc-install-guide.md @@ -0,0 +1,401 @@ +# Ghid Instalare Oracle XE 21 în LXC pe Proxmox + +## Rezumat Opțiuni + +Din cercetare rezultă că **nu există template-uri LXC cu Oracle XE pre-instalat**. Cele mai viabile opțiuni sunt: + +1. **Docker-in-LXC** (Recomandat) - Cea mai simplă și automatizată +2. **Instalare manuală în Oracle Linux LXC** - Mai directă dar complexă +3. **Script-uri de automatizare** - Soluții comunitate + +## Opțiunea 1: Docker-in-LXC (RECOMANDAT) ✅ + +### Avantaje +- Folosește imaginea oficială Oracle cu automatizare completă +- Configurare minimă manuală +- Suport oficial Oracle pentru containerizare +- Ușor de actualizat și întreținut + +### Dezavantaje +- Overhead suplimentar Docker +- Container în container (LXC → Docker) + +### Pași de Instalare + +#### 1. Creare Container LXC Privilegiat + +SSH pe Proxmox: +```bash +ssh root@10.0.20.201 + +# Download template Ubuntu 22.04 dacă nu există +pveam update +pveam download local ubuntu-22.04-standard_22.04-1_amd64.tar.gz + +# Creare container privilegiat +pct create 300 local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.gz \ + --hostname oracle-xe \ + --cores 2 \ + --memory 4096 \ + --swap 2048 \ + --rootfs local-zfs:20 \ + --net0 name=eth0,bridge=vmbr0,ip=dhcp \ + --unprivileged 0 \ + --features nesting=1,keyctl=1 \ + --ostype ubuntu +``` + +#### 2. Configurare Container pentru Docker + +```bash +# Start container +pct start 300 + +# Intrare în container +pct enter 300 + +# Update sistem +apt update && apt upgrade -y + +# Instalare Docker +apt install -y ca-certificates curl gnupg lsb-release +mkdir -p /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg +echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null +apt update +apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin + +# Verificare Docker +docker --version +systemctl enable docker +systemctl start docker +``` + +#### 3. Deploy Oracle XE 21 cu Docker + +```bash +# Crearea directoarelor pentru persistență +mkdir -p /opt/oracle/oradata +mkdir -p /opt/oracle/scripts/setup +mkdir -p /opt/oracle/scripts/startup + +# Pull imagine oficială Oracle XE +docker pull container-registry.oracle.com/database/express:21.3.0-xe + +# Rulare container Oracle XE +docker run -d \ + --name oracle-xe \ + -p 1521:1521 \ + -p 5500:5500 \ + -e ORACLE_PWD=OraclePass123 \ + -e ORACLE_CHARACTERSET=AL32UTF8 \ + -v /opt/oracle/oradata:/opt/oracle/oradata \ + -v /opt/oracle/scripts/setup:/opt/oracle/scripts/setup \ + -v /opt/oracle/scripts/startup:/opt/oracle/scripts/startup \ + container-registry.oracle.com/database/express:21.3.0-xe + +# Verificare status +docker ps +docker logs -f oracle-xe + +# Așteptare până DB este ready (durează ~5-10 minute prima dată) +# Căutați în logs: "DATABASE IS READY TO USE!" +``` + +#### 4. Configurare Acces și Testare + +```bash +# Obținere IP container LXC +ip addr show eth0 + +# Test conexiune din container +docker exec -it oracle-xe sqlplus sys/OraclePass123@localhost:1521/XE as sysdba + +# În SQL*Plus +SQL> SELECT banner FROM v$version; +SQL> exit + +# Creare user pentru aplicații +docker exec -it oracle-xe sqlplus sys/OraclePass123@localhost:1521/XE as sysdba < /etc/hostname +echo "127.0.0.1 oracle-xe-native" >> /etc/hosts + +# Disable IPv6 (Oracle XE compatibility) +echo "net.ipv6.conf.all.disable_ipv6 = 1" >> /etc/sysctl.conf +echo "net.ipv6.conf.default.disable_ipv6 = 1" >> /etc/sysctl.conf +sysctl -p + +# Install pachete necesare +yum install -y oracle-database-preinstall-21c +yum install -y wget unzip + +# Configurare kernel parameters pentru Oracle +cat >> /etc/sysctl.conf <> /etc/profile +echo 'export PATH=$ORACLE_HOME/bin:$PATH' >> /etc/profile +echo 'export ORACLE_SID=XE' >> /etc/profile +source /etc/profile + +# Enable auto-start +systemctl enable oracle-xe-21c +systemctl start oracle-xe-21c +``` + +## Opțiunea 3: Script-uri de Automatizare + +### Folosire Repository-uri GitHub + +```bash +# Exemplu cu gvenzl/oci-oracle-xe +git clone https://github.com/gvenzl/oci-oracle-xe +cd oci-oracle-xe + +# Build container image +./buildContainerImage.sh -v 21.3.0 -x + +# Sau folosire directă cu Docker +docker run -d \ + -p 1521:1521 \ + -e ORACLE_PASSWORD=OraclePass123 \ + gvenzl/oracle-xe:21-slim +``` + +## Cerințe Hardware și Configurare + +### Resurse Minime Container +- **CPU:** 2 cores +- **RAM:** 4GB (minim 2GB) +- **Disk:** 20GB (9GB minim pentru Oracle) +- **Swap:** 2GB + +### Porturi Necesare +- **1521:** Oracle Listener +- **5500:** Enterprise Manager Express +- **8080:** APEX (opțional) + +### Configurări LXC Specifice +```bash +# În /etc/pve/lxc/[CTID].conf pe Proxmox +lxc.apparmor.profile: unconfined +lxc.cgroup2.devices.allow: a +lxc.cap.drop: +lxc.mount.auto: proc:rw sys:rw +``` + +## Troubleshooting + +### Probleme Comune + +#### 1. Insufficient Memory +```bash +# Verificare memorie +free -h +# Ajustare din Proxmox +pct set [CTID] --memory 6144 +``` + +#### 2. Docker în LXC nu pornește +```bash +# Verificare privilegii container +# Container trebuie să fie privilegiat (unprivileged=0) +# Features: nesting=1, keyctl=1 +``` + +#### 3. Oracle XE nu pornește +```bash +# Check logs +docker logs oracle-xe +# Sau pentru instalare nativă +tail -f /opt/oracle/diag/rdbms/xe/XE/trace/alert_XE.log +``` + +#### 4. Conexiune refuzată +```bash +# Verificare listener +docker exec oracle-xe lsnrctl status +# Verificare firewall +iptables -L +``` + +## Script Complet Automatizare Docker-in-LXC + +```bash +#!/bin/bash +# oracle-xe-lxc-deploy.sh + +CTID=300 +HOSTNAME="oracle-xe" +MEMORY=4096 +DISK=20 +ORACLE_PWD="OraclePass123" + +echo "Creating Oracle XE LXC Container..." + +# Create container +pct create $CTID local:vztmpl/ubuntu-22.04-standard_22.04-1_amd64.tar.gz \ + --hostname $HOSTNAME \ + --cores 2 \ + --memory $MEMORY \ + --swap 2048 \ + --rootfs local-zfs:$DISK \ + --net0 name=eth0,bridge=vmbr0,ip=dhcp \ + --unprivileged 0 \ + --features nesting=1,keyctl=1 \ + --ostype ubuntu + +# Start and configure +pct start $CTID +sleep 5 + +# Install Docker and Oracle XE +pct exec $CTID -- bash -c " +apt update && apt upgrade -y +apt install -y ca-certificates curl gnupg lsb-release +mkdir -p /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg +echo 'deb [arch=\$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable' | tee /etc/apt/sources.list.d/docker.list > /dev/null +apt update +apt install -y docker-ce docker-ce-cli containerd.io +systemctl enable docker +systemctl start docker +mkdir -p /opt/oracle/oradata +docker run -d \ + --name oracle-xe \ + -p 1521:1521 \ + -p 5500:5500 \ + -e ORACLE_PWD=$ORACLE_PWD \ + -e ORACLE_CHARACTERSET=AL32UTF8 \ + -v /opt/oracle/oradata:/opt/oracle/oradata \ + --restart unless-stopped \ + container-registry.oracle.com/database/express:21.3.0-xe +" + +echo "Oracle XE deployment initiated. Check logs with:" +echo "pct exec $CTID -- docker logs -f oracle-xe" +echo "Database will be ready in ~5-10 minutes" +``` + +## Conexiune și Utilizare + +### String-uri de Conexiune +``` +# SQL*Plus +sqlplus sys/OraclePass123@localhost:1521/XE as sysdba + +# JDBC +jdbc:oracle:thin:@10.0.20.XXX:1521:XE + +# TNS +XE = + (DESCRIPTION = + (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.20.XXX)(PORT = 1521)) + (CONNECT_DATA = + (SERVER = DEDICATED) + (SERVICE_NAME = XE) + ) + ) +``` + +### Tool-uri Recomandate +- **SQL Developer** - Oracle oficial +- **DBeaver** - Universal database tool +- **Enterprise Manager Express** - http://10.0.20.XXX:5500/em + +## Note Finale + +1. **Varianta Docker-in-LXC este cea mai simplă** și recomandată pentru majoritatea cazurilor +2. **Backup-uri regulate** folosind Proxmox vzdump +3. **Monitorizare resurse** - Oracle XE poate consuma multă memorie +4. **Licențiere** - Oracle XE este gratuită dar cu limitări (12GB data, 2GB RAM, 2 CPU threads) +5. **Securitate** - Schimbați parolele default, configurați firewall \ No newline at end of file