mirror of
https://github.com/freedbygrace/SQL.git
synced 2026-07-27 20:09:05 +00:00
Add comprehensive permissions management for Docker bind mounts
NEW SCRIPT: Created scripts/fix-permissions.sh - automated permission fixer Takes ownership of repository files, makes scripts executable, sets proper permissions Verifies permissions are correct before proceeding DOCKER COMPOSE: Added header comments explaining permission requirements DOCUMENTATION: Updated README.md and QUICKSTART.md with permission setup steps WHY CRITICAL: Docker bind mounts require proper file ownership to work correctly USER EXPERIENCE: Single command ./scripts/fix-permissions.sh handles everything
This commit is contained in:
@@ -0,0 +1,140 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ============================================================================
|
||||
# Fix Permissions Script
|
||||
# ============================================================================
|
||||
# Sets proper ownership and permissions for the repository
|
||||
# This is especially important for Docker bind mounts to work correctly
|
||||
# ============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# Colors for output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
echo -e "${BLUE}============================================================================${NC}"
|
||||
echo -e "${BLUE}Business Analytics Database - Fix Permissions${NC}"
|
||||
echo -e "${BLUE}============================================================================${NC}"
|
||||
echo ""
|
||||
|
||||
# Get the script directory and project root
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
|
||||
|
||||
cd "$PROJECT_ROOT"
|
||||
|
||||
echo -e "${YELLOW}[1/4] Taking ownership of repository...${NC}"
|
||||
if [ "$EUID" -eq 0 ]; then
|
||||
# Running as root - ask for target user
|
||||
echo -e "${YELLOW}Running as root. Please specify the target user (or press Enter for current user):${NC}"
|
||||
read -r TARGET_USER
|
||||
if [ -z "$TARGET_USER" ]; then
|
||||
TARGET_USER=$(logname 2>/dev/null || echo $SUDO_USER)
|
||||
fi
|
||||
chown -R "$TARGET_USER:$TARGET_USER" .
|
||||
echo -e "${GREEN}✓ Ownership set to $TARGET_USER${NC}"
|
||||
else
|
||||
# Running as regular user - use sudo
|
||||
if command -v sudo >/dev/null 2>&1; then
|
||||
sudo chown -R $USER:$USER .
|
||||
echo -e "${GREEN}✓ Ownership set to $USER${NC}"
|
||||
else
|
||||
echo -e "${YELLOW}⚠ sudo not available, skipping ownership change${NC}"
|
||||
echo -e "${YELLOW} You may need to run: chown -R \$USER:\$USER .${NC}"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo -e "\n${YELLOW}[2/4] Making all shell scripts executable...${NC}"
|
||||
SCRIPT_COUNT=$(find . -name "*.sh" -type f | wc -l)
|
||||
find . -name "*.sh" -type f -exec chmod +x {} \;
|
||||
echo -e "${GREEN}✓ Made $SCRIPT_COUNT shell scripts executable${NC}"
|
||||
|
||||
echo -e "\n${YELLOW}[3/4] Setting directory permissions...${NC}"
|
||||
# Set proper permissions for directories that Docker will bind mount
|
||||
if [ -d "data" ]; then
|
||||
chmod -R 755 data/
|
||||
echo -e "${GREEN}✓ Set permissions for data/ directory${NC}"
|
||||
fi
|
||||
|
||||
if [ -d "schema" ]; then
|
||||
chmod -R 755 schema/
|
||||
echo -e "${GREEN}✓ Set permissions for schema/ directory${NC}"
|
||||
fi
|
||||
|
||||
if [ -d "scripts" ]; then
|
||||
chmod -R 755 scripts/
|
||||
echo -e "${GREEN}✓ Set permissions for scripts/ directory${NC}"
|
||||
fi
|
||||
|
||||
if [ -d "docker" ]; then
|
||||
chmod -R 755 docker/
|
||||
echo -e "${GREEN}✓ Set permissions for docker/ directory${NC}"
|
||||
fi
|
||||
|
||||
if [ -d "exercises" ]; then
|
||||
chmod -R 755 exercises/
|
||||
echo -e "${GREEN}✓ Set permissions for exercises/ directory${NC}"
|
||||
fi
|
||||
|
||||
if [ -d "docs" ]; then
|
||||
chmod -R 755 docs/
|
||||
echo -e "${GREEN}✓ Set permissions for docs/ directory${NC}"
|
||||
fi
|
||||
|
||||
echo -e "\n${YELLOW}[4/4] Verifying permissions...${NC}"
|
||||
|
||||
# Check if we can read key files
|
||||
ERRORS=0
|
||||
|
||||
if [ ! -r "docker-compose.yml" ]; then
|
||||
echo -e "${RED}✗ Cannot read docker-compose.yml${NC}"
|
||||
ERRORS=$((ERRORS + 1))
|
||||
else
|
||||
echo -e "${GREEN}✓ docker-compose.yml is readable${NC}"
|
||||
fi
|
||||
|
||||
if [ ! -x "scripts/setup-database.sh" ]; then
|
||||
echo -e "${RED}✗ scripts/setup-database.sh is not executable${NC}"
|
||||
ERRORS=$((ERRORS + 1))
|
||||
else
|
||||
echo -e "${GREEN}✓ scripts/setup-database.sh is executable${NC}"
|
||||
fi
|
||||
|
||||
if [ ! -x "data/generate_data.sh" ]; then
|
||||
echo -e "${RED}✗ data/generate_data.sh is not executable${NC}"
|
||||
ERRORS=$((ERRORS + 1))
|
||||
else
|
||||
echo -e "${GREEN}✓ data/generate_data.sh is executable${NC}"
|
||||
fi
|
||||
|
||||
if [ ! -r "schema/01-create-tables.sql" ]; then
|
||||
echo -e "${RED}✗ Cannot read schema/01-create-tables.sql${NC}"
|
||||
ERRORS=$((ERRORS + 1))
|
||||
else
|
||||
echo -e "${GREEN}✓ schema/01-create-tables.sql is readable${NC}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${BLUE}============================================================================${NC}"
|
||||
|
||||
if [ $ERRORS -eq 0 ]; then
|
||||
echo -e "${GREEN}✓ All permissions set correctly!${NC}"
|
||||
echo -e "${BLUE}============================================================================${NC}"
|
||||
echo ""
|
||||
echo -e "${GREEN}You can now proceed with:${NC}"
|
||||
echo -e " 1. ${YELLOW}docker-compose up -d${NC} # Start containers"
|
||||
echo -e " 2. ${YELLOW}./scripts/setup-database.sh${NC} # Initialize database"
|
||||
echo -e " 3. ${YELLOW}./data/generate_data.sh${NC} # Generate test data"
|
||||
echo ""
|
||||
else
|
||||
echo -e "${RED}✗ Found $ERRORS permission errors${NC}"
|
||||
echo -e "${BLUE}============================================================================${NC}"
|
||||
echo ""
|
||||
echo -e "${YELLOW}Please fix the errors above and try again.${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -287,9 +287,10 @@ main() {
|
||||
echo -e "${YELLOW}Next steps:${NC}"
|
||||
echo -e " 1. If Docker was just installed, you may need to log out and back in"
|
||||
echo -e " 2. Start Docker if it's not running"
|
||||
echo -e " 3. Run: ${GREEN}docker-compose up -d${NC}"
|
||||
echo -e " 4. Run: ${GREEN}./scripts/setup-database.sh${NC}"
|
||||
echo -e " 5. Run: ${GREEN}./data/generate_data.sh${NC}"
|
||||
echo -e " 3. Fix permissions: ${GREEN}./scripts/fix-permissions.sh${NC}"
|
||||
echo -e " 4. Start containers: ${GREEN}docker-compose up -d${NC}"
|
||||
echo -e " 5. Setup database: ${GREEN}./scripts/setup-database.sh${NC}"
|
||||
echo -e " 6. Generate data: ${GREEN}./data/generate_data.sh${NC}"
|
||||
echo ""
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user