giteainstall.sh raw

   1  #!/usr/bin/env bash
   2  set -euo pipefail
   3  
   4  # Gitea Installation Script
   5  # Installs Gitea to /home/mleku/gitea with SQLite backend
   6  
   7  GITEA_VERSION="1.25.1"
   8  GITEA_BASE_DIR="/home/mleku/gitea"
   9  GITEA_USER="mleku"
  10  ARCH="linux-amd64"
  11  
  12  # Capture script directory before changing directories
  13  SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  14  
  15  # Colors for output
  16  GREEN='\033[0;32m'
  17  YELLOW='\033[1;33m'
  18  RED='\033[0;31m'
  19  NC='\033[0m' # No Color
  20  
  21  echo -e "${GREEN}=== Gitea Installation Script ===${NC}"
  22  echo "Version: ${GITEA_VERSION}"
  23  echo "Installation directory: ${GITEA_BASE_DIR}"
  24  echo "User: ${GITEA_USER}"
  25  echo ""
  26  
  27  # Check if Git is installed
  28  echo -e "${YELLOW}Checking prerequisites...${NC}"
  29  if ! command -v git &> /dev/null; then
  30      echo -e "${RED}Error: Git is not installed. Please install Git first.${NC}"
  31      exit 1
  32  fi
  33  
  34  GIT_VERSION=$(git --version | awk '{print $3}')
  35  echo "Git version: ${GIT_VERSION}"
  36  
  37  # Create directory structure
  38  echo -e "${YELLOW}Creating directory structure...${NC}"
  39  mkdir -p "${GITEA_BASE_DIR}"/{bin,custom,data,log,tmp}
  40  mkdir -p "${GITEA_BASE_DIR}/data/"{gitea-repositories,attachments,lfs,avatars}
  41  mkdir -p "${GITEA_BASE_DIR}/custom/conf"
  42  
  43  # Download Gitea binary
  44  echo -e "${YELLOW}Downloading Gitea ${GITEA_VERSION}...${NC}"
  45  cd /tmp
  46  wget -O gitea "https://dl.gitea.com/gitea/${GITEA_VERSION}/gitea-${GITEA_VERSION}-${ARCH}" || {
  47      echo -e "${RED}Failed to download Gitea binary${NC}"
  48      exit 1
  49  }
  50  
  51  # Download GPG signature for verification (optional but recommended)
  52  echo -e "${YELLOW}Downloading GPG signature...${NC}"
  53  wget -O gitea.asc "https://dl.gitea.com/gitea/${GITEA_VERSION}/gitea-${GITEA_VERSION}-${ARCH}.asc" || {
  54      echo -e "${YELLOW}Warning: Could not download signature file${NC}"
  55  }
  56  
  57  # Verify GPG signature if signature file exists
  58  if [ -f gitea.asc ]; then
  59      echo -e "${YELLOW}Verifying GPG signature (this may take a moment)...${NC}"
  60      # Try to import the Gitea signing key
  61      gpg --keyserver hkps://keys.openpgp.org --recv 7C9E68152594688862D62AF62D9AE806EC1592E2 2>/dev/null || {
  62          echo -e "${YELLOW}Warning: Could not import GPG key, skipping verification${NC}"
  63      }
  64  
  65      # Verify if key was imported
  66      if gpg --list-keys 7C9E68152594688862D62AF62D9AE806EC1592E2 &>/dev/null; then
  67          if gpg --verify gitea.asc gitea 2>&1 | grep -q "Good signature"; then
  68              echo -e "${GREEN}✓ GPG signature verified successfully${NC}"
  69          else
  70              echo -e "${RED}Warning: GPG signature verification failed${NC}"
  71              read -p "Continue anyway? (y/N) " -n 1 -r
  72              echo
  73              if [[ ! $REPLY =~ ^[Yy]$ ]]; then
  74                  exit 1
  75              fi
  76          fi
  77      fi
  78      rm -f gitea.asc
  79  fi
  80  
  81  # Make binary executable and move to installation directory
  82  chmod +x gitea
  83  mv gitea "${GITEA_BASE_DIR}/bin/gitea"
  84  echo -e "${GREEN}✓ Binary installed to ${GITEA_BASE_DIR}/bin/gitea${NC}"
  85  
  86  # Create initial app.ini configuration for SQLite
  87  echo -e "${YELLOW}Creating initial configuration...${NC}"
  88  cat > "${GITEA_BASE_DIR}/custom/conf/app.ini" << EOF
  89  # Gitea Configuration
  90  # Generated by giteainstall.sh
  91  
  92  APP_NAME = Gitea: Git with a cup of tea
  93  RUN_MODE = prod
  94  RUN_USER = ${GITEA_USER}
  95  
  96  [repository]
  97  ROOT = ${GITEA_BASE_DIR}/data/gitea-repositories
  98  
  99  [repository.local]
 100  LOCAL_COPY_PATH = ${GITEA_BASE_DIR}/tmp/local-repo
 101  
 102  [repository.upload]
 103  TEMP_PATH = ${GITEA_BASE_DIR}/data/tmp/uploads
 104  
 105  [server]
 106  APP_DATA_PATH    = ${GITEA_BASE_DIR}/data
 107  DOMAIN           = localhost
 108  HTTP_PORT        = 3000
 109  ROOT_URL         = http://localhost:3000/
 110  DISABLE_SSH      = false
 111  SSH_DOMAIN       = localhost
 112  SSH_PORT         = 22
 113  SSH_LISTEN_PORT  = 2222
 114  LFS_START_SERVER = true
 115  LFS_JWT_SECRET   = # Will be generated on first run
 116  OFFLINE_MODE     = false
 117  
 118  [database]
 119  PATH     = ${GITEA_BASE_DIR}/data/gitea.db
 120  DB_TYPE  = sqlite3
 121  HOST     =
 122  NAME     = gitea
 123  USER     =
 124  PASSWD   =
 125  LOG_SQL  = false
 126  SCHEMA   =
 127  SSL_MODE = disable
 128  
 129  [indexer]
 130  ISSUE_INDEXER_PATH = ${GITEA_BASE_DIR}/data/indexers/issues.bleve
 131  REPO_INDEXER_ENABLED = false
 132  
 133  [session]
 134  PROVIDER_CONFIG = ${GITEA_BASE_DIR}/data/sessions
 135  PROVIDER = file
 136  
 137  [picture]
 138  AVATAR_UPLOAD_PATH            = ${GITEA_BASE_DIR}/data/avatars
 139  REPOSITORY_AVATAR_UPLOAD_PATH = ${GITEA_BASE_DIR}/data/repo-avatars
 140  DISABLE_GRAVATAR              = false
 141  ENABLE_FEDERATED_AVATAR       = true
 142  
 143  [attachment]
 144  PATH = ${GITEA_BASE_DIR}/data/attachments
 145  
 146  [log]
 147  MODE      = console, file
 148  LEVEL     = info
 149  ROOT_PATH = ${GITEA_BASE_DIR}/log
 150  ROUTER    = console
 151  
 152  [security]
 153  INSTALL_LOCK   = false
 154  SECRET_KEY     = # Will be generated on first run
 155  INTERNAL_TOKEN = # Will be generated on first run
 156  
 157  [service]
 158  DISABLE_REGISTRATION              = false
 159  REQUIRE_SIGNIN_VIEW               = false
 160  REGISTER_EMAIL_CONFIRM            = false
 161  ENABLE_NOTIFY_MAIL                = false
 162  ALLOW_ONLY_EXTERNAL_REGISTRATION  = false
 163  ENABLE_CAPTCHA                    = false
 164  DEFAULT_KEEP_EMAIL_PRIVATE        = false
 165  DEFAULT_ALLOW_CREATE_ORGANIZATION = true
 166  DEFAULT_ENABLE_TIMETRACKING       = true
 167  NO_REPLY_ADDRESS                  = noreply.localhost
 168  
 169  [mailer]
 170  ENABLED = false
 171  
 172  [openid]
 173  ENABLE_OPENID_SIGNIN = true
 174  ENABLE_OPENID_SIGNUP = true
 175  
 176  [lfs]
 177  PATH = ${GITEA_BASE_DIR}/data/lfs
 178  EOF
 179  
 180  echo -e "${GREEN}✓ Configuration created at ${GITEA_BASE_DIR}/custom/conf/app.ini${NC}"
 181  
 182  # Set proper permissions
 183  echo -e "${YELLOW}Setting permissions...${NC}"
 184  chmod -R 755 "${GITEA_BASE_DIR}"
 185  chmod 640 "${GITEA_BASE_DIR}/custom/conf/app.ini"
 186  
 187  # Create systemd service file
 188  SERVICE_FILE="${SCRIPT_DIR}/gitea.service"
 189  
 190  echo -e "${YELLOW}Creating systemd service file...${NC}"
 191  cat > "${SERVICE_FILE}" << 'EOFSERVICE'
 192  [Unit]
 193  Description=Gitea (Git with a cup of tea)
 194  After=network.target
 195  Wants=network.target
 196  
 197  [Service]
 198  Type=simple
 199  User=mleku
 200  Group=mleku
 201  WorkingDirectory=/home/mleku/gitea
 202  ExecStart=/home/mleku/gitea/bin/gitea web --config /home/mleku/gitea/custom/conf/app.ini
 203  Restart=always
 204  RestartSec=2s
 205  Environment="USER=mleku" "HOME=/home/mleku" "GITEA_WORK_DIR=/home/mleku/gitea"
 206  
 207  # Security enhancements
 208  PrivateTmp=yes
 209  NoNewPrivileges=true
 210  ProtectSystem=strict
 211  ProtectHome=no
 212  ReadWritePaths=/home/mleku/gitea
 213  
 214  # Limits
 215  LimitNOFILE=65535
 216  LimitNPROC=65535
 217  
 218  [Install]
 219  WantedBy=multi-user.target
 220  EOFSERVICE
 221  
 222  echo -e "${GREEN}✓ Service file created at ${SERVICE_FILE}${NC}"
 223  
 224  # Summary
 225  echo ""
 226  echo -e "${GREEN}=== Installation Complete ===${NC}"
 227  echo ""
 228  echo "Installation directory: ${GITEA_BASE_DIR}"
 229  echo "Binary location: ${GITEA_BASE_DIR}/bin/gitea"
 230  echo "Configuration: ${GITEA_BASE_DIR}/custom/conf/app.ini"
 231  echo "Database: ${GITEA_BASE_DIR}/data/gitea.db (SQLite)"
 232  echo "Service file: ${SERVICE_FILE}"
 233  echo ""
 234  echo -e "${YELLOW}Next steps:${NC}"
 235  echo ""
 236  echo "1. Install the systemd service:"
 237  echo "   sudo cp ${SERVICE_FILE} /etc/systemd/system/"
 238  echo "   sudo systemctl daemon-reload"
 239  echo ""
 240  echo "2. Enable and start Gitea:"
 241  echo "   sudo systemctl enable gitea"
 242  echo "   sudo systemctl start gitea"
 243  echo ""
 244  echo "3. Check status:"
 245  echo "   sudo systemctl status gitea"
 246  echo ""
 247  echo "4. View logs:"
 248  echo "   sudo journalctl -u gitea -f"
 249  echo ""
 250  echo "5. Access Gitea at:"
 251  echo "   http://localhost:3000"
 252  echo ""
 253  echo "6. Complete the installation wizard in your browser"
 254  echo "   (Most settings are pre-configured for SQLite)"
 255  echo ""
 256  echo -e "${YELLOW}Note:${NC} The first time you access Gitea, you'll need to complete"
 257  echo "the installation wizard to create the admin account."
 258  echo ""
 259