Skip to content

Commit 529135f

Browse files
author
Avinash Singh
committed
deployment script modified
1 parent 63f44e7 commit 529135f

File tree

2 files changed

+331
-16
lines changed

2 files changed

+331
-16
lines changed

docs/deployment_guide.md

Lines changed: 314 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# TVM Log Upload System - Deployment Guide
22

3-
**Version:** 2.6
4-
**Last Updated:** 2025-11-05
3+
**Version:** 2.7
4+
**Last Updated:** 2025-11-10
55
**Target Audience:** Vehicle deployment technicians
66

77
---
@@ -133,7 +133,117 @@ Before installation, prepare:
133133

134134
## ⚡ Quick Deployment (Commands Only)
135135

136-
**Complete deployment in 7 steps - just copy and run:**
136+
**Complete deployment in 8 steps - just copy and run:**
137+
138+
### Step 0: Environment Setup & Verification (REQUIRED - Run First!)
139+
140+
**This step prevents common deployment issues** including AWS CLI conflicts, Python version mismatches, and dependency problems.
141+
142+
```bash
143+
# ============================================================
144+
# STEP 0: ENVIRONMENT SETUP & VERIFICATION
145+
# ============================================================
146+
# Run these commands FIRST before proceeding with installation
147+
# This prevents 90% of common deployment issues!
148+
# ============================================================
149+
150+
# Check Python version (must be 3.10+)
151+
python3 --version
152+
# Expected: Python 3.10.x or higher
153+
154+
# Check pip3 is installed
155+
pip3 --version
156+
# Expected: pip 22.x or higher
157+
158+
# Check disk space (need at least 10GB free)
159+
df -h / | grep -E '^/|Avail'
160+
# Expected: At least 10GB available
161+
162+
# Check network connectivity to AWS China
163+
ping -c 3 s3.cn-north-1.amazonaws.com.cn
164+
# Expected: Successful ping responses
165+
166+
# ============================================================
167+
# CRITICAL: AWS CLI CONFLICT DETECTION & RESOLUTION
168+
# ============================================================
169+
# This is the MOST COMMON issue - version conflicts between
170+
# system AWS CLI and user-installed boto3/botocore packages
171+
# ============================================================
172+
173+
# Step 0a: Check for AWS CLI version conflicts
174+
echo "Checking AWS CLI installation..."
175+
which -a aws 2>/dev/null || echo "AWS CLI not found (will be installed)"
176+
177+
# Step 0b: Check for conflicting package installations
178+
echo ""
179+
echo "Checking for package conflicts..."
180+
pip3 list | grep -E "(awscli|boto)" 2>/dev/null || echo "No user boto packages found"
181+
dpkg -l 2>/dev/null | grep -E "awscli|python3-boto" || echo "No system AWS packages found"
182+
183+
# Step 0c: RESOLVE CONFLICTS (if any were found above)
184+
# If you see BOTH system packages (dpkg) AND user packages (pip3 list),
185+
# you have a conflict that MUST be resolved:
186+
187+
# Option 1: Remove system AWS CLI and use user installation (RECOMMENDED)
188+
# Uncomment these lines if you have sudo access:
189+
# sudo apt remove -y awscli python3-botocore
190+
# pip3 install --user --upgrade awscli
191+
192+
# Option 2: Use local AWS CLI only (if no sudo access)
193+
# This upgrades your local installation to match boto3:
194+
pip3 install --user --upgrade awscli
195+
196+
# Step 0d: Verify AWS CLI works after conflict resolution
197+
echo ""
198+
echo "Verifying AWS CLI installation..."
199+
aws --version
200+
# Expected: aws-cli/1.40+ with matching botocore version
201+
# Example: aws-cli/1.42.69 Python/3.10.12 Linux/6.8.0-87-generic botocore/1.40.69
202+
203+
# Step 0e: Ensure local AWS CLI takes precedence
204+
echo ""
205+
echo "AWS CLI location:"
206+
which aws
207+
# Expected: /home/YOUR_USERNAME/.local/bin/aws (user installation)
208+
# If you see /usr/bin/aws, your PATH may need adjustment
209+
210+
# ============================================================
211+
# VERIFICATION SUMMARY
212+
# ============================================================
213+
echo ""
214+
echo "Environment Setup Summary:"
215+
echo "-------------------------"
216+
echo "Python version: $(python3 --version)"
217+
echo "pip3 version: $(pip3 --version | cut -d' ' -f2)"
218+
echo "AWS CLI version: $(aws --version 2>&1 | cut -d' ' -f1)"
219+
echo "Disk space: $(df -h / | awk 'NR==2 {print $4}')"
220+
echo ""
221+
echo "If all checks above passed, proceed to Step 1!"
222+
echo "If any check failed, fix the issue before continuing."
223+
echo "-------------------------"
224+
```
225+
226+
**Common Issues & Solutions:**
227+
228+
| Issue | Symptom | Solution |
229+
|-------|---------|----------|
230+
| AWS CLI conflict | `KeyError: 'opsworkscm'` when running `aws configure` | Run Step 0c to upgrade local AWS CLI |
231+
| Old Python | `Python 3.8` or lower | Upgrade to Python 3.10+ or use different system |
232+
| Missing pip3 | `pip3: command not found` | Install: `sudo apt install python3-pip` |
233+
| Network issues | Cannot ping AWS China | Check WiFi/firewall settings |
234+
| Disk space low | Less than 10GB free | Clean up disk space or use different partition |
235+
236+
**Why This Step Matters:**
237+
238+
The most common deployment failure is the AWS CLI conflict you just experienced:
239+
- System package managers (apt) install older AWS CLI versions
240+
- Python pip installs newer boto3/botocore for your project
241+
- These versions clash, causing cryptic errors like `KeyError: 'opsworkscm'`
242+
- Step 0c resolves this by ensuring compatible versions
243+
244+
**Expected Time:** 2-3 minutes
245+
246+
---
137247

138248
```bash
139249
# Step 1: Clone repository
@@ -198,6 +308,155 @@ Check status: `sudo systemctl status tvm-upload`
198308

199309
---
200310

311+
### Step 0: Environment Setup & Verification (REQUIRED)
312+
313+
**⚠️ CRITICAL: Run this step FIRST before any installation!**
314+
315+
This step detects and resolves common environment issues that cause 90% of deployment failures, including the AWS CLI version conflict issue.
316+
317+
#### 0.1 Basic System Verification
318+
319+
```bash
320+
# Check Python version (must be 3.10+)
321+
python3 --version
322+
```
323+
**Expected:** `Python 3.10.x` or higher
324+
325+
```bash
326+
# Check pip3 is installed
327+
pip3 --version
328+
```
329+
**Expected:** `pip 22.x` or higher
330+
331+
```bash
332+
# Check disk space
333+
df -h /
334+
```
335+
**Expected:** At least 10GB available
336+
337+
```bash
338+
# Check network connectivity to AWS China
339+
ping -c 3 s3.cn-north-1.amazonaws.com.cn
340+
```
341+
**Expected:** Successful ping responses
342+
343+
**If any check fails:**
344+
- Python too old: Upgrade to Python 3.10+ or use different system
345+
- pip3 missing: Install with `sudo apt install python3-pip`
346+
- Disk space low: Clean up disk or use different partition
347+
- Network issues: Check WiFi/firewall settings
348+
349+
---
350+
351+
#### 0.2 AWS CLI Conflict Detection & Resolution
352+
353+
**⚠️ MOST COMMON ISSUE:** This is the error you likely encountered - version conflicts between system AWS CLI and user boto3 packages.
354+
355+
**Step 1: Check for conflicts**
356+
357+
```bash
358+
# Check AWS CLI installations
359+
which -a aws
360+
```
361+
362+
**Step 2: Check package versions**
363+
364+
```bash
365+
# Check user-installed packages (pip3)
366+
pip3 list | grep -E "(awscli|boto)"
367+
368+
# Check system-installed packages (apt)
369+
dpkg -l | grep -E "awscli|python3-boto"
370+
```
371+
372+
**Step 3: Identify the conflict**
373+
374+
**You have a conflict if:**
375+
- `which -a aws` shows multiple locations (e.g., `/usr/bin/aws` AND `/home/user/.local/bin/aws`)
376+
- `pip3 list` shows boto/awscli packages (e.g., `botocore 1.40.69`)
377+
- `dpkg -l` shows system AWS packages (e.g., `awscli 1.22.34`)
378+
379+
**Example conflict output:**
380+
```
381+
# pip3 list shows:
382+
awscli 1.22.34
383+
boto3 1.40.69
384+
botocore 1.40.69
385+
386+
# dpkg -l shows:
387+
ii awscli 1.22.34-1
388+
ii python3-botocore 1.23.34+repack-1
389+
```
390+
391+
This mismatch causes errors like: `KeyError: 'opsworkscm'`
392+
393+
**Step 4: Resolve the conflict**
394+
395+
**Option A: Remove system packages (RECOMMENDED - requires sudo):**
396+
397+
```bash
398+
sudo apt remove -y awscli python3-botocore
399+
pip3 install --user --upgrade awscli
400+
```
401+
402+
**Option B: Upgrade local installation (no sudo required):**
403+
404+
```bash
405+
pip3 install --user --upgrade awscli
406+
```
407+
408+
This ensures your local AWS CLI matches your boto3 version.
409+
410+
**Step 5: Verify the fix**
411+
412+
```bash
413+
# Check AWS CLI version
414+
aws --version
415+
```
416+
**Expected:** `aws-cli/1.40+` with matching botocore
417+
**Example:** `aws-cli/1.42.69 Python/3.10.12 Linux/6.8.0-87-generic botocore/1.40.69`
418+
419+
```bash
420+
# Check AWS CLI location
421+
which aws
422+
```
423+
**Expected:** `/home/YOUR_USERNAME/.local/bin/aws` (user installation)
424+
425+
**Step 6: Test AWS CLI works**
426+
427+
```bash
428+
aws help
429+
```
430+
**Expected:** No errors, shows help text
431+
432+
**If you still see errors:**
433+
1. Restart your terminal session (to reload PATH)
434+
2. Run `hash -r` to clear bash command cache
435+
3. Verify PATH includes `~/.local/bin`: `echo $PATH`
436+
437+
---
438+
439+
#### 0.3 Environment Summary
440+
441+
Run this to see a complete summary:
442+
443+
```bash
444+
echo "Environment Setup Summary:"
445+
echo "-------------------------"
446+
echo "Python: $(python3 --version)"
447+
echo "pip3: $(pip3 --version | cut -d' ' -f2)"
448+
echo "AWS CLI: $(aws --version 2>&1)"
449+
echo "AWS location: $(which aws)"
450+
echo "Disk free: $(df -h / | awk 'NR==2 {print $4}')"
451+
echo "-------------------------"
452+
```
453+
454+
**All checks passed?** ✅ Proceed to Step 1!
455+
456+
**Any check failed?** ❌ Fix the issue before continuing - deployment will fail otherwise.
457+
458+
---
459+
201460
### Step 1: Clone Repository
202461

203462
On the vehicle:
@@ -701,6 +960,53 @@ This will identify most common problems automatically.
701960

702961
---
703962

963+
### Problem: AWS CLI errors (KeyError: 'opsworkscm' or similar)
964+
965+
**Symptoms:**
966+
- `aws configure` command fails with `KeyError: 'opsworkscm'`
967+
- Traceback showing `/usr/bin/aws` and `/home/user/.local/lib/python3.10/site-packages/botocore`
968+
- Version mismatch between AWS CLI and botocore
969+
970+
**Root cause:** Conflict between system-installed AWS CLI (old version) and user-installed botocore (new version).
971+
972+
**Diagnose:**
973+
```bash
974+
# Check for multiple AWS CLI installations
975+
which -a aws
976+
977+
# Check versions
978+
pip3 list | grep -E "(awscli|boto)"
979+
dpkg -l | grep -E "awscli|python3-boto"
980+
```
981+
982+
**Solution:**
983+
```bash
984+
# Upgrade local AWS CLI to match boto3
985+
pip3 install --user --upgrade awscli
986+
987+
# Verify fix
988+
aws --version
989+
which aws # Should show ~/.local/bin/aws
990+
991+
# Test it works
992+
aws help
993+
```
994+
995+
**If still failing:**
996+
```bash
997+
# Restart terminal to reload PATH
998+
# Or clear bash command cache
999+
hash -r
1000+
1001+
# If you have sudo access, remove system packages entirely:
1002+
sudo apt remove -y awscli python3-botocore
1003+
pip3 install --user --upgrade awscli
1004+
```
1005+
1006+
**Prevention:** Always run Step 0 (Environment Setup & Verification) before deployment!
1007+
1008+
---
1009+
7041010
### Problem: Service won't start
7051011

7061012
**Diagnose:**
@@ -905,6 +1211,8 @@ aws cloudwatch get-metric-statistics \
9051211

9061212
Use this checklist when deploying to a vehicle:
9071213

1214+
- [ ] **Step 0: Environment verified** (Python 3.10+, pip3, disk space, network)
1215+
- [ ] **Step 0: AWS CLI conflicts resolved** (no version mismatches)
9081216
- [ ] AWS credentials configured (`~/.aws/credentials` + `~/.aws/config`)
9091217
- [ ] AWS credentials verified (`./scripts/diagnostics/verify_aws_credentials.sh`)
9101218
- [ ] Repository cloned and dependencies installed
@@ -967,10 +1275,11 @@ ls -lh /var/log/syslog*
9671275
9681276
---
9691277
970-
**Version:** 2.6
971-
**Last Updated:** 2025-11-05
1278+
**Version:** 2.7
1279+
**Last Updated:** 2025-11-10
9721280
9731281
### Changelog
1282+
- **v2.7** (2025-11-10): **CRITICAL UPDATE** - Added comprehensive Step 0: Environment Setup & Verification to prevent AWS CLI conflicts (KeyError: 'opsworkscm'), Python version issues, and dependency conflicts. Added detailed troubleshooting for AWS CLI version mismatches. Updated deployment checklist and quick deployment guide.
9741283
- **v2.6** (2025-11-05): Clarified Steps 7 & 8 as optional verification (not mandatory setup), moved immediate logrotate command to Appendix A (testing only), improved deployment overview
9751284
- **v2.5** (2025-11-05): Improved formatting - alternate methods now use collapsible sections for clearer main vs. alternative paths
9761285
- **v2.4** (2025-11-05): Added detailed system prerequisites (Python 3.10+, pip3, Ubuntu 22.04+, WiFi), moved vehicle info to prerequisites, renumbered all steps

0 commit comments

Comments
 (0)