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