@fredlackey/devutils 0.0.15 → 0.0.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,1091 @@
1
+ # Installing tfenv (Terraform Version Manager)
2
+
3
+ ## Overview
4
+
5
+ tfenv is a version manager for Terraform, inspired by rbenv. It allows you to install, switch between, and manage multiple versions of Terraform on the same machine. This is essential for developers and DevOps engineers who work on projects requiring different Terraform versions, ensuring compatibility and reducing the risk of applying infrastructure changes with an incorrect Terraform binary.
6
+
7
+ Key capabilities include:
8
+
9
+ - **Version switching**: Easily install and switch between multiple Terraform versions
10
+ - **Automatic version selection**: Use `.terraform-version` files to auto-select the correct version per project
11
+ - **Hash verification**: Automatically validates downloads against HashiCorp's published SHA256 hashes
12
+ - **Signature verification**: Optionally verify PGP signatures using Keybase or GnuPG
13
+
14
+ **Important Platform Note**: tfenv is designed for POSIX-compliant systems (macOS, Linux, WSL). Native Windows support is experimental and limited to Git Bash with known symlink issues. For native Windows environments (PowerShell, Command Prompt), consider using Chocolatey to install specific Terraform versions directly (`choco install terraform --version=X.Y.Z -y`), or use WSL.
15
+
16
+ ## Dependencies
17
+
18
+ ### macOS (Homebrew)
19
+ - **Required:**
20
+ - Homebrew package manager - Install via `/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"` or run `dev install homebrew`
21
+ - **Optional:** None
22
+ - **Auto-installed:**
23
+ - `grep` (GNU grep) - Installed automatically as a dependency of the tfenv formula
24
+
25
+ ### Ubuntu (APT/Snap)
26
+ - **Required:**
27
+ - `git` - Install via `sudo apt-get install -y git`
28
+ - `curl` - Install via `sudo apt-get install -y curl`
29
+ - `unzip` - Install via `sudo apt-get install -y unzip`
30
+ - **Optional:**
31
+ - `keybase` - For PGP signature verification of Terraform downloads
32
+ - `gnupg` - Alternative for PGP signature verification
33
+ - **Auto-installed:** None (manual git clone installation)
34
+
35
+ ### Raspberry Pi OS (APT/Snap)
36
+ - **Required:**
37
+ - `git` - Install via `sudo apt-get install -y git`
38
+ - `curl` - Install via `sudo apt-get install -y curl`
39
+ - `unzip` - Install via `sudo apt-get install -y unzip`
40
+ - **Optional:**
41
+ - `keybase` - For PGP signature verification of Terraform downloads
42
+ - **Auto-installed:** None (manual git clone installation)
43
+
44
+ ### Amazon Linux (DNF/YUM)
45
+ - **Required:**
46
+ - `git` - Install via `sudo dnf install -y git` (AL2023) or `sudo yum install -y git` (AL2)
47
+ - `curl` - Install via `sudo dnf install -y curl` or `sudo yum install -y curl`
48
+ - `unzip` - Install via `sudo dnf install -y unzip` or `sudo yum install -y unzip`
49
+ - **Optional:** None
50
+ - **Auto-installed:** None (manual git clone installation)
51
+
52
+ ### Windows (Chocolatey/winget)
53
+ - **Required:**
54
+ - WSL 2 with Ubuntu - tfenv does not run natively on Windows; use WSL instead
55
+ - OR Git Bash (experimental, with known limitations)
56
+ - **Optional:** None
57
+ - **Auto-installed:** None
58
+
59
+ ### Git Bash (Manual/Portable)
60
+ - **Required:**
61
+ - Git Bash (comes with Git for Windows) - Download from https://git-scm.com/download/win
62
+ - `unzip` - Usually included with Git Bash, or install via `choco install unzip -y` from PowerShell
63
+ - **Optional:** None
64
+ - **Auto-installed:** None
65
+
66
+ **Note on Dependencies**: tfenv requires `git` for installation and updates, `curl` or `wget` for downloading Terraform binaries, and `unzip` for extracting them. On Unix-like systems, these are typically pre-installed or easily available through package managers.
67
+
68
+ ## Prerequisites
69
+
70
+ Before installing tfenv on any platform, ensure:
71
+
72
+ 1. **Internet connectivity** - Required to clone the tfenv repository and download Terraform versions
73
+ 2. **Terminal access** - Command line interface to run installation commands
74
+ 3. **Git** - Required to clone the tfenv repository
75
+ 4. **No existing tfenv or conflicting tools** - Remove any previous tfenv installations or conflicting version managers like `tenv`
76
+
77
+ **Why use a version manager?** Different Terraform configurations may require different Terraform versions. Using an incompatible version can cause state file corruption, unexpected behavior, or outright failures. A version manager ensures you always use the correct version for each project.
78
+
79
+ ## Platform-Specific Installation
80
+
81
+ ### macOS (Homebrew)
82
+
83
+ #### Prerequisites
84
+
85
+ - macOS 10.15 (Catalina) or later
86
+ - Homebrew package manager installed
87
+ - zsh shell (default on macOS 10.15+) or bash
88
+
89
+ If Homebrew is not installed, install it first:
90
+
91
+ ```bash
92
+ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
93
+ ```
94
+
95
+ #### Installation Steps
96
+
97
+ **Step 1: Install tfenv via Homebrew**
98
+
99
+ ```bash
100
+ brew install --quiet tfenv
101
+ ```
102
+
103
+ The `--quiet` flag suppresses non-essential output for automation-friendly installation. This installs tfenv version 3.0.0 (or later) from the official Homebrew formula.
104
+
105
+ **Note**: If you have the conflicting `tenv` package installed, you must remove it first:
106
+
107
+ ```bash
108
+ brew uninstall tenv 2>/dev/null || true
109
+ ```
110
+
111
+ **Step 2: Verify tfenv is in your PATH**
112
+
113
+ Homebrew automatically adds tfenv to your PATH. Verify by running:
114
+
115
+ ```bash
116
+ which tfenv
117
+ ```
118
+
119
+ Expected output:
120
+
121
+ ```
122
+ /opt/homebrew/bin/tfenv
123
+ ```
124
+
125
+ (On Intel Macs, the path will be `/usr/local/bin/tfenv`)
126
+
127
+ #### Verification
128
+
129
+ Confirm tfenv is installed correctly:
130
+
131
+ ```bash
132
+ tfenv --version
133
+ ```
134
+
135
+ Expected output (version numbers may vary):
136
+
137
+ ```
138
+ tfenv 3.0.0
139
+ ```
140
+
141
+ Test installing and using Terraform:
142
+
143
+ ```bash
144
+ tfenv install latest
145
+ tfenv use latest
146
+ terraform --version
147
+ ```
148
+
149
+ #### Troubleshooting
150
+
151
+ **Problem**: `tfenv: command not found` after installation
152
+
153
+ **Solution**: Ensure Homebrew is in your PATH. Add to your shell profile:
154
+
155
+ ```bash
156
+ # For Apple Silicon Macs (M1/M2/M3)
157
+ eval "$(/opt/homebrew/bin/brew shellenv)"
158
+
159
+ # For Intel Macs
160
+ eval "$(/usr/local/bin/brew shellenv)"
161
+ ```
162
+
163
+ **Problem**: Conflict with tenv package
164
+
165
+ **Solution**: tfenv conflicts with tenv (a multi-version manager). Remove tenv before installing tfenv:
166
+
167
+ ```bash
168
+ brew uninstall tenv
169
+ brew install --quiet tfenv
170
+ ```
171
+
172
+ **Problem**: `grep: invalid option` errors when using tfenv
173
+
174
+ **Solution**: tfenv requires GNU grep. Homebrew installs it as a dependency, but ensure it is available:
175
+
176
+ ```bash
177
+ brew install --quiet grep
178
+ ```
179
+
180
+ ---
181
+
182
+ ### Ubuntu/Debian (APT)
183
+
184
+ #### Prerequisites
185
+
186
+ - Ubuntu 20.04 or later, or Debian 10 or later
187
+ - sudo privileges
188
+ - git, curl, and unzip installed
189
+
190
+ **Note**: tfenv is not available in the official Ubuntu/Debian APT repositories. Installation is performed via git clone from the official GitHub repository.
191
+
192
+ First, install required dependencies:
193
+
194
+ ```bash
195
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
196
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y git curl unzip
197
+ ```
198
+
199
+ #### Installation Steps
200
+
201
+ **Step 1: Clone the tfenv repository**
202
+
203
+ ```bash
204
+ git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv
205
+ ```
206
+
207
+ The `--depth=1` flag creates a shallow clone for faster download.
208
+
209
+ **Step 2: Add tfenv to your PATH**
210
+
211
+ For bash (default shell on Ubuntu):
212
+
213
+ ```bash
214
+ cat >> ~/.bashrc << 'EOF'
215
+
216
+ # tfenv configuration
217
+ export PATH="$HOME/.tfenv/bin:$PATH"
218
+ EOF
219
+ ```
220
+
221
+ **Step 3: Reload your shell configuration**
222
+
223
+ ```bash
224
+ source ~/.bashrc
225
+ ```
226
+
227
+ **Alternative: Create symlinks to ~/.local/bin**
228
+
229
+ If you prefer symlinks instead of modifying PATH:
230
+
231
+ ```bash
232
+ mkdir -p ~/.local/bin
233
+ ln -sf ~/.tfenv/bin/* ~/.local/bin/
234
+ ```
235
+
236
+ This works because `~/.local/bin` is typically already in the default Ubuntu PATH.
237
+
238
+ #### Verification
239
+
240
+ Confirm tfenv is installed correctly:
241
+
242
+ ```bash
243
+ tfenv --version
244
+ ```
245
+
246
+ Expected output (version numbers may vary):
247
+
248
+ ```
249
+ tfenv 3.0.0
250
+ ```
251
+
252
+ Test installing and using Terraform:
253
+
254
+ ```bash
255
+ tfenv install latest
256
+ tfenv use latest
257
+ terraform --version
258
+ ```
259
+
260
+ #### Troubleshooting
261
+
262
+ **Problem**: `tfenv: command not found` after installation
263
+
264
+ **Solution**: Ensure the PATH configuration was added and the shell was reloaded:
265
+
266
+ ```bash
267
+ grep -q "tfenv" ~/.bashrc && echo "Config exists" || echo "Config missing"
268
+ source ~/.bashrc
269
+ ```
270
+
271
+ If missing, manually add the configuration:
272
+
273
+ ```bash
274
+ echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bashrc
275
+ source ~/.bashrc
276
+ ```
277
+
278
+ **Problem**: `git: command not found`
279
+
280
+ **Solution**: Install git:
281
+
282
+ ```bash
283
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y git
284
+ ```
285
+
286
+ **Problem**: `unzip: command not found` when installing Terraform
287
+
288
+ **Solution**: Install unzip:
289
+
290
+ ```bash
291
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y unzip
292
+ ```
293
+
294
+ **Problem**: Permission denied errors
295
+
296
+ **Solution**: tfenv should be installed as a regular user, not with sudo. If you installed with sudo, remove and reinstall:
297
+
298
+ ```bash
299
+ sudo rm -rf ~/.tfenv
300
+ git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv
301
+ ```
302
+
303
+ ---
304
+
305
+ ### Raspberry Pi OS (APT)
306
+
307
+ #### Prerequisites
308
+
309
+ - Raspberry Pi OS (Bookworm, Bullseye, or Buster) - 64-bit or 32-bit
310
+ - Raspberry Pi 2 or later
311
+ - sudo privileges
312
+ - git, curl, and unzip installed
313
+
314
+ First, verify your architecture:
315
+
316
+ ```bash
317
+ uname -m
318
+ ```
319
+
320
+ - `aarch64` = 64-bit ARM (Raspberry Pi 3/4/5 with 64-bit OS) - Full support
321
+ - `armv7l` = 32-bit ARM (Raspberry Pi 2/3/4 with 32-bit OS) - Full support
322
+ - `armv6l` = 32-bit ARM (Raspberry Pi Zero/1) - Limited Terraform version support
323
+
324
+ **Important**: tfenv automatically detects ARM architecture and downloads the appropriate Terraform binary. For 64-bit Raspberry Pi OS, it uses `linux_arm64` binaries. For 32-bit, it uses `linux_arm` binaries.
325
+
326
+ Install required dependencies:
327
+
328
+ ```bash
329
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
330
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y git curl unzip
331
+ ```
332
+
333
+ #### Installation Steps
334
+
335
+ **Step 1: Clone the tfenv repository**
336
+
337
+ ```bash
338
+ git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv
339
+ ```
340
+
341
+ **Step 2: Add tfenv to your PATH**
342
+
343
+ ```bash
344
+ cat >> ~/.bashrc << 'EOF'
345
+
346
+ # tfenv configuration
347
+ export PATH="$HOME/.tfenv/bin:$PATH"
348
+ EOF
349
+ ```
350
+
351
+ **Step 3: Reload your shell configuration**
352
+
353
+ ```bash
354
+ source ~/.bashrc
355
+ ```
356
+
357
+ #### Verification
358
+
359
+ Confirm tfenv is installed correctly:
360
+
361
+ ```bash
362
+ tfenv --version
363
+ ```
364
+
365
+ Expected output:
366
+
367
+ ```
368
+ tfenv 3.0.0
369
+ ```
370
+
371
+ Test installing Terraform:
372
+
373
+ ```bash
374
+ tfenv install latest
375
+ tfenv use latest
376
+ terraform --version
377
+ ```
378
+
379
+ Expected output for ARM64 (version numbers may vary):
380
+
381
+ ```
382
+ Terraform v1.14.3
383
+ on linux_arm64
384
+ ```
385
+
386
+ #### Troubleshooting
387
+
388
+ **Problem**: `No versions matching 'X.Y.Z' for os 'linux', architecture 'arm64'`
389
+
390
+ **Solution**: Some older Terraform versions do not have ARM64 binaries. For older versions, you can force AMD64 architecture (requires emulation layer):
391
+
392
+ ```bash
393
+ TFENV_ARCH=amd64 tfenv install 0.12.31
394
+ ```
395
+
396
+ However, this is not recommended for production use. Prefer using Terraform versions that have native ARM support.
397
+
398
+ **Problem**: Download is very slow
399
+
400
+ **Solution**: Raspberry Pi network and SD card speeds can be limiting. Use a wired ethernet connection and a high-quality SD card (Class 10 or faster), or boot from USB/SSD.
401
+
402
+ **Problem**: `unzip: command not found`
403
+
404
+ **Solution**: Install unzip:
405
+
406
+ ```bash
407
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y unzip
408
+ ```
409
+
410
+ **Problem**: Out of memory during Terraform operations
411
+
412
+ **Solution**: Add swap space:
413
+
414
+ ```bash
415
+ sudo fallocate -l 2G /swapfile
416
+ sudo chmod 600 /swapfile
417
+ sudo mkswap /swapfile
418
+ sudo swapon /swapfile
419
+ ```
420
+
421
+ ---
422
+
423
+ ### Amazon Linux (DNF/YUM)
424
+
425
+ #### Prerequisites
426
+
427
+ - Amazon Linux 2023 (AL2023) or Amazon Linux 2 (AL2)
428
+ - sudo privileges (typically ec2-user on EC2 instances)
429
+ - git, curl, and unzip installed
430
+
431
+ This is a common setup for managing Terraform versions on AWS EC2 instances.
432
+
433
+ First, install required dependencies:
434
+
435
+ ```bash
436
+ # For Amazon Linux 2023
437
+ sudo dnf install -y git curl unzip
438
+
439
+ # For Amazon Linux 2
440
+ sudo yum install -y git curl unzip
441
+ ```
442
+
443
+ #### Installation Steps
444
+
445
+ **Step 1: Clone the tfenv repository**
446
+
447
+ ```bash
448
+ git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv
449
+ ```
450
+
451
+ **Step 2: Add tfenv to your PATH**
452
+
453
+ ```bash
454
+ cat >> ~/.bashrc << 'EOF'
455
+
456
+ # tfenv configuration
457
+ export PATH="$HOME/.tfenv/bin:$PATH"
458
+ EOF
459
+ ```
460
+
461
+ **Step 3: Activate tfenv in the current session**
462
+
463
+ ```bash
464
+ source ~/.bashrc
465
+ ```
466
+
467
+ #### Verification
468
+
469
+ Confirm tfenv is installed correctly:
470
+
471
+ ```bash
472
+ tfenv --version
473
+ ```
474
+
475
+ Expected output:
476
+
477
+ ```
478
+ tfenv 3.0.0
479
+ ```
480
+
481
+ Test installing and using Terraform:
482
+
483
+ ```bash
484
+ tfenv install latest
485
+ tfenv use latest
486
+ terraform --version
487
+ ```
488
+
489
+ Expected output (version numbers may vary):
490
+
491
+ ```
492
+ Terraform v1.14.3
493
+ on linux_amd64
494
+ ```
495
+
496
+ #### Troubleshooting
497
+
498
+ **Problem**: `tfenv: command not found` after running the install script
499
+
500
+ **Solution**: Source your shell profile:
501
+
502
+ ```bash
503
+ source ~/.bashrc
504
+ ```
505
+
506
+ If that does not work, manually add the configuration:
507
+
508
+ ```bash
509
+ echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bashrc
510
+ source ~/.bashrc
511
+ ```
512
+
513
+ **Problem**: tfenv not available after EC2 instance restart
514
+
515
+ **Solution**: tfenv is user-specific. Ensure you are logged in as the same user who installed tfenv (typically ec2-user). The installation persists across reboots but requires sourcing the shell profile.
516
+
517
+ **Problem**: `git: command not found`
518
+
519
+ **Solution**: Install git:
520
+
521
+ ```bash
522
+ # For AL2023
523
+ sudo dnf install -y git
524
+
525
+ # For AL2
526
+ sudo yum install -y git
527
+ ```
528
+
529
+ **Problem**: Creating an AMI with tfenv pre-installed
530
+
531
+ **Solution**: After installing tfenv and any desired Terraform versions, you can create an AMI from the instance. The AMI will include the tfenv installation. Users of the AMI will need to run `source ~/.bashrc` or start a new shell session to access tfenv.
532
+
533
+ ---
534
+
535
+ ### Windows (Chocolatey/winget)
536
+
537
+ #### Prerequisites
538
+
539
+ - Windows 10 version 2004 or higher, or Windows 11
540
+ - WSL 2 enabled with Ubuntu distribution installed (recommended)
541
+ - OR Git Bash (experimental, with known limitations)
542
+
543
+ **Critical**: tfenv does not run natively on Windows (PowerShell or Command Prompt). Windows users must use one of these approaches:
544
+
545
+ 1. **WSL 2 (Recommended)**: Install tfenv inside WSL Ubuntu - this provides full functionality
546
+ 2. **Git Bash (Experimental)**: Limited support with known symlink issues
547
+
548
+ For native Windows Terraform version management without WSL, use Chocolatey to install specific Terraform versions directly:
549
+
550
+ ```powershell
551
+ # Install a specific Terraform version on Windows
552
+ choco install terraform --version=1.14.3 -y
553
+
554
+ # Upgrade to a different version
555
+ choco upgrade terraform --version=1.9.0 -y
556
+ ```
557
+
558
+ #### Installation Steps (WSL 2 - Recommended)
559
+
560
+ **Step 1: Ensure WSL 2 with Ubuntu is installed**
561
+
562
+ Open PowerShell as Administrator and run:
563
+
564
+ ```powershell
565
+ wsl --install -d Ubuntu
566
+ ```
567
+
568
+ Restart your computer if prompted, then set up your Ubuntu user account.
569
+
570
+ **Step 2: Install tfenv inside WSL Ubuntu**
571
+
572
+ Open Ubuntu from the Start menu, then run:
573
+
574
+ ```bash
575
+ # Install dependencies
576
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
577
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y git curl unzip
578
+
579
+ # Clone tfenv
580
+ git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv
581
+
582
+ # Add to PATH
583
+ cat >> ~/.bashrc << 'EOF'
584
+
585
+ # tfenv configuration
586
+ export PATH="$HOME/.tfenv/bin:$PATH"
587
+ EOF
588
+
589
+ # Reload shell
590
+ source ~/.bashrc
591
+ ```
592
+
593
+ #### Verification
594
+
595
+ In WSL Ubuntu terminal:
596
+
597
+ ```bash
598
+ tfenv --version
599
+ ```
600
+
601
+ Expected output:
602
+
603
+ ```
604
+ tfenv 3.0.0
605
+ ```
606
+
607
+ Test installing Terraform:
608
+
609
+ ```bash
610
+ tfenv install latest
611
+ tfenv use latest
612
+ terraform --version
613
+ ```
614
+
615
+ #### Troubleshooting
616
+
617
+ **Problem**: tfenv works in WSL but not in Windows PowerShell
618
+
619
+ **Solution**: tfenv installed in WSL is only available within WSL. For Windows terminals, use Chocolatey to install Terraform directly:
620
+
621
+ ```powershell
622
+ choco install terraform -y
623
+ ```
624
+
625
+ **Problem**: WSL not installed
626
+
627
+ **Solution**: Install WSL 2 from Administrator PowerShell:
628
+
629
+ ```powershell
630
+ wsl --install
631
+ ```
632
+
633
+ **Problem**: Ubuntu not available in WSL
634
+
635
+ **Solution**: Install Ubuntu distribution:
636
+
637
+ ```powershell
638
+ wsl --install -d Ubuntu
639
+ ```
640
+
641
+ ---
642
+
643
+ ### WSL (Ubuntu)
644
+
645
+ #### Prerequisites
646
+
647
+ - Windows 10 version 2004 or higher, or Windows 11
648
+ - WSL 2 enabled with Ubuntu distribution installed
649
+ - sudo privileges within WSL
650
+
651
+ WSL runs a full Linux environment, so tfenv installation follows the standard Linux procedure.
652
+
653
+ Install required dependencies:
654
+
655
+ ```bash
656
+ sudo DEBIAN_FRONTEND=noninteractive apt-get update -y
657
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y git curl unzip
658
+ ```
659
+
660
+ #### Installation Steps
661
+
662
+ **Step 1: Clone the tfenv repository**
663
+
664
+ ```bash
665
+ git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv
666
+ ```
667
+
668
+ **Step 2: Add tfenv to your PATH**
669
+
670
+ ```bash
671
+ cat >> ~/.bashrc << 'EOF'
672
+
673
+ # tfenv configuration
674
+ export PATH="$HOME/.tfenv/bin:$PATH"
675
+ EOF
676
+ ```
677
+
678
+ **Step 3: Reload your shell configuration**
679
+
680
+ ```bash
681
+ source ~/.bashrc
682
+ ```
683
+
684
+ **Step 4: Install Terraform**
685
+
686
+ ```bash
687
+ tfenv install latest
688
+ tfenv use latest
689
+ ```
690
+
691
+ #### Verification
692
+
693
+ Confirm tfenv is installed correctly:
694
+
695
+ ```bash
696
+ tfenv --version
697
+ ```
698
+
699
+ Expected output:
700
+
701
+ ```
702
+ tfenv 3.0.0
703
+ ```
704
+
705
+ Verify Terraform installation:
706
+
707
+ ```bash
708
+ terraform --version
709
+ ```
710
+
711
+ Expected output:
712
+
713
+ ```
714
+ Terraform v1.14.3
715
+ on linux_amd64
716
+ ```
717
+
718
+ #### Troubleshooting
719
+
720
+ **Problem**: `tfenv: command not found` in WSL
721
+
722
+ **Solution**: The PATH was not updated. Manually add the configuration:
723
+
724
+ ```bash
725
+ echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bashrc
726
+ source ~/.bashrc
727
+ ```
728
+
729
+ **Problem**: tfenv works in WSL but not in Windows terminal
730
+
731
+ **Solution**: tfenv installed in WSL is only available within WSL. For Windows terminals (PowerShell, Command Prompt), install Terraform separately using Chocolatey (see Windows section).
732
+
733
+ **Problem**: Different Terraform versions in WSL vs Windows
734
+
735
+ **Solution**: WSL and Windows maintain separate environments. If you need the same Terraform version in both:
736
+
737
+ 1. In WSL: `tfenv install 1.14.3 && tfenv use 1.14.3`
738
+ 2. In Windows: `choco install terraform --version=1.14.3 -y`
739
+
740
+ **Problem**: File permission issues when accessing Windows files from WSL
741
+
742
+ **Solution**: When working with files on the Windows filesystem (`/mnt/c/...`), Terraform may have permission issues. Store your Terraform configurations in the Linux filesystem (`~/projects/`) for best performance and compatibility.
743
+
744
+ ---
745
+
746
+ ### Git Bash (Experimental - Manual/Portable)
747
+
748
+ #### Prerequisites
749
+
750
+ - Windows 10 or Windows 11 (64-bit)
751
+ - Git Bash installed (comes with Git for Windows)
752
+ - unzip available (typically included with Git Bash)
753
+
754
+ **Important Warning**: tfenv on Windows Git Bash is experimental and has known symlink issues. The tfenv maintainers note that Windows (64-bit) is "only tested in git-bash and is currently presumed failing due to symlink issues." For production use, strongly recommend using WSL instead.
755
+
756
+ #### Installation Steps
757
+
758
+ **Step 1: Clone the tfenv repository**
759
+
760
+ Open Git Bash and run:
761
+
762
+ ```bash
763
+ git clone --depth=1 https://github.com/tfutils/tfenv.git ~/.tfenv
764
+ ```
765
+
766
+ **Step 2: Add tfenv to your PATH**
767
+
768
+ ```bash
769
+ cat >> ~/.bashrc << 'EOF'
770
+
771
+ # tfenv configuration
772
+ export PATH="$HOME/.tfenv/bin:$PATH"
773
+ EOF
774
+ ```
775
+
776
+ **Step 3: Reload your shell configuration**
777
+
778
+ ```bash
779
+ source ~/.bashrc
780
+ ```
781
+
782
+ **Step 4: Test tfenv (may have issues)**
783
+
784
+ ```bash
785
+ tfenv --version
786
+ ```
787
+
788
+ If this works, attempt to install Terraform:
789
+
790
+ ```bash
791
+ tfenv install latest
792
+ tfenv use latest
793
+ ```
794
+
795
+ #### Verification
796
+
797
+ In Git Bash, confirm tfenv is accessible:
798
+
799
+ ```bash
800
+ tfenv --version
801
+ ```
802
+
803
+ Expected output (if working):
804
+
805
+ ```
806
+ tfenv 3.0.0
807
+ ```
808
+
809
+ Test Terraform:
810
+
811
+ ```bash
812
+ terraform --version
813
+ ```
814
+
815
+ #### Troubleshooting
816
+
817
+ **Problem**: Symlink errors when running `tfenv use`
818
+
819
+ **Solution**: This is a known limitation of tfenv on Windows Git Bash. Git Bash's MinGW environment does not fully support Unix symlinks. Workarounds include:
820
+
821
+ 1. **Use WSL instead** (recommended) - Full tfenv functionality
822
+ 2. **Run Git Bash as Administrator** - May help with symlink creation:
823
+ Right-click Git Bash shortcut and select "Run as administrator"
824
+ 3. **Enable Developer Mode in Windows** - This allows symlink creation without admin rights:
825
+ Settings > Update & Security > For developers > Developer Mode
826
+
827
+ **Problem**: `tfenv: command not found` in Git Bash
828
+
829
+ **Solution**: Git Bash must source `~/.bashrc`. Verify the configuration:
830
+
831
+ ```bash
832
+ grep -q "tfenv" ~/.bashrc && echo "Config exists" || echo "Config missing"
833
+ source ~/.bashrc
834
+ ```
835
+
836
+ **Problem**: `unzip: command not found`
837
+
838
+ **Solution**: Git Bash typically includes unzip. If missing, install via Chocolatey from PowerShell (Administrator):
839
+
840
+ ```powershell
841
+ choco install unzip -y
842
+ ```
843
+
844
+ Then restart Git Bash.
845
+
846
+ **Problem**: tfenv works but `terraform` command not found after `tfenv use`
847
+
848
+ **Solution**: The symlink creation likely failed. Check if terraform binary exists:
849
+
850
+ ```bash
851
+ ls -la ~/.tfenv/versions/*/terraform.exe
852
+ ```
853
+
854
+ If the binary exists but symlinks failed, manually add the version directory to PATH:
855
+
856
+ ```bash
857
+ export PATH="$HOME/.tfenv/versions/$(tfenv version-name):$PATH"
858
+ ```
859
+
860
+ **Alternative for Windows Git Bash users**: If tfenv proves unreliable, use Chocolatey from PowerShell to manage Terraform versions:
861
+
862
+ ```powershell
863
+ # Install Terraform via Chocolatey (from Administrator PowerShell)
864
+ choco install terraform -y
865
+
866
+ # The terraform command will then be available in Git Bash
867
+ ```
868
+
869
+ ---
870
+
871
+ ## Post-Installation Configuration
872
+
873
+ After installing tfenv on any platform, consider these common configurations.
874
+
875
+ ### Setting a Default Terraform Version
876
+
877
+ Install and set a default Terraform version:
878
+
879
+ ```bash
880
+ # Install the latest Terraform version
881
+ tfenv install latest
882
+
883
+ # Set it as the default
884
+ tfenv use latest
885
+ ```
886
+
887
+ ### Automatic Version Switching with .terraform-version
888
+
889
+ Create a `.terraform-version` file in your project root to specify the Terraform version:
890
+
891
+ ```bash
892
+ echo "1.14.3" > .terraform-version
893
+ ```
894
+
895
+ When you navigate to that directory and run any terraform command, tfenv automatically uses the specified version. If the version is not installed, tfenv will install it automatically (when `TFENV_AUTO_INSTALL=true`, which is the default).
896
+
897
+ Supported `.terraform-version` file values:
898
+
899
+ - Exact version: `1.14.3`
900
+ - Latest: `latest`
901
+ - Latest matching regex: `latest:^1.9`
902
+ - Latest allowed by terraform files: `latest-allowed`
903
+ - Minimum required: `min-required`
904
+
905
+ ### Listing Available and Installed Versions
906
+
907
+ View all installed Terraform versions:
908
+
909
+ ```bash
910
+ tfenv list
911
+ ```
912
+
913
+ View all available versions for installation:
914
+
915
+ ```bash
916
+ tfenv list-remote
917
+ ```
918
+
919
+ ### Uninstalling a Terraform Version
920
+
921
+ Remove a specific version:
922
+
923
+ ```bash
924
+ tfenv uninstall 1.9.0
925
+ ```
926
+
927
+ Remove the latest installed version:
928
+
929
+ ```bash
930
+ tfenv uninstall latest
931
+ ```
932
+
933
+ ### Updating tfenv
934
+
935
+ Update tfenv to the latest version:
936
+
937
+ ```bash
938
+ git -C ~/.tfenv pull
939
+ ```
940
+
941
+ For Homebrew installations on macOS:
942
+
943
+ ```bash
944
+ brew upgrade tfenv
945
+ ```
946
+
947
+ ### Environment Variables
948
+
949
+ tfenv supports several environment variables for customization:
950
+
951
+ | Variable | Description | Default |
952
+ |----------|-------------|---------|
953
+ | `TFENV_ARCH` | Architecture to download (amd64, arm64) | Auto-detected |
954
+ | `TFENV_AUTO_INSTALL` | Auto-install missing versions | `true` |
955
+ | `TFENV_TERRAFORM_VERSION` | Override .terraform-version file | (none) |
956
+ | `TFENV_CURL_OUTPUT` | Control download progress display | `0` (disabled) |
957
+ | `TFENV_DEBUG` | Enable debug output (0-3 levels) | `0` |
958
+ | `TFENV_REMOTE` | Custom Terraform download source | HashiCorp releases |
959
+
960
+ Example using environment variables:
961
+
962
+ ```bash
963
+ # Force AMD64 architecture
964
+ TFENV_ARCH=amd64 tfenv install 1.14.3
965
+
966
+ # Install specific version without .terraform-version file
967
+ TFENV_TERRAFORM_VERSION=1.9.0 terraform init
968
+ ```
969
+
970
+ ---
971
+
972
+ ## Common Issues
973
+
974
+ ### Issue: "No installed versions of terraform matched"
975
+
976
+ **Symptoms**: Error when running terraform commands indicating no version is installed or selected.
977
+
978
+ **Solutions**:
979
+
980
+ 1. Install a Terraform version:
981
+
982
+ ```bash
983
+ tfenv install latest
984
+ tfenv use latest
985
+ ```
986
+
987
+ 2. Check if a version is selected:
988
+
989
+ ```bash
990
+ tfenv version
991
+ ```
992
+
993
+ 3. Create a `.terraform-version` file in your project:
994
+
995
+ ```bash
996
+ echo "latest" > .terraform-version
997
+ ```
998
+
999
+ ### Issue: "shasum: command not found"
1000
+
1001
+ **Symptoms**: Warning about missing shasum during Terraform installation.
1002
+
1003
+ **Solutions**:
1004
+
1005
+ - On Ubuntu/Debian: shasum is typically available; if not, install perl:
1006
+
1007
+ ```bash
1008
+ sudo DEBIAN_FRONTEND=noninteractive apt-get install -y perl
1009
+ ```
1010
+
1011
+ - On Amazon Linux:
1012
+
1013
+ ```bash
1014
+ sudo yum install -y perl-Digest-SHA
1015
+ ```
1016
+
1017
+ This is a warning only - tfenv will still install Terraform, but will skip hash verification.
1018
+
1019
+ ### Issue: Version Conflicts with System Terraform
1020
+
1021
+ **Symptoms**: Running `terraform --version` shows a different version than `tfenv version`.
1022
+
1023
+ **Solutions**:
1024
+
1025
+ - Ensure tfenv's bin directory is at the beginning of your PATH (before any system directories)
1026
+ - Check for system-installed Terraform:
1027
+
1028
+ ```bash
1029
+ which -a terraform
1030
+ ```
1031
+
1032
+ - Remove system-installed Terraform or ensure `~/.tfenv/bin` comes first in PATH:
1033
+
1034
+ ```bash
1035
+ export PATH="$HOME/.tfenv/bin:$PATH"
1036
+ ```
1037
+
1038
+ ### Issue: "Permission denied" Errors
1039
+
1040
+ **Symptoms**: Cannot install Terraform versions or access tfenv directory.
1041
+
1042
+ **Solutions**:
1043
+
1044
+ - tfenv should be installed as a regular user, not with sudo
1045
+ - Fix ownership if needed:
1046
+
1047
+ ```bash
1048
+ sudo chown -R $USER:$USER ~/.tfenv
1049
+ ```
1050
+
1051
+ ### Issue: Slow Terraform Downloads
1052
+
1053
+ **Symptoms**: `tfenv install` takes a long time or times out.
1054
+
1055
+ **Solutions**:
1056
+
1057
+ - Check internet connectivity
1058
+ - For corporate networks, configure proxy:
1059
+
1060
+ ```bash
1061
+ export HTTP_PROXY="http://proxy.example.com:8080"
1062
+ export HTTPS_PROXY="http://proxy.example.com:8080"
1063
+ ```
1064
+
1065
+ - Use a custom mirror with `TFENV_REMOTE` environment variable
1066
+
1067
+ ### Issue: ARM64 Version Not Available
1068
+
1069
+ **Symptoms**: `tfenv install` fails on ARM systems for older Terraform versions.
1070
+
1071
+ **Solutions**:
1072
+
1073
+ - Use a Terraform version that supports ARM64 (1.0.0 and later have good ARM support)
1074
+ - Force AMD64 architecture (not recommended for production):
1075
+
1076
+ ```bash
1077
+ TFENV_ARCH=amd64 tfenv install 0.12.31
1078
+ ```
1079
+
1080
+ ---
1081
+
1082
+ ## References
1083
+
1084
+ - [tfenv Official GitHub Repository](https://github.com/tfutils/tfenv)
1085
+ - [tfenv Homebrew Formula](https://formulae.brew.sh/formula/tfenv)
1086
+ - [HashiCorp Terraform Downloads](https://releases.hashicorp.com/terraform/)
1087
+ - [Installing tfenv on Ubuntu](https://brain2life.hashnode.dev/how-to-install-tfenv-terraform-version-manager-on-ubuntu-os)
1088
+ - [Installing tfenv with WSL2 on Windows](https://medium.com/azure-terraformer/installing-and-using-tfenv-with-wsl2-on-windows-2f5d442e0ca6)
1089
+ - [How to Use tfenv to Manage Multiple Terraform Versions (Spacelift)](https://spacelift.io/blog/tfenv)
1090
+ - [Manage Multiple Terraform Versions with tfenv (Opensource.com)](https://opensource.com/article/20/11/tfenv)
1091
+ - [tfenv ARM64 Support Issue Discussion](https://github.com/tfutils/tfenv/issues/337)