Your retro-futuristic home AI assistant.
- π€ Voice-Driven AI: Natural language interaction via satellite Raspberry Pi units.
- π§ Conversational Intelligence: Integrated with LM Studio for cutting-edge AI responses.
- π Smart Hub Control: Manage lights, media, and IoT devices seamlessly.
- π§© Home Assistant Integrations: Works hand-in-hand with Home Assistant for extensive smart home control.
- π¬ Client Chatbot: Interact with Orac through a web or desktop chatbot interface.
- π Supports Multiple LLM Services: Connects to LM Studio, Ollama, OpenAI, and more.
- π Modular Design: Easily extend Orac with custom skills and automations.
- π§ Linux Server Deployment: The supported Orac server deployment path is Linux-based.
- π Administered via APEX Web Console: User and configuration management through Oracle APEX at http://localhost:8042/ords/orac/f?p=1042:LOGIN.
Clone the repository and install Orac in editable mode on the Linux machine that will host the Orac server:
git clone https://github.com/Avalon60/orac.git
cd orac
python3 -m venv .venv
source .venv/bin/activate
pip install -e .The database deployment scripts expect to run from a Linux host with bash, sudo, and Docker available.
The current local-database deployment path is implemented by bin/orac-db-deploy.sh. That script assumes:
- A Linux host for the Orac server runtime.
- Docker Engine is installed.
- The Docker daemon is running.
- Docker Buildx is available, because the script builds the database image with
docker buildx bake. sudoaccess is available, because the script creates and fixes ownership on the host persistence directory.- Python 3.9+ is installed for the Orac utilities.
- A local checkout of this repository exists on the target machine.
The deployment script currently supports only:
TOPOLOGY=db-local
If you are using a remote Oracle database topology, bin/orac-db-deploy.sh is not the correct setup path.
Orac uses an Oracle Database container for local configuration and metadata storage. The supported local setup path is:
- Configure
resources/config/orac.env. - Prepare a host directory for persistent Oracle data files.
- Create or confirm the
oracdatabase credential entry. - Run
bin/orac-db-deploy.shto build and start the database container.
bin/orac-db-deploy.sh sources resources/config/orac.env before doing any work. At minimum, review these settings:
export CONTAINER_NAME=orac-db
export ORADATA_DIR=/u01/orac-db/oradata
export ORAC_IMAGE_NAME=orac
export ORAC_IMAGE_TAG=latest
export PORT_SQLNET=1521
export PORT_HTTP=8042
export PORT_EM=5500
export TOPOLOGY=db-localImportant points:
TOPOLOGYmust remaindb-localfor this script.ORADATA_DIRis the host directory mounted into the container at/opt/oracle/oradata.PORT_HTTPdefaults to8042on the host, even though the container listens on8080.
By default, the database files persist under:
/u01/orac-db/oradataYou can change that location by editing ORADATA_DIR in resources/config/orac.env.
The deployment script will:
- Create the directory if it does not already exist.
- Run
sudo chown -R 54321:54321 "${ORADATA_DIR}"so the Oracle container user can write to it.
On a clean machine, prepare the parent location before running the deploy script if your environment requires it. For example:
sudo mkdir -p /u01/orac-db/oradata
sudo chown -R 54321:54321 /u01/orac-db/oradataChoose a location with enough free space for Oracle data files and one that you intend to keep across container rebuilds. If you delete the contents of ORADATA_DIR, the database state is lost.
Orac stores database connection credentials securely using the dbconn-mgr.sh utility. Credentials are encrypted and stored in ~/.Orac/dsn_credentials.ini.
Required credential: orac
Run the following command to create the database connection:
bin/dbconn-mgr.sh -c oracYou will be prompted for:
- Username:
ORAC - Password: Choose a password (this will be used for both
ORACandORAC_PLUGINdatabase users) - DSN: The database connection string (e.g.,
localhost:1521/FREEPDB1) - Wallet ZIP path: Optional, press Enter to skip if not using Oracle wallet
β οΈ The password you enter here is used by the container setup scripts to create theORACandORAC_PLUGINdatabase users automatically.
To list configured connections:
bin/dbconn-mgr.sh -lTo edit an existing connection:
bin/dbconn-mgr.sh -e oracIf the orac credential does not already exist, bin/orac-db-deploy.sh will attempt to initialize it for you by calling:
bin/dbconn-mgr.sh -c oracRun:
bin/orac-db-deploy.shWhat the script does:
- Verifies that
resources/config/orac.envexists. - Verifies Docker is installed and the daemon is running.
- Ensures the persistent
ORADATA_DIRexists and is owned by UID/GID54321:54321. - Ensures the
oraccredential exists. - Reads the Oracle password from the stored
oraccredential. - Builds the local Orac database image with Docker Buildx.
- Starts the database container with these mappings:
Host SQL*Net port ${PORT_SQLNET} -> Container 1521
Host HTTP port ${PORT_HTTP} -> Container 8080
Host EM port ${PORT_EM} -> Container 5500
Host ORADATA_DIR ${ORADATA_DIR} -> /opt/oracle/oradata
- Waits for the log marker
= ORAC deployment complete =.
Useful options:
bin/orac-db-deploy.sh --dry-run
bin/orac-db-deploy.sh --force
bin/orac-db-deploy.sh --force --no-cacheNotes:
- If a container with the configured name already exists, the script stops unless you pass
--force. --forceremoves the existing container and deletes Oracle marker directories underORADATA_DIRbefore rebuilding.- The first build and deployment can take a significant amount of time. The script waits up to 30 minutes for completion.
Important:
bin/orac-db-deploy.shdeploys the Oracle database container, ORDS/APEX, and the Orac database objects.- At the end of that script, the database side is running, but the full Orac stack is not yet up.
- The Orac AI engine is a separate host process and must be started afterward.
For operational purposes, the Orac stack consists of:
- the Oracle database container
- ORDS / APEX served from that container
- the Orac AI engine running on the Linux host
bin/orac-db-deploy.sh only handles the first two items plus schema/app deployment. It does not start the AI engine.
After bin/orac-db-deploy.sh completes successfully, start the full stack with:
bin/orac-ctl.sh startThen confirm both halves are running:
bin/orac-ctl.sh statusIf you only want to start the AI engine after the database is already running, you can use:
bin/orac.sh startOracβs user-management and configuration functions are handled through the Orac Admin APEX application, which provides a browser-based interface for maintaining users, skills, and system settings.
Once your Oracle Free / ORDS stack is running, open the Orac Admin app in a browser:
http://localhost:8042/ords/f?p=1042:LOGIN
This URL launches the Orac Administration Application login page.
| Setting | Value | Notes |
|---|---|---|
| Workspace | ORAC |
APEX workspace associated with the Orac schema. |
| Username | ORAC_ADMIN |
The initial administrative account. |
| Password | (set on first login) | Youβll be prompted to choose a password at initial sign-in. |
After first login, you can use the APEX interface to manage user accounts, roles, permissions, and configuration data.
π‘ This application provides everyday administration of Orac β including user setup, role management, and configuration β with no command-line access required.
π§° Developers who need to access the underlying APEX workspace can still do so via: http://localhost:8042/ords/r/apex/workspace-sign-in/oracle-apex-sign-in
π If accessing from another machine or container, replace
localhostin the URL with your hostβs IP address or hostname (e.g.,http://192.168.0.42:8042/ords/f?p=1042:LOGIN).
If you cannot access the Orac Admin application:
-
Verify ORDS is running: Check your container logs or terminal output β you should see a line like:
INFO ORDS has started and is listening on port 8042 -
Check the URL: Ensure the URL path ends with
f?p=1042:LOGIN(not the developer workspace path). -
Confirm port mapping (Docker): If running in a container, make sure port 8042 on the host maps to 8042 in the container:
docker ps
Look for
0.0.0.0:8042->8042/tcp. -
Clear browser cache or use incognito mode: Cached session tokens sometimes prevent APEX login pages from loading correctly.
-
Reset ORAC_ADMIN password (if forgotten): Connect via SQL*Plus or SQLcl:
ALTER USER ORAC_ADMIN IDENTIFIED BY new_password;
-
Check APEX version / installation: If the login page still fails to load, confirm that APEX is properly installed and configured in the PDB:
SELECT version FROM apex_release;
π§ Tip: If the APEX listener doesnβt respond, restart the ORDS service or your container β it usually resolves transient startup timing issues.
Use bin/orac-ctl.sh as the primary control script for the full Orac stack:
- Oracle database container
- ORDS / APEX HTTP endpoint
- Orac AI engine
Common commands:
bin/orac-ctl.sh start
bin/orac-ctl.sh stop
bin/orac-ctl.sh restart
bin/orac-ctl.sh status
bin/orac-ctl.sh logs
bin/orac-ctl.sh logs ai
bin/orac-ctl.sh logs dbWhat these do:
startStarts the Oracle/ORDS container if needed, waits for the database, then starts the Orac AI engine.stopStops the Orac AI engine, then stops the Oracle/ORDS container.restartRestarts the full stack.statusShows both container status and Orac AI engine status.logsTails database / ORDS container logs by default.logs aiShows Orac AI engine logs.logs dbShows database / ORDS container logs.
The lower-level bin/orac.sh script is still available if you only want to control the AI engine itself:
bin/orac.sh start
bin/orac.sh stop
bin/orac.sh status
bin/orac.sh logsIf bin/orac-db-deploy.sh does not complete successfully, inspect the database container logs:
docker logs orac-db
To monitor the deployment while it is still running:
docker logs --tail 200 -f orac-db
This project is licensed under the MIT License - see the LICENSE file for details.
The name Orac pays homage to the iconic AI from Blakeβs 7βa nod to retro science fiction with modern AI innovation.
"Logic is a wreath of pretty flowers which smell bad."
