--- title: "Installation" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Installation} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- This vignette covers CS9 installation options and infrastructure requirements. ## Installation options CS9 can be used in two configurations. ### CRAN installation (limited functionality) Install CS9 from CRAN for documentation, examples, and development tools: ```r install.packages("cs9") library(cs9) ``` **What works:** - Package documentation and help files - Function examples and vignettes - Environment diagnostics (`cs9::check_environment_setup()`) - Code templates and development utilities - Basic configuration management **What does not work:** - Database connectivity - Running surveillance tasks ### Full installation (database-driven surveillance) For complete surveillance functionality, you need a database backend and proper environment configuration. For production deployments, Docker is the recommended approach. ## Database setup CS9 requires a PostgreSQL database backend for full functionality. ### PostgreSQL installation #### Option 1: Docker (recommended) ```bash # Run PostgreSQL in Docker docker run --name cs9-postgres -e POSTGRES_PASSWORD=yourStrongPassword100 \ -e POSTGRES_DB=cs9_surveillance -p 5432:5432 -d postgres:13 # Connect to create additional databases/schemas as needed docker exec -it cs9-postgres psql -U postgres -d cs9_surveillance ``` #### Option 2: System installation ```bash # Ubuntu/Debian sudo apt-get install postgresql postgresql-contrib # macOS with Homebrew brew install postgresql # Start PostgreSQL service sudo systemctl start postgresql # Linux brew services start postgresql # macOS ``` ### Database schema setup Once PostgreSQL is running, create your surveillance database: ```sql -- Connect as postgres user CREATE DATABASE cs9_surveillance; CREATE USER cs9_user WITH PASSWORD 'yourStrongPassword100'; GRANT ALL PRIVILEGES ON DATABASE cs9_surveillance TO cs9_user; -- Create schemas for different access levels \c cs9_surveillance CREATE SCHEMA config; CREATE SCHEMA anon; GRANT ALL ON SCHEMA config TO cs9_user; GRANT ALL ON SCHEMA anon TO cs9_user; ``` ## Environment variable configuration CS9 reads its database connection settings from environment variables, which are typically set in your `.Renviron` file. ### Setting up .Renviron 1. **Find or create your .Renviron file:** ```r # Check current .Renviron location Sys.getenv("R_ENVIRON_USER") # Open .Renviron file for editing file.edit("~/.Renviron") ``` 2. **Add CS9 configuration variables:** ```bash # CS9 Core Configuration CS9_AUTO=0 CS9_PATH= # Database Connection Settings CS9_DBCONFIG_ACCESS=config/anon CS9_DBCONFIG_DRIVER=PostgreSQL Unicode CS9_DBCONFIG_PORT=5432 CS9_DBCONFIG_SERVER=localhost CS9_DBCONFIG_USER=cs9_user CS9_DBCONFIG_PASSWORD=yourStrongPassword100 CS9_DBCONFIG_SSLMODE=prefer # Database Schema Configuration CS9_DBCONFIG_SCHEMA_CONFIG=config CS9_DBCONFIG_DB_CONFIG=cs9_surveillance CS9_DBCONFIG_SCHEMA_ANON=anon CS9_DBCONFIG_DB_ANON=cs9_surveillance ``` 3. **Restart your R session** after editing `.Renviron`. ### Variable descriptions | Variable | Example Value | Description | |----------|---------------|-------------| | `CS9_AUTO` | `0` | Set to 0 for interactive mode, 1 for automated mode | | `CS9_PATH` | `` | Base path for cs9::path function (usually empty) | | `CS9_DBCONFIG_ACCESS` | `config/anon` | Database access levels (slash-separated) | | `CS9_DBCONFIG_DRIVER` | `PostgreSQL Unicode` | Database driver name | | `CS9_DBCONFIG_SERVER` | `localhost` | Database server hostname or IP | | `CS9_DBCONFIG_PORT` | `5432` | Database server port | | `CS9_DBCONFIG_USER` | `cs9_user` | Database username | | `CS9_DBCONFIG_PASSWORD` | `yourStrongPassword100` | Database password | | `CS9_DBCONFIG_SSLMODE` | `prefer` | SSL connection preference | | `CS9_DBCONFIG_SCHEMA_CONFIG` | `config` | Schema for CS9 configuration tables | | `CS9_DBCONFIG_DB_CONFIG` | `cs9_surveillance` | Database for configuration | | `CS9_DBCONFIG_SCHEMA_ANON` | `anon` | Schema for anonymous data tables | | `CS9_DBCONFIG_DB_ANON` | `cs9_surveillance` | Database for surveillance data | ## Package behavior without database configuration When the database is not configured, CS9 loads with limited functionality and prints messages like: ``` Environment setup failed: Missing required environment variables: CS9_DBCONFIG_ACCESS, CS9_DBCONFIG_DRIVER, CS9_DBCONFIG_PORT, CS9_DBCONFIG_SERVER CS9 database configuration not available. Package loaded with limited functionality. Use cs9::check_environment_setup() to diagnose configuration issues. ``` Run `cs9::check_environment_setup()` to see which configuration items are missing. ## Docker An example docker-compose file is available [here](https://github.com/niphr/docker-examples/blob/main/cs9-single-user-docker-compose/docker-compose.yml). To get started quickly, clone the [cs9example](https://github.com/niphr/cs9example) repository, which provides a complete template for a CS9 surveillance system. ## Moving from CRAN to full setup If you installed CS9 from CRAN and want to enable full surveillance functionality: 1. Check your current status: ```r cs9::check_environment_setup() ``` 2. Install PostgreSQL, create the surveillance database, and note the connection parameters (host, port, username, password). 3. Add the `CS9_DBCONFIG_*` variables to your `.Renviron` file, restart R, and verify with `cs9::check_environment_setup()`. 4. Test that the package now loads fully: ```r ss <- cs9::SurveillanceSystem_v9$new(name = "test_system") ``` ## Verification and troubleshooting ### Verify your setup ```r # Load CS9 library(cs9) # Check environment configuration cs9::check_environment_setup() # Test surveillance system creation ss <- cs9::SurveillanceSystem_v9$new(name = "test_surveillance") print(ss$name) # Should print "test_surveillance" ``` ### Common issues **"Missing required environment variables"**: Check that all `CS9_DBCONFIG_*` variables are in your `.Renviron` file and restart R. **"Could not connect to database"**: - Verify PostgreSQL is running: `sudo systemctl status postgresql` (Linux) or `brew services list | grep postgres` (macOS) - Confirm that the credentials in `.Renviron` match the database user you created - Test manually: `docker exec -it cs9-postgres psql -U cs9_user -d cs9_surveillance` **"Package loaded with limited functionality"**: Expected when no database is configured. Follow the database setup steps above. **Permission denied errors**: Grant the required privileges: ```sql GRANT ALL PRIVILEGES ON DATABASE cs9_surveillance TO cs9_user; GRANT ALL ON SCHEMA config TO cs9_user; GRANT ALL ON SCHEMA anon TO cs9_user; ``` ## Next steps - `vignette("cs9")` — architecture and core concepts - `vignette("creating-a-task")` — step-by-step task tutorial - `vignette("file-layout")` — package structure guidance - [cs9example](https://github.com/niphr/cs9example) — a complete implementation template